Full Code of SFHJavaer/R3nzSkinTencent for AI

main dd4ad6cadd41 cached
76 files
3.6 MB
947.7k tokens
1949 symbols
1 requests
Download .txt
Showing preview only (3,793K chars total). Download the full file or copy to clipboard to get everything.
Repository: SFHJavaer/R3nzSkinTencent
Branch: main
Commit: dd4ad6cadd41
Files: 76
Total size: 3.6 MB

Directory structure:
gitextract_99wlmliy/

├── .gitattributes
├── .gitignore
├── LICENSE
├── PythonScripts/
│   └── lolskin_to_skin.py
├── R3nzSkin/
│   ├── CheatManager.hpp
│   ├── Config.cpp
│   ├── Config.hpp
│   ├── GUI.cpp
│   ├── GUI.hpp
│   ├── Hooks.cpp
│   ├── Hooks.hpp
│   ├── Logger.hpp
│   ├── R3nzSkin.cpp
│   ├── R3nzSkin.rc
│   ├── R3nzSkin.vcxproj
│   ├── R3nzSkin.vcxproj.filters
│   ├── SDK/
│   │   ├── AIBaseCommon.cpp
│   │   ├── AIBaseCommon.hpp
│   │   ├── AIHero.hpp
│   │   ├── AIMinionClient.cpp
│   │   ├── AIMinionClient.hpp
│   │   ├── AITurret.hpp
│   │   ├── AString.hpp
│   │   ├── Champion.hpp
│   │   ├── ChampionManager.hpp
│   │   ├── CharacterDataStack.cpp
│   │   ├── CharacterDataStack.hpp
│   │   ├── CharacterStackData.hpp
│   │   ├── GameClient.hpp
│   │   ├── GameObject.hpp
│   │   ├── GameState.hpp
│   │   ├── ManagerTemplate.hpp
│   │   ├── Pad.hpp
│   │   ├── RiotArray.hpp
│   │   └── Skin.hpp
│   ├── SkinDatabase.cpp
│   ├── SkinDatabase.hpp
│   ├── Utils.cpp
│   ├── Utils.hpp
│   ├── encryption.hpp
│   ├── fnv_hash.hpp
│   ├── imgui/
│   │   ├── imconfig.h
│   │   ├── imgui.cpp
│   │   ├── imgui.h
│   │   ├── imgui_demo.cpp
│   │   ├── imgui_draw.cpp
│   │   ├── imgui_impl_dx11.cpp
│   │   ├── imgui_impl_dx11.h
│   │   ├── imgui_impl_win32.cpp
│   │   ├── imgui_impl_win32.h
│   │   ├── imgui_internal.h
│   │   ├── imgui_tables.cpp
│   │   ├── imgui_widgets.cpp
│   │   ├── imstb_rectpack.h
│   │   ├── imstb_textedit.h
│   │   └── imstb_truetype.h
│   ├── json/
│   │   └── json.hpp
│   ├── memory.cpp
│   ├── memory.hpp
│   ├── offsets.hpp
│   ├── resource.h
│   └── vmt_smart_hook.hpp
├── R3nzSkin.sln
├── R3nzSkin_Injector/
│   ├── Injector.cpp
│   ├── Injector.hpp
│   ├── R3nzSkin_Injector.rc
│   ├── R3nzSkin_Injector.vcxproj
│   ├── R3nzSkin_Injector.vcxproj.filters
│   ├── R3nzUI.hpp
│   ├── R3nzUI.resx
│   ├── lazy_importer.hpp
│   ├── main.cpp
│   ├── resource.h
│   └── xorstr.hpp
├── README.md
└── README_zh.md

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.h linguist-language=Assembly
*.hpp linguist-language=C++
*.c linguist-language=C
*.cpp linguist-language=C++


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Mono auto generated files
mono_crash.*

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
RiotGamesServers/
ChinaServer/
x64/
x86/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/

# Visual Studio 2015/2017 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# Visual Studio 2017 auto generated files
Generated\ Files/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUnit
*.VisualState.xml
TestResult.xml
nunit-*.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# Benchmark Results
BenchmarkDotNet.Artifacts/

# .NET Core
project.lock.json
project.fragment.lock.json
artifacts/

# StyleCop
StyleCopReport.xml

# Files built by Visual Studio
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# Visual Studio Trace Files
*.e2e

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# AxoCover is a Code Coverage Tool
.axoCover/*
!.axoCover/settings.json

# Visual Studio code coverage results
*.coverage
*.coveragexml

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# Note: Comment the next line if you want to checkin your web deploy settings,
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# NuGet Symbol Packages
*.snupkg
# The packages folder can be ignored because of Package Restore
**/[Pp]ackages/*
# except build/, which is used as an MSBuild target.
!**/[Pp]ackages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/[Pp]ackages/repositories.config
# NuGet v3's project.json files produces more ignorable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt
*.appx
*.appxbundle
*.appxupload

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!?*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
orleans.codegen.cs

# Including strong name files can present a security risk
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
#*.snk

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
ServiceFabricBackup/
*.rptproj.bak

# SQL Server files
*.mdf
*.ldf
*.ndf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
*.rptproj.rsuser
*- [Bb]ackup.rdl
*- [Bb]ackup ([0-9]).rdl
*- [Bb]ackup ([0-9][0-9]).rdl

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat
node_modules/

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# CodeRush personal settings
.cr/personal

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc

# Cake - Uncomment if you are using it
# tools/**
# !tools/packages.config

# Tabs Studio
*.tss

# Telerik's JustMock configuration file
*.jmconfig

# BizTalk build output
*.btp.cs
*.btm.cs
*.odx.cs
*.xsd.cs

# OpenCover UI analysis results
OpenCover/

# Azure Stream Analytics local run output
ASALocalRun/

# MSBuild Binary and Structured Log
*.binlog

# NVidia Nsight GPU debugger configuration file
*.nvuser

# MFractors (Xamarin productivity tool) working folder
.mfractor/

# Local History for Visual Studio
.localhistory/

# BeatPulse healthcheck temp database
healthchecksdb

# Backup folder for Package Reference Convert tool in Visual Studio 2017
MigrationBackup/

# Ionide (cross platform F# VS Code tools) working folder
.ionide/


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2021-2023 R3nzTheCodeGOD and B3akers

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: PythonScripts/lolskin_to_skin.py
================================================
import configparser
import json
import os


def skin_to_dictionary(path):
    config = configparser.ConfigParser()

    config.read(path, encoding="utf-8")
    ini_dict = {}
    for key, values in config.items():
        ini_dict[key] = dict(config.items(key))
        print(values)
    lolskin_hero_skin = ini_dict["SKIN_CHAMPION_ACTIVED"]
    del lolskin_hero_skin['custom_file']

    return lolskin_hero_skin


def forward_data(lolskin_hero_skin: dict):
    # Convert lolskin's skin data to R3nzSkin
    dict_from_list = {}

    for key, value in lolskin_hero_skin.items():
        key = key.capitalize()
        key = key + ".current_combo_skin_index"
        value = int(value) + int(1)
        dict_from_list[key] = value

    return dict_from_list



if __name__ == '__main__':
    LOLSKIN_CONFIG_PATH = r"C:\Fraps\data\My\Config.ini"

    if os.path.exists(LOLSKIN_CONFIG_PATH):
        hero_skin = skin_to_dictionary(LOLSKIN_CONFIG_PATH)
    else:
        LOLSKIN_CONFIG_PATH = input(
            "lolskin Configuration file path Example:\t" + LOLSKIN_CONFIG_PATH + "\n")
    to_skin = forward_data(lolskin_hero_skin=hero_skin)

    json_str = json.dumps(to_skin)
    print("JSON 对象:", json_str)
    with open('data.json', 'w', encoding="utf-8") as fp:
        json.dump(to_skin, fp)

================================================
FILE: R3nzSkin/CheatManager.hpp
================================================
#pragma once

#include <memory>

#include "Config.hpp"
#include "GUI.hpp"
#include "Hooks.hpp"
#include "Logger.hpp"
#include "Memory.hpp"
#include "SkinDatabase.hpp"

class CheatManager {
public:
	void start() noexcept
	{
		this->hooks = std::make_unique<Hooks>();
		this->config = std::make_unique<Config>();
		this->gui = std::make_unique<GUI>();
		this->memory = std::make_unique<Memory>();
		this->database = std::make_unique<SkinDatabase>();
		this->logger = std::make_unique<R3nzSkinLogger>();
	}

	bool cheatState{ true };
	std::unique_ptr<Hooks> hooks;
	std::unique_ptr<Config> config;
	std::unique_ptr<GUI> gui;
	std::unique_ptr<Memory> memory;
	std::unique_ptr<SkinDatabase> database;
	std::unique_ptr<R3nzSkinLogger> logger;
};

inline CheatManager cheatManager;


================================================
FILE: R3nzSkin/Config.cpp
================================================
#include <fstream>
#include <string>
#include <system_error>

#include <Windows.h>
#include <ShlObj.h>

#include "Json/json.hpp"

#include "CheatManager.hpp"
#include "Memory.hpp"
#include "Utils.hpp"

void Config::init() noexcept
{
	if (PWSTR pathToDocuments; SUCCEEDED(SHGetKnownFolderPath(FOLDERID_Documents, 0, nullptr, &pathToDocuments))) {
		this->path = pathToDocuments;
		CoTaskMemFree(pathToDocuments);
	}

	this->path /= "R3nzSkin";
}

void Config::save() noexcept
{
	const auto player{ cheatManager.memory->localPlayer };
	std::error_code ec;
	std::filesystem::create_directory(this->path, ec);
	auto out{ std::ofstream(this->path / u8"R3nzSkin64")};

	if (!out.good())
		return;

	if (player)
		config_json[std::string(player->get_character_data_stack()->base_skin.model.str) + ".current_combo_skin_index"] = this->current_combo_skin_index;

	config_json["menuKey"] = this->menuKey.toString();
	config_json["nextSkinKey"] = this->nextSkinKey.toString();
	config_json["previousSkinKey"] = this->previousSkinKey.toString();
	config_json["heroName"] = this->heroName;
	config_json["raibowText"] = this->rainbowText;
	config_json["quickSkinChange"] = this->quickSkinChange;
	config_json["fontScale"] = this->fontScale;
	config_json["current_combo_ward_index"] = this->current_combo_ward_index;
	config_json["current_ward_skin_index"] = this->current_ward_skin_index;
	config_json["current_minion_skin_index"] = this->current_minion_skin_index;

	for (const auto& [fst, snd] : this->current_combo_ally_skin_index)
		config_json["current_combo_ally_skin_index"][std::to_string(fst)] = snd;

	for (const auto& [fst, snd] : this->current_combo_enemy_skin_index)
		config_json["current_combo_enemy_skin_index"][std::to_string(fst)] = snd;

	for (const auto& [fst, snd] : this->current_combo_jungle_mob_skin_index)
		config_json["current_combo_jungle_mob_skin_index"][std::to_string(fst)] = snd;

	out << config_json.dump();
	out.close();
}

void Config::load() noexcept
{
	const auto player{ cheatManager.memory->localPlayer };
	auto in{ std::ifstream(this->path / u8"R3nzSkin64") };

	if (!in.good())
		return;

	if (json j{ json::parse(in, nullptr, false, true) }; j.is_discarded())
		return;
	else
		config_json = j;

	if (player)
		this->current_combo_skin_index = config_json.value(std::string(player->get_character_data_stack()->base_skin.model.str) + ".current_combo_skin_index", 0);

	this->menuKey = KeyBind(config_json.value("menuKey", "INSERT").c_str());
	this->nextSkinKey = KeyBind(config_json.value("nextSkinKey", "PAGE_UP").c_str());
	this->previousSkinKey = KeyBind(config_json.value("previousSkinKey", "PAGE_DOWN").c_str());
	this->heroName = config_json.value("heroName", true);
	this->rainbowText = config_json.value("raibowText", false);
	this->quickSkinChange = config_json.value("quickSkinChange", true);
	this->fontScale = config_json.value("fontScale", 1.0f);
	this->current_combo_ward_index = config_json.value("current_combo_ward_index", 0);
	this->current_ward_skin_index = config_json.value("current_ward_skin_index", -1);
	this->current_minion_skin_index = config_json.value("current_minion_skin_index", -1);

	const auto ally_skins{ config_json.find("current_combo_ally_skin_index") };
	if (ally_skins != config_json.end())
		for (const auto& it : ally_skins.value().items())
			this->current_combo_ally_skin_index[std::stoull(it.key())] = it.value().get<std::int32_t>();

	const auto enemy_skins{ config_json.find("current_combo_enemy_skin_index") };
	if (enemy_skins != config_json.end())
		for (const auto& it : enemy_skins.value().items())
			this->current_combo_enemy_skin_index[std::stoull(it.key())] = it.value().get<std::int32_t>();

	const auto jungle_mobs_skins{ config_json.find("current_combo_jungle_mob_skin_index") };
	if (jungle_mobs_skins != config_json.end())
		for (const auto& it : jungle_mobs_skins.value().items())
			this->current_combo_jungle_mob_skin_index[std::stoull(it.key())] = it.value().get<std::int32_t>();

	in.close();
}

void Config::reset() noexcept
{
	this->menuKey = KeyBind(KeyBind::INSERT);
	this->nextSkinKey = KeyBind(KeyBind::PAGE_UP);
	this->previousSkinKey = KeyBind(KeyBind::PAGE_DOWN);
	this->heroName = true;
	this->rainbowText = true;
	this->quickSkinChange = false;
	this->fontScale = 1.0f;
	this->current_combo_skin_index = 0;
	this->current_combo_ward_index = 0;
	this->current_combo_minion_index = 0;
	this->current_minion_skin_index = -1;
	this->current_ward_skin_index = -1;
	this->current_combo_order_turret_index = 0;
	this->current_combo_chaos_turret_index = 0;
	this->current_combo_ally_skin_index.clear();
	this->current_combo_enemy_skin_index.clear();
	this->current_combo_jungle_mob_skin_index.clear();
}


================================================
FILE: R3nzSkin/Config.hpp
================================================
#pragma once

#include <cstdint>
#include <filesystem>
#include <map>

#include "json/json.hpp"

#include "Utils.hpp"

using json = nlohmann::json;

class Config {
public:
	void init() noexcept;
	void save() noexcept;
	void load() noexcept;
	void reset() noexcept;

	KeyBind menuKey{ KeyBind(KeyBind::INSERT) };
	KeyBind nextSkinKey{ KeyBind(KeyBind::PAGE_UP) };
	KeyBind previousSkinKey{ KeyBind(KeyBind::PAGE_DOWN) };
	bool rainbowText{ false };
	float fontScale{ 1.0f };
	bool heroName{ true };
	bool quickSkinChange{ false };
	// player
	std::int32_t current_combo_skin_index{ 0 };

	// minion
	std::int32_t current_combo_minion_index{ 0 };
	std::int32_t current_minion_skin_index{ -1 };

	// ward
	std::int32_t current_combo_ward_index{ 0 };
	std::int32_t current_ward_skin_index{ -1 };

	// turrets, don't save them in config
	std::int32_t current_combo_order_turret_index{ 0 };
	std::int32_t current_combo_chaos_turret_index{ 0 };

	// other champions
	std::map<std::uint64_t, std::int32_t> current_combo_ally_skin_index;
	std::map<std::uint64_t, std::int32_t> current_combo_enemy_skin_index;

	// jungle mobs
	std::map<std::uint64_t, std::int32_t> current_combo_jungle_mob_skin_index;
private:
	std::filesystem::path path;
	json config_json{ json() };
};


================================================
FILE: R3nzSkin/GUI.cpp
================================================
#include <algorithm>
#include <cstdio>
#include <string>
#include <vector>

#include "CheatManager.hpp"
#include "GUI.hpp"

#include <ranges>

#include "Memory.hpp"
#include "SkinDatabase.hpp"
#include "Utils.hpp"
#include "fnv_hash.hpp"
#include "imgui/imgui.h"

inline static void footer() noexcept
{
	using namespace std::string_literals;
	static const auto buildText{ "Last Build: "s + __DATE__ + " - " + __TIME__ };
	ImGui::Separator();
	ImGui::textUnformattedCentered(buildText.c_str());
	ImGui::textUnformattedCentered("Copyright (C) 2021-2024 R3nzTheCodeGOD");
}

static void changeTurretSkin(const std::int32_t skinId, const std::int32_t team) noexcept
{
	if (skinId == -1)
		return;

	const auto turrets{ cheatManager.memory->turretList };
	const auto playerTeam{ cheatManager.memory->localPlayer->get_team() };

	for (auto i{ 0u }; i < turrets->length; ++i) {
		if (const auto turret{ turrets->list[i] }; turret->get_team() == team) {
			if (playerTeam == team) {
				turret->get_character_data_stack()->base_skin.skin = skinId * 2;
				turret->get_character_data_stack()->update(true);
			}
			else {
				turret->get_character_data_stack()->base_skin.skin = skinId * 2 + 1;
				turret->get_character_data_stack()->update(true);
			}
		}
	}
}

void GUI::render() noexcept
{
	std::call_once(set_font_scale, [&]
		{
			ImGui::GetIO().FontGlobalScale = cheatManager.config->fontScale;
		});

	const auto player{ cheatManager.memory->localPlayer };
	const auto heroes{ cheatManager.memory->heroList };
	static const auto my_team{ player ? player->get_team() : 100 };
	static int gear{ player ? player->get_character_data_stack()->base_skin.gear : 0 };

	static const auto vector_getter_skin = [](void* vec, const std::int32_t idx, const char** out_text) noexcept {
		const auto& vector{ *static_cast<std::vector<SkinDatabase::skin_info>*>(vec) };
		if (idx < 0 || idx > static_cast<std::int32_t>(vector.size())) return false;
		*out_text = idx == 0 ? "Default" : vector.at(idx - 1).skin_name.c_str();
		return true;
		};

	static const auto vector_getter_ward_skin = [](void* vec, const std::int32_t idx, const char** out_text) noexcept {
		const auto& vector{ *static_cast<std::vector<std::pair<std::int32_t, const char*>>*>(vec) };
		if (idx < 0 || idx > static_cast<std::int32_t>(vector.size())) return false;
		*out_text = idx == 0 ? "Default" : vector.at(idx - 1).second;
		return true;
		};

	static auto vector_getter_gear = [](void* vec, const std::int32_t idx, const char** out_text) noexcept {
		const auto& vector{ *static_cast<std::vector<const char*>*>(vec) };
		if (idx < 0 || idx > static_cast<std::int32_t>(vector.size())) return false;
		*out_text = vector[idx];
		return true;
		};

	static auto vector_getter_default = [](void* vec, const std::int32_t idx, const char** out_text) noexcept {
		const auto& vector{ *static_cast<std::vector<const char*>*>(vec) };
		if (idx < 0 || idx > static_cast<std::int32_t>(vector.size())) return false;
		*out_text = idx == 0 ? "Default" : vector.at(idx - 1);
		return true;
		};

	ImGui::Begin("R3nzSkin", nullptr, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse | ImGuiWindowFlags_AlwaysAutoResize);
	{
		ImGui::rainbowText();
		if (ImGui::BeginTabBar("TabBar", ImGuiTabBarFlags_Reorderable | ImGuiTabBarFlags_FittingPolicyScroll | ImGuiTabBarFlags_NoTooltip)) {
			if (player) {
				if (ImGui::BeginTabItem("Local Player")) {
					auto& values{ cheatManager.database->champions_skins[fnv::hash_runtime(player->get_character_data_stack()->base_skin.model.str)] };
					ImGui::Text("Player Skins Settings:");

					if (ImGui::Combo("Current Skin", &cheatManager.config->current_combo_skin_index, vector_getter_skin, static_cast<void*>(&values), values.size() + 1))
						if (cheatManager.config->current_combo_skin_index > 0)
							player->change_skin(values[cheatManager.config->current_combo_skin_index - 1].model_name, values[cheatManager.config->current_combo_skin_index - 1].skin_id);

					const auto playerHash{ fnv::hash_runtime(player->get_character_data_stack()->base_skin.model.str) };
					if (const auto it{ std::ranges::find_if(cheatManager.database->specialSkins,
					[&skin = player->get_character_data_stack()->base_skin.skin, &ph = playerHash](const SkinDatabase::specialSkin& x) noexcept -> bool
						{
						   return x.champHash == ph && (x.skinIdStart <= skin && x.skinIdEnd >= skin);
						})
						}; it != cheatManager.database->specialSkins.end())
					{
						const auto stack{ player->get_character_data_stack() };
						gear = stack->base_skin.gear;

						if (ImGui::Combo("Current Gear", &gear, vector_getter_gear, static_cast<void*>(&it->gears), it->gears.size())) {
							player->get_character_data_stack()->base_skin.gear = static_cast<std::int8_t>(gear);
							player->get_character_data_stack()->update(true);
						}
						ImGui::Separator();
					}

					if (ImGui::Combo("Current Ward Skin", &cheatManager.config->current_combo_ward_index, vector_getter_ward_skin, static_cast<void*>(&cheatManager.database->wards_skins), cheatManager.database->wards_skins.size() + 1))
						cheatManager.config->current_ward_skin_index = cheatManager.config->current_combo_ward_index == 0 ? -1 : cheatManager.database->wards_skins.at(cheatManager.config->current_combo_ward_index - 1).first;
					footer();
					ImGui::EndTabItem();
				}
			}

			static std::int32_t temp_heroes_length = heroes->length;
			if (temp_heroes_length > 1)
			{
				if (ImGui::BeginTabItem("Other Champs")) {
					ImGui::Text("Other Champs Skins Settings:");
					std::int32_t last_team{ 0 };
					for (auto i{ 0u }; i < heroes->length; ++i) {
						const auto hero{ heroes->list[i] };

						if (hero == player)
						{
							continue;
						}


						const auto champion_name_hash{ fnv::hash_runtime(hero->get_character_data_stack()->base_skin.model.str) };
						if (champion_name_hash == FNV("PracticeTool_TargetDummy"))
						{
							temp_heroes_length = heroes->length - 1;
							continue;
						}

						const auto hero_team{ hero->get_team() };
						const auto is_enemy{ hero_team != my_team };

						if (last_team == 0 || hero_team != last_team) {
							if (last_team != 0)
								ImGui::Separator();
							if (is_enemy)
								ImGui::Text(" Enemy champions");
							else
								ImGui::Text(" Ally champions");
							last_team = hero_team;
						}

						auto& config_array{ is_enemy ? cheatManager.config->current_combo_enemy_skin_index : cheatManager.config->current_combo_ally_skin_index };
						const auto [fst, snd] { config_array.insert({ champion_name_hash, 0 }) };

						std::snprintf(this->str_buffer, sizeof(this->str_buffer), cheatManager.config->heroName ? "HeroName: [ %s ]##%X" : "PlayerName: [ %s ]##%X", cheatManager.config->heroName ? hero->get_character_data_stack()->base_skin.model.str : hero->get_name()->c_str(), reinterpret_cast<std::uintptr_t>(hero));

						auto& values{ cheatManager.database->champions_skins[champion_name_hash] };
						if (ImGui::Combo(str_buffer, &fst->second, vector_getter_skin, static_cast<void*>(&values), values.size() + 1))
							if (fst->second > 0)
								hero->change_skin(values[fst->second - 1].model_name, values[fst->second - 1].skin_id);
					}
					footer();
					ImGui::EndTabItem();
				}
			}

			if (ImGui::BeginTabItem("Global Skins")) {
				ImGui::Text("Global Skins Settings:");
				if (ImGui::Combo("Minion Skins:", &cheatManager.config->current_combo_minion_index, vector_getter_default, static_cast<void*>(&cheatManager.database->minions_skins), cheatManager.database->minions_skins.size() + 1))
					cheatManager.config->current_minion_skin_index = cheatManager.config->current_combo_minion_index - 1;
				ImGui::Separator();
				if (ImGui::Combo("Order Turret Skins:", &cheatManager.config->current_combo_order_turret_index, vector_getter_default, static_cast<void*>(&cheatManager.database->turret_skins), cheatManager.database->turret_skins.size() + 1))
					changeTurretSkin(cheatManager.config->current_combo_order_turret_index - 1, 100);
				if (ImGui::Combo("Chaos Turret Skins:", &cheatManager.config->current_combo_chaos_turret_index, vector_getter_default, static_cast<void*>(&cheatManager.database->turret_skins), cheatManager.database->turret_skins.size() + 1))
					changeTurretSkin(cheatManager.config->current_combo_chaos_turret_index - 1, 200);
				ImGui::Separator();
				ImGui::Text("Jungle Mobs Skins Settings:");
				for (auto& [name, name_hashes, skins] : cheatManager.database->jungle_mobs_skins) {
					std::snprintf(str_buffer, 256, "Current %s skin", name);
					const auto [fst, snd] { cheatManager.config->current_combo_jungle_mob_skin_index.insert({ name_hashes.front(), 0 }) };
					if (ImGui::Combo(str_buffer, &fst->second, vector_getter_default, &skins, skins.size() + 1))
						for (const auto& hash : name_hashes)
							cheatManager.config->current_combo_jungle_mob_skin_index[hash] = fst->second;
				}
				footer();
				ImGui::EndTabItem();
			}

			if (ImGui::BeginTabItem("Logger")) {
				cheatManager.logger->draw();
				ImGui::EndTabItem();
			}

			if (ImGui::BeginTabItem("Extras")) {
				ImGui::hotkey("Menu Key", cheatManager.config->menuKey);
				ImGui::Checkbox(cheatManager.config->heroName ? "HeroName based" : "PlayerName based", &cheatManager.config->heroName);
				ImGui::Checkbox("Rainbow Text", &cheatManager.config->rainbowText);
				ImGui::Checkbox("Quick Skin Change", &cheatManager.config->quickSkinChange);
				ImGui::hoverInfo("It allows you to change skin without opening the menu with the key you assign from the keyboard.");

				if (cheatManager.config->quickSkinChange) {
					ImGui::Separator();
					ImGui::hotkey("Previous Skin Key", cheatManager.config->previousSkinKey);
					ImGui::hotkey("Next Skin Key", cheatManager.config->nextSkinKey);
					ImGui::Separator();
				}

				if (player)
					ImGui::InputText("Change Nick", player->get_name());

				if (ImGui::Button("No skins except local player")) {
					for (auto& val : cheatManager.config->current_combo_enemy_skin_index | std::views::values)
						val = 1;

					for (auto& val : cheatManager.config->current_combo_ally_skin_index | std::views::values)
						val = 1;

					for (auto i{ 0u }; i < heroes->length; ++i) {
						if (const auto hero{ heroes->list[i] }; hero != player)
							hero->change_skin(hero->get_character_data_stack()->base_skin.model.str, 0);
					}
				} ImGui::hoverInfo("Sets the skins of all champions except the local player to the default skin.");

				if (ImGui::Button("Random Skins")) {
					for (auto i{ 0u }; i < heroes->length; ++i) {
						const auto hero{ heroes->list[i] };
						const auto championHash{ fnv::hash_runtime(hero->get_character_data_stack()->base_skin.model.str) };

						if (championHash == FNV("PracticeTool_TargetDummy"))
							continue;

						const auto skinCount{ cheatManager.database->champions_skins[championHash].size() };
						auto& skinDatabase{ cheatManager.database->champions_skins[championHash] };
						auto& config{ (hero->get_team() != my_team) ? cheatManager.config->current_combo_enemy_skin_index : cheatManager.config->current_combo_ally_skin_index };

						if (hero == player) {
							cheatManager.config->current_combo_skin_index = random(1ull, skinCount);
							hero->change_skin(skinDatabase[cheatManager.config->current_combo_skin_index - 1].model_name, skinDatabase[cheatManager.config->current_combo_skin_index - 1].skin_id);
						}
						else {
							auto& data{ config[championHash] };
							data = random(1ull, skinCount);
							hero->change_skin(skinDatabase[data - 1].model_name, skinDatabase[data - 1].skin_id);
						}
					}
				} ImGui::hoverInfo("Randomly changes the skin of all champions.");

				ImGui::SliderFloat("Font Scale", &cheatManager.config->fontScale, 1.0f, 2.0f, "%.3f");
				if (ImGui::GetIO().FontGlobalScale != cheatManager.config->fontScale) {
					ImGui::GetIO().FontGlobalScale = cheatManager.config->fontScale;
				} ImGui::hoverInfo("Changes the menu font scale.");

				if (ImGui::Button("Force Close"))
					cheatManager.hooks->uninstall();
				ImGui::hoverInfo("You will be returned to the reconnect screen.");
				ImGui::Text("FPS: %.0f FPS", ImGui::GetIO().Framerate);
				footer();
				ImGui::EndTabItem();
			}
		}
	}
	ImGui::End();
}

================================================
FILE: R3nzSkin/GUI.hpp
================================================
#pragma once

class GUI {
public:
	void render() noexcept;

	bool is_open{ true };
	std::once_flag set_font_scale;
private:
	char str_buffer[256];
};


================================================
FILE: R3nzSkin/Hooks.cpp
================================================
#pragma warning(disable : 6011)

#include <Windows.h>
#include <ShlObj.h>
#include <cinttypes>
#include <filesystem>
#include <string>

#include "fnv_hash.hpp"
#include "imgui/imgui.h"
#include "imgui/imgui_impl_dx11.h"
#include "imgui/imgui_impl_win32.h"
#include "vmt_smart_hook.hpp"

#include "CheatManager.hpp"
#include "Hooks.hpp"
#include "Memory.hpp"
#include "SDK/AIBaseCommon.hpp"
#include "SDK/GameState.hpp"

LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

static inline void testFunc() noexcept
{
	// The codes you write here are executed when you press the F7 key in the game.
	
	// Example Func
	const auto minions{ cheatManager.memory->minionList };
	for (auto i{ 0u }; i < minions->length; ++i) {
		const auto minion{ minions->list[i] };
		const auto owner{ minion->getGoldRedirectTarget() };
		cheatManager.logger->addLog("Minion: %s\n\tModelName: %s\n\t", minion->get_name()->c_str(), minion->get_character_data_stack()->base_skin.model.str);
		if (owner)
			cheatManager.logger->addLog("OwnerName: %s\n\t\tModelName: %s\n\t", owner->get_name()->c_str(), owner->get_character_data_stack()->base_skin.model.str);
		cheatManager.logger->addLog("IsLaneMinion: %d\n\t", minion->isLaneMinion());
		cheatManager.logger->addLog("IsEliteMinion: %d\n\t", minion->isEliteMinion());
		cheatManager.logger->addLog("IsEpicMinion: %d\n\t", minion->isEpicMinion());
		cheatManager.logger->addLog("IsMinion: %d\n\t", minion->isMinion());
		cheatManager.logger->addLog("IsJungle: %d\n\n", minion->isJungle());
	}
}

static LRESULT WINAPI wndProc(const HWND window, const UINT msg, const WPARAM wParam, const LPARAM lParam) noexcept
{
	if (ImGui_ImplWin32_WndProcHandler(window, msg, wParam, lParam))
		return true;

	if (msg == WM_KEYDOWN) {
		if (wParam == cheatManager.config->menuKey.getKey()) {
			cheatManager.gui->is_open = !cheatManager.gui->is_open;
			if (!cheatManager.gui->is_open)
				cheatManager.config->save();
		} else if (wParam == 0x35) {
			const auto player{ cheatManager.memory->localPlayer };
			if (const auto player{ cheatManager.memory->localPlayer }; (::GetAsyncKeyState(VK_LCONTROL) & 0x8000) && player) {
				const auto playerHash{ fnv::hash_runtime(player->get_character_data_stack()->base_skin.model.str) };
				if (const auto it{ std::ranges::find_if(cheatManager.database->specialSkins,
				    [&skin = player->get_character_data_stack()->base_skin.skin, &ph = playerHash](const SkinDatabase::specialSkin& x) noexcept -> bool
				    {
						return x.champHash == ph && (x.skinIdStart <= skin && x.skinIdEnd >= skin);
				    })}; it != cheatManager.database->specialSkins.end())
				{
					const auto stack{ player->get_character_data_stack() };
					if (stack->base_skin.gear < static_cast<std::int8_t>(it->gears.size()) - 1)
						++stack->base_skin.gear;
					else
						stack->base_skin.gear = static_cast<std::int8_t>(0);

					stack->update(true);
				}
			}
		} else if (wParam == cheatManager.config->nextSkinKey.getKey() && cheatManager.config->quickSkinChange) {
			if (const auto player{ cheatManager.memory->localPlayer }; player) {
				const auto& values{ cheatManager.database->champions_skins[fnv::hash_runtime(player->get_character_data_stack()->base_skin.model.str)] };
				if (++cheatManager.config->current_combo_skin_index > static_cast<std::int32_t>(values.size()))
					cheatManager.config->current_combo_skin_index = static_cast<std::int32_t>(values.size());
				if (cheatManager.config->current_combo_skin_index > 0)
					player->change_skin(values[cheatManager.config->current_combo_skin_index - 1].model_name, values[cheatManager.config->current_combo_skin_index - 1].skin_id);
				cheatManager.config->save();
			}
		} else if (wParam == cheatManager.config->previousSkinKey.getKey() && cheatManager.config->quickSkinChange) {
			if (const auto player{ cheatManager.memory->localPlayer }; player) {
				const auto& values{ cheatManager.database->champions_skins[fnv::hash_runtime(player->get_character_data_stack()->base_skin.model.str)] };
				if (--cheatManager.config->current_combo_skin_index > 0)
					player->change_skin(values[cheatManager.config->current_combo_skin_index - 1].model_name, values[cheatManager.config->current_combo_skin_index - 1].skin_id);
				else
					cheatManager.config->current_combo_skin_index = 1;
				cheatManager.config->save();
			}
		} else if (wParam == VK_F7) {
			testFunc();
		}
	}

	return ::CallWindowProc(originalWndProc, window, msg, wParam, lParam);
}

std::once_flag init_device;
std::unique_ptr<::vmt_smart_hook> swap_chain_vmt{ nullptr };

static const ImWchar tahomaRanges[] = {
	0x0020, 0x00FF, // Basic Latin + Latin Supplement
	0x0100, 0x024F, // Latin Extended-A + Latin Extended-B
	0x0250, 0x02FF, // IPA Extensions + Spacing Modifier Letters
	0x0300, 0x03FF, // Combining Diacritical Marks + Greek/Coptic
	0x0400, 0x052F, // Cyrillic + Cyrillic Supplement
	0x0530, 0x06FF, // Armenian + Hebrew + Arabic
	0x0E00, 0x0E7F, // Thai
	0x1E00, 0x1FFF, // Latin Extended Additional + Greek Extended
	0x2000, 0x20CF, // General Punctuation + Superscripts and Subscripts + Currency Symbols
	0x2100, 0x218F, // Letterlike Symbols + Number Forms
	0,
};

namespace d3d_vtable {
	ID3D11Device* d3d11_device{ nullptr };
	ID3D11DeviceContext* d3d11_device_context{ nullptr };
	ID3D11RenderTargetView* main_render_target_view{ nullptr };
	IDXGISwapChain* p_swap_chain{ nullptr };

	static void WINAPI create_render_target() noexcept
	{
		ID3D11Texture2D* back_buffer{ nullptr };
		p_swap_chain->GetBuffer(0u, IID_PPV_ARGS(&back_buffer));

		if (back_buffer) {
			d3d11_device->CreateRenderTargetView(back_buffer, nullptr, &main_render_target_view);
			back_buffer->Release();
		}
	}

	static void init_imgui(IDXGISwapChain* device) noexcept
	{
		cheatManager.database->load();
		cheatManager.logger->addLog("All skins loaded from memory!\n");
		ImGui::CreateContext();
		auto& style{ ImGui::GetStyle() };

		style.WindowPadding = ImVec2(6.0f, 6.0f);
		style.FramePadding = ImVec2(6.0f, 4.0f);
		style.ItemSpacing = ImVec2(6.0f, 4.0f);
		style.WindowTitleAlign = ImVec2(0.5f, 0.5f);

		style.ScrollbarSize = 12.0f;

		style.WindowBorderSize = 0.5f;
		style.ChildBorderSize = 0.5f;
		style.PopupBorderSize = 0.5f;
		style.FrameBorderSize = 0;

		style.WindowRounding = 0.0f;
		style.ChildRounding = 0.0f;
		style.FrameRounding = 0.0f;
		style.ScrollbarRounding = 0.0f;
		style.GrabRounding = 0.0f;
		style.TabRounding = 0.0f;
		style.PopupRounding = 0.0f;

		style.AntiAliasedFill = true;
		style.AntiAliasedLines = true;

		const auto colors{ style.Colors };

		colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
		colors[ImGuiCol_TextDisabled] = ImVec4(0.44f, 0.44f, 0.44f, 1.00f);
		colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.06f, 1.00f);
		colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
		colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
		colors[ImGuiCol_Border] = ImVec4(0.51f, 0.36f, 0.15f, 1.00f);
		colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
		colors[ImGuiCol_FrameBg] = ImVec4(0.11f, 0.11f, 0.11f, 1.00f);
		colors[ImGuiCol_FrameBgHovered] = ImVec4(0.51f, 0.36f, 0.15f, 1.00f);
		colors[ImGuiCol_FrameBgActive] = ImVec4(0.78f, 0.55f, 0.21f, 1.00f);
		colors[ImGuiCol_TitleBg] = ImVec4(0.51f, 0.36f, 0.15f, 1.00f);
		colors[ImGuiCol_TitleBgActive] = ImVec4(0.91f, 0.64f, 0.13f, 1.00f);
		colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
		colors[ImGuiCol_MenuBarBg] = ImVec4(0.11f, 0.11f, 0.11f, 1.00f);
		colors[ImGuiCol_ScrollbarBg] = ImVec4(0.06f, 0.06f, 0.06f, 0.53f);
		colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.21f, 0.21f, 0.21f, 1.00f);
		colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.47f, 0.47f, 0.47f, 1.00f);
		colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.81f, 0.83f, 0.81f, 1.00f);
		colors[ImGuiCol_CheckMark] = ImVec4(0.78f, 0.55f, 0.21f, 1.00f);
		colors[ImGuiCol_SliderGrab] = ImVec4(0.91f, 0.64f, 0.13f, 1.00f);
		colors[ImGuiCol_SliderGrabActive] = ImVec4(0.91f, 0.64f, 0.13f, 1.00f);
		colors[ImGuiCol_Button] = ImVec4(0.51f, 0.36f, 0.15f, 1.00f);
		colors[ImGuiCol_ButtonHovered] = ImVec4(0.91f, 0.64f, 0.13f, 1.00f);
		colors[ImGuiCol_ButtonActive] = ImVec4(0.78f, 0.55f, 0.21f, 1.00f);
		colors[ImGuiCol_Header] = ImVec4(0.51f, 0.36f, 0.15f, 1.00f);
		colors[ImGuiCol_HeaderHovered] = ImVec4(0.91f, 0.64f, 0.13f, 1.00f);
		colors[ImGuiCol_HeaderActive] = ImVec4(0.93f, 0.65f, 0.14f, 1.00f);
		colors[ImGuiCol_Separator] = ImVec4(0.21f, 0.21f, 0.21f, 1.00f);
		colors[ImGuiCol_SeparatorHovered] = ImVec4(0.91f, 0.64f, 0.13f, 1.00f);
		colors[ImGuiCol_SeparatorActive] = ImVec4(0.78f, 0.55f, 0.21f, 1.00f);
		colors[ImGuiCol_ResizeGrip] = ImVec4(0.21f, 0.21f, 0.21f, 1.00f);
		colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.91f, 0.64f, 0.13f, 1.00f);
		colors[ImGuiCol_ResizeGripActive] = ImVec4(0.78f, 0.55f, 0.21f, 1.00f);
		colors[ImGuiCol_Tab] = ImVec4(0.51f, 0.36f, 0.15f, 1.00f);
		colors[ImGuiCol_TabHovered] = ImVec4(0.91f, 0.64f, 0.13f, 1.00f);
		colors[ImGuiCol_TabActive] = ImVec4(0.78f, 0.55f, 0.21f, 1.00f);
		colors[ImGuiCol_TabUnfocused] = ImVec4(0.07f, 0.10f, 0.15f, 0.97f);
		colors[ImGuiCol_TabUnfocusedActive] = ImVec4(0.14f, 0.26f, 0.42f, 1.00f);
		colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
		colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
		colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
		colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
		colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
		colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
		colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
		colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
		colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
		colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);

		auto& io{ ImGui::GetIO() }; (void)io;
		io.IniFilename = nullptr;
		io.LogFilename = nullptr;
		io.ConfigFlags |= ImGuiConfigFlags_NoMouseCursorChange;

		if (PWSTR pathToFonts; SUCCEEDED(::SHGetKnownFolderPath(FOLDERID_Fonts, 0, nullptr, &pathToFonts))) {
			const std::filesystem::path path{ pathToFonts };
			::CoTaskMemFree(pathToFonts);
			ImFontConfig cfg;
			cfg.SizePixels = 15.0f;
			io.Fonts->AddFontFromFileTTF((path / "tahoma.ttf").string().c_str(), cfg.SizePixels, &cfg, tahomaRanges);
			cfg.MergeMode = true;
			io.Fonts->AddFontFromFileTTF((path / "malgun.ttf").string().c_str(), cfg.SizePixels, &cfg, io.Fonts->GetGlyphRangesKorean());
			io.Fonts->AddFontFromFileTTF((path / "msyh.ttc").string().c_str(), cfg.SizePixels, &cfg, io.Fonts->GetGlyphRangesChineseFull());
			cfg.MergeMode = false;
			cheatManager.logger->addLog("Fonts loaded!\n");
		}

		ImGui_ImplWin32_Init(cheatManager.memory->window);

		p_swap_chain = device;
		p_swap_chain->GetDevice(__uuidof(d3d11_device), reinterpret_cast<void**>(&(d3d11_device)));
		d3d11_device->GetImmediateContext(&d3d11_device_context);
		create_render_target();
		::ImGui_ImplDX11_Init(d3d11_device, d3d11_device_context);
		::ImGui_ImplDX11_CreateDeviceObjects();

		originalWndProc = WNDPROC(::SetWindowLongPtr(cheatManager.memory->window, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(&wndProc)));
		cheatManager.logger->addLog("WndProc hooked!\n\tOriginal: 0x%X\n\tNew: 0x%X\n", &originalWndProc, &wndProc);
	}

	static void render() noexcept
	{
		const auto client{ cheatManager.memory->client };
		if (client && client->game_state == GGameState_s::Running) {
			cheatManager.hooks->init();
			if (cheatManager.gui->is_open) {
				::ImGui_ImplDX11_NewFrame();
				::ImGui_ImplWin32_NewFrame();
				ImGui::NewFrame();
				cheatManager.gui->render();
				ImGui::EndFrame();
				ImGui::Render();
				d3d11_device_context->OMSetRenderTargets(1, &main_render_target_view, nullptr);
				::ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
			}
		}
	}

	struct dxgi_present {
		static long WINAPI hooked(IDXGISwapChain* p_swap_chain, UINT sync_interval, UINT flags) noexcept
		{
			std::call_once(init_device, [&]() { init_imgui(p_swap_chain); });
			render();
			return m_original(p_swap_chain, sync_interval, flags);
		}
		static decltype(&hooked) m_original;
	};
	decltype(dxgi_present::m_original) dxgi_present::m_original;

	struct dxgi_resize_buffers {
		static long WINAPI hooked(IDXGISwapChain* p_swap_chain, UINT buffer_count, UINT width, UINT height, DXGI_FORMAT new_format, UINT swap_chain_flags) noexcept
		{
			if (main_render_target_view) { main_render_target_view->Release(); main_render_target_view = nullptr; }
			const auto hr{ m_original(p_swap_chain, buffer_count, width, height, new_format, swap_chain_flags) };
			create_render_target();
			return hr;
		}
		static decltype(&hooked) m_original;
	};
	decltype(dxgi_resize_buffers::m_original) dxgi_resize_buffers::m_original;
};

static void changeModelForObject(const AIBaseCommon* obj, const char* model, const std::int32_t skin) noexcept
{
	if (skin == -1)
		return;

	if (const auto stack{ obj->get_character_data_stack() }; stack->base_skin.skin != skin) {
		stack->base_skin.skin = skin;
		stack->stack.clear();
		stack->push(model, skin);
	}
}

static void changeSkinForObject(const AIBaseCommon* obj, const std::int32_t skin) noexcept
{
	if (skin == -1)
		return;

	if (const auto stack{ obj->get_character_data_stack() }; stack->base_skin.skin != skin) {
		stack->base_skin.skin = skin;
		stack->update(true);
	}
}

void Hooks::init() noexcept
{
	const auto player{ cheatManager.memory->localPlayer };
	const auto heroes{ cheatManager.memory->heroList };
	const auto minions{ cheatManager.memory->minionList };
	static const auto playerHash{ player ? fnv::hash_runtime(player->get_character_data_stack()->base_skin.model.str) : 0u };

	std::call_once(change_skins, [&]() noexcept -> void {
		if (player) {
			if (cheatManager.config->current_combo_skin_index > 0) {
				const auto& values{ cheatManager.database->champions_skins[fnv::hash_runtime(player->get_character_data_stack()->base_skin.model.str)] };
				player->change_skin(values[cheatManager.config->current_combo_skin_index - 1].model_name, values[cheatManager.config->current_combo_skin_index - 1].skin_id);
			}
		}

		const auto my_team{ player ? player->get_team() : 100 };
		for (auto i{ 0u }; i < heroes->length; ++i) {
			const auto hero{ heroes->list[i] };
			if (hero == player)
				continue;

			const auto champion_name_hash{ fnv::hash_runtime(hero->get_character_data_stack()->base_skin.model.str) };
			if (champion_name_hash == FNV("PracticeTool_TargetDummy"))
				continue;

			const auto is_enemy{ my_team != hero->get_team() };
			const auto& config_array{ is_enemy ? cheatManager.config->current_combo_enemy_skin_index : cheatManager.config->current_combo_ally_skin_index };
			const auto config_entry{ config_array.find(champion_name_hash) };
			if (config_entry == config_array.end())
				continue;

			if (config_entry->second > 0) {
				const auto& values = cheatManager.database->champions_skins[champion_name_hash];
				hero->change_skin(values[config_entry->second - 1].model_name, values[config_entry->second - 1].skin_id);
			}
		}
	});

	for (auto i{ 0u }; i < heroes->length; ++i) {
		if (const auto hero{ heroes->list[i] }; !hero->get_character_data_stack()->stack.empty()) {
			// Viego transforms into another champion as 2nd form, our own skin's id may not match for every champion. (same problem exists in sylas) 
			if (const auto championName{ fnv::hash_runtime(hero->get_character_data_stack()->base_skin.model.str) }; championName == FNV("Viego") || championName == FNV("Sylas"))
				continue;

			if (auto& stack{ hero->get_character_data_stack()->stack.front() }; stack.skin != hero->get_character_data_stack()->base_skin.skin) {
				stack.skin = hero->get_character_data_stack()->base_skin.skin;
				hero->get_character_data_stack()->update(true);
			}
		}
	}

	for (auto i{ 0u }; i < minions->length; ++i) {
		const auto minion{ minions->list[i] };

		if (minion->isLaneMinion()) {
			if (player && player->get_team() == 200)
				changeSkinForObject(minion, cheatManager.config->current_minion_skin_index * 2 + 1);
			else
				changeSkinForObject(minion, cheatManager.config->current_minion_skin_index * 2);
			continue;
		}

		const auto hash{ fnv::hash_runtime(minion->get_character_data_stack()->base_skin.model.str) };

		if (const auto owner{ minion->getGoldRedirectTarget() }; owner) {
			if (hash == FNV("JammerDevice") || hash == FNV("SightWard") || hash == FNV("YellowTrinket") || hash == FNV("VisionWard") || hash == FNV("BlueTrinket") || hash == FNV("TestCubeRender10Vision")) {
				if (!player || owner == player) {
					if (hash == FNV("TestCubeRender10Vision") && playerHash == FNV("Yone"))
						changeModelForObject(minion, "Yone", owner->get_character_data_stack()->base_skin.skin);
					else if (hash == FNV("TestCubeRender10Vision"))
						changeSkinForObject(minion, 0);
					else
						changeSkinForObject(minion, cheatManager.config->current_ward_skin_index);
				}
			} else if (hash != FNV("SRU_Jungle_Companions") && hash != FNV("DominationScout"))
				changeSkinForObject(minion, owner->get_character_data_stack()->base_skin.skin);
			continue;
		}

		if (const auto config_entry{ cheatManager.config->current_combo_jungle_mob_skin_index.find(hash) }; config_entry != cheatManager.config->current_combo_jungle_mob_skin_index.end() && config_entry->second != 0) {
			changeSkinForObject(minion, config_entry->second - 1);
			continue;
		}

		// Just LocalPlayer
		if ((hash == FNV("NunuSnowball") && playerHash == FNV("Nunu")) || (hash == FNV("KindredWolf") && playerHash == FNV("Kindred")) || (hash == FNV("QuinnValor") && playerHash == FNV("Quinn")))
			changeSkinForObject(minion, player->get_character_data_stack()->base_skin.skin);
	}
}

void Hooks::install() noexcept
{
	if (cheatManager.memory->swapChain) {
		swap_chain_vmt = std::make_unique<::vmt_smart_hook>(cheatManager.memory->swapChain);
		swap_chain_vmt->apply_hook<d3d_vtable::dxgi_present>(8);
		swap_chain_vmt->apply_hook<d3d_vtable::dxgi_resize_buffers>(13);
		cheatManager.logger->addLog("DX11 Hooked!\n");
	} else {
		::MessageBoxA(nullptr, "Uncheck legacy dx9 in the client settings cuz it is no longer supported.", "R3nzSkin", MB_OK | MB_ICONWARNING);
		::ExitProcess(EXIT_SUCCESS);
	}
}

void Hooks::uninstall() noexcept
{
	::SetWindowLongW(cheatManager.memory->window, GWLP_WNDPROC, reinterpret_cast<LONG_PTR>(originalWndProc));
	swap_chain_vmt->unhook();
	cheatManager.cheatState = false;
}


================================================
FILE: R3nzSkin/Hooks.hpp
================================================
#pragma once

#include <Windows.h>
#include <mutex>

inline std::once_flag change_skins;
inline WNDPROC originalWndProc;

class Hooks {
public:
	void init() noexcept;
	void install() noexcept;
	void uninstall() noexcept;
};


================================================
FILE: R3nzSkin/Logger.hpp
================================================
#pragma once

#include "imgui/imgui.h"

class R3nzSkinLogger {
public:
    R3nzSkinLogger() { this->clear(); }

    void clear() noexcept
    {
        this->buffer.clear();
        this->lineOffsets.clear();
        this->lineOffsets.push_back(0);
    }

    void addLog(const char* fmt, ...) noexcept
    {
        auto old_size{ this->buffer.size() };
        va_list args;
        va_start(args, fmt);
        buffer.appendfv(fmt, args);
        va_end(args);
        for (const auto new_size{ this->buffer.size() }; old_size < new_size; ++old_size) {
            if (this->buffer[old_size] == '\n')
                this->lineOffsets.push_back(old_size + 1);
        }
    }

    void draw() noexcept
    {
        if (ImGui::BeginPopup("Options")) {
            ImGui::Checkbox("Auto-scroll", &this->autoScroll);
            ImGui::EndPopup();
        }

        if (ImGui::Button("Options"))
            ImGui::OpenPopup("Options");

        ImGui::SameLine();
        if (ImGui::Button("Clear"))
            this->clear();

        ImGui::SameLine();
        if (ImGui::Button("Copy"))
            ImGui::LogToClipboard();

        ImGui::SameLine();
        filter.Draw("Filter", -100.0f);

        ImGui::Separator();
        ImGui::BeginChild("scrolling", ImVec2(0, 0), false, ImGuiWindowFlags_HorizontalScrollbar);

        ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
        
        const auto buf{ this->buffer.begin() };
        const auto bufEnd{ this->buffer.end() };
        
        if (this->filter.IsActive()) {
            for (auto line_no{ 0 }; line_no < this->lineOffsets.Size; ++line_no) {
                const auto line_start{ buf + this->lineOffsets[line_no] };
                const auto line_end{ (line_no + 1 < this->lineOffsets.Size) ? (buf + this->lineOffsets[line_no + 1] - 1) : bufEnd };
                if (this->filter.PassFilter(line_start, line_end))
                    ImGui::TextUnformatted(line_start, line_end);
            }
        } else {
            ImGuiListClipper clipper;
            clipper.Begin(this->lineOffsets.Size);
            while (clipper.Step()) {
                for (auto line_no{ clipper.DisplayStart }; line_no < clipper.DisplayEnd; ++line_no) {
                    const auto line_start{ buf + this->lineOffsets[line_no] };
                    const auto line_end{ (line_no + 1 < this->lineOffsets.Size) ? (buf + this->lineOffsets[line_no + 1] - 1) : bufEnd };
                    ImGui::TextUnformatted(line_start, line_end);
                }
            }
            clipper.End();
        }
        
        ImGui::PopStyleVar();

        if (this->autoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY())
            ImGui::SetScrollHereY(1.0f);

        ImGui::EndChild();
    }
private:
    ImGuiTextBuffer buffer;
    ImGuiTextFilter filter;
    ImVector<int> lineOffsets;
    bool autoScroll{ true };
};


================================================
FILE: R3nzSkin/R3nzSkin.cpp
================================================
#pragma warning(disable : 6387 4715)

#include <Windows.h>
#include <clocale>
#include <chrono>
#include <thread>

#include "CheatManager.hpp"

#include "Config.hpp"
#include "Hooks.hpp"
#include "Memory.hpp"

#include "SDK/GameState.hpp"

bool WINAPI HideThread(const HANDLE hThread) noexcept
{
	__try {
		using FnSetInformationThread = NTSTATUS(NTAPI*)(HANDLE ThreadHandle, UINT ThreadInformationClass, PVOID ThreadInformation, ULONG ThreadInformationLength);
		const auto NtSetInformationThread{ reinterpret_cast<FnSetInformationThread>(::GetProcAddress(::GetModuleHandleW(L"ntdll.dll"), "NtSetInformationThread")) };

		if (!NtSetInformationThread)
			return false;

		if (const auto status{ NtSetInformationThread(hThread, 0x11u, nullptr, 0ul) }; status == 0x00000000)
			return true;
	} __except (TRUE) {
		return false;
	}
	return false;
}

__declspec(safebuffers) static void WINAPI DllAttach([[maybe_unused]] LPVOID lp) noexcept
{
	using namespace std::chrono_literals;

	cheatManager.start();
	if (HideThread(::GetCurrentThread()))
		cheatManager.logger->addLog("Thread Hidden!\n");

	cheatManager.memory->Search(true);
	while (true) {
		std::this_thread::sleep_for(1s);
		
		if (!cheatManager.memory->client)
			cheatManager.memory->Search(true);
		else if (cheatManager.memory->client->game_state == GGameState_s::Running)
			break;
	}
	cheatManager.logger->addLog("GameClient found!\n");
	
	std::this_thread::sleep_for(500ms);
	cheatManager.memory->Search(false);
	cheatManager.logger->addLog("All offsets found!\n");
	std::this_thread::sleep_for(500ms);

	cheatManager.config->init();
	cheatManager.config->load();
	cheatManager.logger->addLog("CFG loaded!\n");
	
	cheatManager.hooks->install();
		
	while (cheatManager.cheatState)
		std::this_thread::sleep_for(250ms);

	::ExitProcess(0u);
}

__declspec(safebuffers) BOOL APIENTRY DllMain(const HMODULE hModule, const DWORD reason, [[maybe_unused]] LPVOID reserved)
{
	DisableThreadLibraryCalls(hModule);

	if (reason != DLL_PROCESS_ATTACH)
		return FALSE;

	HideThread(hModule);
	std::setlocale(LC_ALL, ".utf8");

	::_beginthreadex(nullptr, 0u, reinterpret_cast<_beginthreadex_proc_type>(DllAttach), nullptr, 0u, nullptr);
	::CloseHandle(hModule);
	return TRUE;
}


================================================
FILE: R3nzSkin/R3nzSkin.rc
================================================
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"

#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "winres.h"

/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS

/////////////////////////////////////////////////////////////////////////////
// Turkish (Turkey) resources

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_TRK)
LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT
#pragma code_page(1254)

#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//

1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END

2 TEXTINCLUDE 
BEGIN
    "#include ""winres.h""\r\n"
    "\0"
END

3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END

#endif    // APSTUDIO_INVOKED


/////////////////////////////////////////////////////////////////////////////
//
// Version
//

VS_VERSION_INFO VERSIONINFO
 FILEVERSION 1,0,0,0
 PRODUCTVERSION 1,0,0,0
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x40004L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "041f04b0"
        BEGIN
            VALUE "CompanyName", "R3nzSoftware Inc."
            VALUE "FileDescription", "R3nzSkin DLL"
            VALUE "FileVersion", "1.0.0.0"
            VALUE "InternalName", "R3nzSkin.dll"
            VALUE "LegalCopyright", "Copyright (c) 2021-2023 Erdem Ylmaz"
            VALUE "OriginalFilename", "R3nzSkin.dll"
            VALUE "ProductName", "R3nzSkin DLL"
            VALUE "ProductVersion", "1.0.0.0"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x41f, 1200
    END
END

#endif    // Turkish (Turkey) resources
/////////////////////////////////////////////////////////////////////////////



#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//


/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED



================================================
FILE: R3nzSkin/R3nzSkin.vcxproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="ChinaServer|x64">
      <Configuration>ChinaServer</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="RiotGamesServers|Win32">
      <Configuration>RiotGamesServers</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="ChinaServer|Win32">
      <Configuration>ChinaServer</Configuration>
      <Platform>Win32</Platform>
    </ProjectConfiguration>
    <ProjectConfiguration Include="RiotGamesServers|x64">
      <Configuration>RiotGamesServers</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <VCProjectVersion>16.0</VCProjectVersion>
    <Keyword>Win32Proj</Keyword>
    <ProjectGuid>{17b6e7a6-aa76-4c09-b2aa-e2055ef748d2}</ProjectGuid>
    <RootNamespace>R3nzSkin</RootNamespace>
    <WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
    <ProjectName>R3nzSkin</ProjectName>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ChinaServer|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ChinaServer|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RiotGamesServers|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
    <PreferredToolArchitecture>x86</PreferredToolArchitecture>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RiotGamesServers|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseDebugLibraries>false</UseDebugLibraries>
    <PlatformToolset>v143</PlatformToolset>
    <WholeProgramOptimization>true</WholeProgramOptimization>
    <CharacterSet>Unicode</CharacterSet>
    <PreferredToolArchitecture>x64</PreferredToolArchitecture>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Label="Shared">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ChinaServer|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ChinaServer|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='RiotGamesServers|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='RiotGamesServers|x64'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ChinaServer|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <OutDir>$(SolutionDir)Release\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ChinaServer|x64'">
    <LinkIncremental>false</LinkIncremental>
    <OutDir>$(SolutionDir)Release\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RiotGamesServers|Win32'">
    <LinkIncremental>false</LinkIncremental>
    <OutDir>$(SolutionDir)Release\$(Configuration)\</OutDir>
    <GenerateManifest>false</GenerateManifest>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RiotGamesServers|x64'">
    <GenerateManifest>false</GenerateManifest>
    <LinkIncremental>false</LinkIncremental>
    <OutDir>$(SolutionDir)Release\$(Configuration)\</OutDir>
  </PropertyGroup>
  <PropertyGroup Label="Vcpkg">
    <VcpkgEnabled>false</VcpkgEnabled>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ChinaServer|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>__SSE__;__SSE2__;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;R3NZSKIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
      <LanguageStandard>stdcpplatest</LanguageStandard>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <LanguageStandard_C>Default</LanguageStandard_C>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableUAC>false</EnableUAC>
      <UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ChinaServer|x64'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>true</SDLCheck>
      <PreprocessorDefinitions>__SSE2__;_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;R3NZSKIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
      <LanguageStandard>stdcpplatest</LanguageStandard>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <LanguageStandard_C>Default</LanguageStandard_C>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableUAC>false</EnableUAC>
      <UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RiotGamesServers|Win32'">
    <ClCompile>
      <WarningLevel>Level3</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>false</SDLCheck>
      <PreprocessorDefinitions>__SSE__;__SSE2__;_CRT_SECURE_NO_WARNINGS;_RIOT;WIN32;NDEBUG;R3NZSKIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
      <LanguageStandard>stdcpplatest</LanguageStandard>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <LanguageStandard_C>Default</LanguageStandard_C>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <StringPooling>true</StringPooling>
      <ExceptionHandling>false</ExceptionHandling>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <ControlFlowGuard>false</ControlFlowGuard>
      <FloatingPointExceptions>false</FloatingPointExceptions>
      <CreateHotpatchableImage>false</CreateHotpatchableImage>
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableUAC>false</EnableUAC>
      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
    </Link>
  </ItemDefinitionGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='RiotGamesServers|x64'">
    <ClCompile>
      <WarningLevel>TurnOffAllWarnings</WarningLevel>
      <FunctionLevelLinking>true</FunctionLevelLinking>
      <IntrinsicFunctions>true</IntrinsicFunctions>
      <SDLCheck>false</SDLCheck>
      <PreprocessorDefinitions>__SSE2__;_CRT_SECURE_NO_WARNINGS;_RIOT;WIN32;NDEBUG;R3NZSKIN_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <ConformanceMode>true</ConformanceMode>
      <PrecompiledHeader>NotUsing</PrecompiledHeader>
      <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
      <LanguageStandard>stdcpplatest</LanguageStandard>
      <EnableEnhancedInstructionSet>StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
      <LanguageStandard_C>Default</LanguageStandard_C>
      <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed>
      <StringPooling>true</StringPooling>
      <ExceptionHandling>false</ExceptionHandling>
      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
      <BufferSecurityCheck>false</BufferSecurityCheck>
      <ControlFlowGuard>false</ControlFlowGuard>
      <FloatingPointExceptions>false</FloatingPointExceptions>
      <CreateHotpatchableImage>false</CreateHotpatchableImage>
      <RuntimeTypeInfo>false</RuntimeTypeInfo>
      <MultiProcessorCompilation>true</MultiProcessorCompilation>
      <AdditionalOptions>/EHsc %(AdditionalOptions)</AdditionalOptions>
    </ClCompile>
    <Link>
      <SubSystem>Windows</SubSystem>
      <EnableCOMDATFolding>true</EnableCOMDATFolding>
      <OptimizeReferences>true</OptimizeReferences>
      <GenerateDebugInformation>false</GenerateDebugInformation>
      <EnableUAC>false</EnableUAC>
      <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup>
    <ClCompile Include="Config.cpp" />
    <ClCompile Include="imgui\imgui.cpp" />
    <ClCompile Include="imgui\imgui_demo.cpp" />
    <ClCompile Include="imgui\imgui_draw.cpp" />
    <ClCompile Include="imgui\imgui_impl_dx11.cpp" />
    <ClCompile Include="imgui\imgui_impl_win32.cpp" />
    <ClCompile Include="imgui\imgui_tables.cpp" />
    <ClCompile Include="imgui\imgui_widgets.cpp" />
    <ClCompile Include="Memory.cpp" />
    <ClCompile Include="Hooks.cpp" />
    <ClCompile Include="R3nzSkin.cpp" />
    <ClCompile Include="GUI.cpp" />
    <ClCompile Include="SDK\AIBaseCommon.cpp" />
    <ClCompile Include="SDK\AIMinionClient.cpp" />
    <ClCompile Include="SDK\CharacterDataStack.cpp" />
    <ClCompile Include="SkinDatabase.cpp" />
    <ClCompile Include="Utils.cpp" />
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="CheatManager.hpp" />
    <ClInclude Include="Config.hpp" />
    <ClInclude Include="imgui\imconfig.h" />
    <ClInclude Include="imgui\imgui.h" />
    <ClInclude Include="imgui\imgui_impl_dx11.h" />
    <ClInclude Include="imgui\imgui_impl_win32.h" />
    <ClInclude Include="imgui\imgui_internal.h" />
    <ClInclude Include="imgui\imstb_rectpack.h" />
    <ClInclude Include="imgui\imstb_textedit.h" />
    <ClInclude Include="imgui\imstb_truetype.h" />
    <ClInclude Include="json\json.hpp" />
    <ClInclude Include="Logger.hpp" />
    <ClInclude Include="Memory.hpp" />
    <ClInclude Include="Encryption.hpp" />
    <ClInclude Include="fnv_hash.hpp" />
    <ClInclude Include="Hooks.hpp" />
    <ClInclude Include="GUI.hpp" />
    <ClInclude Include="Offsets.hpp" />
    <ClInclude Include="resource.h" />
    <ClInclude Include="SDK\AIBaseCommon.hpp" />
    <ClInclude Include="SDK\AIHero.hpp" />
    <ClInclude Include="SDK\AIMinionClient.hpp" />
    <ClInclude Include="SDK\AITurret.hpp" />
    <ClInclude Include="SDK\AString.hpp" />
    <ClInclude Include="SDK\Champion.hpp" />
    <ClInclude Include="SDK\ChampionManager.hpp" />
    <ClInclude Include="SDK\CharacterDataStack.hpp" />
    <ClInclude Include="SDK\CharacterStackData.hpp" />
    <ClInclude Include="SDK\GameClient.hpp" />
    <ClInclude Include="SDK\GameObject.hpp" />
    <ClInclude Include="SDK\GameState.hpp" />
    <ClInclude Include="SDK\ManagerTemplate.hpp" />
    <ClInclude Include="SDK\Pad.hpp" />
    <ClInclude Include="SDK\Skin.hpp" />
    <ClInclude Include="SDK\RiotArray.hpp" />
    <ClInclude Include="SkinDatabase.hpp" />
    <ClInclude Include="Utils.hpp" />
    <ClInclude Include="vmt_smart_hook.hpp" />
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="R3nzSkin.rc" />
  </ItemGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
  <ImportGroup Label="ExtensionTargets">
  </ImportGroup>
</Project>

================================================
FILE: R3nzSkin/R3nzSkin.vcxproj.filters
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Filter Include="Imgui">
      <UniqueIdentifier>{6e1c3fe0-7b4e-4ddc-b0af-ef2565509bab}</UniqueIdentifier>
    </Filter>
    <Filter Include="Json">
      <UniqueIdentifier>{24604dbf-d26d-4752-9537-7815e59a2e32}</UniqueIdentifier>
    </Filter>
    <Filter Include="Source Files">
      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
      <Extensions>cpp;c;cc;cxx;c++;def;odl;idl;hpj;bat;asm;asmx</Extensions>
    </Filter>
    <Filter Include="Source Files\SDK">
      <UniqueIdentifier>{e168d0f0-d453-47c1-867e-8e15f16f1918}</UniqueIdentifier>
    </Filter>
    <Filter Include="Source Files\Skins">
      <UniqueIdentifier>{d978207e-684f-4e9b-a516-3a1bdf6da43a}</UniqueIdentifier>
    </Filter>
    <Filter Include="Source Files\Utils">
      <UniqueIdentifier>{908bf81e-18df-417d-bcd9-8e3458213e73}</UniqueIdentifier>
    </Filter>
    <Filter Include="Source Files\Offsets">
      <UniqueIdentifier>{6df88be6-4732-4c12-ab2a-b0e38f717525}</UniqueIdentifier>
    </Filter>
    <Filter Include="Source Files\Memory">
      <UniqueIdentifier>{fb0c6058-a093-4f26-bc23-dd4f3d31e4c3}</UniqueIdentifier>
    </Filter>
    <Filter Include="Source Files\Hooks">
      <UniqueIdentifier>{6b382e58-2f4f-42a8-8d19-ea492ca17eb7}</UniqueIdentifier>
    </Filter>
    <Filter Include="Source Files\GUI">
      <UniqueIdentifier>{4c536b17-7ff4-4861-9586-0981e0bd981b}</UniqueIdentifier>
    </Filter>
    <Filter Include="Source Files\Config">
      <UniqueIdentifier>{a2d7fdd0-5331-4fcc-95c6-864f9d9d19bf}</UniqueIdentifier>
    </Filter>
  </ItemGroup>
  <ItemGroup>
    <ClCompile Include="R3nzSkin.cpp" />
    <ClCompile Include="SkinDatabase.cpp">
      <Filter>Source Files\Skins</Filter>
    </ClCompile>
    <ClCompile Include="GUI.cpp">
      <Filter>Source Files\GUI</Filter>
    </ClCompile>
    <ClCompile Include="Memory.cpp">
      <Filter>Source Files\Memory</Filter>
    </ClCompile>
    <ClCompile Include="Hooks.cpp">
      <Filter>Source Files\Hooks</Filter>
    </ClCompile>
    <ClCompile Include="imgui\imgui.cpp">
      <Filter>Imgui</Filter>
    </ClCompile>
    <ClCompile Include="imgui\imgui_demo.cpp">
      <Filter>Imgui</Filter>
    </ClCompile>
    <ClCompile Include="imgui\imgui_draw.cpp">
      <Filter>Imgui</Filter>
    </ClCompile>
    <ClCompile Include="imgui\imgui_impl_dx11.cpp">
      <Filter>Imgui</Filter>
    </ClCompile>
    <ClCompile Include="imgui\imgui_impl_win32.cpp">
      <Filter>Imgui</Filter>
    </ClCompile>
    <ClCompile Include="imgui\imgui_tables.cpp">
      <Filter>Imgui</Filter>
    </ClCompile>
    <ClCompile Include="imgui\imgui_widgets.cpp">
      <Filter>Imgui</Filter>
    </ClCompile>
    <ClCompile Include="Config.cpp">
      <Filter>Source Files\Config</Filter>
    </ClCompile>
    <ClCompile Include="Utils.cpp">
      <Filter>Source Files\Utils</Filter>
    </ClCompile>
    <ClCompile Include="SDK\CharacterDataStack.cpp">
      <Filter>Source Files\SDK</Filter>
    </ClCompile>
    <ClCompile Include="SDK\AIBaseCommon.cpp">
      <Filter>Source Files\SDK</Filter>
    </ClCompile>
    <ClCompile Include="SDK\AIMinionClient.cpp">
      <Filter>Source Files\SDK</Filter>
    </ClCompile>
  </ItemGroup>
  <ItemGroup>
    <ClInclude Include="SkinDatabase.hpp">
      <Filter>Source Files\Skins</Filter>
    </ClInclude>
    <ClInclude Include="fnv_hash.hpp">
      <Filter>Source Files\Utils</Filter>
    </ClInclude>
    <ClInclude Include="vmt_smart_hook.hpp">
      <Filter>Source Files\Utils</Filter>
    </ClInclude>
    <ClInclude Include="Offsets.hpp">
      <Filter>Source Files\Offsets</Filter>
    </ClInclude>
    <ClInclude Include="GUI.hpp">
      <Filter>Source Files\GUI</Filter>
    </ClInclude>
    <ClInclude Include="Memory.hpp">
      <Filter>Source Files\Memory</Filter>
    </ClInclude>
    <ClInclude Include="Hooks.hpp">
      <Filter>Source Files\Hooks</Filter>
    </ClInclude>
    <ClInclude Include="resource.h" />
    <ClInclude Include="imgui\imconfig.h">
      <Filter>Imgui</Filter>
    </ClInclude>
    <ClInclude Include="imgui\imgui.h">
      <Filter>Imgui</Filter>
    </ClInclude>
    <ClInclude Include="imgui\imgui_impl_dx11.h">
      <Filter>Imgui</Filter>
    </ClInclude>
    <ClInclude Include="imgui\imgui_impl_win32.h">
      <Filter>Imgui</Filter>
    </ClInclude>
    <ClInclude Include="imgui\imgui_internal.h">
      <Filter>Imgui</Filter>
    </ClInclude>
    <ClInclude Include="imgui\imstb_rectpack.h">
      <Filter>Imgui</Filter>
    </ClInclude>
    <ClInclude Include="imgui\imstb_textedit.h">
      <Filter>Imgui</Filter>
    </ClInclude>
    <ClInclude Include="imgui\imstb_truetype.h">
      <Filter>Imgui</Filter>
    </ClInclude>
    <ClInclude Include="json\json.hpp">
      <Filter>Json</Filter>
    </ClInclude>
    <ClInclude Include="Config.hpp">
      <Filter>Source Files\Config</Filter>
    </ClInclude>
    <ClInclude Include="Utils.hpp">
      <Filter>Source Files\Utils</Filter>
    </ClInclude>
    <ClInclude Include="SDK\GameState.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\GameClient.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\AString.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\Pad.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\Skin.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\Champion.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\ChampionManager.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\CharacterStackData.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\CharacterDataStack.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\GameObject.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\AIBaseCommon.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\AIHero.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\AIMinionClient.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\ManagerTemplate.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="Encryption.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="CheatManager.hpp" />
    <ClInclude Include="SDK\RiotArray.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="SDK\AITurret.hpp">
      <Filter>Source Files\SDK</Filter>
    </ClInclude>
    <ClInclude Include="Logger.hpp">
      <Filter>Source Files\Utils</Filter>
    </ClInclude>
  </ItemGroup>
  <ItemGroup>
    <ResourceCompile Include="R3nzSkin.rc" />
  </ItemGroup>
</Project>

================================================
FILE: R3nzSkin/SDK/AIBaseCommon.cpp
================================================
#include <cstdint>
#include <string>

#include "AIBaseCommon.hpp"

#include "../encryption.hpp"
#include "../fnv_hash.hpp"
#include "../offsets.hpp"

#include "../CheatManager.hpp"

bool AIBaseCommon::checkSpecialSkins(const char* model, const std::int32_t skin) noexcept
{
	const auto stack{ this->get_character_data_stack() };
	const auto champ_name{ fnv::hash_runtime(stack->base_skin.model.str) };

	if (champ_name == FNV("Katarina") && (skin >= 29 && skin <= 36)) {
		stack->base_skin.gear = static_cast<std::int8_t>(0);
	} else if (champ_name == FNV("Renekton") && (skin >= 26 && skin <= 32)) {
		stack->base_skin.gear = static_cast<std::int8_t>(0);
	} else if (champ_name == FNV("MissFortune") && skin == 16) {
		stack->base_skin.gear = static_cast<std::int8_t>(0);
	} else if (champ_name == FNV("Lux") || champ_name == FNV("Sona")) {
		if ((skin == 7 && champ_name == FNV("Lux")) || (skin == 6 && champ_name == FNV("Sona"))) {
			stack->stack.clear();
			stack->push(model, skin);
			return true;
		} else stack->stack.clear();
	} else if (stack->base_skin.gear != static_cast<std::int8_t>(-1) && champ_name != FNV("Kayn")) {
		stack->base_skin.gear = static_cast<std::int8_t>(-1);
	}
	
	return false;
}

void AIBaseCommon::change_skin(const char* model, const std::int32_t skin) noexcept
{
	const auto stack{ this->get_character_data_stack() };
	reinterpret_cast<xor_value<std::int32_t>*>(std::uintptr_t(this) + offsets::AIBaseCommon::SkinId)->encrypt(skin);
	stack->base_skin.skin = skin;

	if (!this->checkSpecialSkins(model, skin))
		stack->update(true);
}


================================================
FILE: R3nzSkin/SDK/AIBaseCommon.hpp
================================================
#pragma once

#include <cstdint>

#include "CharacterDataStack.hpp"
#include "GameObject.hpp"

class AIBaseCommon : public GameObject {
public:
	[[nodiscard]] CharacterDataStack* get_character_data_stack() const noexcept { return reinterpret_cast<CharacterDataStack*>(std::uintptr_t(this) + offsets::AIBaseCommon::CharacterDataStack); }

	void change_skin(const char* model, const std::int32_t skin) noexcept;
private:
	bool checkSpecialSkins(const char* model, const std::int32_t skin) noexcept;
};


================================================
FILE: R3nzSkin/SDK/AIHero.hpp
================================================
#pragma once

#include "AIBaseCommon.hpp"

class AIHero : public AIBaseCommon {
public:
};


================================================
FILE: R3nzSkin/SDK/AIMinionClient.cpp
================================================
#include "AIMinionClient.hpp"

#include <cstdint>

#include "../CheatManager.hpp"

AIBaseCommon* AIMinionClient::getGoldRedirectTarget() const noexcept
{
	static const auto getOwner{ reinterpret_cast<AIBaseCommon*(__fastcall*)(std::uintptr_t)>(cheatManager.memory->base + offsets::functions::GetGoldRedirectTarget) };
	return getOwner(std::uintptr_t(this));
}


================================================
FILE: R3nzSkin/SDK/AIMinionClient.hpp
================================================
#pragma once

#include "AIBaseCommon.hpp"

class AIMinionClient : public AIBaseCommon {
public:
	[[nodiscard]] AIBaseCommon* getGoldRedirectTarget() const noexcept;
};


================================================
FILE: R3nzSkin/SDK/AITurret.hpp
================================================
#pragma once

#include "AIBaseCommon.hpp"

class AITurret : public AIBaseCommon {
public:
};


================================================
FILE: R3nzSkin/SDK/AString.hpp
================================================
#pragma once

#include <cstdint>

class AString {
public:
	const char* str;
	std::int32_t length;
	std::int32_t capacity;
};


================================================
FILE: R3nzSkin/SDK/Champion.hpp
================================================
#pragma once

#include "AString.hpp"
#include "Pad.hpp"
#include "Skin.hpp"
#include "RiotArray.hpp"

class Champion {
	PAD(0x8)
	AString champion_name;
	PAD(0xA0)
	RiotArray<Skin> skins;
};


================================================
FILE: R3nzSkin/SDK/ChampionManager.hpp
================================================
#pragma once

#include <vector>

#include "Champion.hpp"
#include "Pad.hpp"
#include "RiotArray.hpp"

class ChampionManager {
	PAD(0x18)
	RiotArray<Champion*> champions;
};


================================================
FILE: R3nzSkin/SDK/CharacterDataStack.cpp
================================================
#include <cstdint>

#include "../CheatManager.hpp"
#include "../Offsets.hpp"

#include "CharacterDataStack.hpp"

void CharacterDataStack::push(const char* model, const std::int32_t skin) const noexcept
{
	using push_t = __int64(__fastcall*)(std::uintptr_t, const char*, std::int32_t, std::int32_t, bool, bool, bool, bool, bool, bool, std::int8_t, const char*, std::int32_t, const char*, std::int32_t, bool, std::int32_t);
	static const auto _push{ reinterpret_cast<push_t>(cheatManager.memory->base + offsets::functions::CharacterDataStack__Push) };
	_push(std::uintptr_t(this), model, skin, 0, false, false, false, false, true, false, -1, "\x00", 0, "\x00", 0, false, 1);
}

void CharacterDataStack::update(const bool change) const noexcept
{
	static const auto _update{ reinterpret_cast<__int64(__fastcall*)(std::uintptr_t, bool)>(cheatManager.memory->base + offsets::functions::CharacterDataStack__Update) };
	_update(std::uintptr_t(this), change);
}


================================================
FILE: R3nzSkin/SDK/CharacterDataStack.hpp
================================================
#pragma once

#include <cstdint>
#include <vector>

#include "CharacterStackData.hpp"

class CharacterDataStack {
public:
	std::vector<CharacterStackData> stack;
	CharacterStackData base_skin;

	void update(const bool change) const noexcept;
	void push(const char* model, const std::int32_t skin) const noexcept;
};


================================================
FILE: R3nzSkin/SDK/CharacterStackData.hpp
================================================
#pragma once

#include <cstdint>

#include "AString.hpp"
#include "Pad.hpp"

class CharacterStackData {
public:
    AString model;
    PAD(0x10)
    std::int32_t skin;
    PAD(0x60)
    std::int8_t gear;
    PAD(0x7)
};


================================================
FILE: R3nzSkin/SDK/GameClient.hpp
================================================
#pragma once

#include "GameState.hpp"
#include "Pad.hpp"

class GameClient {
	PAD(0xC)
	GGameState_s game_state;
};


================================================
FILE: R3nzSkin/SDK/GameObject.hpp
================================================
#pragma once

#include <cstdint>
#include <string>

#include "../offsets.hpp"
#include "Pad.hpp"

class GameObject {
public:
	CLASS_GETTER_P(std::string, get_name, offsets::GameObject::Name)
	CLASS_GETTER(std::int32_t, get_team, offsets::GameObject::Team)

	// Returns true for lane minions.
	[[nodiscard]] bool isLaneMinion() const noexcept { return CallVirtual<offsets::GameObject::VTable::IsLaneMinion, bool>(std::uintptr_t(this)); }

	// Returns true for blue, red and crab.
	[[nodiscard]] bool isEliteMinion() const noexcept { return CallVirtual<offsets::GameObject::VTable::IsEliteMinion, bool>(std::uintptr_t(this)); }

	// Returns true for dragon, baron, and rift.
	[[nodiscard]] bool isEpicMinion() const noexcept { return CallVirtual<offsets::GameObject::VTable::IsEpicMinion, bool>(std::uintptr_t(this)); }

	// Returns true for minion.
	[[nodiscard]] bool isMinion() const noexcept { return CallVirtual<offsets::GameObject::VTable::IsMinion, bool>(std::uintptr_t(this)); }

	// Returns true for objects that both teams can damage, such as jungle objects, gangplain barrels, etc.
	[[nodiscard]] bool isJungle() const noexcept { return CallVirtual<offsets::GameObject::VTable::IsJungle, bool>(std::uintptr_t(this)); }
};


================================================
FILE: R3nzSkin/SDK/GameState.hpp
================================================
#pragma once

#include <cstdint>

enum class GGameState_s : std::int32_t {
	LoadingScreen = 0,
	Connecting = 1,
	Running = 2,
	Poaused = 3,
	Finished = 4,
	Exiting = 5
};


================================================
FILE: R3nzSkin/SDK/ManagerTemplate.hpp
================================================
#pragma once

#include <cstdint>

#include "Pad.hpp"

template <class T>
class ManagerTemplate {
	PAD(0x8)
	T** list;
	std::int32_t length;
	std::int32_t capacity;
};


================================================
FILE: R3nzSkin/SDK/Pad.hpp
================================================
#pragma once

#include <cstddef>

#define CONCAT(a, b) a##b
#define PAD_NAME(n) CONCAT(pad, n)
#define PAD(size) \
private: \
    std::byte PAD_NAME(__LINE__)[size]; \
public:

#define CLASS_GETTER(returnType, name, offset) \
[[nodiscard]] inline returnType name() const noexcept \
{ \
	return *reinterpret_cast<returnType*>(std::uintptr_t(this) + offset); \
}

#define CLASS_GETTER_P(returnType, name, offset) \
[[nodiscard]] inline returnType* name() const noexcept \
{ \
	return reinterpret_cast<returnType*>(std::uintptr_t(this) + offset); \
}

template <std::size_t Index, typename ReturnType, typename... Args>
ReturnType CallVirtual(std::uintptr_t instance, Args... args)
{
	using Fn = ReturnType(__fastcall*)(std::uintptr_t, Args...);
	const auto function{ (*reinterpret_cast<Fn**>(instance))[Index] };
	return function(instance, args...);
}

================================================
FILE: R3nzSkin/SDK/RiotArray.hpp
================================================
#pragma once

#include <cstdint>

template <class T>
class RiotArray {
public:
	T* list;
	std::int32_t size;
	std::int32_t cap;
};


================================================
FILE: R3nzSkin/SDK/Skin.hpp
================================================
#pragma once

#include <cstdint>

#include "AString.hpp"
#include "Pad.hpp"

class Skin {
public:
	std::int32_t skin_id;
	PAD(0x4)
	AString skin_name;
};


================================================
FILE: R3nzSkin/SkinDatabase.cpp
================================================
#include <algorithm>
#include <cstdint>
#include <map>
#include <ranges>
#include <string>
#include <utility>

#include "CheatManager.hpp"
#include "SkinDatabase.hpp"
#include "fnv_hash.hpp"

void SkinDatabase::load() noexcept
{
	for (auto j{ 0 }; j < cheatManager.memory->championManager->champions.size; ++j) {
		const auto& champion = cheatManager.memory->championManager->champions.list[j];
		std::vector<std::int32_t> skins_ids;
		
		for (auto i{ 0 }; i < champion->skins.size; ++i)
			skins_ids.push_back(champion->skins.list[i].skin_id);
		
		std::ranges::sort(skins_ids);

		std::map<std::string, std::int32_t> temp_skin_list;
		for (const auto& i : skins_ids) {
			const auto skin_display_name{ std::string("game_character_skin_displayname_") + champion->champion_name.str + "_" + std::to_string(i) };
			auto skin_display_name_translated{ i > 0 ? std::string(cheatManager.memory->translateString(skin_display_name.c_str())) : std::string(champion->champion_name.str) };

			if (skin_display_name_translated == skin_display_name)
				continue;

			if (const auto it{ temp_skin_list.find(skin_display_name_translated) }; it == temp_skin_list.end()) {
				temp_skin_list[skin_display_name_translated] = 1;
			} else {
				skin_display_name_translated.append(" Chroma " + std::to_string(it->second));
				it->second = it->second + 1;
			}

			const auto champ_name{ fnv::hash_runtime(champion->champion_name.str) };
			this->champions_skins[champ_name].push_back({ champion->champion_name.str, skin_display_name_translated, i });

			if (i == 7 && champ_name == FNV("Lux")) {
				this->champions_skins[champ_name].push_back({ "LuxAir", "Elementalist Air Lux", i });
				this->champions_skins[champ_name].push_back({ "LuxDark", "Elementalist Dark Lux", i });
				this->champions_skins[champ_name].push_back({ "LuxFire", "Elementalist Fire Lux", i });
				this->champions_skins[champ_name].push_back({ "LuxIce", "Elementalist Ice Lux", i });
				this->champions_skins[champ_name].push_back({ "LuxMagma", "Elementalist Magma Lux", i });
				this->champions_skins[champ_name].push_back({ "LuxMystic", "Elementalist Mystic Lux", i });
				this->champions_skins[champ_name].push_back({ "LuxNature", "Elementalist Nature Lux", i });
				this->champions_skins[champ_name].push_back({ "LuxStorm", "Elementalist Storm Lux", i });
				this->champions_skins[champ_name].push_back({ "LuxWater", "Elementalist Water Lux", i });
			} else if (i == 6 && champ_name == FNV("Sona")) {
				this->champions_skins[champ_name].push_back({ "SonaDJGenre02", "DJ Sona 2", i });
				this->champions_skins[champ_name].push_back({ "SonaDJGenre03", "DJ Sona 3", i });
			}
		}
	}

	for (auto ward_skin_id{ 1u };; ++ward_skin_id) {
		const auto ward_display_name{ "game_character_skin_displayname_SightWard_" + std::to_string(ward_skin_id) };
		const auto ward_display_name_translated{ cheatManager.memory->translateString(ward_display_name.c_str()) };
		
		if (ward_display_name == ward_display_name_translated)
			break;

		this->wards_skins.emplace_back(ward_skin_id, ward_display_name_translated);
	}
}


================================================
FILE: R3nzSkin/SkinDatabase.hpp
================================================
#pragma once

#include <cstdint>
#include <map>
#include <utility>
#include <vector>

#include "fnv_hash.hpp"
 
class SkinDatabase {
public:
	class skin_info {
	public:
		const char* model_name;
		std::string skin_name;
		std::int32_t skin_id;
	};

	class jungle_mob_skin_info {
	public:
		const char* name;
		std::vector<std::uint64_t> name_hashes;
		std::vector<const char*> skins;
	};

	class specialSkin {
	public:
		std::uint64_t champHash;
		std::int32_t skinIdStart;
		std::int32_t skinIdEnd;
		std::vector<const char*> gears;
	};

	void load() noexcept;

	std::map<std::uint64_t, std::vector<skin_info>> champions_skins;
	std::vector<std::pair<std::uint32_t, const char*>> wards_skins;
	
	std::vector<const char*> minions_skins{
		"Minion", "Summer Minion",
		"Project Minion", "Snowdown Minion",
		"Draven Minion", "Star Guardian Minion",
		"Arcade Minion", "Snowdown 2 Minion",
		"Odyssey Minion", "Mouse Minion", "Arcane Minion"
	};

	std::vector<const char*> turret_skins{
		"Default Order Turret", "Default Chaos Turret",
		"Snow Order Turret", "Snow Chaos Turret",
		"Twisted Treeline Order Turret", "Twisted Treeline Chaos Turret",
		"URF Order Turret", "URF Chaos Turret",
		"Arcade Turret",
		"Temple of Lily and Lotus Turret",
		"Arcane Order Turret", "Arcane Chaos Turret",
		"Butcher's Bridge Order Turret", "Butcher's Bridge Chaos Turret",
		"Howling Abyss Order Turret", "Howling Abyss Chaos Turret"
	};

	std::vector<jungle_mob_skin_info> jungle_mobs_skins{
		{
			"Baron",
			{ FNV("SRU_Baron") },
			{ "Baron", "Snowdown Baron", "Championship Baron", "Lunar Revel Baron", "MSI Baron", "Odyssey Baron", "Championship Birthday Baron", "Ruined King Baron" }
		},
		{
			"Blue",
			{ FNV("SRU_Blue") },
			{ "Blue", "Dark Blue", "Pool Party Blue", "Ruined King Blue" }
		},
		{
			"Red",
			{ FNV("SRU_Red") },
			{ "Red", "Pool Party Red", "Ruined King Red" }
		},
		{
			"Scuttle",
			{ FNV("Sru_Crab") },
			{ "Scuttle", "Halloween Light Scuttle", "Halloween Dark Scuttle", "Ruined King Scuttle" }
		},
		{
			"Krug",
			{ FNV("SRU_Krug"), FNV("SRU_KrugMini"), FNV("SRU_KrugMiniMini") },
			{ "Krug", "Dark Krug" }
		},
		{
			"Razorbeak",
			{ FNV("SRU_Razorbeak"), FNV("SRU_RazorbeakMini") },
			{ "Razorbeak", "Chicken Razorbeak" }
		}
	};
	//左开右闭
	std::vector<specialSkin> specialSkins{
		{ FNV("Katarina"), 29, 36, { "Dagger 1", "Dagger 2", "Dagger 3", "Dagger 4", "Dagger 5", "Dagger 6" }},
		{ FNV("Renekton"), 26, 32, { "Head off", "Head on", "Fins", "Ultimate" } },
		{ FNV("MissFortune"), 16, 16, { "Scarlet fair", "Zero hour", "Royal arms", "Starswarm" } },
		{ FNV("Ezreal"), 5, 5, { "Level 1", "Level 2", "Level 3" } },
		{ FNV("Ahri"), 86, 87, { "Level 1", "Level 2", "Level 3" } }
	};
};


================================================
FILE: R3nzSkin/Utils.cpp
================================================
#include <Windows.h>
#include <algorithm>
#include <array>
#include <string_view>

#include "imgui/imgui.h"
#define IMGUI_DEFINE_MATH_OPERATORS
#include "imgui/imgui_internal.h"

#include "CheatManager.hpp"
#include "Utils.hpp"

struct Key {
    constexpr Key(std::string_view name, int code) : name{ name }, code{ code } {  }

    std::string_view name;
    int code;
};

// indices must match KeyBind::KeyCode enum
static constexpr auto keyMap = std::to_array<Key>({
    { "'", VK_OEM_7 },
    { ",", VK_OEM_COMMA },
    { "-", VK_OEM_MINUS },
    { ".", VK_OEM_PERIOD },
    { "/", VK_OEM_2 },
    { "0", '0' },
    { "1", '1' },
    { "2", '2' },
    { "3", '3' },
    { "4", '4' },
    { "5", '5' },
    { "6", '6' },
    { "7", '7' },
    { "8", '8' },
    { "9", '9' },
    { ";", VK_OEM_1 },
    { "=", VK_OEM_PLUS },
    { "A", 'A' },
    { "ADD", VK_ADD },
    { "B", 'B' },
    { "BACKSPACE", VK_BACK },
    { "C", 'C' },
    { "CAPSLOCK", VK_CAPITAL },
    { "D", 'D' },
    { "DECIMAL", VK_DECIMAL },
    { "DELETE", VK_DELETE },
    { "DIVIDE", VK_DIVIDE },
    { "DOWN", VK_DOWN },
    { "E", 'E' },
    { "END", VK_END },
    { "ENTER", VK_RETURN },
    { "F", 'F' },
    { "F1", VK_F1 },
    { "F10", VK_F10 },
    { "F11", VK_F11 },
    { "F12", VK_F12 },
    { "F2", VK_F2 },
    { "F3", VK_F3 },
    { "F4", VK_F4 },
    { "F5", VK_F5 },
    { "F6", VK_F6 },
    { "F7", VK_F7 },
    { "F8", VK_F8 },
    { "F9", VK_F9 },
    { "G", 'G' },
    { "H", 'H' },
    { "HOME", VK_HOME },
    { "I", 'I' },
    { "INSERT", VK_INSERT },
    { "J", 'J' },
    { "K", 'K' },
    { "L", 'L' },
    { "LALT", VK_LMENU },
    { "LCTRL", VK_LCONTROL },
    { "LEFT", VK_LEFT },
    { "LSHIFT", VK_LSHIFT },
    { "M", 'M' },
    { "MOUSE1", 0x0 },
    { "MOUSE2", 0x1 },
    { "MOUSE3", 0x2 },
    { "MOUSE4", 0x3 },
    { "MOUSE5", 0x4 },
    { "MULTIPLY", VK_MULTIPLY },
    { "MWHEEL_DOWN", 0x0 },
    { "MWHEEL_UP", 0x0 },
    { "N", 'N' },
    { "NONE", 0x0 },
    { "NUMPAD_0", VK_NUMPAD0 },
    { "NUMPAD_1", VK_NUMPAD1 },
    { "NUMPAD_2", VK_NUMPAD2 },
    { "NUMPAD_3", VK_NUMPAD3 },
    { "NUMPAD_4", VK_NUMPAD4 },
    { "NUMPAD_5", VK_NUMPAD5 },
    { "NUMPAD_6", VK_NUMPAD6 },
    { "NUMPAD_7", VK_NUMPAD7 },
    { "NUMPAD_8", VK_NUMPAD8 },
    { "NUMPAD_9", VK_NUMPAD9 },
    { "O", 'O' },
    { "P", 'P' },
    { "PAGE_DOWN", VK_NEXT },
    { "PAGE_UP", VK_PRIOR },
    { "Q", 'Q' },
    { "R", 'R' },
    { "RALT", VK_RMENU },
    { "RCTRL", VK_RCONTROL },
    { "RIGHT", VK_RIGHT },
    { "RSHIFT", VK_RSHIFT },
    { "S", 'S' },
    { "SPACE", VK_SPACE },
    { "SUBTRACT", VK_SUBTRACT },
    { "T", 'T' },
    { "TAB", VK_TAB },
    { "U", 'U' },
    { "UP", VK_UP },
    { "V", 'V' },
    { "W", 'W' },
    { "X", 'X' },
    { "Y", 'Y' },
    { "Z", 'Z' },
    { "[", VK_OEM_4 },
    { "\\", VK_OEM_5 },
    { "]", VK_OEM_6 },
    { "`", VK_OEM_3 }
});

static_assert(keyMap.size() == KeyBind::MAX);
static_assert(std::ranges::is_sorted(keyMap, {}, &Key::name));

KeyBind::KeyBind(const KeyCode keyCode) noexcept : keyCode{ static_cast<std::size_t>(keyCode) < keyMap.size() ? keyCode : KeyCode::NONE } {  }

KeyBind::KeyBind(const char* keyName) noexcept
{
    if (const auto it{ std::ranges::lower_bound(keyMap, keyName, {}, &Key::name) }; it != keyMap.end() && it->name == keyName)
        keyCode = static_cast<KeyCode>(std::distance(keyMap.begin(), it));
    else
        keyCode = KeyCode::NONE;
}

const char* KeyBind::toString() const noexcept
{
    return keyMap[static_cast<std::size_t>(keyCode) < keyMap.size() ? keyCode : KeyCode::NONE].name.data();
}

int KeyBind::getKey() const noexcept
{
    return keyMap[static_cast<std::size_t>(keyCode) < keyMap.size() ? keyCode : KeyCode::NONE].code;
}

bool KeyBind::isPressed() const noexcept
{
    if (keyCode == KeyCode::NONE)
        return false;

    if (keyCode == KeyCode::MOUSEWHEEL_DOWN)
        return ImGui::GetIO().MouseWheel < 0.0f;

    if (keyCode == KeyCode::MOUSEWHEEL_UP)
        return ImGui::GetIO().MouseWheel > 0.0f;

    if (keyCode >= KeyCode::MOUSE1 && keyCode <= KeyCode::MOUSE5)
        return ImGui::IsMouseClicked(keyMap[keyCode].code);

    return static_cast<std::size_t>(keyCode) < keyMap.size() && ImGui::IsKeyPressed(keyMap[keyCode].code, false);
}

bool KeyBind::isDown() const noexcept
{
    if (keyCode == KeyCode::NONE)
        return false;

    if (keyCode == KeyCode::MOUSEWHEEL_DOWN)
        return ImGui::GetIO().MouseWheel < 0.0f;

    if (keyCode == KeyCode::MOUSEWHEEL_UP)
        return ImGui::GetIO().MouseWheel > 0.0f;

    if (keyCode >= KeyCode::MOUSE1 && keyCode <= KeyCode::MOUSE5)
        return ImGui::IsMouseDown(keyMap[keyCode].code);

    return static_cast<std::size_t>(keyCode) < keyMap.size() && ImGui::IsKeyDown(keyMap[keyCode].code);
}

bool KeyBind::setToPressedKey() noexcept
{
    if (ImGui::IsKeyPressed(ImGui::GetIO().KeyMap[ImGuiKey_Escape])) {
        keyCode = KeyCode::NONE;
        return true;
    } else if (ImGui::GetIO().MouseWheel < 0.0f) {
        keyCode = KeyCode::MOUSEWHEEL_DOWN;
        return true;
    } else if (ImGui::GetIO().MouseWheel > 0.0f) {
        keyCode = KeyCode::MOUSEWHEEL_UP;
        return true;
    }

    for (auto i{ 0u }; i < IM_ARRAYSIZE(ImGui::GetIO().MouseDown); ++i) {
        if (ImGui::IsMouseClicked(i)) {
            keyCode = static_cast<KeyCode>(KeyCode::MOUSE1 + i);
            return true;
        }
    }

    for (auto i{ 0u }; i < IM_ARRAYSIZE(ImGui::GetIO().KeysDown); ++i) {
        if (!ImGui::IsKeyPressed(i))
            continue;

        if (const auto it{ std::ranges::find(keyMap, i, &Key::code) }; it != keyMap.end()) {
            keyCode = static_cast<KeyCode>(std::distance(keyMap.begin(), it));
            if (keyCode == KeyCode::LCTRL && ImGui::IsKeyPressed(keyMap[KeyCode::RALT].code))
                keyCode = KeyCode::RALT;
            return true;
        }
    }
    return false;
}

void KeyBindToggle::handleToggle() noexcept
{
    if (isPressed())
        toggledOn = !toggledOn;
}

void ImGui::textUnformattedCentered(const char* text) noexcept
{
    ImGui::SetCursorPosX((ImGui::GetWindowSize().x - ImGui::CalcTextSize(text).x) / 2.0f);
    ImGui::TextUnformatted(text);
}

void ImGui::hoverInfo(const char* desc) noexcept
{
    if (ImGui::IsItemHovered()) {
        ImGui::BeginTooltip();
        ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
        ImGui::TextUnformatted(desc);
        ImGui::PopTextWrapPos();
        ImGui::EndTooltip();
    }
}

void ImGui::rainbowText() noexcept
{
	static float r{ 1.0f };
	static float g{ 0.f };
	static float b{ 0.f };

	if (cheatManager.config->rainbowText) {
		if (r == 1.f && g >= 0.f && b <= 0.f) {
			g += 0.005f;
			b = 0.f;
		}
		if (r <= 1.f && g >= 1.f && b == 0.f) {
			g = 1.f;
			r -= 0.005f;
		}
		if (r <= 0.f && g == 1.f && b >= 0.f) {
			r = 0.f;
			b += 0.005f;
		}
		if (r == 0.f && g <= 1.f && b >= 1.f) {
			b = 1.f;
			g -= 0.005f;
		}
		if (r >= 0.f && g <= 0.f && b == 1.f) {
			g = 0.f;
			r += 0.005f;
		}
		if (r >= 1.f && g >= 0.f && b <= 1.f) {
			r = 1.f;
			b -= 0.005f;
		}
		ImGui::GetStyle().Colors[ImGuiCol_Text] = ImVec4(r, g, b, 1.00f);
	} else {
		if (auto& clr{ ImGui::GetStyle().Colors[ImGuiCol_Text] }; clr.x != 0.92f && clr.y != 0.92f && clr.z != 0.92f)
			clr = ImVec4(0.92f, 0.92f, 0.92f, 0.92f);
	}
}

struct InputTextCallback_UserData {
    std::string* Str;
    ImGuiInputTextCallback ChainCallback;
    void* ChainCallbackUserData;
};

static int InputTextCallback(ImGuiInputTextCallbackData* data) noexcept
{
    const auto user_data{ static_cast<InputTextCallback_UserData*>(data->UserData) };
    if (data->EventFlag == ImGuiInputTextFlags_CallbackResize) {
        const auto str{ user_data->Str };
        IM_ASSERT(data->Buf == str->c_str());
        str->resize(data->BufTextLen);
        data->Buf = const_cast<char*>(str->c_str());
    } else if (user_data->ChainCallback) {
        data->UserData = user_data->ChainCallbackUserData;
        return user_data->ChainCallback(data);
    }
    return 0;
}

bool ImGui::InputText(const char* label, std::string* str, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* userData) noexcept
{
    IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0);
    flags |= ImGuiInputTextFlags_CallbackResize;
    auto cbUserData{ InputTextCallback_UserData(str, callback, userData) };
    return InputText(label, const_cast<char*>(str->c_str()), str->capacity() + 1, flags, InputTextCallback, &cbUserData);
}

void ImGui::hotkey(const char* label, KeyBind& key, float samelineOffset, const ImVec2& size) noexcept
{
    const auto id{ GetID(label) };
    PushID(label);

    TextUnformatted(label);
    SameLine(samelineOffset);

    if (GetActiveID() == id) {
        PushStyleColor(ImGuiCol_Button, GetColorU32(ImGuiCol_ButtonActive));
        Button("...", size);
        PopStyleColor();

        GetCurrentContext()->ActiveIdAllowOverlap = true;
        if ((!IsItemHovered() && GetIO().MouseClicked[0]) || key.setToPressedKey())
            ClearActiveID();
    } else if (Button(key.toString(), size)) {
        SetActiveID(id, GetCurrentWindow());
    }

    PopID();
}


================================================
FILE: R3nzSkin/Utils.hpp
================================================
#pragma once

#include <concepts>
#include <mutex>
#include <random>
#include <string>

#include "imgui/imgui.h"

class RandomGenerator {
public:
    template <std::integral T>
    [[nodiscard]] static T random(T min, T max) noexcept
    {
        std::scoped_lock lock{ mutex };
        return std::uniform_int_distribution{ min, max }(gen);
    }

    template <std::floating_point T>
    [[nodiscard]] static T random(T min, T max) noexcept
    {
        std::scoped_lock lock{ mutex };
        return std::uniform_real_distribution{ min, max }(gen);
    }

    template <typename T>
    [[nodiscard]] static std::enable_if_t<std::is_enum_v<T>, T> random(T min, T max) noexcept
    {
        return static_cast<T>(random(static_cast<std::underlying_type_t<T>>(min), static_cast<std::underlying_type_t<T>>(max)));
    }
private:
    inline static std::mt19937 gen{ std::random_device{}() };
    inline static std::mutex mutex;
};

template <typename T>
[[nodiscard]] T random(T min, T max) noexcept
{
    return RandomGenerator::random(min, max);
}

class KeyBind {
public:
    enum KeyCode : unsigned char {
        APOSTROPHE = 0, COMMA, MINUS, PERIOD, SLASH, KEY_0, KEY_1, KEY_2,
        KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, SEMICOLON, EQUALS,
        A, ADD, B, BACKSPACE, C, CAPSLOCK, D, DECIMAL, DEL, DIVIDE, DOWN, E,
        END, ENTER, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, G,
        H, HOME, I, INSERT, J, K, L, LALT, LCTRL, LEFT, LSHIFT, M, MOUSE1, MOUSE2,
        MOUSE3, MOUSE4, MOUSE5, MULTIPLY, MOUSEWHEEL_DOWN, MOUSEWHEEL_UP, N, NONE,
        NUMPAD_0, NUMPAD_1, NUMPAD_2, NUMPAD_3, NUMPAD_4, NUMPAD_5, NUMPAD_6, NUMPAD_7,
        NUMPAD_8, NUMPAD_9, O, P, PAGE_DOWN, PAGE_UP, Q, R, RALT, RCTRL, RIGHT, RSHIFT,
        S, SPACE, SUBTRACT, T, TAB, U, UP, V, W, X, Y, Z, LEFTBRACKET, BACKSLASH,
        RIGHTBRACKET, BACKTICK, MAX
    };

    KeyBind() = default;
    explicit KeyBind(KeyCode keyCode) noexcept;
    explicit KeyBind(const char* keyName) noexcept;

    bool operator==(KeyCode keyCode) const noexcept { return this->keyCode == keyCode; }
    friend bool operator==(const KeyBind& a, const KeyBind& b) noexcept { return a.keyCode == b.keyCode; }

    const char* toString() const noexcept;
    int getKey() const noexcept;
    bool isPressed() const noexcept;
    bool isDown() const noexcept;
    bool isSet() const noexcept { return keyCode != KeyCode::NONE; }

    bool setToPressedKey() noexcept;
private:
    KeyCode keyCode{ KeyCode::NONE };
};

class KeyBindToggle : public KeyBind {
public:
    using KeyBind::KeyBind;

    void handleToggle() noexcept;
    bool isToggled() const noexcept { return toggledOn; }
private:
    bool toggledOn = true;
};

namespace ImGui
{
    bool InputText(const char* label, std::string* str, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = nullptr, void* userData = nullptr) noexcept;
	void textUnformattedCentered(const char* text) noexcept;
	void rainbowText() noexcept;
    void hotkey(const char* label, KeyBind& key, float samelineOffset = 0.0f, const ImVec2& size = { 100.0f, 0.0f }) noexcept;
    void hoverInfo(const char* desc) noexcept;
};


================================================
FILE: R3nzSkin/encryption.hpp
================================================
#pragma once

#include <cstdint>
#include <intrin.h>

#pragma pack(push, 4)
template <typename T>
class xor_value {
	T xor_key;
	T values_table[4];
	bool xor_key_was_init{ 0 };
	std::uint8_t bytes_xor_count;
	std::uint8_t bytes_xor_count_8;
	std::uint8_t value_index{ 0 };
public:
	T decrypt() noexcept
	{
		if (xor_key_was_init != 1)
			return 0;

		auto xored_value{ values_table[value_index] };
		auto xor_key_value{ xor_key };

		{
			auto* xor_value_ptr{ reinterpret_cast<std::uint32_t*>(&xor_key_value) };
			for (auto i{ 0u }; i < bytes_xor_count; i++)
				*(reinterpret_cast<std::uint32_t*>(&xored_value) + i) ^= ~xor_value_ptr[i];
		}

		{
			auto* xor_value_ptr{ reinterpret_cast<std::uint8_t*>(&xor_key_value) };

			for (auto i{ sizeof(T) - bytes_xor_count_8 }; i < sizeof(T); ++i)
				*(reinterpret_cast<std::uint8_t*>(&xored_value) + i) ^= ~xor_value_ptr[i];
		}

		return xored_value;
	}

	void encrypt(T value) noexcept
	{
		if (!xor_key_was_init) {
			if (sizeof(T) <= 2) {
				bytes_xor_count_8 = sizeof(T);
				bytes_xor_count = 0;
			} else {
				bytes_xor_count_8 = sizeof(T) % 4;
				bytes_xor_count = (sizeof(T) - bytes_xor_count_8) / 4;
			}

			auto key{ ::__rdtsc() };
			auto key_index{ 0 };

			for (auto i{ 0u }; i < sizeof(T); i++) {
				*(reinterpret_cast<std::uint8_t*>(&xor_key) + i) = *(reinterpret_cast<std::uint8_t*>(&key) + key_index++);

				if (key_index == 8) {
					key = ::__rdtsc();
					key_index = 0;
				}
			}

			value_index = 0;
			xor_key_was_init = 1;
		}

		auto xored_value{ value };
		auto xor_key_value{ xor_key };

		{
			auto* xor_value_ptr{ reinterpret_cast<std::uint32_t*>(&xor_key_value) };
			for (auto i{ 0u }; i < bytes_xor_count; i++)
				*(reinterpret_cast<std::uint32_t*>(&xored_value) + i) ^= ~xor_value_ptr[i];
		}

		{
			auto* xor_value_ptr{ reinterpret_cast<std::uint8_t*>(&xor_key_value) };

			for (auto i{ sizeof(T) - bytes_xor_count_8 }; i < sizeof(T); ++i)
				*(reinterpret_cast<std::uint8_t*>(&xored_value) + i) ^= ~xor_value_ptr[i];
		}

		auto new_value_index{ std::uint8_t(value_index + 1) & 3 };
		values_table[new_value_index] = xored_value;
		value_index = new_value_index;
	}
};
#pragma pack(pop)


================================================
FILE: R3nzSkin/fnv_hash.hpp
================================================
#pragma once

#include <cstdlib>
#include <cstdint>

namespace detail {
	template <typename Type, Type OffsetBasis, Type Prime>
	struct size_dependant_data {
		using type = Type;
		constexpr static auto k_offset_basis{ OffsetBasis };
		constexpr static auto k_prime{ Prime };
	};

	template <std::size_t Bits>
	struct size_selector;

	template <>
	struct size_selector<32> {
		using type = size_dependant_data<std::uint32_t, 0x811c9dc5ul, 16777619ul>;
	};

	template <>
	struct size_selector<64> {
		using type = size_dependant_data<std::uint64_t, 0xcbf29ce484222325ull, 1099511628211ull>;
	};

	template <std::size_t Size>
	class fnv_hash {
	private:
		using data_t = typename size_selector<Size>::type;

	public:
		using hash = typename data_t::type;

	private:
		constexpr static auto k_offset_basis{ data_t::k_offset_basis };
		constexpr static auto k_prime{ data_t::k_prime };

	public:
		template <std::size_t N>
		static __forceinline constexpr auto hash_constexpr(const char(&str)[N], const std::size_t size = N) -> hash {
			return static_cast<hash>(1ull * (size == 1 ? (k_offset_basis ^ str[0]) : (hash_constexpr(str, size - 1) ^ str[size - 1])) * k_prime);
		}

		static auto __forceinline hash_runtime(const char* str) -> hash {
			auto result{ k_offset_basis };
			do {
				result ^= *str++;
				result *= k_prime;
			} while (*(str - 1) != '\0');

			return result;
		}
	};
}

using fnv = ::detail::fnv_hash<sizeof(void*) * 8>;

#define FNV(str) (std::integral_constant<fnv::hash, fnv::hash_constexpr(str)>::value)


================================================
FILE: R3nzSkin/imgui/imconfig.h
================================================
#pragma once

#define IMGUI_DISABLE_DEMO_WINDOWS
#define IMGUI_DISABLE_METRICS_WINDOW
#define IMGUI_IMPL_WIN32_DISABLE_GAMEPAD
#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS


================================================
FILE: R3nzSkin/imgui/imgui.cpp
================================================
// dear imgui, v1.84
// (main code and documentation)

// Help:
// - Read FAQ at http://dearimgui.org/faq
// - Newcomers, read 'Programmer guide' below for notes on how to setup Dear ImGui in your codebase.
// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp. All applications in examples/ are doing that.
// Read imgui.cpp for details, links and comments.

// Resources:
// - FAQ                   http://dearimgui.org/faq
// - Homepage & latest     https://github.com/ocornut/imgui
// - Releases & changelog  https://github.com/ocornut/imgui/releases
// - Gallery               https://github.com/ocornut/imgui/issues/4451 (please post your screenshots/video there!)
// - Wiki                  https://github.com/ocornut/imgui/wiki (lots of good stuff there)
// - Glossary              https://github.com/ocornut/imgui/wiki/Glossary
// - Issues & support      https://github.com/ocornut/imgui/issues
// - Discussions           https://github.com/ocornut/imgui/discussions

// Developed by Omar Cornut and every direct or indirect contributors to the GitHub.
// See LICENSE.txt for copyright and licensing details (standard MIT License).
// This library is free but needs your support to sustain development and maintenance.
// Businesses: you can support continued development via invoiced technical support, maintenance and sponsoring contracts. Please reach out to "contact AT dearimgui.com".
// Individuals: you can support continued development via donations. See docs/README or web page.

// It is recommended that you don't modify imgui.cpp! It will become difficult for you to update the library.
// Note that 'ImGui::' being a namespace, you can add functions into the namespace from your own source files, without
// modifying imgui.h or imgui.cpp. You may include imgui_internal.h to access internal data structures, but it doesn't
// come with any guarantee of forward compatibility. Discussing your changes on the GitHub Issue Tracker may lead you
// to a better solution or official support for them.

/*

Index of this file:

DOCUMENTATION

- MISSION STATEMENT
- END-USER GUIDE
- PROGRAMMER GUIDE
  - READ FIRST
  - HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
  - GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
  - HOW A SIMPLE APPLICATION MAY LOOK LIKE
  - HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
  - USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
- API BREAKING CHANGES (read me when you update!)
- FREQUENTLY ASKED QUESTIONS (FAQ)
  - Read all answers online: https://www.dearimgui.org/faq, or in docs/FAQ.md (with a Markdown viewer)

CODE
(search for "[SECTION]" in the code to find them)

// [SECTION] INCLUDES
// [SECTION] FORWARD DECLARATIONS
// [SECTION] CONTEXT AND MEMORY ALLOCATORS
// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
// [SECTION] MISC HELPERS/UTILITIES (Geometry functions)
// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions)
// [SECTION] MISC HELPERS/UTILITIES (File functions)
// [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
// [SECTION] MISC HELPERS/UTILITIES (Color functions)
// [SECTION] ImGuiStorage
// [SECTION] ImGuiTextFilter
// [SECTION] ImGuiTextBuffer
// [SECTION] ImGuiListClipper
// [SECTION] STYLING
// [SECTION] RENDER HELPERS
// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
// [SECTION] ERROR CHECKING
// [SECTION] LAYOUT
// [SECTION] SCROLLING
// [SECTION] TOOLTIPS
// [SECTION] POPUPS
// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
// [SECTION] DRAG AND DROP
// [SECTION] LOGGING/CAPTURING
// [SECTION] SETTINGS
// [SECTION] VIEWPORTS
// [SECTION] PLATFORM DEPENDENT HELPERS
// [SECTION] METRICS/DEBUGGER WINDOW

*/

//-----------------------------------------------------------------------------
// DOCUMENTATION
//-----------------------------------------------------------------------------

/*

 MISSION STATEMENT
 =================

 - Easy to use to create code-driven and data-driven tools.
 - Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools.
 - Easy to hack and improve.
 - Minimize setup and maintenance.
 - Minimize state storage on user side.
 - Portable, minimize dependencies, run on target (consoles, phones, etc.).
 - Efficient runtime and memory consumption.

 Designed for developers and content-creators, not the typical end-user! Some of the current weaknesses includes:

 - Doesn't look fancy, doesn't animate.
 - Limited layout features, intricate layouts are typically crafted in code.


 END-USER GUIDE
 ==============

 - Double-click on title bar to collapse window.
 - Click upper right corner to close a window, available when 'bool* p_open' is passed to ImGui::Begin().
 - Click and drag on lower right corner to resize window (double-click to auto fit window to its contents).
 - Click and drag on any empty space to move window.
 - TAB/SHIFT+TAB to cycle through keyboard editable fields.
 - CTRL+Click on a slider or drag box to input value as text.
 - Use mouse wheel to scroll.
 - Text editor:
   - Hold SHIFT or use mouse to select text.
   - CTRL+Left/Right to word jump.
   - CTRL+Shift+Left/Right to select words.
   - CTRL+A our Double-Click to select all.
   - CTRL+X,CTRL+C,CTRL+V to use OS clipboard/
   - CTRL+Z,CTRL+Y to undo/redo.
   - ESCAPE to revert text to its original value.
   - You can apply arithmetic operators +,*,/ on numerical values. Use +- to subtract (because - would set a negative value!)
   - Controls are automatically adjusted for OSX to match standard OSX text editing operations.
 - General Keyboard controls: enable with ImGuiConfigFlags_NavEnableKeyboard.
 - General Gamepad controls: enable with ImGuiConfigFlags_NavEnableGamepad. See suggested mappings in imgui.h ImGuiNavInput_ + download PNG/PSD at http://dearimgui.org/controls_sheets


 PROGRAMMER GUIDE
 ================

 READ FIRST
 ----------
 - Remember to check the wonderful Wiki (https://github.com/ocornut/imgui/wiki)
 - Your code creates the UI, if your code doesn't run the UI is gone! The UI can be highly dynamic, there are no construction or
   destruction steps, less superfluous data retention on your side, less state duplication, less state synchronization, fewer bugs.
 - Call and read ImGui::ShowDemoWindow() for demo code demonstrating most features.
 - The library is designed to be built from sources. Avoid pre-compiled binaries and packaged versions. See imconfig.h to configure your build.
 - Dear ImGui is an implementation of the IMGUI paradigm (immediate-mode graphical user interface, a term coined by Casey Muratori).
   You can learn about IMGUI principles at http://www.johno.se/book/imgui.html, http://mollyrocket.com/861 & more links in Wiki.
 - Dear ImGui is a "single pass" rasterizing implementation of the IMGUI paradigm, aimed at ease of use and high-performances.
   For every application frame, your UI code will be called only once. This is in contrast to e.g. Unity's implementation of an IMGUI,
   where the UI code is called multiple times ("multiple passes") from a single entry point. There are pros and cons to both approaches.
 - Our origin is on the top-left. In axis aligned bounding boxes, Min = top-left, Max = bottom-right.
 - This codebase is also optimized to yield decent performances with typical "Debug" builds settings.
 - Please make sure you have asserts enabled (IM_ASSERT redirects to assert() by default, but can be redirected).
   If you get an assert, read the messages and comments around the assert.
 - C++: this is a very C-ish codebase: we don't rely on C++11, we don't include any C++ headers, and ImGui:: is a namespace.
 - C++: ImVec2/ImVec4 do not expose math operators by default, because it is expected that you use your own math types.
   See FAQ "How can I use my own math types instead of ImVec2/ImVec4?" for details about setting up imconfig.h for that.
   However, imgui_internal.h can optionally export math operators for ImVec2/ImVec4, which we use in this codebase.
 - C++: pay attention that ImVector<> manipulates plain-old-data and does not honor construction/destruction (avoid using it in your code!).


 HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
 ----------------------------------------------
 - Overwrite all the sources files except for imconfig.h (if you have modified your copy of imconfig.h)
 - Or maintain your own branch where you have imconfig.h modified as a top-most commit which you can regularly rebase over "master".
 - You can also use '#define IMGUI_USER_CONFIG "my_config_file.h" to redirect configuration to your own file.
 - Read the "API BREAKING CHANGES" section (below). This is where we list occasional API breaking changes.
   If a function/type has been renamed / or marked obsolete, try to fix the name in your code before it is permanently removed
   from the public API. If you have a problem with a missing function/symbols, search for its name in the code, there will
   likely be a comment about it. Please report any issue to the GitHub page!
 - To find out usage of old API, you can add '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in your configuration file.
 - Try to keep your copy of Dear ImGui reasonably up to date.


 GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
 ---------------------------------------------------------------
 - Run and study the examples and demo in imgui_demo.cpp to get acquainted with the library.
 - In the majority of cases you should be able to use unmodified backends files available in the backends/ folder.
 - Add the Dear ImGui source files + selected backend source files to your projects or using your preferred build system.
   It is recommended you build and statically link the .cpp files as part of your project and NOT as a shared library (DLL).
 - You can later customize the imconfig.h file to tweak some compile-time behavior, such as integrating Dear ImGui types with your own maths types.
 - When using Dear ImGui, your programming IDE is your friend: follow the declaration of variables, functions and types to find comments about them.
 - Dear ImGui never touches or knows about your GPU state. The only function that knows about GPU is the draw function that you provide.
   Effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render"
   phases of your own application. All rendering information is stored into command-lists that you will retrieve after calling ImGui::Render().
 - Refer to the backends and demo applications in the examples/ folder for instruction on how to setup your code.
 - If you are running over a standard OS with a common graphics API, you should be able to use unmodified imgui_impl_*** files from the examples/ folder.


 HOW A SIMPLE APPLICATION MAY LOOK LIKE
 --------------------------------------
 EXHIBIT 1: USING THE EXAMPLE BACKENDS (= imgui_impl_XXX.cpp files from the backends/ folder).
 The sub-folders in examples/ contain examples applications following this structure.

     // Application init: create a dear imgui context, setup some options, load fonts
     ImGui::CreateContext();
     ImGuiIO& io = ImGui::GetIO();
     // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls.
     // TODO: Fill optional fields of the io structure later.
     // TODO: Load TTF/OTF fonts if you don't want to use the default font.

     // Initialize helper Platform and Renderer backends (here we are using imgui_impl_win32.cpp and imgui_impl_dx11.cpp)
     ImGui_ImplWin32_Init(hwnd);
     ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);

     // Application main loop
     while (true)
     {
         // Feed inputs to dear imgui, start new frame
         ImGui_ImplDX11_NewFrame();
         ImGui_ImplWin32_NewFrame();
         ImGui::NewFrame();

         // Any application code here
         ImGui::Text("Hello, world!");

         // Render dear imgui into screen
         ImGui::Render();
         ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
         g_pSwapChain->Present(1, 0);
     }

     // Shutdown
     ImGui_ImplDX11_Shutdown();
     ImGui_ImplWin32_Shutdown();
     ImGui::DestroyContext();

 EXHIBIT 2: IMPLEMENTING CUSTOM BACKEND / CUSTOM ENGINE

     // Application init: create a dear imgui context, setup some options, load fonts
     ImGui::CreateContext();
     ImGuiIO& io = ImGui::GetIO();
     // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls.
     // TODO: Fill optional fields of the io structure later.
     // TODO: Load TTF/OTF fonts if you don't want to use the default font.

     // Build and load the texture atlas into a texture
     // (In the examples/ app this is usually done within the ImGui_ImplXXX_Init() function from one of the demo Renderer)
     int width, height;
     unsigned char* pixels = NULL;
     io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);

     // At this point you've got the texture data and you need to upload that to your graphic system:
     // After we have created the texture, store its pointer/identifier (_in whichever format your engine uses_) in 'io.Fonts->TexID'.
     // This will be passed back to your via the renderer. Basically ImTextureID == void*. Read FAQ for details about ImTextureID.
     MyTexture* texture = MyEngine::CreateTextureFromMemoryPixels(pixels, width, height, TEXTURE_TYPE_RGBA32)
     io.Fonts->SetTexID((void*)texture);

     // Application main loop
     while (true)
     {
        // Setup low-level inputs, e.g. on Win32: calling GetKeyboardState(), or write to those fields from your Windows message handlers, etc.
        // (In the examples/ app this is usually done within the ImGui_ImplXXX_NewFrame() function from one of the demo Platform Backends)
        io.DeltaTime = 1.0f/60.0f;              // set the time elapsed since the previous frame (in seconds)
        io.DisplaySize.x = 1920.0f;             // set the current display width
        io.DisplaySize.y = 1280.0f;             // set the current display height here
        io.MousePos = my_mouse_pos;             // set the mouse position
        io.MouseDown[0] = my_mouse_buttons[0];  // set the mouse button states
        io.MouseDown[1] = my_mouse_buttons[1];

        // Call NewFrame(), after this point you can use ImGui::* functions anytime
        // (So you want to try calling NewFrame() as early as you can in your main loop to be able to use Dear ImGui everywhere)
        ImGui::NewFrame();

        // Most of your application code here
        ImGui::Text("Hello, world!");
        MyGameUpdate(); // may use any Dear ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End();
        MyGameRender(); // may use any Dear ImGui functions as well!

        // Render dear imgui, swap buffers
        // (You want to try calling EndFrame/Render as late as you can, to be able to use Dear ImGui in your own game rendering code)
        ImGui::EndFrame();
        ImGui::Render();
        ImDrawData* draw_data = ImGui::GetDrawData();
        MyImGuiRenderFunction(draw_data);
        SwapBuffers();
     }

     // Shutdown
     ImGui::DestroyContext();

 To decide whether to dispatch mouse/keyboard inputs to Dear ImGui to the rest of your application,
 you should read the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags!
 Please read the FAQ and example applications for details about this!


 HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
 ---------------------------------------------
 The backends in impl_impl_XXX.cpp files contain many working implementations of a rendering function.

    void void MyImGuiRenderFunction(ImDrawData* draw_data)
    {
       // TODO: Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled
       // TODO: Setup viewport covering draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
       // TODO: Setup orthographic projection matrix cover draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
       // TODO: Setup shader: vertex { float2 pos, float2 uv, u32 color }, fragment shader sample color from 1 texture, multiply by vertex color.
       for (int n = 0; n < draw_data->CmdListsCount; n++)
       {
          const ImDrawList* cmd_list = draw_data->CmdLists[n];
          const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data;  // vertex buffer generated by Dear ImGui
          const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data;   // index buffer generated by Dear ImGui
          for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
          {
             const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
             if (pcmd->UserCallback)
             {
                 pcmd->UserCallback(cmd_list, pcmd);
             }
             else
             {
                 // The texture for the draw call is specified by pcmd->GetTexID().
                 // The vast majority of draw calls will use the Dear ImGui texture atlas, which value you have set yourself during initialization.
                 MyEngineBindTexture((MyTexture*)pcmd->GetTexID());

                 // We are using scissoring to clip some objects. All low-level graphics API should support it.
                 // - If your engine doesn't support scissoring yet, you may ignore this at first. You will get some small glitches
                 //   (some elements visible outside their bounds) but you can fix that once everything else works!
                 // - Clipping coordinates are provided in imgui coordinates space:
                 //   - For a given viewport, draw_data->DisplayPos == viewport->Pos and draw_data->DisplaySize == viewport->Size
                 //   - In a single viewport application, draw_data->DisplayPos == (0,0) and draw_data->DisplaySize == io.DisplaySize, but always use GetMainViewport()->Pos/Size instead of hardcoding those values.
                 //   - In the interest of supporting multi-viewport applications (see 'docking' branch on github),
                 //     always subtract draw_data->DisplayPos from clipping bounds to convert them to your viewport space.
                 // - Note that pcmd->ClipRect contains Min+Max bounds. Some graphics API may use Min+Max, other may use Min+Size (size being Max-Min)
                 ImVec2 pos = draw_data->DisplayPos;
                 MyEngineScissor((int)(pcmd->ClipRect.x - pos.x), (int)(pcmd->ClipRect.y - pos.y), (int)(pcmd->ClipRect.z - pos.x), (int)(pcmd->ClipRect.w - pos.y));

                 // Render 'pcmd->ElemCount/3' indexed triangles.
                 // By default the indices ImDrawIdx are 16-bit, you can change them to 32-bit in imconfig.h if your engine doesn't support 16-bit indices.
                 MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer, vtx_buffer);
             }
             idx_buffer += pcmd->ElemCount;
          }
       }
    }


 USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
 ------------------------------------------
 - The gamepad/keyboard navigation is fairly functional and keeps being improved.
 - Gamepad support is particularly useful to use Dear ImGui on a console system (e.g. PS4, Switch, XB1) without a mouse!
 - You can ask questions and report issues at https://github.com/ocornut/imgui/issues/787
 - The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable.
 - Keyboard:
    - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable.
      NewFrame() will automatically fill io.NavInputs[] based on your io.KeysDown[] + io.KeyMap[] arrays.
    - When keyboard navigation is active (io.NavActive + ImGuiConfigFlags_NavEnableKeyboard), the io.WantCaptureKeyboard flag
      will be set. For more advanced uses, you may want to read from:
       - io.NavActive: true when a window is focused and it doesn't have the ImGuiWindowFlags_NoNavInputs flag set.
       - io.NavVisible: true when the navigation cursor is visible (and usually goes false when mouse is used).
       - or query focus information with e.g. IsWindowFocused(ImGuiFocusedFlags_AnyWindow), IsItemFocused() etc. functions.
      Please reach out if you think the game vs navigation input sharing could be improved.
 - Gamepad:
    - Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable.
    - Backend: Set io.BackendFlags |= ImGuiBackendFlags_HasGamepad + fill the io.NavInputs[] fields before calling NewFrame().
      Note that io.NavInputs[] is cleared by EndFrame().
    - See 'enum ImGuiNavInput_' in imgui.h for a description of inputs. For each entry of io.NavInputs[], set the following values:
         0.0f= not held. 1.0f= fully held. Pass intermediate 0.0f..1.0f values for analog triggers/sticks.
    - We use a simple >0.0f test for activation testing, and won't attempt to test for a dead-zone.
      Your code will probably need to transform your raw inputs (such as e.g. remapping your 0.2..0.9 raw input range to 0.0..1.0 imgui range, etc.).
    - You can download PNG/PSD files depicting the gamepad controls for common controllers at: http://dearimgui.org/controls_sheets
    - If you need to share inputs between your game and the imgui parts, the easiest approach is to go all-or-nothing, with a buttons combo
      to toggle the target. Please reach out if you think the game vs navigation input sharing could be improved.
 - Mouse:
    - PS4 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback.
    - Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard.
    - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag.
      Enabling ImGuiConfigFlags_NavEnableSetMousePos + ImGuiBackendFlags_HasSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements.
      When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantSetMousePos' to notify you that it wants the mouse cursor to be moved.
      When that happens your backend NEEDS to move the OS or underlying mouse cursor on the next frame. Some of the backends in examples/ do that.
      (If you set the NavEnableSetMousePos flag but don't honor 'io.WantSetMousePos' properly, imgui will misbehave as it will see your mouse moving back and forth!)
      (In a setup when you may not have easy control over the mouse cursor, e.g. uSynergy.c doesn't expose moving remote mouse cursor, you may want
       to set a boolean to ignore your other external mouse positions until the external source is moved again.)


 API BREAKING CHANGES
 ====================

 Occasionally introducing changes that are breaking the API. We try to make the breakage minor and easy to fix.
 Below is a change-log of API breaking changes only. If you are using one of the functions listed, expect to have to fix some code.
 When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
 You can read releases logs https://github.com/ocornut/imgui/releases for more details.

 - 2021/07/26 (1.84) - commented out redirecting functions/enums names that were marked obsolete in 1.67 and 1.69 (March 2019):
                        - ImGui::GetOverlayDrawList() -> use ImGui::GetForegroundDrawList()
                        - ImFont::GlyphRangesBuilder  -> use ImFontGlyphRangesBuilder
 - 2021/05/19 (1.83) - backends: obsoleted direct access to ImDrawCmd::TextureId in favor of calling ImDrawCmd::GetTexID().
                        - if you are using official backends from the source tree: you have nothing to do.
                        - if you have copied old backend code or using your own: change access to draw_cmd->TextureId to draw_cmd->GetTexID().
 - 2021/03/12 (1.82) - upgraded ImDrawList::AddRect(), AddRectFilled(), PathRect() to use ImDrawFlags instead of ImDrawCornersFlags.
                        - ImDrawCornerFlags_TopLeft  -> use ImDrawFlags_RoundCornersTopLeft
                        - ImDrawCornerFlags_BotRight -> use ImDrawFlags_RoundCornersBottomRight
                        - ImDrawCornerFlags_None     -> use ImDrawFlags_RoundCornersNone etc.
                       flags now sanely defaults to 0 instead of 0x0F, consistent with all other flags in the API.
                       breaking: the default with rounding > 0.0f is now "round all corners" vs old implicit "round no corners":
                        - rounding == 0.0f + flags == 0 --> meant no rounding  --> unchanged (common use)
                        - rounding  > 0.0f + flags != 0 --> meant rounding     --> unchanged (common use)
                        - rounding == 0.0f + flags != 0 --> meant no rounding  --> unchanged (unlikely use)
                        - rounding  > 0.0f + flags == 0 --> meant no rounding  --> BREAKING (unlikely use): will now round all corners --> use ImDrawFlags_RoundCornersNone or rounding == 0.0f.
                       this ONLY matters for hard coded use of 0 + rounding > 0.0f. Use of named ImDrawFlags_RoundCornersNone (new) or ImDrawCornerFlags_None (old) are ok.
                       the old ImDrawCornersFlags used awkward default values of ~0 or 0xF (4 lower bits set) to signify "round all corners" and we sometimes encouraged using them as shortcuts.
                       legacy path still support use of hard coded ~0 or any value from 0x1 or 0xF. They will behave the same with legacy paths enabled (will assert otherwise).
 - 2021/03/11 (1.82) - removed redirecting functions/enums names that were marked obsolete in 1.66 (September 2018):
                        - ImGui::SetScrollHere()              -> use ImGui::SetScrollHereY()
 - 2021/03/11 (1.82) - clarified that ImDrawList::PathArcTo(), ImDrawList::PathArcToFast() won't render with radius < 0.0f. Previously it sorts of accidentally worked but would generally lead to counter-clockwise paths and have an effect on anti-aliasing.
 - 2021/03/10 (1.82) - upgraded ImDrawList::AddPolyline() and PathStroke() "bool closed" parameter to "ImDrawFlags flags". The matching ImDrawFlags_Closed value is guaranteed to always stay == 1 in the future.
 - 2021/02/22 (1.82) - (*undone in 1.84*) win32+mingw: Re-enabled IME functions by default even under MinGW. In July 2016, issue #738 had me incorrectly disable those default functions for MinGW. MinGW users should: either link with -limm32, either set their imconfig file  with '#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS'.
 - 2021/02/17 (1.82) - renamed rarely used style.CircleSegmentMaxError (old default = 1.60f) to style.CircleTessellationMaxError (new default = 0.30f) as the meaning of the value changed.
 - 2021/02/03 (1.81) - renamed ListBoxHeader(const char* label, ImVec2 size) to BeginListBox(). Kept inline redirection function (will obsolete).
                     - removed ListBoxHeader(const char* label, int items_count, int height_in_items = -1) in favor of specifying size. Kept inline redirection function (will obsolete).
                     - renamed ListBoxFooter() to EndListBox(). Kept inline redirection function (will obsolete).
 - 2021/01/26 (1.81) - removed ImGuiFreeType::BuildFontAtlas(). Kept inline redirection function. Prefer using '#define IMGUI_ENABLE_FREETYPE', but there's a runtime selection path available too. The shared extra flags parameters (very rarely used) are now stored in ImFontAtlas::FontBuilderFlags.
                     - renamed ImFontConfig::RasterizerFlags (used by FreeType) to ImFontConfig::FontBuilderFlags.
                     - renamed ImGuiFreeType::XXX flags to ImGuiFreeTypeBuilderFlags_XXX for consistency with other API.
 - 2020/10/12 (1.80) - removed redirecting functions/enums that were marked obsolete in 1.63 (August 2018):
                        - ImGui::IsItemDeactivatedAfterChange() -> use ImGui::IsItemDeactivatedAfterEdit().
                        - ImGuiCol_ModalWindowDarkening       -> use ImGuiCol_ModalWindowDimBg
                        - ImGuiInputTextCallback              -> use ImGuiTextEditCallback
                        - ImGuiInputTextCallbackData          -> use ImGuiTextEditCallbackData
 - 2020/12/21 (1.80) - renamed ImDrawList::AddBezierCurve() to AddBezierCubic(), and PathBezierCurveTo() to PathBezierCubicCurveTo(). Kept inline redirection function (will obsolete).
 - 2020/12/04 (1.80) - added imgui_tables.cpp file! Manually constructed project files will need the new file added!
 - 2020/11/18 (1.80) - renamed undocumented/internals ImGuiColumnsFlags_* to ImGuiOldColumnFlags_* in prevision of incoming Tables API.
 - 2020/11/03 (1.80) - renamed io.ConfigWindowsMemoryCompactTimer to io.ConfigMemoryCompactTimer as the feature will apply to other data structures
 - 2020/10/14 (1.80) - backends: moved all backends files (imgui_impl_XXXX.cpp, imgui_impl_XXXX.h) from examples/ to backends/.
 - 2020/10/12 (1.80) - removed redirecting functions/enums that were marked obsolete in 1.60 (April 2018):
                        - io.RenderDrawListsFn pointer        -> use ImGui::GetDrawData() value and call the render function of your backend
                        - ImGui::IsAnyWindowFocused()         -> use ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow)
                        - ImGui::IsAnyWindowHovered()         -> use ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow)
                        - ImGuiStyleVar_Count_                -> use ImGuiStyleVar_COUNT
                        - ImGuiMouseCursor_Count_             -> use ImGuiMouseCursor_COUNT
                      - removed redirecting functions names that were marked obsolete in 1.61 (May 2018):
                        - InputFloat (... int decimal_precision ...) -> use InputFloat (... const char* format ...) with format = "%.Xf" where X is your value for decimal_precision.
                        - same for InputFloat2()/InputFloat3()/InputFloat4() variants taking a `int decimal_precision` parameter.
 - 2020/10/05 (1.79) - removed ImGuiListClipper: Renamed constructor parameters which created an ambiguous alternative to using the ImGuiListClipper::Begin() function, with misleading edge cases (note: imgui_memory_editor <0.40 from imgui_club/ used this old clipper API. Update your copy if needed).
 - 2020/09/25 (1.79) - renamed ImGuiSliderFlags_ClampOnInput to ImGuiSliderFlags_AlwaysClamp. Kept redirection enum (will obsolete sooner because previous name was added recently).
 - 2020/09/25 (1.79) - renamed style.TabMinWidthForUnselectedCloseButton to style.TabMinWidthForCloseButton.
 - 2020/09/21 (1.79) - renamed OpenPopupContextItem() back to OpenPopupOnItemClick(), reverting the change from 1.77. For varieties of reason this is more self-explanatory.
 - 2020/09/21 (1.79) - removed return value from OpenPopupOnItemClick() - returned true on mouse release on an item - because it is inconsistent with other popup APIs and makes others misleading. It's also and unnecessary: you can use IsWindowAppearing() after BeginPopup() for a similar result.
 - 2020/09/17 (1.79) - removed ImFont::DisplayOffset in favor of ImFontConfig::GlyphOffset. DisplayOffset was applied after scaling and not very meaningful/useful outside of being needed by the default ProggyClean font. If you scaled this value after calling AddFontDefault(), this is now done automatically. It was also getting in the way of better font scaling, so let's get rid of it now!
 - 2020/08/17 (1.78) - obsoleted use of the trailing 'float power=1.0f' parameter for DragFloat(), DragFloat2(), DragFloat3(), DragFloat4(), DragFloatRange2(), DragScalar(), DragScalarN(), SliderFloat(), SliderFloat2(), SliderFloat3(), SliderFloat4(), SliderScalar(), SliderScalarN(), VSliderFloat() and VSliderScalar().
                       replaced the 'float power=1.0f' argument with integer-based flags defaulting to 0 (as with all our flags).
                       worked out a backward-compatibility scheme so hopefully most C++ codebase should not be affected. in short, when calling those functions:
                       - if you omitted the 'power' parameter (likely!), you are not affected.
                       - if you set the 'power' parameter to 1.0f (same as previous default value): 1/ your compiler may warn on float>int conversion, 2/ everything else will work. 3/ you can replace the 1.0f value with 0 to fix the warning, and be technically correct.
                       - if you set the 'power' parameter to >1.0f (to enable non-linear editing): 1/ your compiler may warn on float>int conversion, 2/ code will assert at runtime, 3/ in case asserts are disabled, the code will not crash and enable the _Logarithmic flag. 4/ you can replace the >1.0f value with ImGuiSliderFlags_Logarithmic to fix the warning/assert and get a _similar_ effect as previous uses of power >1.0f.
                       see https://github.com/ocornut/imgui/issues/3361 for all details.
                       kept inline redirection functions (will obsolete) apart for: DragFloatRange2(), VSliderFloat(), VSliderScalar(). For those three the 'float power=1.0f' version was removed directly as they were most unlikely ever used.
                       for shared code, you can version check at compile-time with `#if IMGUI_VERSION_NUM >= 17704`.
                     - obsoleted use of v_min > v_max in DragInt, DragFloat, DragScalar to lock edits (introduced in 1.73, was not demoed nor documented very), will be replaced by a more generic ReadOnly feature. You may use the ImGuiSliderFlags_ReadOnly internal flag in the meantime.
 - 2020/06/23 (1.77) - removed BeginPopupContextWindow(const char*, int mouse_button, bool also_over_items) in favor of BeginPopupContextWindow(const char*, ImGuiPopupFlags flags) with ImGuiPopupFlags_NoOverItems.
 - 2020/06/15 (1.77) - renamed OpenPopupOnItemClick() to OpenPopupContextItem(). Kept inline redirection function (will obsolete). [NOTE: THIS WAS REVERTED IN 1.79]
 - 2020/06/15 (1.77) - removed CalcItemRectClosestPoint() entry point which was made obsolete and asserting in December 2017.
 - 2020/04/23 (1.77) - removed unnecessary ID (first arg) of ImFontAtlas::AddCustomRectRegular().
 - 2020/01/22 (1.75) - ImDrawList::AddCircle()/AddCircleFilled() functions don't accept negative radius any more.
 - 2019/12/17 (1.75) - [undid this change in 1.76] made Columns() limited to 64 columns by asserting above that limit. While the current code technically supports it, future code may not so we're putting the restriction ahead.
 - 2019/12/13 (1.75) - [imgui_internal.h] changed ImRect() default constructor initializes all fields to 0.0f instead of (FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX). If you used ImRect::Add() to create bounding boxes by adding multiple points into it, you may need to fix your initial value.
 - 2019/12/08 (1.75) - removed redirecting functions/enums that were marked obsolete in 1.53 (December 2017):
                       - ShowTestWindow()                    -> use ShowDemoWindow()
                       - IsRootWindowFocused()               -> use IsWindowFocused(ImGuiFocusedFlags_RootWindow)
                       - IsRootWindowOrAnyChildFocused()     -> use IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows)
                       - SetNextWindowContentWidth(w)        -> use SetNextWindowContentSize(ImVec2(w, 0.0f)
                       - GetItemsLineHeightWithSpacing()     -> use GetFrameHeightWithSpacing()
                       - ImGuiCol_ChildWindowBg              -> use ImGuiCol_ChildBg
                       - ImGuiStyleVar_ChildWindowRounding   -> use ImGuiStyleVar_ChildRounding
                       - ImGuiTreeNodeFlags_AllowOverlapMode -> use ImGuiTreeNodeFlags_AllowItemOverlap
                       - IMGUI_DISABLE_TEST_WINDOWS          -> use IMGUI_DISABLE_DEMO_WINDOWS
 - 2019/12/08 (1.75) - obsoleted calling ImDrawList::PrimReserve() with a negative count (which was vaguely documented and rarely if ever used). Instead, we added an explicit PrimUnreserve() API.
 - 2019/12/06 (1.75) - removed implicit default parameter to IsMouseDragging(int button = 0) to be consistent with other mouse functions (none of the other functions have it).
 - 2019/11/21 (1.74) - ImFontAtlas::AddCustomRectRegular() now requires an ID larger than 0x110000 (instead of 0x10000) to conform with supporting Unicode planes 1-16 in a future update. ID below 0x110000 will now assert.
 - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS to IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS for consistency.
 - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_MATH_FUNCTIONS to IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS for consistency.
 - 2019/10/22 (1.74) - removed redirecting functions/enums that were marked obsolete in 1.52 (October 2017):
                       - Begin() [old 5 args version]        -> use Begin() [3 args], use SetNextWindowSize() SetNextWindowBgAlpha() if needed
                       - IsRootWindowOrAnyChildHovered()     -> use IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows)
                       - AlignFirstTextHeightToWidgets()     -> use AlignTextToFramePadding()
                       - SetNextWindowPosCenter()            -> use SetNextWindowPos() with a pivot of (0.5f, 0.5f)
                       - ImFont::Glyph                       -> use ImFontGlyph
 - 2019/10/14 (1.74) - inputs: Fixed a miscalculation in the keyboard/mouse "typematic" repeat delay/rate calculation, used by keys and e.g. repeating mouse buttons as well as the GetKeyPressedAmount() function.
                       if you were using a non-default value for io.KeyRepeatRate (previous default was 0.250), you can add +io.KeyRepeatDelay to it to compensate for the fix.
                       The function was triggering on: 0.0 and (delay+rate*N) where (N>=1). Fixed formula responds to (N>=0). Effectively it made io.KeyRepeatRate behave like it was set to (io.KeyRepeatRate + io.KeyRepeatDelay).
                       If you never altered io.KeyRepeatRate nor used GetKeyPressedAmount() this won't affect you.
 - 2019/07/15 (1.72) - removed TreeAdvanceToLabelPos() which is rarely used and only does SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()). Kept redirection function (will obsolete).
 - 2019/07/12 (1.72) - renamed ImFontAtlas::CustomRect to ImFontAtlasCustomRect. Kept redirection typedef (will obsolete).
 - 2019/06/14 (1.72) - removed redirecting functions/enums names that were marked obsolete in 1.51 (June 2017): ImGuiCol_Column*, ImGuiSetCond_*, IsItemHoveredRect(), IsPosHoveringAnyWindow(), IsMouseHoveringAnyWindow(), IsMouseHoveringWindow(), IMGUI_ONCE_UPON_A_FRAME. Grep this log for details and new names, or see how they were implemented until 1.71.
 - 2019/06/07 (1.71) - rendering of child window outer decorations (bg color, border, scrollbars) is now performed as part of the parent window. If you have
                       overlapping child windows in a same parent, and relied on their relative z-order to be mapped to their submission order, this will affect your rendering.
                       This optimization is disabled if the parent window has no visual output, because it appears to be the most common situation leading to the creation of overlapping child windows.
                       Please reach out if you are affected.
 - 2019/05/13 (1.71) - renamed SetNextTreeNodeOpen() to SetNextItemOpen(). Kept inline redirection function (will obsolete).
 - 2019/05/11 (1.71) - changed io.AddInputCharacter(unsigned short c) signature to io.AddInputCharacter(unsigned int c).
 - 2019/04/29 (1.70) - improved ImDrawList thick strokes (>1.0f) preserving correct thickness up to 90 degrees angles (e.g. rectangles). If you have custom rendering using thick lines, they will appear thicker now.
 - 2019/04/29 (1.70) - removed GetContentRegionAvailWidth(), use GetContentRegionAvail().x instead. Kept inline redirection function (will obsolete).
 - 2019/03/04 (1.69) - renamed GetOverlayDrawList() to GetForegroundDrawList(). Kept redirection function (will obsolete).
 - 2019/02/26 (1.69) - renamed ImGuiColorEditFlags_RGB/ImGuiColorEditFlags_HSV/ImGuiColorEditFlags_HEX to ImGuiColorEditFlags_DisplayRGB/ImGuiColorEditFlags_DisplayHSV/ImGuiColorEditFlags_DisplayHex. Kept redirection enums (will obsolete).
 - 2019/02/14 (1.68) - made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame). If for some reason your time step calculation gives you a zero value, replace it with an arbitrarily small value!
 - 2019/02/01 (1.68) - removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
 - 2019/01/06 (1.67) - renamed io.InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead!
 - 2019/01/06 (1.67) - renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Kept redirection typedef (will obsolete).
 - 2018/12/20 (1.67) - made it illegal to call Begin("") with an empty string. This somehow half-worked before but had various undesirable side-effects.
 - 2018/12/10 (1.67) - renamed io.ConfigResizeWindowsFromEdges to io.ConfigWindowsResizeFromEdges as we are doing a large pass on configuration flags.
 - 2018/10/12 (1.66) - renamed misc/stl/imgui_stl.* to misc/cpp/imgui_stdlib.* in prevision for other C++ helper files.
 - 2018/09/28 (1.66) - renamed SetScrollHere() to SetScrollHereY(). Kept redirection function (will obsolete).
 - 2018/09/06 (1.65) - renamed stb_truetype.h to imstb_truetype.h, stb_textedit.h to imstb_textedit.h, and stb_rect_pack.h to imstb_rectpack.h.
                       If you were conveniently using the imgui copy of those STB headers in your project you will have to update your include paths.
 - 2018/09/05 (1.65) - renamed io.OptCursorBlink/io.ConfigCursorBlink to io.ConfigInputTextCursorBlink. (#1427)
 - 2018/08/31 (1.64) - added imgui_widgets.cpp file, extracted and moved widgets code out of imgui.cpp into imgui_widgets.cpp. Re-ordered some of the code remaining in imgui.cpp.
                       NONE OF THE FUNCTIONS HAVE CHANGED. THE CODE IS SEMANTICALLY 100% IDENTICAL, BUT _EVERY_ FUNCTION HAS BEEN MOVED.
                       Because of this, any local modifications to imgui.cpp will likely conflict when you update. Read docs/CHANGELOG.txt for suggestions.
 - 2018/08/22 (1.63) - renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API. Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent).
 - 2018/08/21 (1.63) - renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData for consistency. Kept redirection types (will obsolete).
 - 2018/08/21 (1.63) - removed ImGuiInputTextCallbackData::ReadOnly since it is a duplication of (ImGuiInputTextCallbackData::Flags & ImGuiInputTextFlags_ReadOnly).
 - 2018/08/01 (1.63) - removed per-window ImGuiWindowFlags_ResizeFromAnySide beta flag in favor of a global io.ConfigResizeWindowsFromEdges [update 1.67 renamed to ConfigWindowsResizeFromEdges] to enable the feature.
 - 2018/08/01 (1.63) - renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to ConfigMacOSXBehaviors for consistency.
 - 2018/07/22 (1.63) - changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecisions over time.
 - 2018/07/08 (1.63) - style: renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features. Kept redirection enum (will obsolete).
 - 2018/06/08 (1.62) - examples: the imgui_impl_XXX files have been split to separate platform (Win32, GLFW, SDL2, etc.) from renderer (DX11, OpenGL, Vulkan,  etc.).
                       old backends will still work as is, however prefer using the separated backends as they will be updated to support multi-viewports.
                       when adopting new backends follow the main.cpp code of your preferred examples/ folder to know which functions to call.
                       in particular, note that old backends called ImGui::NewFrame() at the end of their ImGui_ImplXXXX_NewFrame() function.
 - 2018/06/06 (1.62) - renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish other variants and discourage using the full set.
 - 2018/06/06 (1.62) - TreeNodeEx()/TreeNodeBehavior(): the ImGuiTreeNodeFlags_CollapsingHeader helper now include the ImGuiTreeNodeFlags_NoTreePushOnOpen flag. See Changelog for details.
 - 2018/05/03 (1.61) - DragInt(): the default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally any more.
                       If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format.
                       To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d, giving time to users to upgrade their code.
                       If you have IMGUI_DISABLE_OBSOLETE_FUNCTIONS enabled, the code will instead assert! You may run a reg-exp search on your codebase for e.g. "DragInt.*%f" to help you find them.
 - 2018/04/28 (1.61) - obsoleted InputFloat() functions taking an optional "int decimal_precision" in favor of an equivalent and more flexible "const char* format",
                       consistent with other functions. Kept redirection functions (will obsolete).
 - 2018/04/09 (1.61) - IM_DELETE() helper function added in 1.60 doesn't clear the input _pointer_ reference, more consistent with expectation and allows passing r-value.
 - 2018/03/20 (1.60) - renamed io.WantMoveMouse to io.WantSetMousePos for consistency and ease of understanding (was added in 1.52, _not_ used by core and only honored by some backend ahead of merging the Nav branch).
 - 2018/03/12 (1.60) - removed ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered as the closing cross uses regular button colors now.
 - 2018/03/08 (1.60) - changed ImFont::DisplayOffset.y to default to 0 instead of +1. Fixed rounding of Ascent/Descent to match TrueType renderer. If you were adding or subtracting to ImFont::DisplayOffset check if your fonts are correctly aligned vertically.
 - 2018/03/03 (1.60) - renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums.
 - 2018/02/18 (1.60) - BeginDragDropSource(): temporarily removed the optional mouse_button=0 parameter because it is not really usable in many situations at the moment.
 - 2018/02/16 (1.60) - obsoleted the io.RenderDrawListsFn callback, you can call your graphics engine render function after ImGui::Render(). Use ImGui::GetDrawData() to retrieve the ImDrawData* to display.
 - 2018/02/07 (1.60) - reorganized context handling to be more explicit,
                       - YOU NOW NEED TO CALL ImGui::CreateContext() AT THE BEGINNING OF YOUR APP, AND CALL ImGui::DestroyContext() AT THE END.
                       - removed Shutdown() function, as DestroyContext() serve this purpose.
                       - you may pass a ImFontAtlas* pointer to CreateContext() to share a font atlas between contexts. Otherwise CreateContext() will create its own font atlas instance.
                       - removed allocator parameters from CreateContext(), they are now setup with SetAllocatorFunctions(), and shared by all contexts.
                       - removed the default global context and font atlas instance, which were confusing for users of DLL reloading and users of multiple contexts.
 - 2018/01/31 (1.60) - moved sample TTF files from extra_fonts/ to misc/fonts/. If you loaded files directly from the imgui repo you may need to update your paths.
 - 2018/01/11 (1.60) - obsoleted IsAnyWindowHovered() in favor of IsWindowHovered(ImGuiHoveredFlags_AnyWindow). Kept redirection function (will obsolete).
 - 2018/01/11 (1.60) - obsoleted IsAnyWindowFocused() in favor of IsWindowFocused(ImGuiFocusedFlags_AnyWindow). Kept redirection function (will obsolete).
 - 2018/01/03 (1.60) - renamed ImGuiSizeConstraintCallback to ImGuiSizeCallback, ImGuiSizeConstraintCallbackData to ImGuiSizeCallbackData.
 - 2017/12/29 (1.60) - removed CalcItemRectClosestPoint() which was weird and not really used by anyone except demo code. If you need it it's easy to replicate on your side.
 - 2017/12/24 (1.53) - renamed the emblematic ShowTestWindow() function to ShowDemoWindow(). Kept redirection function (will obsolete).
 - 2017/12/21 (1.53) - ImDrawList: renamed style.AntiAliasedShapes to style.AntiAliasedFill for consistency and as a way to explicitly break code that manipulate those flag at runtime. You can now manipulate ImDrawList::Flags
 - 2017/12/21 (1.53) - ImDrawList: removed 'bool anti_aliased = true' final parameter of ImDrawList::AddPolyline() and ImDrawList::AddConvexPolyFilled(). Prefer manipulating ImDrawList::Flags if you need to toggle them during the frame.
 - 2017/12/14 (1.53) - using the ImGuiWindowFlags_NoScrollWithMouse flag on a child window forwards the mouse wheel event to the parent window, unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set.
 - 2017/12/13 (1.53) - renamed GetItemsLineHeightWithSpacing() to GetFrameHeightWithSpacing(). Kept redirection function (will obsolete).
 - 2017/12/13 (1.53) - obsoleted IsRootWindowFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootWindow). Kept redirection function (will obsolete).
                     - obsoleted IsRootWindowOrAnyChildFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows). Kept redirection function (will obsolete).
 - 2017/12/12 (1.53) - renamed ImGuiTreeNodeFlags_AllowOverlapMode to ImGuiTreeNodeFlags_AllowItemOverlap. Kept redirection enum (will obsolete).
 - 2017/12/10 (1.53) - removed SetNextWindowContentWidth(), prefer using SetNextWindowContentSize(). Kept redirection function (will obsolete).
 - 2017/11/27 (1.53) - renamed ImGuiTextBuffer::append() helper to appendf(), appendv() to appendfv(). If you copied the 'Log' demo in your code, it uses appendv() so that needs to be renamed.
 - 2017/11/18 (1.53) - Style, Begin: removed ImGuiWindowFlags_ShowBorders window flag. Borders are now fully set up in the ImGuiStyle structure (see e.g. style.FrameBorderSize, style.WindowBorderSize). Use ImGui::ShowStyleEditor() to look them up.
                       Please note that the style system will keep evolving (hopefully stabilizing in Q1 2018), and so custom styles will probably subtly break over time. It is recommended you use the StyleColorsClassic(), StyleColorsDark(), StyleColorsLight() functions.
 - 2017/11/18 (1.53) - Style: removed ImGuiCol_ComboBg in favor of combo boxes using ImGuiCol_PopupBg for consistency.
 - 2017/11/18 (1.53) - Style: renamed ImGuiCol_ChildWindowBg to ImGuiCol_ChildBg.
 - 2017/11/18 (1.53) - Style: renamed style.ChildWindowRounding to style.ChildRounding, ImGuiStyleVar_ChildWindowRounding to ImGuiStyleVar_ChildRounding.
 - 2017/11/02 (1.53) - obsoleted IsRootWindowOrAnyChildHovered() in favor of using IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows);
 - 2017/10/24 (1.52) - renamed IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS to IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS for consistency.
 - 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it.
 - 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details.
                       removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting.
                         IsItemHoveredRect()        --> IsItemHovered(ImGuiHoveredFlags_RectOnly)
                         IsMouseHoveringAnyWindow() --> IsWindowHovered(ImGuiHoveredFlags_AnyWindow)
                         IsMouseHoveringWindow()    --> IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) [weird, old behavior]
 - 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead!
 - 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete).
 - 2017/09/26 (1.52) - renamed ImFont::Glyph to ImFontGlyph. Kept redirection typedef (will obsolete).
 - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete).
 - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your backend if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)".
 - 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete). -> (1.52) use IsItemHovered(ImGuiHoveredFlags_RectOnly)!
                     - renamed IsMouseHoveringAnyWindow() to IsAnyWindowHovered() for consistency. Kept inline redirection function (will obsolete).
                     - renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete).
 - 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency.
 - 2017/08/20 (1.51) - added PushStyleColor(ImGuiCol idx, ImU32 col) overload, which _might_ cause an "ambiguous call" compilation error if you are using ImColor() with implicit cast. Cast to ImU32 or ImVec4 explicily to fix.
 - 2017/08/15 (1.51) - marked the weird IMGUI_ONCE_UPON_A_FRAME helper macro as obsolete. prefer using the more explicit ImGuiOnceUponAFrame type.
 - 2017/08/15 (1.51) - changed parameter order for BeginPopupContextWindow() from (const char*,int buttons,bool also_over_items) to (const char*,int buttons,bool also_over_items). Note that most calls relied on default parameters completely.
 - 2017/08/13 (1.51) - renamed ImGuiCol_Column to ImGuiCol_Separator, ImGuiCol_ColumnHovered to ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive to ImGuiCol_SeparatorActive. Kept redirection enums (will obsolete).
 - 2017/08/11 (1.51) - renamed ImGuiSetCond_Always to ImGuiCond_Always, ImGuiSetCond_Once to ImGuiCond_Once, ImGuiSetCond_FirstUseEver to ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing to ImGuiCond_Appearing. Kept redirection enums (will obsolete).
 - 2017/08/09 (1.51) - removed ValueColor() helpers, they are equivalent to calling Text(label) + SameLine() + ColorButton().
 - 2017/08/08 (1.51) - removed ColorEditMode() and ImGuiColorEditMode in favor of ImGuiColorEditFlags and parameters to the various Color*() functions. The SetColorEditOptions() allows to initialize default but the user can still change them with right-click context menu.
                     - changed prototype of 'ColorEdit4(const char* label, float col[4], bool show_alpha = true)' to 'ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)', where passing flags = 0x01 is a safe no-op (hello dodgy backward compatibility!). - check and run the demo window, under "Color/Picker Widgets", to understand the various new options.
                     - changed prototype of rarely used 'ColorButton(ImVec4 col, bool small_height = false, bool outline_border = true)' to 'ColorButton(const char* desc_id, ImVec4 col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0, 0))'
 - 2017/07/20 (1.51) - removed IsPosHoveringAnyWindow(ImVec2), which was partly broken and misleading. ASSERT + redirect user to io.WantCaptureMouse
 - 2017/05/26 (1.50) - removed ImFontConfig::MergeGlyphCenterV in favor of a more multipurpose ImFontConfig::GlyphOffset.
 - 2017/05/01 (1.50) - renamed ImDrawList::PathFill() (rarely used directly) to ImDrawList::PathFillConvex() for clarity.
 - 2016/11/06 (1.50) - BeginChild(const char*) now applies the stack id to the provided label, consistently with other functions as it should always have been. It shouldn't affect you unless (extremely unlikely) you were appending multiple times to a same child from different locations of the stack id. If that's the case, generate an id with GetID() and use it instead of passing string to BeginChild().
 - 2016/10/15 (1.50) - avoid 'void* user_data' parameter to io.SetClipboardTextFn/io.GetClipboardTextFn pointers. We pass io.ClipboardUserData to it.
 - 2016/09/25 (1.50) - style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc.
 - 2016/07/30 (1.50) - SameLine(x) with x>0.0f is now relative to left of column/group if any, and not always to left of window. This was sort of always the intent and hopefully, breakage should be minimal.
 - 2016/05/12 (1.49) - title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore.
                       If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you, otherwise if <1.0f you need to tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar.
                       This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given the OLD color and the OLD WindowBg color:
                       ImVec4 ConvertTitleBgCol(const ImVec4& win_bg_col, const ImVec4& title_bg_col) { float new_a = 1.0f - ((1.0f - win_bg_col.w) * (1.0f - title_bg_col.w)), k = title_bg_col.w / new_a; return ImVec4((win_bg_col.x * win_bg_col.w + title_bg_col.x) * k, (win_bg_col.y * win_bg_col.w + title_bg_col.y) * k, (win_bg_col.z * win_bg_col.w + title_bg_col.z) * k, new_a); }
                       If this is confusing, pick the RGB value from title bar from an old screenshot and apply this as TitleBg/TitleBgActive. Or you may just create TitleBgActive from a tweaked TitleBg color.
 - 2016/05/07 (1.49) - removed confusing set of GetInternalState(), GetInternalStateSize(), SetInternalState() functions. Now using CreateContext(), DestroyContext(), GetCurrentContext(), SetCurrentContext().
 - 2016/05/02 (1.49) - renamed SetNextTreeNodeOpened() to SetNextTreeNodeOpen(), no redirection.
 - 2016/05/01 (1.49) - obsoleted old signature of CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false) as extra parameters were badly designed and rarely used. You can replace the "default_open = true" flag in new API with CollapsingHeader(label, ImGuiTreeNodeFlags_DefaultOpen).
 - 2016/04/26 (1.49) - changed ImDrawList::PushClipRect(ImVec4 rect) to ImDrawList::PushClipRect(Imvec2 min,ImVec2 max,bool intersect_with_current_clip_rect=false). Note that higher-level ImGui::PushClipRect() is preferable because it will clip at logic/widget level, whereas ImDrawList::PushClipRect() only affect your renderer.
 - 2016/04/03 (1.48) - removed style.WindowFillAlphaDefault setting which was redundant. Bake default BG alpha inside style.Colors[ImGuiCol_WindowBg] and all other Bg color values. (ref GitHub issue #337).
 - 2016/04/03 (1.48) - renamed ImGuiCol_TooltipBg to ImGuiCol_PopupBg, used by popups/menus and tooltips. popups/menus were previously using ImGuiCol_WindowBg. (ref github issue #337)
 - 2016/03/21 (1.48) - renamed GetWindowFont() to GetFont(), GetWindowFontSize() to GetFontSize(). Kept inline redirection function (will obsolete).
 - 2016/03/02 (1.48) - InputText() completion/history/always callbacks: if you modify the text buffer manually (without using DeleteChars()/InsertChars() helper) you need to maintain the BufTextLen field. added an assert.
 - 2016/01/23 (1.48) - fixed not honoring exact width passed to PushItemWidth(), previously it would add extra FramePadding.x*2 over that width. if you had manual pixel-perfect alignment in place it might affect you.
 - 2015/12/27 (1.48) - fixed ImDrawList::AddRect() which used to render a rectangle 1 px too large on each axis.
 - 2015/12/04 (1.47) - renamed Color() helpers to ValueColor() - dangerously named, rarely used and probably to be made obsolete.
 - 2015/08/29 (1.45) - with the addition of horizontal scrollbar we made various fixes to inconsistencies with dealing with cursor position.
                       GetCursorPos()/SetCursorPos() functions now include the scrolled amount. It shouldn't affect the majority of users, but take note that SetCursorPosX(100.0f) puts you at +100 from the starting x position which may include scrolling, not at +100 from the window left side.
                       GetContentRegionMax()/GetWindowContentRegionMin()/GetWindowContentRegionMax() functions allow include the scrolled amount. Typically those were used in cases where no scrolling would happen so it may not be a problem, but watch out!
 - 2015/08/29 (1.45) - renamed style.ScrollbarWidth to style.ScrollbarSize
 - 2015/08/05 (1.44) - split imgui.cpp into extra files: imgui_demo.cpp imgui_draw.cpp imgui_internal.h that you need to add to your project.
 - 2015/07/18 (1.44) - fixed angles in ImDrawList::PathArcTo(), PathArcToFast() (introduced in 1.43) being off by an extra PI for no justifiable reason
 - 2015/07/14 (1.43) - add new ImFontAtlas::AddFont() API. For the old AddFont***, moved the 'font_no' parameter of ImFontAtlas::AddFont** functions to the ImFontConfig structure.
                       you need to render your textured triangles with bilinear filtering to benefit from sub-pixel positioning of text.
 - 2015/07/08 (1.43) - switched rendering data to use indexed rendering. this is saving a fair amount of CPU/GPU and enables us to get anti-aliasing for a marginal cost.
                       this necessary change will break your rendering function! the fix should be very easy. sorry for that :(
                     - if you are using a vanilla copy of one of the imgui_impl_XXX.cpp provided in the example, you just need to update your copy and you can ignore the rest.
                     - the signature of the io.RenderDrawListsFn handler has changed!
                       old: ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count)
                       new: ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data).
                         parameters: 'cmd_lists' becomes 'draw_data->CmdLists', 'cmd_lists_count' becomes 'draw_data->CmdListsCount'
                         ImDrawList: 'commands' becomes 'CmdBuffer', 'vtx_buffer' becomes 'VtxBuffer', 'IdxBuffer' is new.
                         ImDrawCmd:  'vtx_count' becomes 'ElemCount', 'clip_rect' becomes 'ClipRect', 'user_callback' becomes 'UserCallback', 'texture_id' becomes 'TextureId'.
                     - each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles using indices from the index buffer.
                     - if you REALLY cannot render indexed primitives, you can call the draw_data->DeIndexAllBuffers() method to de-index the buffers. This is slow and a waste of CPU/GPU. Prefer using indexed rendering!
                     - refer to code in the examples/ folder or ask on the GitHub if you are unsure of how to upgrade. please upgrade!
 - 2015/07/10 (1.43) - changed SameLine() parameters from int to float.
 - 2015/07/02 (1.42) - renamed SetScrollPosHere() to SetScrollFromCursorPos(). Kept inline redirection function (will obsolete).
 - 2015/07/02 (1.42) - renamed GetScrollPosY() to GetScrollY(). Necessary to reduce confusion along with other scrolling functions, because positions (e.g. cursor position) are not equivalent to scrolling amount.
 - 2015/06/14 (1.41) - changed ImageButton() default bg_col parameter from (0,0,0,1) (black) to (0,0,0,0) (transparent) - makes a difference when texture have transparence
 - 2015/06/14 (1.41) - changed Selectable() API from (label, selected, size) to (label, selected, flags, size). Size override should have been rarely used. Sorry!
 - 2015/05/31 (1.40) - renamed GetWindowCollapsed() to IsWindowCollapsed() for consistency. Kept inline redirection function (will obsolete).
 - 2015/05/31 (1.40) - renamed IsRectClipped() to IsRectVisible() for consistency. Note that return value is opposite! Kept inline redirection function (will obsolete).
 - 2015/05/27 (1.40) - removed the third 'repeat_if_held' parameter from Button() - sorry! it was rarely used and inconsistent. Use PushButtonRepeat(true) / PopButtonRepeat() to enable repeat on desired buttons.
 - 2015/05/11 (1.40) - changed BeginPopup() API, takes a string identifier instead of a bool. ImGui needs to manage the open/closed state of popups. Call OpenPopup() to actually set the "open" state of a popup. BeginPopup() returns true if the popup is opened.
 - 2015/05/03 (1.40) - removed style.AutoFitPadding, using style.WindowPadding makes more sense (the default values were already the same).
 - 2015/04/13 (1.38) - renamed IsClipped() to IsRectClipped(). Kept inline redirection function until 1.50.
 - 2015/04/09 (1.38) - renamed ImDrawList::AddArc() to ImDrawList::AddArcFast() for compatibility with future API
 - 2015/04/03 (1.38) - removed ImGuiCol_CheckHovered, ImGuiCol_CheckActive, replaced with the more general ImGuiCol_FrameBgHovered, ImGuiCol_FrameBgActive.
 - 2014/04/03 (1.38) - removed support for passing -FLT_MAX..+FLT_MAX as the range for a SliderFloat(). Use DragFloat() or Inputfloat() instead.
 - 2015/03/17 (1.36) - renamed GetItemBoxMin()/GetItemBoxMax()/IsMouseHoveringBox() to GetItemRectMin()/GetItemRectMax()/IsMouseHoveringRect(). Kept inline redirection function until 1.50.
 - 2015/03/15 (1.36) - renamed style.TreeNodeSpacing to style.IndentSpacing, ImGuiStyleVar_TreeNodeSpacing to ImGuiStyleVar_IndentSpacing
 - 2015/03/13 (1.36) - renamed GetWindowIsFocused() to IsWindowFocused(). Kept inline redirection function until 1.50.
 - 2015/03/08 (1.35) - renamed style.ScrollBarWidth to style.ScrollbarWidth (casing)
 - 2015/02/27 (1.34) - renamed OpenNextNode(bool) to SetNextTreeNodeOpened(bool, ImGuiSetCond). Kept inline redirection function until 1.50.
 - 2015/02/27 (1.34) - renamed ImGuiSetCondition_*** to ImGuiSetCond_***, and _FirstUseThisSession becomes _Once.
 - 2015/02/11 (1.32) - changed text input callback ImGuiTextEditCallback return type from void-->int. reserved for future use, return 0 for now.
 - 2015/02/10 (1.32) - renamed GetItemWidth() to CalcItemWidth() to clarify its evolving behavior
 - 2015/02/08 (1.31) - renamed GetTextLineSpacing() to GetTextLineHeightWithSpacing()
 - 2015/02/01 (1.31) - removed IO.MemReallocFn (unused)
 - 2015/01/19 (1.30) - renamed ImGuiStorage::GetIntPtr()/GetFloatPtr() to GetIntRef()/GetIntRef() because Ptr was conflicting with actual pointer storage functions.
 - 2015/01/11 (1.30) - big font/image API change! now loads TTF file. allow for multiple fonts. no need for a PNG loader.
 - 2015/01/11 (1.30) - removed GetDefaultFontData(). uses io.Fonts->GetTextureData*() API to retrieve uncompressed pixels.
                       - old:  const void* png_data; unsigned int png_size; ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size); [..Upload texture to GPU..];
                       - new:  unsigned char* pixels; int width, height; io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); [..Upload texture to GPU..]; io.Fonts->SetTexID(YourTexIdentifier);
                       you now have more flexibility to load multiple TTF fonts and manage the texture buffer for internal needs. It is now recommended that you sample the font texture with bilinear interpolation.
 - 2015/01/11 (1.30) - added texture identifier in ImDrawCmd passed to your render function (we can now render images). make sure to call io.Fonts->SetTexID()
 - 2015/01/11 (1.30) - removed IO.PixelCenterOffset (unnecessary, can be handled in user projection matrix)
 - 2015/01/11 (1.30) - removed ImGui::IsItemFocused() in favor of ImGui::IsItemActive() which handles all widgets
 - 2014/12/10 (1.18) - removed SetNewWindowDefaultPos() in favor of new generic API SetNextWindowPos(pos, ImGuiSetCondition_FirstUseEver)
 - 2014/11/28 (1.17) - moved IO.Font*** options to inside the IO.Font-> structure (FontYOffset, FontTexUvForWhite, FontBaseScale, FontFallbackGlyph)
 - 2014/11/26 (1.17) - reworked syntax of IMGUI_ONCE_UPON_A_FRAME helper macro to increase compiler compatibility
 - 2014/11/07 (1.15) - renamed IsHovered() to IsItemHovered()
 - 2014/10/02 (1.14) - renamed IMGUI_INCLUDE_IMGUI_USER_CPP to IMGUI_INCLUDE_IMGUI_USER_INL and imgui_user.cpp to imgui_user.inl (more IDE friendly)
 - 2014/09/25 (1.13) - removed 'text_end' parameter from IO.SetClipboardTextFn (the string is now always zero-terminated for simplicity)
 - 2014/09/24 (1.12) - renamed SetFontScale() to SetWindowFontScale()
 - 2014/09/24 (1.12) - moved IM_MALLOC/IM_REALLOC/IM_FREE preprocessor defines to IO.MemAllocFn/IO.MemReallocFn/IO.MemFreeFn
 - 2014/08/30 (1.09) - removed IO.FontHeight (now computed automatically)
 - 2014/08/30 (1.09) - moved IMGUI_FONT_TEX_UV_FOR_WHITE preprocessor define to IO.FontTexUvForWhite
 - 2014/08/28 (1.09) - changed the behavior of IO.PixelCenterOffset following various rendering fixes


 FREQUENTLY ASKED QUESTIONS (FAQ)
 ================================

 Read all answers online:
   https://www.dearimgui.org/faq or https://github.com/ocornut/imgui/blob/master/docs/FAQ.md (same url)
 Read all answers locally (with a text editor or ideally a Markdown viewer):
   docs/FAQ.md
 Some answers are copied down here to facilitate searching in code.

 Q&A: Basics
 ===========

 Q: Where is the documentation?
 A: This library is poorly documented at the moment and expects the user to be acquainted with C/C++.
    - Run the examples/ and explore them.
    - See demo code in imgui_demo.cpp and particularly the ImGui::ShowDemoWindow() function.
    - The demo covers most features of Dear ImGui, so you can read the code and see its output.
    - See documentation and comments at the top of imgui.cpp + effectively imgui.h.
    - Dozens of standalone example applications using e.g. OpenGL/DirectX are provided in the
      examples/ folder to explain how to integrate Dear ImGui with your own engine/application.
    - The Wiki (https://github.com/ocornut/imgui/wiki) has many resources and links.
    - The Glossary (https://github.com/ocornut/imgui/wiki/Glossary) page also may be useful.
    - Your programming IDE is your friend, find the type or function declaration to find comments
      associated with it.

 Q: What is this library called?
 Q: Which version should I get?
 >> This library is called "Dear ImGui", please don't call it "ImGui" :)
 >> See https://www.dearimgui.org/faq for details.

 Q&A: Integration
 ================

 Q: How to get started?
 A: Read 'PROGRAMMER GUIDE' above. Read examples/README.txt.

 Q: How can I tell whether to dispatch mouse/keyboard to Dear ImGui or my application?
 A: You should read the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags!
 >> See https://www.dearimgui.org/faq for a fully detailed answer. You really want to read this.

 Q. How can I enable keyboard controls?
 Q: How can I use this without a mouse, without a keyboard or without a screen? (gamepad, input share, remote display)
 Q: I integrated Dear ImGui in my engine and little squares are showing instead of text...
 Q: I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around...
 Q: I integrated Dear ImGui in my engine and some elements are displaying outside their expected windows boundaries...
 >> See https://www.dearimgui.org/faq

 Q&A: Usage
 ----------

 Q: Why is my widget not reacting when I click on it?
 Q: How can I have widgets with an empty label?
 Q: How can I have multiple widgets with the same label?
 Q: How can I display an image? What is ImTextureID, how does it works?
 Q: How can I use my own math types instead of ImVec2/ImVec4?
 Q: How can I interact with standard C++ types (such as std::string and std::vector)?
 Q: How can I display custom shapes? (using low-level ImDrawList API)
 >> See https://www.dearimgui.org/faq

 Q&A: Fonts, Text
 ================

 Q: How should I handle DPI in my application?
 Q: How can I load a different font than the default?
 Q: How can I easily use icons in my application?
 Q: How can I load multiple fonts?
 Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic?
 >> See https://www.dearimgui.org/faq and https://github.com/ocornut/imgui/edit/master/docs/FONTS.md

 Q&A: Concerns
 =============

 Q: Who uses Dear ImGui?
 Q: Can you create elaborate/serious tools with Dear ImGui?
 Q: Can you reskin the look of Dear ImGui?
 Q: Why using C++ (as opposed to C)?
 >> See https://www.dearimgui.org/faq

 Q&A: Community
 ==============

 Q: How can I help?
 A: - Businesses: please reach out to "contact AT dearimgui.com" if you work in a place using Dear ImGui!
      We can discuss ways for your company to fund development via invoiced technical support, maintenance or sponsoring contacts.
      This is among the most useful thing you can do for Dear ImGui. With increased funding, we can hire more people working on this project.
    - Individuals: you can support continued development via PayPal donations. See README.
    - If you are experienced with Dear ImGui and C++, look at the GitHub issues, look at the Wiki, read docs/TODO.txt
      and see how you want to help and can help!
    - Disclose your usage of Dear ImGui via a dev blog post, a tweet, a screenshot, a mention somewhere etc.
      You may post screenshot or links in the gallery threads. Visuals are ideal as they inspire other programmers.
      But even without visuals, disclosing your use of dear imgui helps the library grow credibility, and help other teams and programmers with taking decisions.
    - If you have issues or if you need to hack into the library, even if you don't expect any support it is useful that you share your issues (on GitHub or privately).

*/

//-------------------------------------------------------------------------
// [SECTION] INCLUDES
//-------------------------------------------------------------------------

#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
#define _CRT_SECURE_NO_WARNINGS
#endif

#include "imgui.h"
#ifndef IMGUI_DISABLE

#ifndef IMGUI_DEFINE_MATH_OPERATORS
#define IMGUI_DEFINE_MATH_OPERATORS
#endif
#include "imgui_internal.h"

// System includes
#include <ctype.h>      // toupper
#include <stdio.h>      // vsnprintf, sscanf, printf
#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
#include <stddef.h>     // intptr_t
#else
#include <stdint.h>     // intptr_t
#endif

// [Windows] On non-Visual Studio compilers, we default to IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS unless explicitly enabled
#if defined(_WIN32) && !defined(_MSC_VER) && !defined(IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
#endif

// [Windows] OS specific includes (optional)
#if defined(_WIN32) && defined(IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
#define IMGUI_DISABLE_WIN32_FUNCTIONS
#endif
#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#ifndef NOMINMAX
#define NOMINMAX
#endif
#ifndef __MINGW32__
#include <Windows.h>        // _wfopen, OpenClipboard
#else
#include <windows.h>
#endif
#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) // UWP doesn't have all Win32 functions
#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
#endif
#endif

// [Apple] OS specific includes
#if defined(__APPLE__)
#include <TargetConditionals.h>
#endif

// Visual Studio warnings
#ifdef _MSC_VER
#pragma warning (disable: 4127)             // condition expression is constant
#pragma warning (disable: 4996)             // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
#if defined(_MSC_VER) && _MSC_VER >= 1922   // MSVC 2019 16.2 or later
#pragma warning (disable: 5054)             // operator '|': deprecated between enumerations of different types
#endif
#pragma warning (disable: 26451)            // [Static Analyzer] Arithmetic overflow : Using operator 'xxx' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator 'xxx' to avoid overflow(io.2).
#pragma warning (disable: 26495)            // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6).
#pragma warning (disable: 26812)            // [Static Analyzer] The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).
#endif

// Clang/GCC warnings with -Weverything
#if defined(__clang__)
#if __has_warning("-Wunknown-warning-option")
#pragma clang diagnostic ignored "-Wunknown-warning-option"         // warning: unknown warning group 'xxx'                      // not all warnings are known by all Clang versions and they tend to be rename-happy.. so ignoring warnings triggers new warnings on some configuration. Great!
#endif
#pragma clang diagnostic ignored "-Wunknown-pragmas"                // warning: unknown warning group 'xxx'
#pragma clang diagnostic ignored "-Wold-style-cast"                 // warning: use of old-style cast                            // yes, they are more terse.
#pragma clang diagnostic ignored "-Wfloat-equal"                    // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok.
#pragma clang diagnostic ignored "-Wformat-nonliteral"              // warning: format string is not a string literal            // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
#pragma clang diagnostic ignored "-Wexit-time-destructors"          // warning: declaration requires an exit-time destructor     // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
#pragma clang diagnostic ignored "-Wglobal-constructors"            // warning: declaration requires a global destructor         // similar to above, not sure what the exact difference is.
#pragma clang diagnostic ignored "-Wsign-conversion"                // warning: implicit conversion changes signedness
#pragma clang diagnostic ignored "-Wformat-pedantic"                // warning: format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.
#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast"       // warning: cast to 'void *' from smaller integer type 'int'
#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"  // warning: zero as null pointer constant                    // some standard header variations use #define NULL 0
#pragma clang diagnostic ignored "-Wdouble-promotion"               // warning: implicit conversion from 'float' to 'double' when passing argument to function  // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion"  // warning: implicit conversion from 'xxx' to 'float' may lose precision
#elif defined(__GNUC__)
// We disable -Wpragmas because GCC doesn't provide an has_warning equivalent and some forks/patches may not following the warning/version association.
#pragma GCC diagnostic ignored "-Wpragmas"                  // warning: unknown option after '#pragma GCC diagnostic' kind
#pragma GCC diagnostic ignored "-Wunused-function"          // warning: 'xxxx' defined but not used
#pragma GCC diagnostic ignored "-Wint-to-pointer-cast"      // warning: cast to pointer from integer of different size
#pragma GCC diagnostic ignored "-Wformat"                   // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*'
#pragma GCC diagnostic ignored "-Wdouble-promotion"         // warning: implicit conversion from 'float' to 'double' when passing argument to function
#pragma GCC diagnostic ignored "-Wconversion"               // warning: conversion to 'xxxx' from 'xxxx' may alter its value
#pragma GCC diagnostic ignored "-Wformat-nonliteral"        // warning: format not a string literal, format string not checked
#pragma GCC diagnostic ignored "-Wstrict-overflow"          // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false
#pragma GCC diagnostic ignored "-Wclass-memaccess"          // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
#endif

// Debug options
#define IMGUI_DEBUG_NAV_SCORING     0   // Display navigation scoring preview when hovering items. Display last moving direction matches when holding CTRL
#define IMGUI_DEBUG_NAV_RECTS       0   // Display the reference navigation rectangle for each window
#define IMGUI_DEBUG_INI_SETTINGS    0   // Save additional comments in .ini file (particularly helps for Docking, but makes saving slower)

// When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch.
static const float NAV_WINDOWING_HIGHLIGHT_DELAY            = 0.20f;    // Time before the highlight and screen dimming starts fading in
static const float NAV_WINDOWING_LIST_APPEAR_DELAY          = 0.15f;    // Time before the window list starts to appear

// Window resizing from edges (when io.ConfigWindowsResizeFromEdges = true and ImGuiBackendFlags_HasMouseCursors is set in io.BackendFlags by backend)
static const float WINDOWS_HOVER_PADDING                    = 4.0f;     // Extend outside window for hovering/resizing (maxxed with TouchPadding) and inside windows for borders. Affect FindHoveredWindow().
static const float WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER = 0.04f;    // Reduce visual noise by only highlighting the border after a certain time.
static const float WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER    = 2.00f;    // Lock scrolled window (so it doesn't pick child windows that are scrolling through) for a certain time, unless mouse moved.

//-------------------------------------------------------------------------
// [SECTION] FORWARD DECLARATIONS
//-------------------------------------------------------------------------

static void             SetCurrentWindow(ImGuiWindow* window);
static void             FindHoveredWindow();
static ImGuiWindow*     CreateNewWindow(const char* name, ImGuiWindowFlags flags);
static ImVec2           CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window);

static void             AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* draw_list);
static void             AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window);

// Settings
static void             WindowSettingsHandler_ClearAll(ImGuiContext*, ImGuiSettingsHandler*);
static void*            WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name);
static void             WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line);
static void             WindowSettingsHandler_ApplyAll(ImGuiContext*, ImGuiSettingsHandler*);
static void             WindowSettingsHandler_WriteAll(ImGuiContext*, ImGuiSettingsHandler*, ImGuiTextBuffer* buf);

// Platform Dependents default implementation for IO functions
static const char*      GetClipboardTextFn_DefaultImpl(void* user_data);
static void             SetClipboardTextFn_DefaultImpl(void* user_data, const char* text);
static void             ImeSetInputScreenPosFn_DefaultImpl(int x, int y);

namespace ImGui
{
// Navigation
static void             NavUpdate();
static void             NavUpdateWindowing();
static void             NavUpdateWindowingOverlay();
static void             NavUpdateMoveResult();
static void             NavUpdateInitResult();
static float            NavUpdatePageUpPageDown();
static inline void      NavUpdateAnyRequestFlag();
static void             NavEndFrame();
static bool             NavScoreItem(ImGuiNavItemData* result, ImRect cand);
static void             NavApplyItemToResult(ImGuiNavItemData* result, ImGuiWindow* window, ImGuiID id, const ImRect& nav_bb_rel);
static void             NavProcessItem(ImGuiWindow* window, const ImRect& nav_bb, ImGuiID id);
static ImVec2           NavCalcPreferredRefPos();
static void             NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window);
static ImGuiWindow*     NavRestoreLastChildNavWindow(ImGuiWindow* window);
static void             NavRestoreLayer(ImGuiNavLayer layer);
static int              FindWindowFocusIndex(ImGuiWindow* window);

// Error Checking
static void             ErrorCheckNewFrameSanityChecks();
static void             ErrorCheckEndFrameSanityChecks();

// Misc
static void             UpdateSettings();
static void             UpdateMouseInputs();
static void             UpdateMouseWheel();
static void             UpdateTabFocus();
static void             UpdateDebugToolItemPicker();
static bool             UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4], const ImRect& visibility_rect);
static void             RenderWindowOuterBorders(ImGuiWindow* window);
static void             RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size);
static void             RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open);

// Viewports
static void             UpdateViewportsNewFrame();

}

//-----------------------------------------------------------------------------
// [SECTION] CONTEXT AND MEMORY ALLOCATORS
//-----------------------------------------------------------------------------

// DLL users:
// - Heaps and globals are not shared across DLL boundaries!
// - You will need to call SetCurrentContext() + SetAllocatorFunctions() for each static/DLL boundary you are calling from.
// - Same applies for hot-reloading mechanisms that are reliant on reloading DLL (note that many hot-reloading mechanisms work without DLL).
// - Using Dear ImGui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility.
// - Confused? In a debugger: add GImGui to your watch window and notice how its value changes depending on your current location (which DLL boundary you are in).

// Current context pointer. Implicitly used by all Dear ImGui functions. Always assumed to be != NULL.
// - ImGui::CreateContext() will automatically set this pointer if it is NULL.
//   Change to a different context by calling ImGui::SetCurrentContext().
// - Important: Dear ImGui functions are not thread-safe because of this pointer.
//   If you want thread-safety to allow N threads to access N different contexts:
//   - Change this variable to use thread local storage so each thread can refer to a different context, in your imconfig.h:
//         struct ImGuiContext;
//         extern thread_local ImGuiContext* MyImGuiTLS;
//         #define GImGui MyImGuiTLS
//     And then define MyImGuiTLS in one of your cpp files. Note that thread_local is a C++11 keyword, earlier C++ uses compiler-specific keyword.
//   - Future development aims to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586
//   - If you need a finite number of contexts, you may compile and use multiple instances of the ImGui code from a different namespace.
// - DLL users: read comments above.
#ifndef GImGui
ImGuiContext*   GImGui = NULL;
#endif

// Memory Allocator functions. Use SetAllocatorFunctions() to change them.
// - You probably don't wan
Download .txt
gitextract_99wlmliy/

├── .gitattributes
├── .gitignore
├── LICENSE
├── PythonScripts/
│   └── lolskin_to_skin.py
├── R3nzSkin/
│   ├── CheatManager.hpp
│   ├── Config.cpp
│   ├── Config.hpp
│   ├── GUI.cpp
│   ├── GUI.hpp
│   ├── Hooks.cpp
│   ├── Hooks.hpp
│   ├── Logger.hpp
│   ├── R3nzSkin.cpp
│   ├── R3nzSkin.rc
│   ├── R3nzSkin.vcxproj
│   ├── R3nzSkin.vcxproj.filters
│   ├── SDK/
│   │   ├── AIBaseCommon.cpp
│   │   ├── AIBaseCommon.hpp
│   │   ├── AIHero.hpp
│   │   ├── AIMinionClient.cpp
│   │   ├── AIMinionClient.hpp
│   │   ├── AITurret.hpp
│   │   ├── AString.hpp
│   │   ├── Champion.hpp
│   │   ├── ChampionManager.hpp
│   │   ├── CharacterDataStack.cpp
│   │   ├── CharacterDataStack.hpp
│   │   ├── CharacterStackData.hpp
│   │   ├── GameClient.hpp
│   │   ├── GameObject.hpp
│   │   ├── GameState.hpp
│   │   ├── ManagerTemplate.hpp
│   │   ├── Pad.hpp
│   │   ├── RiotArray.hpp
│   │   └── Skin.hpp
│   ├── SkinDatabase.cpp
│   ├── SkinDatabase.hpp
│   ├── Utils.cpp
│   ├── Utils.hpp
│   ├── encryption.hpp
│   ├── fnv_hash.hpp
│   ├── imgui/
│   │   ├── imconfig.h
│   │   ├── imgui.cpp
│   │   ├── imgui.h
│   │   ├── imgui_demo.cpp
│   │   ├── imgui_draw.cpp
│   │   ├── imgui_impl_dx11.cpp
│   │   ├── imgui_impl_dx11.h
│   │   ├── imgui_impl_win32.cpp
│   │   ├── imgui_impl_win32.h
│   │   ├── imgui_internal.h
│   │   ├── imgui_tables.cpp
│   │   ├── imgui_widgets.cpp
│   │   ├── imstb_rectpack.h
│   │   ├── imstb_textedit.h
│   │   └── imstb_truetype.h
│   ├── json/
│   │   └── json.hpp
│   ├── memory.cpp
│   ├── memory.hpp
│   ├── offsets.hpp
│   ├── resource.h
│   └── vmt_smart_hook.hpp
├── R3nzSkin.sln
├── R3nzSkin_Injector/
│   ├── Injector.cpp
│   ├── Injector.hpp
│   ├── R3nzSkin_Injector.rc
│   ├── R3nzSkin_Injector.vcxproj
│   ├── R3nzSkin_Injector.vcxproj.filters
│   ├── R3nzUI.hpp
│   ├── R3nzUI.resx
│   ├── lazy_importer.hpp
│   ├── main.cpp
│   ├── resource.h
│   └── xorstr.hpp
├── README.md
└── README_zh.md
Copy disabled (too large) Download .txt
Showing preview only (44,370K chars total). Download the full file to get everything.
SYMBOL INDEX (1949 symbols across 54 files)

FILE: PythonScripts/lolskin_to_skin.py
  function skin_to_dictionary (line 6) | def skin_to_dictionary(path):
  function forward_data (line 20) | def forward_data(lolskin_hero_skin: dict):

FILE: R3nzSkin/CheatManager.hpp
  class CheatManager (line 12) | class CheatManager {
    method start (line 14) | void start() noexcept

FILE: R3nzSkin/Config.hpp
  class Config (line 13) | class Config {

FILE: R3nzSkin/GUI.cpp
  function footer (line 17) | inline static void footer() noexcept
  function changeTurretSkin (line 26) | static void changeTurretSkin(const std::int32_t skinId, const std::int32...

FILE: R3nzSkin/GUI.hpp
  class GUI (line 3) | class GUI {

FILE: R3nzSkin/Hooks.cpp
  function testFunc (line 23) | static inline void testFunc() noexcept
  function LRESULT (line 43) | static LRESULT WINAPI wndProc(const HWND window, const UINT msg, const W...
  type d3d_vtable (line 115) | namespace d3d_vtable {
    function create_render_target (line 121) | static void WINAPI create_render_target() noexcept
    function init_imgui (line 132) | static void init_imgui(IDXGISwapChain* device) noexcept
    function render (line 244) | static void render() noexcept
    type dxgi_present (line 262) | struct dxgi_present {
      method hooked (line 263) | static long WINAPI hooked(IDXGISwapChain* p_swap_chain, UINT sync_in...
    type dxgi_resize_buffers (line 273) | struct dxgi_resize_buffers {
      method hooked (line 274) | static long WINAPI hooked(IDXGISwapChain* p_swap_chain, UINT buffer_...
  function changeModelForObject (line 286) | static void changeModelForObject(const AIBaseCommon* obj, const char* mo...
  function changeSkinForObject (line 298) | static void changeSkinForObject(const AIBaseCommon* obj, const std::int3...

FILE: R3nzSkin/Hooks.hpp
  class Hooks (line 9) | class Hooks {

FILE: R3nzSkin/Logger.hpp
  class R3nzSkinLogger (line 5) | class R3nzSkinLogger {
    method R3nzSkinLogger (line 7) | R3nzSkinLogger() { this->clear(); }
    method clear (line 9) | void clear() noexcept
    method addLog (line 16) | void addLog(const char* fmt, ...) noexcept
    method draw (line 29) | void draw() noexcept

FILE: R3nzSkin/R3nzSkin.cpp
  function HideThread (line 16) | bool WINAPI HideThread(const HANDLE hThread) noexcept
  function DllAttach (line 33) | __declspec(safebuffers) static void WINAPI DllAttach([[maybe_unused]] LP...
  function BOOL (line 69) | __declspec(safebuffers) BOOL APIENTRY DllMain(const HMODULE hModule, con...

FILE: R3nzSkin/SDK/AIBaseCommon.hpp
  class AIBaseCommon (line 8) | class AIBaseCommon : public GameObject {
    method CharacterDataStack (line 10) | [[nodiscard]] CharacterDataStack* get_character_data_stack() const noe...

FILE: R3nzSkin/SDK/AIHero.hpp
  class AIHero (line 5) | class AIHero : public AIBaseCommon {

FILE: R3nzSkin/SDK/AIMinionClient.cpp
  function AIBaseCommon (line 7) | AIBaseCommon* AIMinionClient::getGoldRedirectTarget() const noexcept

FILE: R3nzSkin/SDK/AIMinionClient.hpp
  class AIMinionClient (line 5) | class AIMinionClient : public AIBaseCommon {

FILE: R3nzSkin/SDK/AITurret.hpp
  class AITurret (line 5) | class AITurret : public AIBaseCommon {

FILE: R3nzSkin/SDK/AString.hpp
  class AString (line 5) | class AString {

FILE: R3nzSkin/SDK/Champion.hpp
  class Champion (line 8) | class Champion {

FILE: R3nzSkin/SDK/ChampionManager.hpp
  class ChampionManager (line 9) | class ChampionManager {

FILE: R3nzSkin/SDK/CharacterDataStack.hpp
  class CharacterDataStack (line 8) | class CharacterDataStack {

FILE: R3nzSkin/SDK/CharacterStackData.hpp
  class CharacterStackData (line 8) | class CharacterStackData {

FILE: R3nzSkin/SDK/GameClient.hpp
  class GameClient (line 6) | class GameClient {

FILE: R3nzSkin/SDK/GameObject.hpp
  class GameObject (line 9) | class GameObject {
    method isLaneMinion (line 15) | bool isLaneMinion() const noexcept { return CallVirtual<offsets::GameO...
    method isEliteMinion (line 18) | [[nodiscard]] bool isEliteMinion() const noexcept { return CallVirtual...
    method isEpicMinion (line 21) | [[nodiscard]] bool isEpicMinion() const noexcept { return CallVirtual<...
    method isMinion (line 24) | [[nodiscard]] bool isMinion() const noexcept { return CallVirtual<offs...
    method isJungle (line 27) | [[nodiscard]] bool isJungle() const noexcept { return CallVirtual<offs...

FILE: R3nzSkin/SDK/GameState.hpp
  type GGameState_s (line 5) | enum class GGameState_s : std::int32_t {

FILE: R3nzSkin/SDK/ManagerTemplate.hpp
  class ManagerTemplate (line 8) | class ManagerTemplate {

FILE: R3nzSkin/SDK/Pad.hpp
  function ReturnType (line 25) | ReturnType CallVirtual(std::uintptr_t instance, Args... args)

FILE: R3nzSkin/SDK/RiotArray.hpp
  class RiotArray (line 6) | class RiotArray {

FILE: R3nzSkin/SDK/Skin.hpp
  class Skin (line 8) | class Skin {

FILE: R3nzSkin/SkinDatabase.hpp
  class SkinDatabase (line 10) | class SkinDatabase {
    class skin_info (line 12) | class skin_info {
    class jungle_mob_skin_info (line 19) | class jungle_mob_skin_info {
    class specialSkin (line 26) | class specialSkin {

FILE: R3nzSkin/Utils.cpp
  type Key (line 13) | struct Key {
    method Key (line 14) | constexpr Key(std::string_view name, int code) : name{ name }, code{ c...
  type InputTextCallback_UserData (line 279) | struct InputTextCallback_UserData {
  function InputTextCallback (line 285) | static int InputTextCallback(ImGuiInputTextCallbackData* data) noexcept

FILE: R3nzSkin/Utils.hpp
  class RandomGenerator (line 10) | class RandomGenerator {
    method T (line 13) | [[nodiscard]] static T random(T min, T max) noexcept
    method T (line 20) | [[nodiscard]] static T random(T min, T max) noexcept
    method random (line 27) | [[nodiscard]] static std::enable_if_t<std::is_enum_v<T>, T> random(T m...
  function T (line 37) | [[nodiscard]] T random(T min, T max) noexcept
  class KeyBind (line 42) | class KeyBind {
    type KeyCode (line 44) | enum KeyCode : unsigned char {
    method KeyBind (line 57) | KeyBind() = default;
    method isSet (line 68) | bool isSet() const noexcept { return keyCode != KeyCode::NONE; }
  class KeyBindToggle (line 75) | class KeyBindToggle : public KeyBind {
    method isToggled (line 80) | bool isToggled() const noexcept { return toggledOn; }
  type ImGui (line 85) | namespace ImGui

FILE: R3nzSkin/encryption.hpp
  class xor_value (line 8) | class xor_value {
    method T (line 16) | T decrypt() noexcept
    method encrypt (line 40) | void encrypt(T value) noexcept

FILE: R3nzSkin/fnv_hash.hpp
  type detail (line 6) | namespace detail {
    type size_dependant_data (line 8) | struct size_dependant_data {
    type size_selector (line 15) | struct size_selector
    type size_selector<32> (line 18) | struct size_selector<32> {
    type size_selector<64> (line 23) | struct size_selector<64> {
    class fnv_hash (line 28) | class fnv_hash {
      method hash_constexpr (line 41) | static __forceinline constexpr auto hash_constexpr(const char(&str)[...
      method hash_runtime (line 45) | static auto __forceinline hash_runtime(const char* str) -> hash {

FILE: R3nzSkin/imgui/imgui.cpp
  type ImGui (line 903) | namespace ImGui
  function FreeWrapper (line 976) | static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSE...
  function FreeWrapper (line 979) | static void    FreeWrapper(void* ptr, void* user_data)        { IM_UNUSE...
  function ImVec2 (line 1204) | ImVec2 ImBezierCubicClosestPoint(const ImVec2& p1, const ImVec2& p2, con...
  function ImBezierCubicClosestPointCasteljauStep (line 1227) | static void ImBezierCubicClosestPointCasteljauStep(const ImVec2& p, ImVe...
  function ImVec2 (line 1262) | ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2& p1, const ImVec2...
  function ImVec2 (line 1272) | ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2...
  function ImTriangleContainsPoint (line 1285) | bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImV...
  function ImTriangleBarycentricCoords (line 1293) | void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const...
  function ImVec2 (line 1304) | ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const Im...
  function ImStricmp (line 1325) | int ImStricmp(const char* str1, const char* str2)
  function ImStrnicmp (line 1332) | int ImStrnicmp(const char* str1, const char* str2, size_t count)
  function ImStrncpy (line 1339) | void ImStrncpy(char* dst, const char* src, size_t count)
  function ImStrlenW (line 1375) | int ImStrlenW(const ImWchar* str)
  function ImWchar (line 1390) | const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf...
  function ImStrTrimBlanks (line 1420) | void ImStrTrimBlanks(char* buf)
  function ImFormatString (line 1460) | int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
  function ImFormatStringV (line 1478) | int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list...
  function ImGuiID (line 1520) | ImGuiID ImHashData(const void* data_p, size_t data_size, ImU32 seed)
  function ImGuiID (line 1536) | ImGuiID ImHashStr(const char* data_p, size_t data_size, ImU32 seed)
  function ImFileHandle (line 1571) | ImFileHandle ImFileOpen(const char* filename, const char* mode)
  function ImFileClose (line 1589) | bool    ImFileClose(ImFileHandle f)     { return fclose(f) == 0; }
  function ImU64 (line 1590) | ImU64   ImFileGetSize(ImFileHandle f)   { long off = 0, sz = 0; return (...
  function ImU64 (line 1591) | ImU64   ImFileRead(void* data, ImU64 sz, ImU64 count, ImFileHandle f)   ...
  function ImU64 (line 1592) | ImU64   ImFileWrite(const void* data, ImU64 sz, ImU64 count, ImFileHandl...
  function ImTextCharFromUtf8 (line 1644) | int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, cons...
  function ImTextStrFromUtf8 (line 1696) | int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, c...
  function ImTextCountCharsFromUtf8 (line 1714) | int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
  function ImTextCharToUtf8_inline (line 1729) | static inline int ImTextCharToUtf8_inline(char* buf, int buf_size, unsig...
  function ImTextCountUtf8BytesFromChar (line 1772) | int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_tex...
  function ImTextCountUtf8BytesFromChar (line 1778) | static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
  function ImTextStrToUtf8 (line 1787) | int ImTextStrToUtf8(char* out_buf, int out_buf_size, const ImWchar* in_t...
  function ImTextCountUtf8BytesFromStr (line 1803) | int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* i...
  function IMGUI_API (line 1822) | IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b)
  function ImVec4 (line 1831) | ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
  function ImU32 (line 1841) | ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
  type StaticFunc (line 1933) | struct StaticFunc
    method PairCompareByID (line 1935) | PairCompareByID(const void* lhs, const void* rhs)
  function GetSkipItemForListClipping (line 2230) | static bool GetSkipItemForListClipping()
  function SetCursorPosYAndSetupForPrevLine (line 2279) | static void SetCursorPosYAndSetupForPrevLine(float pos_y, float line_hei...
  function ImGuiStyle (line 2455) | ImGuiStyle& ImGui::GetStyle()
  function ImU32 (line 2461) | ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
  function ImU32 (line 2469) | ImU32 ImGui::GetColorU32(const ImVec4& col)
  function ImVec4 (line 2477) | const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
  function ImU32 (line 2483) | ImU32 ImGui::GetColorU32(ImU32 col)
  type ImGuiStyleVarInfo (line 2526) | struct ImGuiStyleVarInfo
  function ImGuiStyleVarInfo (line 2563) | static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
  function ImGuiID (line 2959) | ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
  function ImGuiID (line 2971) | ImGuiID ImGuiWindow::GetID(const void* ptr)
  function ImGuiID (line 2983) | ImGuiID ImGuiWindow::GetID(int n)
  function ImGuiID (line 2995) | ImGuiID ImGuiWindow::GetIDNoKeepAlive(const char* str, const char* str_end)
  function ImGuiID (line 3006) | ImGuiID ImGuiWindow::GetIDNoKeepAlive(const void* ptr)
  function ImGuiID (line 3017) | ImGuiID ImGuiWindow::GetIDNoKeepAlive(int n)
  function ImGuiID (line 3029) | ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
  function SetCurrentWindow (line 3038) | static void SetCurrentWindow(ImGuiWindow* window)
  function ImGuiID (line 3131) | ImGuiID ImGui::GetHoveredID()
  function IsWindowContentHoverable (line 3159) | static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHo...
  function ImGuiContext (line 3401) | ImGuiContext* ImGui::GetCurrentContext()
  function ImGuiContext (line 3430) | ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas)
  function ImGuiID (line 3450) | ImGuiID ImGui::AddContextHook(ImGuiContext* ctx, const ImGuiContextHook*...
  function ImGuiIO (line 3479) | ImGuiIO& ImGui::GetIO()
  function ImDrawData (line 3486) | ImDrawData* ImGui::GetDrawData()
  function ImDrawList (line 3503) | static ImDrawList* GetViewportDrawList(ImGuiViewportP* viewport, size_t ...
  function ImDrawList (line 3527) | ImDrawList* ImGui::GetBackgroundDrawList(ImGuiViewport* viewport)
  function ImDrawList (line 3532) | ImDrawList* ImGui::GetBackgroundDrawList()
  function ImDrawList (line 3538) | ImDrawList* ImGui::GetForegroundDrawList(ImGuiViewport* viewport)
  function ImDrawList (line 3543) | ImDrawList* ImGui::GetForegroundDrawList()
  function ImDrawListSharedData (line 3549) | ImDrawListSharedData* ImGui::GetDrawListSharedData()
  function IsWindowActiveAndVisible (line 3671) | static bool IsWindowActiveAndVisible(ImGuiWindow* window)
  function StartLockWheelingWindow (line 3733) | static void StartLockWheelingWindow(ImGuiWindow* window)
  function ImGuiKeyModFlags (line 3929) | ImGuiKeyModFlags ImGui::GetMergedKeyModFlags()
  function AddWindowToSortBuffer (line 4283) | static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_win...
  function AddDrawListToDrawData (line 4300) | static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDra...
  function AddWindowToDrawData (line 4336) | static void AddWindowToDrawData(ImGuiWindow* window, int layer)
  function AddRootWindowToDrawData (line 4351) | static void AddRootWindowToDrawData(ImGuiWindow* window)
  function SetupViewportDrawData (line 4375) | static void SetupViewportDrawData(ImGuiViewportP* viewport, ImVector<ImD...
  function ImVec2 (line 4562) | ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool ...
  function FindHoveredWindow (line 4592) | static void FindHoveredWindow()
  function ImVec2 (line 4790) | ImVec2 ImGui::GetMousePos()
  function ImVec2 (line 4797) | ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
  function ImVec2 (line 4828) | ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_thre...
  function ImGuiMouseCursor (line 4849) | ImGuiMouseCursor ImGui::GetMouseCursor()
  function ImVec2 (line 4990) | ImVec2 ImGui::GetItemRectMin()
  function ImVec2 (line 4996) | ImVec2 ImGui::GetItemRectMax()
  function ImVec2 (line 5002) | ImVec2 ImGui::GetItemRectSize()
  function SetWindowConditionAllowFlags (line 5136) | static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond ...
  function ImGuiWindow (line 5143) | ImGuiWindow* ImGui::FindWindowByID(ImGuiID id)
  function ImGuiWindow (line 5149) | ImGuiWindow* ImGui::FindWindowByName(const char* name)
  function ApplyWindowSettings (line 5155) | static void ApplyWindowSettings(ImGuiWindow* window, ImGuiWindowSettings...
  function ImGuiWindow (line 5163) | static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags f...
  function ImVec2 (line 5215) | static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const I...
  function CalcWindowContentSizes (line 5250) | static void CalcWindowContentSizes(ImGuiWindow* window, ImVec2* content_...
  function ImVec2 (line 5270) | static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& s...
  function ImVec2 (line 5308) | ImVec2 ImGui::CalcWindowNextAutoFitSize(ImGuiWindow* window)
  function ImGuiCol (line 5318) | static ImGuiCol GetWindowBgColorIdxFromFlags(ImGuiWindowFlags flags)
  function CalcResizePosSizeFromAnyCorner (line 5327) | static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const Im...
  type ImGuiResizeGripDef (line 5342) | struct ImGuiResizeGripDef
  type ImGuiResizeBorderDef (line 5357) | struct ImGuiResizeBorderDef
  function ImRect (line 5371) | static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, flo...
  function ImGuiID (line 5385) | ImGuiID ImGui::GetWindowResizeCornerID(ImGuiWindow* window, int n)
  function ImGuiID (line 5395) | ImGuiID ImGui::GetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir)
  function ClampWindowRect (line 5537) | static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& vi...
  function ImVec2 (line 6793) | ImVec2 ImGui::GetWindowPos()
  function ImVec2 (line 6832) | ImVec2 ImGui::GetWindowSize()
  function ImDrawList (line 7006) | ImDrawList* ImGui::GetWindowDrawList()
  function ImFont (line 7012) | ImFont* ImGui::GetFont()
  function ImVec2 (line 7022) | ImVec2 ImGui::GetFontTexUvWhitePixel()
  function ImGuiStorage (line 7092) | ImGuiStorage* ImGui::GetStateStorage()
  function ImGuiID (line 7141) | ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGui...
  function ImGuiID (line 7159) | ImGuiID ImGui::GetID(const char* str_id)
  function ImGuiID (line 7165) | ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
  function ImGuiID (line 7171) | ImGuiID ImGui::GetID(const void* ptr_id)
  function ImVec2 (line 7559) | ImVec2 ImGui::GetCursorScreenPos()
  function ImVec2 (line 7574) | ImVec2 ImGui::GetCursorPos()
  function ImVec2 (line 7613) | ImVec2 ImGui::GetCursorStartPos()
  function ImVec2 (line 7699) | ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
  function ImVec2 (line 7747) | ImVec2 ImGui::GetContentRegionMax()
  function ImVec2 (line 7758) | ImVec2 ImGui::GetContentRegionMaxAbs()
  function ImVec2 (line 7768) | ImVec2 ImGui::GetContentRegionAvail()
  function ImVec2 (line 7775) | ImVec2 ImGui::GetWindowContentRegionMin()
  function ImVec2 (line 7781) | ImVec2 ImGui::GetWindowContentRegionMax()
  function CalcScrollEdgeSnap (line 7891) | static float CalcScrollEdgeSnap(float target, float snap_min, float snap...
  function ImVec2 (line 7900) | static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window)
  function ImVec2 (line 7940) | ImVec2 ImGui::ScrollToBringRectIntoView(ImGuiWindow* window, const ImRec...
  function ImGuiWindow (line 8192) | ImGuiWindow* ImGui::GetTopMostPopupModal()
  function ImVec2 (line 8535) | ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const I...
  function ImRect (line 8610) | ImRect ImGui::GetPopupAllowedExtentRect(ImGuiWindow* window)
  function ImVec2 (line 8620) | ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
  function ImGuiDir (line 8703) | ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
  function NavScoreItemDistInterval (line 8710) | static float inline NavScoreItemDistInterval(float a0, float a1, float b...
  function NavClampRectToVisibleAreaForMoveDir (line 8719) | static void inline NavClampRectToVisibleAreaForMoveDir(ImGuiDir move_dir...
  function ImGuiWindow (line 8983) | static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* win...
  function ImVec2 (line 9049) | static ImVec2 ImGui::NavCalcPreferredRefPos()
  function ImVec2 (line 9091) | ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, Im...
  function ImGuiWindow (line 9606) | static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int ...
  function NavUpdateWindowingHighlightWindow (line 9615) | static void NavUpdateWindowingHighlightWindow(int focus_change_dir)
  function ImGuiPayload (line 10103) | const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGui...
  function ImGuiPayload (line 10140) | const ImGuiPayload* ImGui::GetDragDropPayload()
  function LogTextV (line 10163) | static inline void LogTextV(ImGuiContext& g, const char* fmt, va_list args)
  function ImGuiWindowSettings (line 10462) | ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
  function ImGuiWindowSettings (line 10484) | ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
  function ImGuiWindowSettings (line 10493) | ImGuiWindowSettings* ImGui::FindOrCreateWindowSettings(const char* name)
  function ImGuiSettingsHandler (line 10500) | ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name)
  function WindowSettingsHandler_ClearAll (line 10633) | static void WindowSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSetti...
  function WindowSettingsHandler_ReadLine (line 10651) | static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsH...
  function WindowSettingsHandler_ApplyAll (line 10662) | static void WindowSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSetti...
  function WindowSettingsHandler_WriteAll (line 10674) | static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSetti...
  function ImGuiViewport (line 10720) | ImGuiViewport* ImGui::GetMainViewport()
  function SetClipboardTextFn_DefaultImpl (line 10794) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function SetClipboardTextFn_DefaultImpl (line 10821) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function SetClipboardTextFn_DefaultImpl (line 10876) | static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
  function ImeSetInputScreenPosFn_DefaultImpl (line 10896) | static void ImeSetInputScreenPosFn_DefaultImpl(int x, int y)
  function ImeSetInputScreenPosFn_DefaultImpl (line 10914) | static void ImeSetInputScreenPosFn_DefaultImpl(int, int) {}
  function RenderViewportsThumbnails (line 10968) | static void RenderViewportsThumbnails()
  function MetricsHelpMarker (line 10990) | static void MetricsHelpMarker(const char* desc)
  type ImGui (line 11004) | namespace ImGui { void ShowFontAtlas(ImFontAtlas* atlas); }
  type Funcs (line 11039) | struct Funcs
    method ImRect (line 11041) | static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n)
    method ImRect (line 11060) | static ImRect GetWindowRect(ImGuiWindow* window, int rect_type)

FILE: R3nzSkin/imgui/imgui.h
  type ImDrawChannel (line 134) | struct ImDrawChannel
  type ImDrawCmd (line 135) | struct ImDrawCmd
  type ImDrawData (line 136) | struct ImDrawData
  type ImDrawList (line 137) | struct ImDrawList
  type ImDrawListSharedData (line 138) | struct ImDrawListSharedData
  type ImDrawListSplitter (line 139) | struct ImDrawListSplitter
  type ImDrawVert (line 140) | struct ImDrawVert
  type ImFont (line 141) | struct ImFont
  type ImFontAtlas (line 142) | struct ImFontAtlas
  type ImFontBuilderIO (line 143) | struct ImFontBuilderIO
  type ImFontConfig (line 144) | struct ImFontConfig
  type ImFontGlyph (line 145) | struct ImFontGlyph
  type ImFontGlyphRangesBuilder (line 146) | struct ImFontGlyphRangesBuilder
  type ImColor (line 147) | struct ImColor
  type ImGuiContext (line 148) | struct ImGuiContext
  type ImGuiIO (line 149) | struct ImGuiIO
  type ImGuiInputTextCallbackData (line 150) | struct ImGuiInputTextCallbackData
  type ImGuiListClipper (line 151) | struct ImGuiListClipper
  type ImGuiOnceUponAFrame (line 152) | struct ImGuiOnceUponAFrame
  type ImGuiPayload (line 153) | struct ImGuiPayload
  type ImGuiSizeCallbackData (line 154) | struct ImGuiSizeCallbackData
  type ImGuiStorage (line 155) | struct ImGuiStorage
  type ImGuiStyle (line 156) | struct ImGuiStyle
  type ImGuiTableSortSpecs (line 157) | struct ImGuiTableSortSpecs
  type ImGuiTableColumnSortSpecs (line 158) | struct ImGuiTableColumnSortSpecs
  type ImGuiTextBuffer (line 159) | struct ImGuiTextBuffer
  type ImGuiTextFilter (line 160) | struct ImGuiTextFilter
  type ImGuiViewport (line 161) | struct ImGuiViewport
  type ImGuiCol (line 167) | typedef int ImGuiCol;
  type ImGuiCond (line 168) | typedef int ImGuiCond;
  type ImGuiDataType (line 169) | typedef int ImGuiDataType;
  type ImGuiDir (line 170) | typedef int ImGuiDir;
  type ImGuiKey (line 171) | typedef int ImGuiKey;
  type ImGuiNavInput (line 172) | typedef int ImGuiNavInput;
  type ImGuiMouseButton (line 173) | typedef int ImGuiMouseButton;
  type ImGuiMouseCursor (line 174) | typedef int ImGuiMouseCursor;
  type ImGuiSortDirection (line 175) | typedef int ImGuiSortDirection;
  type ImGuiStyleVar (line 176) | typedef int ImGuiStyleVar;
  type ImGuiTableBgTarget (line 177) | typedef int ImGuiTableBgTarget;
  type ImDrawFlags (line 178) | typedef int ImDrawFlags;
  type ImDrawListFlags (line 179) | typedef int ImDrawListFlags;
  type ImFontAtlasFlags (line 180) | typedef int ImFontAtlasFlags;
  type ImGuiBackendFlags (line 181) | typedef int ImGuiBackendFlags;
  type ImGuiButtonFlags (line 182) | typedef int ImGuiButtonFlags;
  type ImGuiColorEditFlags (line 183) | typedef int ImGuiColorEditFlags;
  type ImGuiConfigFlags (line 184) | typedef int ImGuiConfigFlags;
  type ImGuiComboFlags (line 185) | typedef int ImGuiComboFlags;
  type ImGuiDragDropFlags (line 186) | typedef int ImGuiDragDropFlags;
  type ImGuiFocusedFlags (line 187) | typedef int ImGuiFocusedFlags;
  type ImGuiHoveredFlags (line 188) | typedef int ImGuiHoveredFlags;
  type ImGuiInputTextFlags (line 189) | typedef int ImGuiInputTextFlags;
  type ImGuiKeyModFlags (line 190) | typedef int ImGuiKeyModFlags;
  type ImGuiPopupFlags (line 191) | typedef int ImGuiPopupFlags;
  type ImGuiSelectableFlags (line 192) | typedef int ImGuiSelectableFlags;
  type ImGuiSliderFlags (line 193) | typedef int ImGuiSliderFlags;
  type ImGuiTabBarFlags (line 194) | typedef int ImGuiTabBarFlags;
  type ImGuiTabItemFlags (line 195) | typedef int ImGuiTabItemFlags;
  type ImGuiTableFlags (line 196) | typedef int ImGuiTableFlags;
  type ImGuiTableColumnFlags (line 197) | typedef int ImGuiTableColumnFlags;
  type ImGuiTableRowFlags (line 198) | typedef int ImGuiTableRowFlags;
  type ImGuiTreeNodeFlags (line 199) | typedef int ImGuiTreeNodeFlags;
  type ImGuiViewportFlags (line 200) | typedef int ImGuiViewportFlags;
  type ImGuiWindowFlags (line 201) | typedef int ImGuiWindowFlags;
  type ImDrawIdx (line 214) | typedef unsigned short ImDrawIdx;
  type ImGuiID (line 218) | typedef unsigned int        ImGuiID;
  type ImS8 (line 219) | typedef signed char         ImS8;
  type ImU8 (line 220) | typedef unsigned char       ImU8;
  type ImS16 (line 221) | typedef signed short        ImS16;
  type ImU16 (line 222) | typedef unsigned short      ImU16;
  type ImS32 (line 223) | typedef signed int          ImS32;
  type ImU32 (line 224) | typedef unsigned int        ImU32;
  type ImS64 (line 226) | typedef signed   __int64    ImS64;
  type ImU64 (line 227) | typedef unsigned __int64    ImU64;
  type ImS64 (line 230) | typedef int64_t             ImS64;
  type ImU64 (line 231) | typedef uint64_t            ImU64;
  type ImS64 (line 233) | typedef signed   long long  ImS64;
  type ImU64 (line 234) | typedef unsigned long long  ImU64;
  type ImWchar16 (line 239) | typedef unsigned short ImWchar16;
  type ImWchar32 (line 240) | typedef unsigned int ImWchar32;
  type ImWchar32 (line 242) | typedef ImWchar32 ImWchar;
  type ImWchar16 (line 244) | typedef ImWchar16 ImWchar;
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 255) | IM_MSVC_RUNTIME_CHECKS_OFF
  function const (line 261) | float  operator[] (size_t idx) const    { IM_ASSERT(idx <= 1); return (&...
  function ImVec4 (line 269) | struct ImVec4
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 278) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  type ImGuiWindowFlags_ (line 945) | enum ImGuiWindowFlags_
  type ImGuiInputTextFlags_ (line 985) | enum ImGuiInputTextFlags_
  type ImGuiTreeNodeFlags_ (line 1016) | enum ImGuiTreeNodeFlags_
  type ImGuiPopupFlags_ (line 1045) | enum ImGuiPopupFlags_
  type ImGuiSelectableFlags_ (line 1061) | enum ImGuiSelectableFlags_
  type ImGuiComboFlags_ (line 1072) | enum ImGuiComboFlags_
  type ImGuiTabBarFlags_ (line 1086) | enum ImGuiTabBarFlags_
  type ImGuiTabItemFlags_ (line 1102) | enum ImGuiTabItemFlags_
  type ImGuiTableFlags_ (line 1138) | enum ImGuiTableFlags_
  type ImGuiTableColumnFlags_ (line 1195) | enum ImGuiTableColumnFlags_
  type ImGuiTableRowFlags_ (line 1237) | enum ImGuiTableRowFlags_
  type ImGuiTableBgTarget_ (line 1252) | enum ImGuiTableBgTarget_
  type ImGuiFocusedFlags_ (line 1261) | enum ImGuiFocusedFlags_
  type ImGuiHoveredFlags_ (line 1273) | enum ImGuiHoveredFlags_
  type ImGuiDragDropFlags_ (line 1289) | enum ImGuiDragDropFlags_
  type ImGuiDataType_ (line 1311) | enum ImGuiDataType_
  type ImGuiDir_ (line 1327) | enum ImGuiDir_
  type ImGuiSortDirection_ (line 1338) | enum ImGuiSortDirection_
  type ImGuiKey_ (line 1346) | enum ImGuiKey_
  type ImGuiKeyModFlags_ (line 1374) | enum ImGuiKeyModFlags_
  type ImGuiNavInput_ (line 1387) | enum ImGuiNavInput_
  type ImGuiConfigFlags_ (line 1418) | enum ImGuiConfigFlags_
  type ImGuiBackendFlags_ (line 1434) | enum ImGuiBackendFlags_
  type ImGuiCol_ (line 1444) | enum ImGuiCol_
  type ImGuiStyleVar_ (line 1509) | enum ImGuiStyleVar_
  type ImGuiButtonFlags_ (line 1541) | enum ImGuiButtonFlags_
  type ImGuiColorEditFlags_ (line 1554) | enum ImGuiColorEditFlags_
  type ImGuiSliderFlags_ (line 1601) | enum ImGuiSliderFlags_
  type ImGuiMouseButton_ (line 1618) | enum ImGuiMouseButton_
  type ImGuiMouseCursor_ (line 1628) | enum ImGuiMouseCursor_
  type ImGuiCond_ (line 1646) | enum ImGuiCond_
  type ImNewWrapper (line 1665) | struct ImNewWrapper {}
  function delete (line 1667) | inline void  operator delete(void*, ImNewWrapper, void*)   {}
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 1685) | IM_MSVC_RUNTIME_CHECKS_OFF
  function clear (line 1704) | inline void         clear()                             { if (Data) { Si...
  function clear_delete (line 1705) | inline void         clear_delete()                      { for (int n = 0...
  function clear_destruct (line 1706) | inline void         clear_destruct()                    { for (int n = 0...
  function size_in_bytes (line 1710) | inline int          size_in_bytes() const               { return Size * ...
  function T (line 1713) | inline T&           operator[](int i)                   { IM_ASSERT(i >=...
  function T (line 1714) | inline const T&     operator[](int i) const             { IM_ASSERT(i >=...
  function T (line 1716) | inline T*           begin()                             { return Data; }
  function T (line 1717) | inline const T*     begin() const                       { return Data; }
  function T (line 1718) | inline T*           end()                               { return Data + ...
  function T (line 1719) | inline const T*     end() const                         { return Data + ...
  function T (line 1720) | inline T&           front()                             { IM_ASSERT(Size...
  function T (line 1721) | inline const T&     front() const                       { IM_ASSERT(Size...
  function T (line 1723) | inline const T&     back() const                        { IM_ASSERT(Size...
  function _grow_capacity (line 1726) | inline int          _grow_capacity(int sz) const        { int new_capaci...
  function resize (line 1727) | inline void         resize(int new_size)                { if (new_size >...
  function resize (line 1728) | inline void         resize(int new_size, const T& v)    { if (new_size >...
  function shrink (line 1729) | inline void         shrink(int new_size)                { IM_ASSERT(new_...
  function reserve (line 1730) | inline void         reserve(int new_capacity)           { if (new_capaci...
  function push_back (line 1733) | inline void         push_back(const T& v)               { if (Size == Ca...
  function pop_back (line 1734) | inline void         pop_back()                          { IM_ASSERT(Size...
  function push_front (line 1735) | inline void         push_front(const T& v)              { if (Size == 0)...
  function T (line 1736) | inline T*           erase(const T* it)                  { IM_ASSERT(it >...
  function T (line 1737) | inline T*           erase(const T* it, const T* it_last){ IM_ASSERT(it >...
  function T (line 1738) | inline T*           erase_unsorted(const T* it)         { IM_ASSERT(it >...
  function T (line 1739) | inline T*           insert(const T* it, const T& v)     { IM_ASSERT(it >...
  function contains (line 1740) | inline bool         contains(const T& v) const          { const T* data ...
  function T (line 1741) | inline T*           find(const T& v)                    { T* data = Data...
  function T (line 1742) | inline const T*     find(const T& v) const              { const T* data ...
  function find_erase (line 1743) | inline bool         find_erase(const T& v)              { const T* it = ...
  function find_erase_unsorted (line 1744) | inline bool         find_erase_unsorted(const T& v)     { const T* it = ...
  function index_from_ptr (line 1745) | inline int          index_from_ptr(const T* it) const   { IM_ASSERT(it >...
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 1747) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  type ImGuiIO (line 1812) | struct ImGuiIO
  function ClearSelection (line 1956) | struct ImGuiInputTextCallbackData
  type ImGuiSizeCallbackData (line 1987) | struct ImGuiSizeCallbackData
  function Clear (line 1996) | struct ImGuiPayload
  function IsDataType (line 2012) | bool IsDataType(const char* type) const { return DataFrameCount != -1 &&...
  type ImGuiTableColumnSortSpecs (line 2018) | struct ImGuiTableColumnSortSpecs
  type ImGuiTableSortSpecs (line 2032) | struct ImGuiTableSortSpecs
  type ImGuiOnceUponAFrame (line 2055) | struct ImGuiOnceUponAFrame
  function IsActive (line 2063) | struct ImGuiTextFilter
  type ImGuiTextBuffer (line 2090) | struct ImGuiTextBuffer
  function clear (line 2101) | void                clear()                 { Buf.clear(); }
  function reserve (line 2102) | void                reserve(int capacity)   { Buf.reserve(capacity); }
  function ImGuiStoragePair (line 2117) | struct ImGuiStorage
  function Clear (line 2134) | void                Clear() { Data.clear(); }
  type ImGuiListClipper (line 2177) | struct ImGuiListClipper
  type ImColor (line 2226) | struct ImColor
  function operator (line 2235) | inline operator ImU32() const                                   { return...
  function GetTexID (line 2275) | struct ImDrawCmd
  type ImDrawFlags_ (line 2342) | enum ImDrawFlags_
  type ImDrawListFlags_ (line 2362) | enum ImDrawListFlags_
  function ImDrawList (line 2380) | struct ImDrawList
  function ImVec2 (line 2410) | inline ImVec2   GetClipRectMin() const { const ImVec4& cr = _ClipRectSta...
  function PathClear (line 2447) | inline    void  PathClear()                                             ...
  function PathLineTo (line 2448) | inline    void  PathLineTo(const ImVec2& pos)                           ...
  function PathLineToMergeDuplicate (line 2449) | inline    void  PathLineToMergeDuplicate(const ImVec2& pos)             ...
  function PathFillConvex (line 2450) | inline    void  PathFillConvex(ImU32 col)                               ...
  function ChannelsSplit (line 2469) | inline void     ChannelsSplit(int count)    { _Splitter.Split(this, coun...
  function ChannelsMerge (line 2470) | inline void     ChannelsMerge()             { _Splitter.Merge(this); }
  function ChannelsSetCurrent (line 2471) | inline void     ChannelsSetCurrent(int n)   { _Splitter.SetCurrentChanne...
  function PrimWriteVtx (line 2481) | inline    void  PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 ...
  function PrimWriteIdx (line 2482) | inline    void  PrimWriteIdx(ImDrawIdx idx)                             ...
  function PrimVtx (line 2483) | inline    void  PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) ...
  function Clear (line 2506) | struct ImDrawData
  type ImFontConfig (line 2528) | struct ImFontConfig
  type ImFontGlyph (line 2557) | struct ImFontGlyph
  function Clear (line 2569) | struct ImFontGlyphRangesBuilder
  function GetBit (line 2575) | inline bool     GetBit(size_t n) const  { int off = (int)(n >> 5); ImU32...
  function SetBit (line 2576) | inline void     SetBit(size_t n)        { int off = (int)(n >> 5); ImU32...
  function AddChar (line 2577) | inline void     AddChar(ImWchar c)      { SetBit(c); }
  type ImFontAtlasFlags_ (line 2597) | enum ImFontAtlasFlags_
  function SetTexID (line 2622) | struct ImFontAtlas
  function ImFontAtlasCustomRect (line 2677) | ImFontAtlasCustomRect*      GetCustomRectByIndex(int index) { IM_ASSERT(...
  type ImFontAtlasCustomRect (line 2717) | typedef ImFontAtlasCustomRect    CustomRect;
  type ImFont (line 2724) | struct ImFont
  type ImGuiViewportFlags_ (line 2780) | enum ImGuiViewportFlags_
  function GetCenter (line 2795) | struct ImGuiViewport
  function ListBoxFooter (line 2822) | static inline void  ListBoxFooter() { EndListBox(); }
  function DragFloat (line 2830) | static inline bool  DragFloat(const char* label, float* v, float v_speed...
  function DragFloat2 (line 2831) | static inline bool  DragFloat2(const char* label, float v[2], float v_sp...
  function DragFloat3 (line 2832) | static inline bool  DragFloat3(const char* label, float v[3], float v_sp...
  function DragFloat4 (line 2833) | static inline bool  DragFloat4(const char* label, float v[4], float v_sp...
  function SliderFloat (line 2836) | static inline bool  SliderFloat(const char* label, float* v, float v_min...
  function SliderFloat2 (line 2837) | static inline bool  SliderFloat2(const char* label, float v[2], float v_...
  function SliderFloat3 (line 2838) | static inline bool  SliderFloat3(const char* label, float v[3], float v_...
  function SliderFloat4 (line 2839) | static inline bool  SliderFloat4(const char* label, float v[4], float v_...
  function BeginPopupContextWindow (line 2841) | static inline bool  BeginPopupContextWindow(const char* str_id, ImGuiMou...
  function TreeAdvanceToLabelPos (line 2843) | static inline void  TreeAdvanceToLabelPos()             { SetCursorPosX(...
  function GetContentRegionAvailWidth (line 2847) | static inline float GetContentRegionAvailWidth()        { return GetCont...
  type ImDrawFlags (line 2863) | typedef ImDrawFlags ImDrawCornerFlags;
  type ImDrawCornerFlags_ (line 2864) | enum ImDrawCornerFlags_

FILE: R3nzSkin/imgui/imgui_demo.cpp
  function HelpMarker (line 190) | static void HelpMarker(const char* desc)
  function ShowDemoWindowWidgets (line 531) | static void ShowDemoWindowWidgets()
  function ShowDemoWindowLayout (line 2357) | static void ShowDemoWindowLayout()
  function ShowDemoWindowPopups (line 3123) | static void ShowDemoWindowPopups()
  type MyItemColumnID (line 3415) | enum MyItemColumnID
  type MyItem (line 3424) | struct MyItem
    method CompareWithSortSpecs (line 3440) | CompareWithSortSpecs(const void* lhs, const void* rhs)
  function PushStyleCompact (line 3473) | static void PushStyleCompact()
  function PopStyleCompact (line 3480) | static void PopStyleCompact()
  function EditTableSizingFlags (line 3486) | static void EditTableSizingFlags(ImGuiTableFlags* p_flags)
  function EditTableColumnsFlags (line 3528) | static void EditTableColumnsFlags(ImGuiTableColumnFlags* p_flags)
  function ShowTableColumnsStatusFlags (line 3552) | static void ShowTableColumnsStatusFlags(ImGuiTableColumnFlags flags)
  function ShowDemoWindowTables (line 3560) | static void ShowDemoWindowTables()
  function ShowExampleAppConsole (line 6545) | static void ShowExampleAppConsole(bool* p_open)
  function Draw (line 6559) | struct ExampleAppLog
  function ShowExampleAppLog (line 6680) | static void ShowExampleAppLog(bool* p_open)
  function ShowExampleAppLayout (line 6714) | static void ShowExampleAppLayout(bool* p_open)
  function ShowPlaceholderObject (line 6779) | static void ShowPlaceholderObject(const char* prefix, int uid)
  function ShowExampleAppPropertyEditor (line 6827) | static void ShowExampleAppPropertyEditor(bool* p_open)
  function ShowExampleAppLongText (line 6862) | static void ShowExampleAppLongText(bool* p_open)
  function ShowExampleAppAutoResize (line 6924) | static void ShowExampleAppAutoResize(bool* p_open)
  function ShowExampleAppConstrainedResize (line 6948) | static void ShowExampleAppConstrainedResize(bool* p_open)
  function ShowExampleAppSimpleOverlay (line 7002) | static void ShowExampleAppSimpleOverlay(bool* p_open)
  function ShowExampleAppFullscreen (line 7049) | static void ShowExampleAppFullscreen(bool* p_open)
  function ShowExampleAppWindowTitles (line 7087) | static void ShowExampleAppWindowTitles(bool*)
  function ShowExampleAppCustomRendering (line 7120) | static void ShowExampleAppCustomRendering(bool* p_open)
  type MyDocument (line 7361) | struct MyDocument
    method MyDocument (line 7370) | MyDocument(const char* name, bool open = true, const ImVec4& color = I...
    method DoOpen (line 7378) | void DoOpen()       { Open = true; }
    method DoQueueClose (line 7379) | void DoQueueClose() { WantClose = true; }
    method DoForceClose (line 7380) | void DoForceClose() { Open = false; Dirty = false; }
    method DoSave (line 7381) | void DoSave()       { Dirty = false; }
    method DisplayContents (line 7384) | static void DisplayContents(MyDocument* doc)
    method DisplayContextMenu (line 7401) | static void DisplayContextMenu(MyDocument* doc)
  type ExampleAppDocuments (line 7416) | struct ExampleAppDocuments
    method ExampleAppDocuments (line 7420) | ExampleAppDocuments()
  function NotifyOfDocumentsClosedElsewhere (line 7439) | static void NotifyOfDocumentsClosedElsewhere(ExampleAppDocuments& app)
  function ShowExampleAppDocuments (line 7450) | void ShowExampleAppDocuments(bool* p_open)

FILE: R3nzSkin/imgui/imgui_draw.cpp
  function ImDrawList (line 441) | ImDrawList* ImDrawList::CloneOutput() const
  function ImVec2 (line 1224) | ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec...
  function ImVec2 (line 1234) | ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const I...
  function PathBezierCubicCurveToCasteljau (line 1244) | static void PathBezierCubicCurveToCasteljau(ImVector<ImVec2>* path, floa...
  function PathBezierQuadraticCurveToCasteljau (line 1269) | static void PathBezierQuadraticCurveToCasteljau(ImVector<ImVec2>* path, ...
  function ImDrawFlags (line 1318) | static inline ImDrawFlags FixRectCornerFlags(ImDrawFlags flags)
  function ImFont (line 2067) | ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
  function Decode85Byte (line 2103) | static unsigned int Decode85Byte(char c)                                ...
  function Decode85 (line 2104) | static void         Decode85(const unsigned char* src, unsigned char* dst)
  function ImFont (line 2116) | ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
  function ImFont (line 2137) | ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size...
  function ImFont (line 2159) | ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, ...
  function ImFont (line 2172) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compress...
  function ImFont (line 2184) | ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* co...
  function ImFontAtlasBuildMultiplyCalcLookupTable (line 2282) | void    ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[...
  function ImFontAtlasBuildMultiplyRectAlpha8 (line 2291) | void    ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256...
  type ImFontBuildSrcData (line 2302) | struct ImFontBuildSrcData
  type ImFontBuildDstData (line 2317) | struct ImFontBuildDstData
  function UnpackBitVectorToFlatIndexList (line 2325) | static void UnpackBitVectorToFlatIndexList(const ImBitVector* in, ImVect...
  function ImFontAtlasBuildWithStbTruetype (line 2337) | static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
  function ImFontBuilderIO (line 2589) | const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype()
  function ImFontAtlasBuildSetupFont (line 2598) | void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontC...
  function ImFontAtlasBuildPackCustomRects (line 2613) | void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_con...
  function ImFontAtlasBuildRender8bppRectFromString (line 2640) | void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x,...
  function ImFontAtlasBuildRender32bppRectFromString (line 2650) | void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x...
  function ImFontAtlasBuildRenderDefaultTexData (line 2660) | static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
  function ImFontAtlasBuildRenderLinesTexData (line 2700) | static void ImFontAtlasBuildRenderLinesTexData(ImFontAtlas* atlas)
  function ImFontAtlasBuildInit (line 2752) | void ImFontAtlasBuildInit(ImFontAtlas* atlas)
  function ImFontAtlasBuildFinish (line 2773) | void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
  function ImWchar (line 2803) | const ImWchar*   ImFontAtlas::GetGlyphRangesDefault()
  function ImWchar (line 2813) | const ImWchar*  ImFontAtlas::GetGlyphRangesKorean()
  function ImWchar (line 2826) | const ImWchar*  ImFontAtlas::GetGlyphRangesChineseFull()
  function UnpackAccumulativeOffsetsIntoRanges (line 2842) | static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, cons...
  function ImWchar (line 2856) | const ImWchar*  ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
  function ImWchar (line 2924) | const ImWchar*  ImFontAtlas::GetGlyphRangesJapanese()
  function ImWchar (line 3014) | const ImWchar*  ImFontAtlas::GetGlyphRangesCyrillic()
  function ImWchar (line 3027) | const ImWchar*  ImFontAtlas::GetGlyphRangesThai()
  function ImWchar (line 3039) | const ImWchar*  ImFontAtlas::GetGlyphRangesVietnamese()
  function ImWchar (line 3135) | static ImWchar FindFirstExistingGlyph(ImFont* font, const ImWchar* candi...
  function ImFontGlyph (line 3305) | const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
  function ImFontGlyph (line 3315) | const ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c) const
  function ImVec2 (line 3424) | ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_wid...
  function ImAcos01 (line 3827) | static inline float ImAcos01(float x)
  function stb_decompress_length (line 3962) | static unsigned int stb_decompress_length(const unsigned char *input)
  function stb__match (line 3970) | static void stb__match(const unsigned char *data, unsigned int length)
  function stb__lit (line 3979) | static void stb__lit(const unsigned char *data, unsigned int length)
  function stb_adler32 (line 4009) | static unsigned int stb_adler32(unsigned int adler32, unsigned char *buf...
  function stb_decompress (line 4040) | static unsigned int stb_decompress(unsigned char *output, const unsigned...

FILE: R3nzSkin/imgui/imgui_impl_dx11.cpp
  type ImGui_ImplDX11_Data (line 44) | struct ImGui_ImplDX11_Data
    method ImGui_ImplDX11_Data (line 63) | ImGui_ImplDX11_Data()       { memset(this, 0, sizeof(*this)); VertexBu...
  type VERTEX_CONSTANT_BUFFER (line 66) | struct VERTEX_CONSTANT_BUFFER
  function ImGui_ImplDX11_Data (line 73) | static ImGui_ImplDX11_Data* ImGui_ImplDX11_GetBackendData()
    method ImGui_ImplDX11_Data (line 63) | ImGui_ImplDX11_Data()       { memset(this, 0, sizeof(*this)); VertexBu...
  function ImGui_ImplDX11_SetupRenderState (line 79) | static void ImGui_ImplDX11_SetupRenderState(ImDrawData* draw_data, ID3D1...
  function ImGui_ImplDX11_RenderDrawData (line 117) | void ImGui_ImplDX11_RenderDrawData(ImDrawData* draw_data)
  function ImGui_ImplDX11_CreateFontsTexture (line 300) | static void ImGui_ImplDX11_CreateFontsTexture()
  function ImGui_ImplDX11_CreateDeviceObjects (line 361) | bool    ImGui_ImplDX11_CreateDeviceObjects()
  function ImGui_ImplDX11_InvalidateDeviceObjects (line 515) | void    ImGui_ImplDX11_InvalidateDeviceObjects()
  function ImGui_ImplDX11_Init (line 534) | bool    ImGui_ImplDX11_Init(ID3D11Device* device, ID3D11DeviceContext* d...
  function ImGui_ImplDX11_Shutdown (line 566) | void ImGui_ImplDX11_Shutdown()
  function ImGui_ImplDX11_NewFrame (line 580) | void ImGui_ImplDX11_NewFrame()

FILE: R3nzSkin/imgui/imgui_impl_dx11.h
  type ID3D11Device (line 16) | struct ID3D11Device
  type ID3D11DeviceContext (line 17) | struct ID3D11DeviceContext

FILE: R3nzSkin/imgui/imgui_impl_win32.cpp
  type ImGui_ImplWin32_Data (line 70) | struct ImGui_ImplWin32_Data
    method ImGui_ImplWin32_Data (line 87) | ImGui_ImplWin32_Data()      { memset(this, 0, sizeof(*this)); }
  function ImGui_ImplWin32_Data (line 94) | static ImGui_ImplWin32_Data* ImGui_ImplWin32_GetBackendData()
    method ImGui_ImplWin32_Data (line 87) | ImGui_ImplWin32_Data()      { memset(this, 0, sizeof(*this)); }
  function ImGui_ImplWin32_Init (line 100) | bool    ImGui_ImplWin32_Init(void* hwnd)
  function ImGui_ImplWin32_Shutdown (line 173) | void    ImGui_ImplWin32_Shutdown()
  function ImGui_ImplWin32_UpdateMouseCursor (line 189) | static bool ImGui_ImplWin32_UpdateMouseCursor()
  function ImGui_ImplWin32_UpdateMousePos (line 222) | static void ImGui_ImplWin32_UpdateMousePos()
  function ImGui_ImplWin32_UpdateGamepads (line 257) | static void ImGui_ImplWin32_UpdateGamepads()
  function ImGui_ImplWin32_NewFrame (line 306) | void    ImGui_ImplWin32_NewFrame()
  function IMGUI_IMPL_API (line 358) | IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT ms...
  function BOOL (line 473) | static BOOL _IsWindowsVersionOrGreater(WORD major, WORD minor, WORD)
  function ImGui_ImplWin32_EnableDpiAwareness (line 514) | void ImGui_ImplWin32_EnableDpiAwareness()
  function ImGui_ImplWin32_GetDpiScaleForMonitor (line 543) | float ImGui_ImplWin32_GetDpiScaleForMonitor(void* monitor)
  function ImGui_ImplWin32_GetDpiScaleForHwnd (line 569) | float ImGui_ImplWin32_GetDpiScaleForHwnd(void* hwnd)
  function ImGui_ImplWin32_EnableAlphaCompositing (line 586) | void ImGui_ImplWin32_EnableAlphaCompositing(void* hwnd)

FILE: R3nzSkin/imgui/imgui_internal.h
  type ImBitVector (line 116) | struct ImBitVector
  type ImRect (line 117) | struct ImRect
  type ImDrawDataBuilder (line 118) | struct ImDrawDataBuilder
  type ImDrawListSharedData (line 119) | struct ImDrawListSharedData
  type ImGuiColorMod (line 120) | struct ImGuiColorMod
  type ImGuiContext (line 121) | struct ImGuiContext
  type ImGuiContextHook (line 122) | struct ImGuiContextHook
  type ImGuiDataTypeInfo (line 123) | struct ImGuiDataTypeInfo
  type ImGuiGroupData (line 124) | struct ImGuiGroupData
  type ImGuiInputTextState (line 125) | struct ImGuiInputTextState
  type ImGuiLastItemData (line 126) | struct ImGuiLastItemData
  type ImGuiMenuColumns (line 127) | struct ImGuiMenuColumns
  type ImGuiNavItemData (line 128) | struct ImGuiNavItemData
  type ImGuiMetricsConfig (line 129) | struct ImGuiMetricsConfig
  type ImGuiNextWindowData (line 130) | struct ImGuiNextWindowData
  type ImGuiNextItemData (line 131) | struct ImGuiNextItemData
  type ImGuiOldColumnData (line 132) | struct ImGuiOldColumnData
  type ImGuiOldColumns (line 133) | struct ImGuiOldColumns
  type ImGuiPopupData (line 134) | struct ImGuiPopupData
  type ImGuiSettingsHandler (line 135) | struct ImGuiSettingsHandler
  type ImGuiStackSizes (line 136) | struct ImGuiStackSizes
  type ImGuiStyleMod (line 137) | struct ImGuiStyleMod
  type ImGuiTabBar (line 138) | struct ImGuiTabBar
  type ImGuiTabItem (line 139) | struct ImGuiTabItem
  type ImGuiTable (line 140) | struct ImGuiTable
  type ImGuiTableColumn (line 141) | struct ImGuiTableColumn
  type ImGuiTableTempData (line 142) | struct ImGuiTableTempData
  type ImGuiTableSettings (line 143) | struct ImGuiTableSettings
  type ImGuiTableColumnsSettings (line 144) | struct ImGuiTableColumnsSettings
  type ImGuiWindow (line 145) | struct ImGuiWindow
  type ImGuiWindowTempData (line 146) | struct ImGuiWindowTempData
  type ImGuiWindowSettings (line 147) | struct ImGuiWindowSettings
  type ImGuiLayoutType (line 150) | typedef int ImGuiLayoutType;
  type ImGuiItemFlags (line 151) | typedef int ImGuiItemFlags;
  type ImGuiItemAddFlags (line 152) | typedef int ImGuiItemAddFlags;
  type ImGuiItemStatusFlags (line 153) | typedef int ImGuiItemStatusFlags;
  type ImGuiOldColumnFlags (line 154) | typedef int ImGuiOldColumnFlags;
  type ImGuiNavHighlightFlags (line 155) | typedef int ImGuiNavHighlightFlags;
  type ImGuiNavDirSourceFlags (line 156) | typedef int ImGuiNavDirSourceFlags;
  type ImGuiNavMoveFlags (line 157) | typedef int ImGuiNavMoveFlags;
  type ImGuiNextItemDataFlags (line 158) | typedef int ImGuiNextItemDataFlags;
  type ImGuiNextWindowDataFlags (line 159) | typedef int ImGuiNextWindowDataFlags;
  type ImGuiSeparatorFlags (line 160) | typedef int ImGuiSeparatorFlags;
  type ImGuiTextFlags (line 161) | typedef int ImGuiTextFlags;
  type ImGuiTooltipFlags (line 162) | typedef int ImGuiTooltipFlags;
  function namespace (line 179) | namespace ImStb
  function ImIsPowerOfTwo (line 307) | static inline bool      ImIsPowerOfTwo(int v)           { return v != 0 ...
  function ImIsPowerOfTwo (line 308) | static inline bool      ImIsPowerOfTwo(ImU64 v)         { return v != 0 ...
  function ImUpperPowerOfTwo (line 309) | static inline int       ImUpperPowerOfTwo(int v)        { v--; v |= v >>...
  function ImCharIsBlankA (line 330) | static inline bool      ImCharIsBlankA(char c)          { return c == ' ...
  function ImCharIsBlankW (line 331) | static inline bool      ImCharIsBlankW(unsigned int c)  { return c == ' ...
  function ImFileHandle (line 369) | static inline ImFileHandle  ImFileOpen(const char*, const char*)        ...
  function ImFileClose (line 370) | static inline bool          ImFileClose(ImFileHandle)                   ...
  function ImU64 (line 371) | static inline ImU64         ImFileGetSize(ImFileHandle)                 ...
  function ImU64 (line 372) | static inline ImU64         ImFileRead(void*, ImU64, ImU64, ImFileHandle...
  function ImU64 (line 373) | static inline ImU64         ImFileWrite(const void*, ImU64, ImU64, ImFil...
  type FILE (line 376) | typedef FILE* ImFileHandle;
  function ImPow (line 401) | static inline float  ImPow(float x, float y)    { return powf(x, y); }
  function ImPow (line 402) | static inline double ImPow(double x, double y)  { return pow(x, y); }
  function ImLog (line 403) | static inline float  ImLog(float x)             { return logf(x); }
  function ImLog (line 404) | static inline double ImLog(double x)            { return log(x); }
  function ImAbs (line 405) | static inline int    ImAbs(int x)               { return x < 0 ? -x : x; }
  function ImAbs (line 406) | static inline float  ImAbs(float x)             { return fabsf(x); }
  function ImAbs (line 407) | static inline double ImAbs(double x)            { return fabs(x); }
  function ImSign (line 408) | static inline float  ImSign(float x)            { return (x < 0.0f) ? -1...
  function ImSign (line 409) | static inline double ImSign(double x)           { return (x < 0.0) ? -1....
  function ImRsqrt (line 411) | static inline float  ImRsqrt(float x)           { return _mm_cvtss_f32(_...
  function ImRsqrt (line 413) | static inline float  ImRsqrt(float x)           { return 1.0f / sqrtf(x); }
  function ImRsqrt (line 415) | static inline double ImRsqrt(double x)          { return 1.0 / sqrt(x); }
  function T (line 419) | inline T ImMin(T lhs, T rhs)                        { return lhs < rhs ?...
  function T (line 420) | inline T ImMax(T lhs, T rhs)                        { return lhs >= rhs ...
  function T (line 421) | inline T ImClamp(T v, T mn, T mx)                   { return (v < mn) ? ...
  function T (line 422) | inline T ImLerp(T a, T b, float t)                  { return (T)(a + (b ...
  function ImSwap (line 423) | inline void ImSwap(T& a, T& b)                      { T tmp = a; a = b; ...
  function T (line 424) | inline T ImAddClampOverflow(T a, T b, T mn, T mx)   { if (b < 0 && (a < ...
  function T (line 425) | inline T ImSubClampOverflow(T a, T b, T mn, T mx)   { if (b > 0 && (a < ...
  function ImVec2 (line 427) | static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 428) | static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImVec2 (line 429) | static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 m...
  function ImVec2 (line 430) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t)  ...
  function ImVec2 (line 431) | static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVe...
  function ImVec4 (line 432) | static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t)  ...
  function ImSaturate (line 433) | static inline float  ImSaturate(float f)                                ...
  function ImLengthSqr (line 434) | static inline float  ImLengthSqr(const ImVec2& lhs)                     ...
  function ImLengthSqr (line 435) | static inline float  ImLengthSqr(const ImVec4& lhs)                     ...
  function ImInvLength (line 436) | static inline float  ImInvLength(const ImVec2& lhs, float fail_value)   ...
  function ImFloor (line 437) | static inline float  ImFloor(float f)                                   ...
  function ImFloorSigned (line 438) | static inline float  ImFloorSigned(float f)                             ...
  function ImVec2 (line 439) | static inline ImVec2 ImFloor(const ImVec2& v)                           ...
  function ImModPositive (line 440) | static inline int    ImModPositive(int a, int b)                        ...
  function ImDot (line 441) | static inline float  ImDot(const ImVec2& a, const ImVec2& b)            ...
  function ImVec2 (line 442) | static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a)...
  function ImLinearSweep (line 443) | static inline float  ImLinearSweep(float current, float target, float sp...
  function ImVec2 (line 444) | static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs)        ...
  function ImTriangleArea (line 456) | inline float         ImTriangleArea(const ImVec2& a, const ImVec2& b, co...
  function IM_MSVC_RUNTIME_CHECKS_OFF (line 461) | IM_MSVC_RUNTIME_CHECKS_OFF
  function ImVec2ih (line 470) | struct ImVec2ih
  function explicit (line 475) | explicit ImVec2ih(const ImVec2& rhs) { x = (short)rhs.x; y = (short)rhs....
  function ImRect (line 480) | struct IMGUI_API ImRect
  function Contains (line 499) | bool        Contains(const ImVec2& p) const     { return p.x     >= Min....
  function Contains (line 500) | bool        Contains(const ImRect& r) const     { return r.Min.x >= Min....
  function Overlaps (line 501) | bool        Overlaps(const ImRect& r) const     { return r.Min.y <  Max....
  function Add (line 502) | void        Add(const ImVec2& p)                { if (Min.x > p.x)     M...
  function Add (line 503) | void        Add(const ImRect& r)                { if (Min.x > r.Min.x) M...
  function Expand (line 504) | void        Expand(const float amount)          { Min.x -= amount;   Min...
  function Expand (line 505) | void        Expand(const ImVec2& amount)        { Min.x -= amount.x; Min...
  function Translate (line 506) | void        Translate(const ImVec2& d)          { Min.x += d.x; Min.y +=...
  function TranslateX (line 507) | void        TranslateX(float dx)                { Min.x += dx; Max.x += ...
  function TranslateY (line 508) | void        TranslateY(float dy)                { Min.y += dy; Max.y += ...
  function ClipWith (line 509) | void        ClipWith(const ImRect& r)           { Min = ImMax(Min, r.Min...
  function ClipWithFull (line 510) | void        ClipWithFull(const ImRect& r)       { Min = ImClamp(Min, r.M...
  function Floor (line 511) | void        Floor()                             { Min.x = IM_FLOOR(Min.x...
  function IM_MSVC_RUNTIME_CHECKS_RESTORE (line 515) | IM_MSVC_RUNTIME_CHECKS_RESTORE
  function ImBitArrayClearBit (line 519) | inline void     ImBitArrayClearBit(ImU32* arr, int n)           { ImU32 ...
  function ImBitArraySetBit (line 520) | inline void     ImBitArraySetBit(ImU32* arr, int n)             { ImU32 ...
  function ImBitArraySetBitRange (line 521) | inline void     ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Work...
  function IMGUI_API (line 537) | IMGUI_API ImBitArray
  function ImBitVector (line 551) | struct IMGUI_API ImBitVector
  function set (line 574) | inline void         set(T* data, int size)      { Data = data; DataEnd =...
  function set (line 575) | inline void         set(T* data, T* data_end)   { Data = data; DataEnd =...
  function T (line 578) | inline T&           operator[](int i)           { T* p = Data + i; IM_AS...
  function T (line 579) | inline const T&     operator[](int i) const     { const T* p = Data + i;...
  function T (line 581) | inline T*           begin()                     { return Data; }
  function T (line 582) | inline const T*     begin() const               { return Data; }
  function T (line 583) | inline T*           end()                       { return DataEnd; }
  function T (line 584) | inline const T*     end() const                 { return DataEnd; }
  function index_from_ptr (line 587) | inline int  index_from_ptr(const T* it) const   { IM_ASSERT(it >= Data &...
  function GetArenaSizeInBytes (line 604) | inline int   GetArenaSizeInBytes()              { return CurrOff; }
  function SetArenaBasePtr (line 605) | inline void  SetArenaBasePtr(void* base_ptr)    { BasePtr = (char*)base_...
  function GetSpan (line 609) | void  GetSpan(int n, ImSpan<T>* span)    { span->set((T*)GetSpanPtrBegin...
  type ImPoolIdx (line 615) | typedef int ImPoolIdx;
  function IMGUI_API (line 617) | IMGUI_API ImPool
  function IMGUI_API (line 654) | IMGUI_API ImChunkStream
  function ImDrawListSharedData (line 704) | struct IMGUI_API ImDrawListSharedData
  function ClearFreeMemory (line 724) | struct ImDrawDataBuilder
  function GetDrawListCount (line 730) | int  GetDrawListCount() const   { int count = 0; for (int n = 0; n < IM_...
  function ImGuiComboPreviewData (line 1014) | struct IMGUI_API ImGuiComboPreviewData
  function ImGuiGroupData (line 1027) | struct IMGUI_API ImGuiGroupData
  function ImGuiMenuColumns (line 1043) | struct IMGUI_API ImGuiMenuColumns
  function ImGuiInputTextState (line 1062) | struct IMGUI_API ImGuiInputTextState
  type ImGuiPopupData (line 1100) | struct ImGuiPopupData
  type ImGuiNextWindowDataFlags_ (line 1127) | enum ImGuiNextWindowDataFlags_
  function ClearFlags (line 1141) | struct ImGuiNextWindowData
  type ImGuiNextItemDataFlags_ (line 1163) | enum ImGuiNextItemDataFlags_
  function ClearFlags (line 1170) | struct ImGuiNextItemData
  type ImGuiLastItemData (line 1183) | struct ImGuiLastItemData
  type ImGuiWindowStackData (line 1195) | struct ImGuiWindowStackData
  type ImGuiShrinkWidthItem (line 1201) | struct ImGuiShrinkWidthItem
  function ImGuiPtrOrIndex (line 1207) | struct ImGuiPtrOrIndex
  type ImGuiOldColumnFlags_ (line 1221) | enum ImGuiOldColumnFlags_
  type ImGuiOldColumnData (line 1241) | struct ImGuiOldColumnData
  type ImGuiOldColumns (line 1251) | struct ImGuiOldColumns
  function ImGuiViewport (line 1294) | struct ImGuiViewportP : public ImGuiViewport
  type ImGuiWindowSettings (line 1327) | struct ImGuiWindowSettings
  type ImGuiSettingsHandler (line 1339) | struct ImGuiSettingsHandler
  function ImGuiStackSizes (line 1380) | struct IMGUI_API ImGuiStackSizes
  type ImGuiContextHookType (line 1400) | enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiConte...
  type ImGuiContextHook (line 1402) | struct ImGuiContextHook
  type ImGuiContext (line 1417) | struct ImGuiContext
  function ImGuiWindowTempData (line 1823) | struct IMGUI_API ImGuiWindowTempData
  function ImGuiWindow (line 1872) | struct IMGUI_API ImGuiWindow
  type ImGuiTabBarFlagsPrivate_ (line 1990) | enum ImGuiTabBarFlagsPrivate_
  type ImGuiTabItemFlagsPrivate_ (line 1998) | enum ImGuiTabItemFlagsPrivate_
  type ImGuiTabItem (line 2006) | struct ImGuiTabItem
  type ImGuiTabBar (line 2024) | struct ImGuiTabBar
  type ImS8 (line 2076) | typedef ImS8 ImGuiTableColumnIdx;
  type ImU8 (line 2077) | typedef ImU8 ImGuiTableDrawChannelIdx;
  type ImGuiTableCellData (line 2142) | struct ImGuiTableCellData
  function ImGuiTable (line 2149) | struct ImGuiTable
  type ImGuiTableTempData (line 2262) | struct ImGuiTableTempData
  type ImGuiTableSettings (line 2307) | struct ImGuiTableSettings
  function namespace (line 2325) | namespace ImGui
  function IsNavInputDown (line 2492) | inline bool             IsNavInputDown(ImGuiNavInput n)                 ...
  function IsNavInputTest (line 2493) | inline bool             IsNavInputTest(ImGuiNavInput n, ImGuiInputReadMo...
  function ImGuiTable (line 2523) | inline    ImGuiTable*   GetCurrentTable() { ImGuiContext& g = *GImGui; r...
  function RenderBullet (line 2603) | inline void RenderBullet(ImVec2 pos)                                { Im...
  function TempInputIsActive (line 2654) | inline bool             TempInputIsActive(ImGuiID id)       { ImGuiConte...
  function ImGuiInputTextState (line 2655) | inline ImGuiInputTextState* GetInputTextState(ImGuiID id)   { ImGuiConte...
  function DebugStartItemPicker (line 2677) | inline void             DebugStartItemPicker()                          ...
  type ImFontBuilderIO (line 2702) | struct ImFontBuilderIO

FILE: R3nzSkin/imgui/imgui_tables.cpp
  function ImGuiTableFlags (line 264) | inline ImGuiTableFlags TableFixFlags(ImGuiTableFlags flags, ImGuiWindow*...
  function ImGuiTable (line 297) | ImGuiTable* ImGui::TableFindByID(ImGuiID id)
  function TableSetupColumnFlags (line 655) | static void TableSetupColumnFlags(ImGuiTable* table, ImGuiTableColumn* c...
  function ImGuiTableColumnFlags (line 1557) | ImGuiTableColumnFlags ImGui::TableGetColumnFlags(int column_n)
  function ImRect (line 1575) | ImRect ImGui::TableGetCellBgRect(const ImGuiTable* table, int column_n)
  function ImGuiID (line 1588) | ImGuiID ImGui::TableGetColumnResizeID(const ImGuiTable* table, int colum...
  type MergeGroup (line 2331) | struct MergeGroup
    method MergeGroup (line 2337) | MergeGroup() { ChannelsCount = 0; }
  function ImGuiTableSortSpecs (line 2599) | ImGuiTableSortSpecs* ImGui::TableGetSortSpecs()
  function ImGuiSortDirection (line 2617) | static inline ImGuiSortDirection TableGetColumnAvailSortDirection(ImGuiT...
  function ImGuiSortDirection (line 2636) | ImGuiSortDirection ImGui::TableGetColumnNextSortDirection(ImGuiTableColu...
  function TableSettingsInit (line 3138) | static void TableSettingsInit(ImGuiTableSettings* settings, ImGuiID id, ...
  function TableSettingsCalcChunkSize (line 3150) | static size_t TableSettingsCalcChunkSize(int columns_count)
  function ImGuiTableSettings (line 3155) | ImGuiTableSettings* ImGui::TableSettingsCreate(ImGuiID id, int columns_c...
  function ImGuiTableSettings (line 3164) | ImGuiTableSettings* ImGui::TableSettingsFindByID(ImGuiID id)
  function ImGuiTableSettings (line 3175) | ImGuiTableSettings* ImGui::TableGetBoundSettings(ImGuiTable* table)
  function TableSettingsHandler_ClearAll (line 3318) | static void TableSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettin...
  function TableSettingsHandler_ApplyAll (line 3328) | static void TableSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettin...
  function TableSettingsHandler_ReadLine (line 3358) | static void TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHa...
  function TableSettingsHandler_WriteAll (line 3384) | static void TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettin...
  function GetDraggedColumnOffset (line 3666) | static float GetDraggedColumnOffset(ImGuiOldColumns* columns, int column...
  function GetColumnWidthEx (line 3699) | static float GetColumnWidthEx(ImGuiOldColumns* columns, int column_index...
  function ImGuiOldColumns (line 3795) | ImGuiOldColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID...
  function ImGuiID (line 3808) | ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count)

FILE: R3nzSkin/imgui/imgui_widgets.cpp
  function ImGuiID (line 846) | ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis)
  function ImRect (line 852) | ImRect ImGui::GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis)
  function CalcMaxPopupHeightFromItemCount (line 1544) | static float CalcMaxPopupHeightFromItemCount(int items_count)
  function Items_ArrayGetter (line 1743) | static bool Items_ArrayGetter(void* data, int idx, const char** out_text)
  function Items_SingleStringGetter (line 1752) | static bool Items_SingleStringGetter(void* data, int idx, const char** o...
  function ImGuiDataTypeInfo (line 1895) | const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
  function DataTypeCompareT (line 2078) | static int DataTypeCompareT(const T* lhs, const T* rhs)
  function DataTypeClampT (line 2106) | static bool DataTypeClampT(T* v, const T* v_min, const T* v_max)
  function GetMinimumStepAtDecimalPrecision (line 2134) | static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
  function SanitizeFormatString (line 2158) | static void SanitizeFormatString(const char* fmt, char* fmt_out, size_t ...
  function TYPE (line 2173) | TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType dat...
  function TYPE (line 2707) | TYPE ImGui::ScaleValueFromRatioT(ImGuiDataType data_type, float t, TYPE ...
  function ImParseFormatPrecision (line 3320) | int ImParseFormatPrecision(const char* fmt, int default_precision)
  function InputTextCalcTextLenAndLineCount (line 3590) | static int InputTextCalcTextLenAndLineCount(const char* text_begin, cons...
  function ImVec2 (line 3604) | static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const Im...
  type ImStb (line 3650) | namespace ImStb
    function STB_TEXTEDIT_STRINGLEN (line 3653) | static int     STB_TEXTEDIT_STRINGLEN(const ImGuiInputTextState* obj) ...
    function ImWchar (line 3654) | static ImWchar STB_TEXTEDIT_GETCHAR(const ImGuiInputTextState* obj, in...
    function STB_TEXTEDIT_GETWIDTH (line 3655) | static float   STB_TEXTEDIT_GETWIDTH(ImGuiInputTextState* obj, int lin...
    function STB_TEXTEDIT_KEYTOTEXT (line 3656) | static int     STB_TEXTEDIT_KEYTOTEXT(int key)                        ...
    function STB_TEXTEDIT_LAYOUTROW (line 3658) | static void    STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, ImGuiInputTex...
    function is_separator (line 3672) | static bool is_separator(unsigned int c)                              ...
    function is_word_boundary_from_right (line 3673) | static int  is_word_boundary_from_right(ImGuiInputTextState* obj, int ...
    function STB_TEXTEDIT_MOVEWORDLEFT_IMPL (line 3674) | static int  STB_TEXTEDIT_MOVEWORDLEFT_IMPL(ImGuiInputTextState* obj, i...
    function is_word_boundary_from_left (line 3676) | static int  is_word_boundary_from_left(ImGuiInputTextState* obj, int i...
    function STB_TEXTEDIT_MOVEWORDRIGHT_IMPL (line 3677) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(ImGuiInputTextState* obj, ...
    function STB_TEXTEDIT_MOVEWORDRIGHT_IMPL (line 3679) | static int  STB_TEXTEDIT_MOVEWORDRIGHT_IMPL(ImGuiInputTextState* obj, ...
    function STB_TEXTEDIT_DELETECHARS (line 3684) | static void STB_TEXTEDIT_DELETECHARS(ImGuiInputTextState* obj, int pos...
    function STB_TEXTEDIT_INSERTCHARS (line 3700) | static bool STB_TEXTEDIT_INSERTCHARS(ImGuiInputTextState* obj, int pos...
    function stb_textedit_replace (line 3756) | static void stb_textedit_replace(ImGuiInputTextState* str, STB_Textedi...
  function InputTextFilterCharacter (line 3839) | static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTex...
  function RenderArrowsForVerticalBar (line 5014) | static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos...
  type ImGuiPlotArrayGetterData (line 6512) | struct ImGuiPlotArrayGetterData
    method ImGuiPlotArrayGetterData (line 6517) | ImGuiPlotArrayGetterData(const float* values, int stride) { Values = v...
  function Plot_ArrayGetter (line 6520) | static float Plot_ArrayGetter(void* data, int idx)
  type ImGuiTabBarSection (line 7078) | struct ImGuiTabBarSection
    method ImGuiTabBarSection (line 7084) | ImGuiTabBarSection() { memset(this, 0, sizeof(*this)); }
  type ImGui (line 7087) | namespace ImGui
  function TabItemGetSectionIdx (line 7105) | static inline int TabItemGetSectionIdx(const ImGuiTabItem* tab)
  function ImGuiTabBar (line 7128) | static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref)
  function ImGuiPtrOrIndex (line 7134) | static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar)
  function ImU32 (line 7486) | static ImU32   ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* ...
  function ImGuiTabItem (line 7507) | ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab...
  function ImGuiTabItem (line 7665) | static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar)
  function ImGuiTabItem (line 7726) | static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
  function ImVec2 (line 8067) | ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button)

FILE: R3nzSkin/imgui/imstb_rectpack.h
  type stbrp_context (line 80) | typedef struct stbrp_context stbrp_context;
  type stbrp_node (line 81) | typedef struct stbrp_node    stbrp_node;
  type stbrp_rect (line 82) | typedef struct stbrp_rect    stbrp_rect;
  type stbrp_coord (line 85) | typedef int            stbrp_coord;
  type stbrp_coord (line 87) | typedef unsigned short stbrp_coord;
  type stbrp_rect (line 115) | struct stbrp_rect
  type stbrp_node (line 175) | struct stbrp_node
  type stbrp_context (line 181) | struct stbrp_context
  function STBRP_DEF (line 230) | STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
  function STBRP_DEF (line 242) | STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int ...
  function STBRP_DEF (line 262) | STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int ...
  function stbrp__skyline_find_min_y (line 295) | static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first...
  type stbrp__findresult (line 345) | typedef struct
  function stbrp__findresult (line 351) | static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, ...
  function stbrp__findresult (line 453) | static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *co...
  function rect_height_compare (line 533) | static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
  function rect_original_order (line 545) | static int STBRP__CDECL rect_original_order(const void *a, const void *b)
  function STBRP_DEF (line 558) | STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects...

FILE: R3nzSkin/imgui/imstb_textedit.h
  type StbUndoRecord (line 299) | typedef struct
  type StbUndoState (line 308) | typedef struct
  type STB_TexteditState (line 317) | typedef struct
  type StbTexteditRow (line 364) | typedef struct
  function stb_text_locate_coord (line 398) | static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, floa...
  function stb_textedit_click (line 458) | static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_drag (line 476) | static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditStat...
  type StbFindState (line 508) | typedef struct
  function stb_textedit_find_charpos (line 518) | static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_S...
  function stb_textedit_clamp (line 577) | static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditSta...
  function stb_textedit_delete (line 591) | static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditSt...
  function stb_textedit_delete_selection (line 599) | static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_...
  function stb_textedit_sortselection (line 615) | static void stb_textedit_sortselection(STB_TexteditState *state)
  function stb_textedit_move_to_first (line 625) | static void stb_textedit_move_to_first(STB_TexteditState *state)
  function stb_textedit_move_to_last (line 636) | static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_Text...
  function is_word_boundary (line 648) | static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx )
  function stb_textedit_move_to_word_previous (line 654) | static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str,...
  function stb_textedit_move_to_word_next (line 669) | static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int...
  function stb_textedit_prep_selection_at_cursor (line 687) | static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
  function stb_textedit_cut (line 696) | static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState ...
  function stb_textedit_paste_internal (line 707) | static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_Tex...
  function stb_textedit_key (line 732) | static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState...
  function stb_textedit_flush_redo (line 1122) | static void stb_textedit_flush_redo(StbUndoState *state)
  function stb_textedit_discard_undo (line 1129) | static void stb_textedit_discard_undo(StbUndoState *state)
  function stb_textedit_discard_redo (line 1151) | static void stb_textedit_discard_redo(StbUndoState *state)
  function StbUndoRecord (line 1181) | static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, i...
  function STB_TEXTEDIT_CHARTYPE (line 1205) | static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, i...
  function stb_text_undo (line 1225) | static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *s...
  function stb_text_redo (line 1293) | static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *s...
  function stb_text_makeundo_insert (line 1344) | static void stb_text_makeundo_insert(STB_TexteditState *state, int where...
  function stb_text_makeundo_delete (line 1349) | static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_Texte...
  function stb_text_makeundo_replace (line 1359) | static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_Text...
  function stb_textedit_clear_state (line 1370) | static void stb_textedit_clear_state(STB_TexteditState *state, int is_si...
  function stb_textedit_initialize_state (line 1388) | static void stb_textedit_initialize_state(STB_TexteditState *state, int ...
  function stb_textedit_paste (line 1398) | static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditStat...

FILE: R3nzSkin/imgui/imstb_truetype.h
  function my_stbtt_initfont (line 290) | void my_stbtt_initfont(void)
  function my_stbtt_print (line 302) | void my_stbtt_print(float x, float y, char *text)
  function main (line 335) | int main(int argc, char **argv)
  function main (line 376) | int main(int arg, char **argv)
  type stbtt_uint8 (line 429) | typedef unsigned char   stbtt_uint8;
  type stbtt_int8 (line 430) | typedef signed   char   stbtt_int8;
  type stbtt_uint16 (line 431) | typedef unsigned short  stbtt_uint16;
  type stbtt_int16 (line 432) | typedef signed   short  stbtt_int16;
  type stbtt_uint32 (line 433) | typedef unsigned int    stbtt_uint32;
  type stbtt_int32 (line 434) | typedef signed   int    stbtt_int32;
  type stbtt__buf (line 514) | typedef struct
  type stbtt_bakedchar (line 528) | typedef struct
  type stbtt_aligned_quad (line 544) | typedef struct
  type stbtt_packedchar (line 576) | typedef struct
  type stbtt_pack_context (line 583) | typedef struct stbtt_pack_context stbtt_pack_context;
  type stbtt_fontinfo (line 584) | typedef struct stbtt_fontinfo stbtt_fontinfo;
  type stbrp_rect (line 586) | typedef struct stbrp_rect stbrp_rect;
  type stbtt_pack_range (line 620) | typedef struct
  type stbtt_pack_context (line 679) | struct stbtt_pack_context {
  type stbtt_fontinfo (line 714) | struct stbtt_fontinfo
  type stbtt_vertex (line 824) | typedef struct
  type stbtt__bitmap (line 907) | typedef struct
  function stbtt_uint8 (line 1116) | static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
  function stbtt_uint8 (line 1123) | static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
  function stbtt__buf_seek (line 1130) | static void stbtt__buf_seek(stbtt__buf *b, int o)
  function stbtt__buf_skip (line 1136) | static void stbtt__buf_skip(stbtt__buf *b, int o)
  function stbtt_uint32 (line 1141) | static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
  function stbtt__buf (line 1151) | static stbtt__buf stbtt__new_buf(const void *p, size_t size)
  function stbtt__buf (line 1164) | static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
  function stbtt__buf (line 1173) | static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
  function stbtt_uint32 (line 1187) | static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
  function stbtt__cff_skip_operand (line 1199) | static void stbtt__cff_skip_operand(stbtt__buf *b) {
  function stbtt__buf (line 1214) | static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
  function stbtt__dict_get_ints (line 1229) | static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, s...
  function stbtt__cff_index_count (line 1237) | static int stbtt__cff_index_count(stbtt__buf *b)
  function stbtt__buf (line 1243) | static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
  function stbtt_uint16 (line 1269) | static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
  function stbtt_int16 (line 1270) | static stbtt_int16 ttSHORT(stbtt_uint8 *p)   { return p[0]*256 + p[1]; }
  function stbtt_uint32 (line 1271) | static stbtt_uint32 ttULONG(stbtt_uint8 *p)  { return (p[0]<<24) + (p[1]...
  function stbtt_int32 (line 1272) | static stbtt_int32 ttLONG(stbtt_uint8 *p)    { return (p[0]<<24) + (p[1]...
  function stbtt__isfont (line 1277) | static int stbtt__isfont(stbtt_uint8 *font)
  function stbtt_uint32 (line 1289) | static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fo...
  function stbtt_GetFontOffsetForIndex_internal (line 1302) | static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_coll...
  function stbtt_GetNumberOfFonts_internal (line 1321) | static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
  function stbtt__buf (line 1337) | static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
  function stbtt_InitFont_internal (line 1350) | static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *...
  function STBTT_DEF (line 1461) | STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unico...
  function STBTT_DEF (line 1554) | STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int un...
  function stbtt_setvertex (line 1559) | static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int...
  function stbtt__GetGlyfOffset (line 1568) | static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1590) | STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_in...
  function STBTT_DEF (line 1606) | STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int code...
  function STBTT_DEF (line 1611) | STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__close_shape (line 1623) | static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, ...
  function stbtt__GetGlyphShapeTT (line 1639) | static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_...
  type stbtt__csctx (line 1865) | typedef struct
  function stbtt__track_vertex (line 1879) | static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_in...
  function stbtt__csctx_v (line 1888) | static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int3...
  function stbtt__csctx_close_shape (line 1904) | static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
  function stbtt__csctx_rmove_to (line 1910) | static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rline_to (line 1918) | static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
  function stbtt__csctx_rccurve_to (line 1925) | static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float ...
  function stbtt__buf (line 1936) | static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
  function stbtt__buf (line 1950) | static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info,...
  function stbtt__run_charstring (line 1978) | static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_i...
  function stbtt__GetGlyphShapeT2 (line 2237) | static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_...
  function stbtt__GetGlyphInfoT2 (line 2254) | static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_i...
  function STBTT_DEF (line 2265) | STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_...
  function STBTT_DEF (line 2273) | STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int gl...
  function stbtt__GetGlyphKernInfoAdvance (line 2285) | static int  stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, i...
  function stbtt_int32 (line 2315) | static stbtt_int32  stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, ...
  function stbtt_int32 (line 2374) | static stbtt_int32  stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int...
  function stbtt_int32 (line 2428) | static stbtt_int32  stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo ...
  function STBTT_DEF (line 2556) | STBTT_DEF int  stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int...
  function STBTT_DEF (line 2569) | STBTT_DEF int  stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 2576) | STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, in...
  function STBTT_DEF (line 2581) | STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *as...
  function STBTT_DEF (line 2588) | STBTT_DEF int  stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2599) | STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int ...
  function STBTT_DEF (line 2607) | STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, fl...
  function STBTT_DEF (line 2613) | STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *in...
  function STBTT_DEF (line 2619) | STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
  function STBTT_DEF (line 2629) | STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *fon...
  function STBTT_DEF (line 2647) | STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int g...
  function STBTT_DEF (line 2652) | STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo ...
  function STBTT_DEF (line 2657) | STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, i...
  type stbtt__hheap_chunk (line 2666) | typedef struct stbtt__hheap_chunk
  type stbtt__hheap (line 2671) | typedef struct stbtt__hheap
  function stbtt__hheap_free (line 2699) | static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
  function stbtt__hheap_cleanup (line 2705) | static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
  type stbtt__edge (line 2715) | typedef struct stbtt__edge {
  type stbtt__active_edge (line 2721) | typedef struct stbtt__active_edge
  function stbtt__active_edge (line 2743) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__active_edge (line 2765) | static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__ed...
  function stbtt__fill_active_edges (line 2790) | static void stbtt__fill_active_edges(unsigned char *scanline, int len, s...
  function stbtt__rasterize_sorted_edges (line 2832) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__handle_clipped_edge (line 2936) | static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__ac...
  function stbtt__fill_active_edges_new (line 2973) | static void stbtt__fill_active_edges_new(float *scanline, float *scanlin...
  function stbtt__rasterize_sorted_edges (line 3137) | static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__...
  function stbtt__sort_edges_ins_sort (line 3239) | static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
  function stbtt__sort_edges_quicksort (line 3257) | static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
  function stbtt__sort_edges (line 3319) | static void stbtt__sort_edges(stbtt__edge *p, int n)
  type stbtt__point (line 3325) | typedef struct
  function stbtt__rasterize (line 3330) | static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, i...
  function stbtt__add_point (line 3387) | static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
  function stbtt__tesselate_curve (line 3395) | static int stbtt__tesselate_curve(stbtt__point *points, int *num_points,...
  function stbtt__tesselate_cubic (line 3415) | static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points...
  function stbtt__point (line 3458) | static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num...
  function STBTT_DEF (line 3535) | STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_...
  function STBTT_DEF (line 3548) | STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
  function STBTT_DEF (line 3598) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info,...
  function STBTT_DEF (line 3617) | STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigne...
  function STBTT_DEF (line 3627) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fo...
  function STBTT_DEF (line 3632) | STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *i...
  function STBTT_DEF (line 3642) | STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, uns...
  function stbtt_BakeFontBitmap_internal (line 3653) | static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset...
  function STBTT_DEF (line 3699) | STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int p...
  type stbrp_coord (line 3727) | typedef int stbrp_coord;
  type stbrp_context (line 3740) | typedef struct
  type stbrp_node (line 3746) | typedef struct
  type stbrp_rect (line 3751) | struct stbrp_rect
  function stbrp_init_target (line 3757) | static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_...
  function stbrp_pack_rects (line 3768) | static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int ...
  function STBTT_DEF (line 3797) | STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pi...
  function STBTT_DEF (line 3829) | STBTT_DEF void stbtt_PackEnd  (stbtt_pack_context *spc)
  function STBTT_DEF (line 3835) | STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsign...
  function STBTT_DEF (line 3845) | STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *sp...
  function stbtt__h_prefilter (line 3852) | static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__v_prefilter (line 3914) | static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int ...
  function stbtt__oversample_shift (line 3976) | static float stbtt__oversample_shift(int oversample)
  function STBTT_DEF (line 3989) | STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, c...
  function STBTT_DEF (line 4021) | STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontin...
  function STBTT_DEF (line 4045) | STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *sp...
  function STBTT_DEF (line 4127) | STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, st...
  function STBTT_DEF (line 4132) | STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsign...
  function STBTT_DEF (line 4168) | STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigne...
  function STBTT_DEF (line 4180) | STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata...
  function STBTT_DEF (line 4193) | STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int...
  function stbtt__ray_intersect_bezier (line 4228) | static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], floa...
  function equal (line 4292) | static int equal(float *a, float *b)
  function stbtt__compute_crossings_x (line 4297) | static int stbtt__compute_crossings_x(float x, float y, int nverts, stbt...
  function stbtt__cuberoot (line 4366) | static float stbtt__cuberoot( float x )
  function stbtt__solve_cubic (line 4375) | static int stbtt__solve_cubic(float a, float b, float c, float* r)
  function STBTT_DEF (line 4597) | STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
  function stbtt_int32 (line 4608) | static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint...
  function stbtt_CompareUTF8toUTF16_bigendian_internal (line 4647) | static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len...
  function STBTT_DEF (line 4654) | STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font...
  function stbtt__matchpair (line 4675) | static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint...
  function stbtt__matches (line 4722) | static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_ui...
  function stbtt_FindMatchingFont_internal (line 4751) | static int stbtt_FindMatchingFont_internal(unsigned char *font_collectio...
  function STBTT_DEF (line 4767) | STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
  function STBTT_DEF (line 4774) | STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int...
  function STBTT_DEF (line 4779) | STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
  function STBTT_DEF (line 4784) | STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *...
  function STBTT_DEF (line 4789) | STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, cons...
  function STBTT_DEF (line 4794) | STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len...

FILE: R3nzSkin/json/json.hpp
  type nlohmann (line 81) | namespace nlohmann
    type detail (line 83) | namespace detail
      type position_t (line 86) | struct position_t
      class exception (line 2419) | class exception : public std::exception
        method JSON_HEDLEY_RETURNS_NON_NULL (line 2423) | JSON_HEDLEY_RETURNS_NON_NULL
        method JSON_HEDLEY_NON_NULL (line 2433) | JSON_HEDLEY_NON_NULL(3)
        method name (line 2436) | static std::string name(const std::string& ename, int id_)
      class parse_error (line 2491) | class parse_error : public exception
        method parse_error (line 2503) | static parse_error create(int id_, const position_t& pos, const st...
        method parse_error (line 2510) | static parse_error create(int id_, std::size_t byte_, const std::s...
        method parse_error (line 2530) | parse_error(int id_, std::size_t byte_, const char* what_arg)
        method position_string (line 2533) | static std::string position_string(const position_t& pos)
      class invalid_iterator (line 2577) | class invalid_iterator : public exception
        method invalid_iterator (line 2580) | static invalid_iterator create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2587) | JSON_HEDLEY_NON_NULL(3)
      class type_error (line 2631) | class type_error : public exception
        method type_error (line 2634) | static type_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2641) | JSON_HEDLEY_NON_NULL(3)
      class out_of_range (line 2678) | class out_of_range : public exception
        method out_of_range (line 2681) | static out_of_range create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2688) | JSON_HEDLEY_NON_NULL(3)
      class other_error (line 2716) | class other_error : public exception
        method other_error (line 2719) | static other_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2726) | JSON_HEDLEY_NON_NULL(3)
      type index_sequence (line 2754) | struct index_sequence
        method size (line 2758) | static constexpr std::size_t size() noexcept
      type merge_and_renumber (line 2765) | struct merge_and_renumber
      type make_index_sequence (line 2772) | struct make_index_sequence
      type make_index_sequence<0> (line 2776) | struct make_index_sequence<0> : index_sequence<> {}
      type make_index_sequence<1> (line 2777) | struct make_index_sequence<1> : index_sequence<0> {}
      type priority_tag (line 2783) | struct priority_tag : priority_tag < N - 1 > {}
      type priority_tag<0> (line 2784) | struct priority_tag<0> {}
      type static_const (line 2788) | struct static_const
      type make_void (line 2817) | struct make_void
      type iterator_types (line 2833) | struct iterator_types {}
      type iterator_types <
    It,
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
    typename It::reference, typename It::iterator_category >> (line 2836) | struct iterator_types <
      type iterator_traits (line 2851) | struct iterator_traits
      type iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> (line 2856) | struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
      type iterator_traits<T*, enable_if_t<std::is_object<T>::value>> (line 2862) | struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
      type nonesuch (line 2890) | struct nonesuch
        method nonesuch (line 2892) | nonesuch() = delete;
        method nonesuch (line 2894) | nonesuch(nonesuch const&) = delete;
        method nonesuch (line 2895) | nonesuch(nonesuch const&&) = delete;
      type detector (line 2904) | struct detector
      type is_basic_json (line 3044) | struct is_basic_json : std::false_type {}
      class json_ref (line 3054) | class json_ref
        method json_ref (line 12606) | json_ref(value_type&& value)
        method json_ref (line 12612) | json_ref(const value_type& value)
        method json_ref (line 12617) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12626) | json_ref(Args && ... args)
        method json_ref (line 12633) | json_ref(json_ref&&) = default;
        method json_ref (line 12634) | json_ref(const json_ref&) = delete;
        method json_ref (line 12635) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12636) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12639) | value_type moved_or_copied() const
        method value_type (line 12648) | value_type const& operator*() const
        method value_type (line 12653) | value_type const* operator->() const
      type is_json_ref (line 3057) | struct is_json_ref : std::false_type {}
      type is_json_ref<json_ref<T>> (line 3060) | struct is_json_ref<json_ref<T>> : std::true_type {}
      type has_from_json (line 3101) | struct has_from_json : std::false_type {}
      type is_getable (line 3108) | struct is_getable
      type has_from_json < BasicJsonType, T,
           enable_if_t < !is_basic_json<T>::value >> (line 3114) | struct has_from_json < BasicJsonType, T,
      type has_non_default_from_json (line 3127) | struct has_non_default_from_json : std::false_type {}
      type has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3130) | struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !...
      type has_to_json (line 3142) | struct has_to_json : std::false_type {}
      type has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3145) | struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<...
      type is_iterator_traits (line 3160) | struct is_iterator_traits : std::false_type {}
      type is_iterator_traits<iterator_traits<T>> (line 3163) | struct is_iterator_traits<iterator_traits<T>>
      type is_complete_type (line 3180) | struct is_complete_type : std::false_type {}
      type is_complete_type<T, decltype(void(sizeof(T)))> (line 3183) | struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_ty...
      type is_compatible_object_type_impl (line 3187) | struct is_compatible_object_type_impl : std::false_type {}
      type is_compatible_object_type_impl <
    BasicJsonType, CompatibleObjectType,
    enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&
    is_detected<key_type_t, CompatibleObjectType>::value >> (line 3190) | struct is_compatible_object_type_impl <
      type is_compatible_object_type (line 3207) | struct is_compatible_object_type
      type is_constructible_object_type_impl (line 3212) | struct is_constructible_object_type_impl : std::false_type {}
      type is_constructible_object_type_impl <
    BasicJsonType, ConstructibleObjectType,
    enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&
    is_detected<key_type_t, ConstructibleObjectType>::value >> (line 3215) | struct is_constructible_object_type_impl <
      type is_constructible_object_type (line 3239) | struct is_constructible_object_type
      type is_compatible_string_type_impl (line 3245) | struct is_compatible_string_type_impl : std::false_type {}
      type is_compatible_string_type_impl <
    BasicJsonType, CompatibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, CompatibleStringType>::value >> (line 3248) | struct is_compatible_string_type_impl <
      type is_compatible_string_type (line 3258) | struct is_compatible_string_type
      type is_constructible_string_type_impl (line 3263) | struct is_constructible_string_type_impl : std::false_type {}
      type is_constructible_string_type_impl <
    BasicJsonType, ConstructibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, ConstructibleStringType>::value >> (line 3266) | struct is_constructible_string_type_impl <
      type is_constructible_string_type (line 3277) | struct is_constructible_string_type
      type is_compatible_array_type_impl (line 3281) | struct is_compatible_array_type_impl : std::false_type {}
      type is_compatible_array_type (line 3300) | struct is_compatible_array_type
      type is_constructible_array_type_impl (line 3304) | struct is_constructible_array_type_impl : std::false_type {}
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t<std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value >> (line 3307) | struct is_constructible_array_type_impl <
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t < !std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value&&
    std::is_default_constructible<ConstructibleArrayType>::value&&
(std::is_move_assignable<ConstructibleArrayType>::value ||
 std::is_copy_assignable<ConstructibleArrayType>::value)&&
is_detected<value_type_t, ConstructibleArrayType>::value&&
is_detected<iterator_t, ConstructibleArrayType>::value&&
is_complete_type <
detected_t<value_type_t, ConstructibleArrayType >>::value >> (line 3314) | struct is_constructible_array_type_impl <
      type is_constructible_array_type (line 3343) | struct is_constructible_array_type
      type is_compatible_integer_type_impl (line 3348) | struct is_compatible_integer_type_impl : std::false_type {}
      type is_compatible_integer_type_impl <
    RealIntegerType, CompatibleNumberIntegerType,
    enable_if_t < std::is_integral<RealIntegerType>::value&&
    std::is_integral<CompatibleNumberIntegerType>::value&&
    !std::is_same<bool, CompatibleNumberIntegerType>::value >> (line 3351) | struct is_compatible_integer_type_impl <
      type is_compatible_integer_type (line 3369) | struct is_compatible_integer_type
      type is_compatible_type_impl (line 3374) | struct is_compatible_type_impl: std::false_type {}
      type is_compatible_type_impl <
    BasicJsonType, CompatibleType,
    enable_if_t<is_complete_type<CompatibleType>::value >> (line 3377) | struct is_compatible_type_impl <
      type is_compatible_type (line 3386) | struct is_compatible_type
      type conjunction (line 3390) | struct conjunction : std::true_type { }
      type conjunction<B1> (line 3391) | struct conjunction<B1> : B1 { }
      type is_constructible_tuple (line 3397) | struct is_constructible_tuple : std::false_type {}
      type value_t (line 3444) | enum class value_t : std::uint8_t
      function from_json (line 3493) | void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
      function get_arithmetic_value (line 3507) | void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3533) | void from_json(const BasicJsonType& j, typename BasicJsonType::boole...
      function from_json (line 3543) | void from_json(const BasicJsonType& j, typename BasicJsonType::strin...
      function from_json (line 3559) | void from_json(const BasicJsonType& j, ConstructibleStringType& s)
      function from_json (line 3570) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3576) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3582) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3589) | void from_json(const BasicJsonType& j, EnumType& e)
      function from_json (line 3599) | void from_json(const BasicJsonType& j, std::forward_list<T, Allocato...
      function from_json (line 3616) | void from_json(const BasicJsonType& j, std::valarray<T>& l)
      function from_json (line 3631) | auto from_json(const BasicJsonType& j, T (&arr)[N])
      function from_json_array_impl (line 3641) | void from_json_array_impl(const BasicJsonType& j, typename BasicJson...
      function from_json_array_impl (line 3647) | auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& ...
      function from_json_array_impl (line 3658) | auto from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json_array_impl (line 3679) | void from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json (line 3704) | auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
      function from_json (line 3719) | void from_json(const BasicJsonType& j, typename BasicJsonType::binar...
      function from_json (line 3731) | void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
      function from_json (line 3763) | void from_json(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3794) | void from_json(const BasicJsonType& j, std::pair<A1, A2>& p)
      function from_json_tuple_impl (line 3800) | void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_se...
      function from_json (line 3806) | void from_json(const BasicJsonType& j, std::tuple<Args...>& t)
      function from_json (line 3814) | void from_json(const BasicJsonType& j, std::map<Key, Value, Compare,...
      function from_json (line 3834) | void from_json(const BasicJsonType& j, std::unordered_map<Key, Value...
      type from_json_fn (line 3851) | struct from_json_fn
      function int_to_string (line 3902) | void int_to_string( string_type& target, std::size_t value )
      class iteration_proxy_value (line 3908) | class iteration_proxy_value
        method iteration_proxy_value (line 3931) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3934) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3940) | iteration_proxy_value& operator++()
        method string_type (line 3961) | const string_type& key() const
        method value (line 3989) | typename IteratorType::reference value() const
      class iteration_proxy (line 3996) | class iteration_proxy
        method iteration_proxy (line 4004) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 4008) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 4014) | iteration_proxy_value<IteratorType> end() noexcept
      function get (line 4023) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      function get (line 4031) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      type external_constructor (line 4081) | struct external_constructor
      type external_constructor<value_t::boolean> (line 4084) | struct external_constructor<value_t::boolean>
        method construct (line 4087) | static void construct(BasicJsonType& j, typename BasicJsonType::bo...
      type external_constructor<value_t::string> (line 4096) | struct external_constructor<value_t::string>
        method construct (line 4099) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4107) | static void construct(BasicJsonType& j, typename BasicJsonType::st...
        method construct (line 4117) | static void construct(BasicJsonType& j, const CompatibleStringType...
      type external_constructor<value_t::binary> (line 4126) | struct external_constructor<value_t::binary>
        method construct (line 4129) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4138) | static void construct(BasicJsonType& j, typename BasicJsonType::bi...
      type external_constructor<value_t::number_float> (line 4148) | struct external_constructor<value_t::number_float>
        method construct (line 4151) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_unsigned> (line 4160) | struct external_constructor<value_t::number_unsigned>
        method construct (line 4163) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_integer> (line 4172) | struct external_constructor<value_t::number_integer>
        method construct (line 4175) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::array> (line 4184) | struct external_constructor<value_t::array>
        method construct (line 4187) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4195) | static void construct(BasicJsonType& j, typename BasicJsonType::ar...
        method construct (line 4205) | static void construct(BasicJsonType& j, const CompatibleArrayType&...
        method construct (line 4215) | static void construct(BasicJsonType& j, const std::vector<bool>& arr)
        method construct (line 4229) | static void construct(BasicJsonType& j, const std::valarray<T>& arr)
      type external_constructor<value_t::object> (line 4243) | struct external_constructor<value_t::object>
        method construct (line 4246) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4254) | static void construct(BasicJsonType& j, typename BasicJsonType::ob...
        method construct (line 4263) | static void construct(BasicJsonType& j, const CompatibleObjectType...
      function to_json (line 4280) | void to_json(BasicJsonType& j, T b) noexcept
      function to_json (line 4287) | void to_json(BasicJsonType& j, const CompatibleString& s)
      function to_json (line 4293) | void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)
      function to_json (line 4300) | void to_json(BasicJsonType& j, FloatType val) noexcept
      function to_json (line 4307) | void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noe...
      function to_json (line 4314) | void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noex...
      function to_json (line 4321) | void to_json(BasicJsonType& j, EnumType e) noexcept
      function to_json (line 4328) | void to_json(BasicJsonType& j, const std::vector<bool>& e)
      function to_json (line 4341) | void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
      function to_json (line 4347) | void to_json(BasicJsonType& j, const typename BasicJsonType::binary_...
      function to_json (line 4354) | void to_json(BasicJsonType& j, const std::valarray<T>& arr)
      function to_json (line 4360) | void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
      function to_json (line 4367) | void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
      function to_json (line 4373) | void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
      function to_json (line 4383) | void to_json(BasicJsonType& j, const T(&arr)[N])
      function to_json (line 4389) | void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
      function to_json (line 4397) | void to_json(BasicJsonType& j, const T& b)
      function to_json_tuple_impl (line 4403) | void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequ...
      function to_json (line 4409) | void to_json(BasicJsonType& j, const T& t)
      type to_json_fn (line 4414) | struct to_json_fn
      function combine (line 4662) | inline std::size_t combine(std::size_t seed, std::size_t h) noexcept
      function hash (line 4680) | std::size_t hash(const BasicJsonType& j)
      type input_format_t (line 4812) | enum class input_format_t { json, cbor, msgpack, ubjson, bson }
      class file_input_adapter (line 4822) | class file_input_adapter
        method file_input_adapter (line 4828) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4833) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4834) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4835) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4836) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4838) | std::char_traits<char>::int_type get_character() noexcept
      class input_stream_adapter (line 4858) | class input_stream_adapter
        method input_stream_adapter (line 4873) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4878) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4879) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4880) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4882) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4891) | std::char_traits<char>::int_type get_character()
      class iterator_input_adapter (line 4911) | class iterator_input_adapter
        method iterator_input_adapter (line 4916) | iterator_input_adapter(IteratorType first, IteratorType last)
        method get_character (line 4919) | typename std::char_traits<char_type>::int_type get_character()
        method empty (line 4940) | bool empty() const
      type wide_string_input_helper (line 4949) | struct wide_string_input_helper
      type wide_string_input_helper<BaseInputAdapter, 4> (line 4952) | struct wide_string_input_helper<BaseInputAdapter, 4>
        method fill_buffer (line 4955) | static void fill_buffer(BaseInputAdapter& input,
      type wide_string_input_helper<BaseInputAdapter, 2> (line 5010) | struct wide_string_input_helper<BaseInputAdapter, 2>
        method fill_buffer (line 5013) | static void fill_buffer(BaseInputAdapter& input,
      class wide_string_input_adapter (line 5073) | class wide_string_input_adapter
        method wide_string_input_adapter (line 5078) | wide_string_input_adapter(BaseInputAdapter base)
        method get_character (line 5081) | typename std::char_traits<char>::int_type get_character() noexcept
        method fill_buffer (line 5102) | void fill_buffer()
      type iterator_input_adapter_factory (line 5118) | struct iterator_input_adapter_factory
        method adapter_type (line 5124) | static adapter_type create(IteratorType first, IteratorType last)
      type is_iterator_of_multibyte (line 5131) | struct is_iterator_of_multibyte
      type iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>> (line 5141) | struct iterator_input_adapter_factory<IteratorType, enable_if_t<is_i...
        method adapter_type (line 5148) | static adapter_type create(IteratorType first, IteratorType last)
      function input_adapter (line 5156) | typename iterator_input_adapter_factory<IteratorType>::adapter_type ...
      function input_adapter (line 5164) | auto input_adapter(const ContainerType& container) -> decltype(input...
      function file_input_adapter (line 5174) | inline file_input_adapter input_adapter(std::FILE* file)
        method file_input_adapter (line 4828) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4833) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4834) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4835) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4836) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4838) | std::char_traits<char>::int_type get_character() noexcept
      function input_stream_adapter (line 5179) | inline input_stream_adapter input_adapter(std::istream& stream)
        method input_stream_adapter (line 4873) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4878) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4879) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4880) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4882) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4891) | std::char_traits<char>::int_type get_character()
      function input_stream_adapter (line 5184) | inline input_stream_adapter input_adapter(std::istream&& stream)
        method input_stream_adapter (line 4873) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4878) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4879) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4880) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4882) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4891) | std::char_traits<char>::int_type get_character()
      function contiguous_bytes_input_adapter (line 5199) | contiguous_bytes_input_adapter input_adapter(CharT b)
      function input_adapter (line 5207) | auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, a...
      class span_input_adapter (line 5215) | class span_input_adapter
        method span_input_adapter (line 5224) | span_input_adapter(CharT b, std::size_t l)
        method span_input_adapter (line 5231) | span_input_adapter(IteratorType first, IteratorType last)
        method contiguous_bytes_input_adapter (line 5234) | contiguous_bytes_input_adapter&& get()
      class json_sax_dom_parser (line 5396) | class json_sax_dom_parser
        method json_sax_dom_parser (line 5410) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_ex...
        method json_sax_dom_parser (line 5415) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5416) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
        method json_sax_dom_parser (line 5417) | json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5418) | json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default;
        method null (line 5421) | bool null()
        method boolean (line 5427) | bool boolean(bool val)
        method number_integer (line 5433) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5439) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5445) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5451) | bool string(string_t& val)
        method binary (line 5457) | bool binary(binary_t& val)
        method start_object (line 5463) | bool start_object(std::size_t len)
        method key (line 5476) | bool key(string_t& val)
        method end_object (line 5483) | bool end_object()
        method start_array (line 5489) | bool start_array(std::size_t len)
        method end_array (line 5502) | bool end_array()
        method parse_error (line 5509) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5521) | constexpr bool is_errored() const
        method JSON_HEDLEY_RETURNS_NON_NULL (line 5534) | JSON_HEDLEY_RETURNS_NON_NULL
      class json_sax_dom_callback_parser (line 5570) | class json_sax_dom_callback_parser
        method json_sax_dom_callback_parser (line 5581) | json_sax_dom_callback_parser(BasicJsonType& r,
        method json_sax_dom_callback_parser (line 5590) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) ...
        method json_sax_dom_callback_parser (line 5591) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = def...
        method json_sax_dom_callback_parser (line 5592) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callbac...
        method json_sax_dom_callback_parser (line 5593) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_pars...
        method null (line 5596) | bool null()
        method boolean (line 5602) | bool boolean(bool val)
        method number_integer (line 5608) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5614) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5620) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5626) | bool string(string_t& val)
        method binary (line 5632) | bool binary(binary_t& val)
        method start_object (line 5638) | bool start_object(std::size_t len)
        method key (line 5656) | bool key(string_t& val)
        method end_object (line 5673) | bool end_object()
        method start_array (line 5702) | bool start_array(std::size_t len)
        method end_array (line 5719) | bool end_array()
        method parse_error (line 5748) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5760) | constexpr bool is_errored() const
        method handle_value (line 5782) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool...
      class json_sax_acceptor (line 5866) | class json_sax_acceptor
        method null (line 5875) | bool null()
        method boolean (line 5880) | bool boolean(bool /*unused*/)
        method number_integer (line 5885) | bool number_integer(number_integer_t /*unused*/)
        method number_unsigned (line 5890) | bool number_unsigned(number_unsigned_t /*unused*/)
        method number_float (line 5895) | bool number_float(number_float_t /*unused*/, const string_t& /*unu...
        method string (line 5900) | bool string(string_t& /*unused*/)
        method binary (line 5905) | bool binary(binary_t& /*unused*/)
        method start_object (line 5910) | bool start_object(std::size_t /*unused*/ = std::size_t(-1))
        method key (line 5915) | bool key(string_t& /*unused*/)
        method end_object (line 5920) | bool end_object()
        method start_array (line 5925) | bool start_array(std::size_t /*unused*/ = std::size_t(-1))
        method end_array (line 5930) | bool end_array()
        method parse_error (line 5935) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
      class lexer_base (line 5973) | class lexer_base
        type token_type (line 5977) | enum class token_type
      class lexer (line 6050) | class lexer : public lexer_base<BasicJsonType>
        method lexer (line 6062) | explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ =...
        method lexer (line 6069) | lexer(const lexer&) = delete;
        method lexer (line 6070) | lexer(lexer&&) = default;
        method lexer (line 6071) | lexer& operator=(lexer&) = delete;
        method lexer (line 6072) | lexer& operator=(lexer&&) = default;
        method JSON_HEDLEY_PURE (line 6081) | JSON_HEDLEY_PURE
        method get_codepoint (line 6108) | int get_codepoint()
        method next_byte_in_range (line 6156) | bool next_byte_in_range(std::initializer_list<char_int_type> ranges)
        method token_type (line 6193) | token_type scan_string()
        method scan_comment (line 6783) | bool scan_comment()
        method strtof (line 6851) | static void strtof(float& f, const char* str, char** endptr) noexcept
        method strtof (line 6857) | static void strtof(double& f, const char* str, char** endptr) noex...
        method strtof (line 6863) | static void strtof(long double& f, const char* str, char** endptr)...
        method token_type (line 6908) | token_type scan_number()  // lgtm [cpp/use-of-goto]
      type is_sax (line 7641) | struct is_sax
      type is_sax_static_asserts (line 7672) | struct is_sax_static_asserts
      type cbor_tag_handler_t (line 7736) | enum class cbor_tag_handler_t
      function little_endianess (line 7749) | static inline bool little_endianess(int num = 1) noexcept
      class binary_reader (line 7763) | class binary_reader
        method binary_reader (line 7780) | explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(...
        method binary_reader (line 7786) | binary_reader(const binary_reader&) = delete;
        method binary_reader (line 7787) | binary_reader(binary_reader&&) = default;
        method binary_reader (line 7788) | binary_reader& operator=(const binary_reader&) = delete;
        method binary_reader (line 7789) | binary_reader& operator=(binary_reader&&) = default;
        method JSON_HEDLEY_NON_NULL (line 7800) | JSON_HEDLEY_NON_NULL(3)
        method parse_bson_internal (line 7862) | bool parse_bson_internal()
        method get_bson_cstr (line 7887) | bool get_bson_cstr(string_t& result)
        method get_bson_string (line 7917) | bool get_bson_string(const NumberType len, string_t& result)
        method get_bson_binary (line 7938) | bool get_bson_binary(const NumberType len, binary_t& result)
        method parse_bson_element_internal (line 7964) | bool parse_bson_element_internal(const char_int_type element_type,
        method parse_bson_element_list (line 8042) | bool parse_bson_element_list(const bool is_array)
        method parse_bson_array (line 8080) | bool parse_bson_array()
        method parse_cbor_internal (line 8110) | bool parse_cbor_internal(const bool get_char,
        method get_cbor_string (line 8556) | bool get_cbor_string(string_t& result)
        method get_cbor_binary (line 8651) | bool get_cbor_binary(binary_t& result)
        method get_cbor_array (line 8745) | bool get_cbor_array(const std::size_t len,
        method get_cbor_object (line 8783) | bool get_cbor_object(const std::size_t len,
        method parse_msgpack_internal (line 8836) | bool parse_msgpack_internal()
        method get_msgpack_string (line 9216) | bool get_msgpack_string(string_t& result)
        method get_msgpack_binary (line 9298) | bool get_msgpack_binary(binary_t& result)
        method get_msgpack_array (line 9409) | bool get_msgpack_array(const std::size_t len)
        method get_msgpack_object (line 9431) | bool get_msgpack_object(const std::size_t len)
        method parse_ubjson_internal (line 9468) | bool parse_ubjson_internal(const bool get_char = true)
        method get_ubjson_string (line 9487) | bool get_ubjson_string(string_t& result, const bool get_char = true)
        method get_ubjson_size_value (line 9541) | bool get_ubjson_size_value(std::size_t& result)
        method get_ubjson_size_type (line 9618) | bool get_ubjson_size_type(std::pair<std::size_t, char_int_type>& r...
        method get_ubjson_value (line 9659) | bool get_ubjson_value(const char_int_type prefix)
        method get_ubjson_array (line 9760) | bool get_ubjson_array()
        method get_ubjson_object (line 9822) | bool get_ubjson_object()
        method get_ubjson_high_precision_number (line 9897) | bool get_ubjson_high_precision_number()
        method char_int_type (line 9959) | char_int_type get()
        method char_int_type (line 9968) | char_int_type get_ignore_noop()
        method get_number (line 9993) | bool get_number(const input_format_t format, NumberType& result)
        method get_string (line 10036) | bool get_string(const input_format_t format,
        method get_binary (line 10069) | bool get_binary(const input_format_t format,
        method JSON_HEDLEY_NON_NULL (line 10092) | JSON_HEDLEY_NON_NULL(3)
        method get_token_string (line 10106) | std::string get_token_string() const
        method exception_message (line 10119) | std::string exception_message(const input_format_t format,
      type parse_event_t (line 10206) | enum class parse_event_t : uint8_t
      class parser (line 10232) | class parser
        method parser (line 10243) | explicit parser(InputAdapterType&& adapter,
        method parse (line 10265) | void parse(const bool strict, BasicJsonType& result)
        method accept (line 10326) | bool accept(const bool strict = true)
        method sax_parse (line 10334) | bool sax_parse(SAX* sax, const bool strict = true)
        method sax_parse_internal (line 10354) | bool sax_parse_internal(SAX* sax)
        method token_type (line 10636) | token_type get_token()
        method exception_message (line 10641) | std::string exception_message(const token_type expected, const std...
      class primitive_iterator_t (line 10705) | class primitive_iterator_t
        method difference_type (line 10717) | constexpr difference_type get_value() const noexcept
        method set_begin (line 10723) | void set_begin() noexcept
        method set_end (line 10729) | void set_end() noexcept
        method is_begin (line 10735) | constexpr bool is_begin() const noexcept
        method is_end (line 10741) | constexpr bool is_end() const noexcept
        method primitive_iterator_t (line 10756) | primitive_iterator_t operator+(difference_type n) noexcept
        method difference_type (line 10763) | constexpr difference_type operator-(primitive_iterator_t lhs, prim...
        method primitive_iterator_t (line 10768) | primitive_iterator_t& operator++() noexcept
        method primitive_iterator_t (line 10774) | primitive_iterator_t const operator++(int) noexcept
        method primitive_iterator_t (line 10781) | primitive_iterator_t& operator--() noexcept
        method primitive_iterator_t (line 10787) | primitive_iterator_t const operator--(int) noexcept
        method primitive_iterator_t (line 10794) | primitive_iterator_t& operator+=(difference_type n) noexcept
        method primitive_iterator_t (line 10800) | primitive_iterator_t& operator-=(difference_type n) noexcept
      type internal_iterator (line 10820) | struct internal_iterator
      class iteration_proxy (line 10858) | class iteration_proxy
        method iteration_proxy (line 4004) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 4008) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 4014) | iteration_proxy_value<IteratorType> end() noexcept
      class iteration_proxy_value (line 10859) | class iteration_proxy_value
        method iteration_proxy_value (line 3931) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3934) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3940) | iteration_proxy_value& operator++()
        method string_type (line 3961) | const string_type& key() const
        method value (line 3989) | typename IteratorType::reference value() const
      function set_end (line 10878) | class iter_impl
      class json_reverse_iterator (line 11514) | class json_reverse_iterator : public std::reverse_iterator<Base>
        method json_reverse_iterator (line 11524) | explicit json_reverse_iterator(const typename base_iterator::itera...
        method json_reverse_iterator (line 11528) | explicit json_reverse_iterator(const base_iterator& it) noexcept :...
        method json_reverse_iterator (line 11531) | json_reverse_iterator const operator++(int)
        method json_reverse_iterator (line 11537) | json_reverse_iterator& operator++()
        method json_reverse_iterator (line 11543) | json_reverse_iterator const operator--(int)
        method json_reverse_iterator (line 11549) | json_reverse_iterator& operator--()
        method json_reverse_iterator (line 11555) | json_reverse_iterator& operator+=(difference_type i)
        method json_reverse_iterator (line 11561) | json_reverse_iterator operator+(difference_type i) const
        method json_reverse_iterator (line 11567) | json_reverse_iterator operator-(difference_type i) const
        method difference_type (line 11573) | difference_type operator-(const json_reverse_iterator& other) const
        method reference (line 11579) | reference operator[](difference_type n) const
        method key (line 11585) | auto key() const -> decltype(std::declval<Base>().key())
        method reference (line 11592) | reference value() const
      class json_ref (line 12601) | class json_ref
        method json_ref (line 12606) | json_ref(value_type&& value)
        method json_ref (line 12612) | json_ref(const value_type& value)
        method json_ref (line 12617) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12626) | json_ref(Args && ... args)
        method json_ref (line 12633) | json_ref(json_ref&&) = default;
        method json_ref (line 12634) | json_ref(const json_ref&) = delete;
        method json_ref (line 12635) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12636) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12639) | value_type moved_or_copied() const
        method value_type (line 12648) | value_type const& operator*() const
        method value_type (line 12653) | value_type const* operator->() const
      type output_adapter_protocol (line 12706) | struct output_adapter_protocol
      class output_vector_adapter (line 12719) | class output_vector_adapter : public output_adapter_protocol<CharType>
        method output_vector_adapter (line 12722) | explicit output_vector_adapter(std::vector<CharType>& vec) noexcept
        method write_character (line 12726) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12731) | JSON_HEDLEY_NON_NULL(2)
      class output_stream_adapter (line 12743) | class output_stream_adapter : public output_adapter_protocol<CharType>
        method output_stream_adapter (line 12746) | explicit output_stream_adapter(std::basic_ostream<CharType>& s) no...
        method write_character (line 12750) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12755) | JSON_HEDLEY_NON_NULL(2)
      class output_string_adapter (line 12767) | class output_string_adapter : public output_adapter_protocol<CharType>
        method output_string_adapter (line 12770) | explicit output_string_adapter(StringType& s) noexcept
        method write_character (line 12774) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12779) | JSON_HEDLEY_NON_NULL(2)
      class output_adapter (line 12790) | class output_adapter
        method output_adapter (line 12793) | output_adapter(std::vector<CharType>& vec)
        method output_adapter (line 12796) | output_adapter(std::basic_ostream<CharType>& s)
        method output_adapter (line 12799) | output_adapter(StringType& s)
      class binary_writer (line 12826) | class binary_writer
        method binary_writer (line 12838) | explicit binary_writer(output_adapter_t<CharType> adapter) : oa(ad...
        method write_bson (line 12847) | void write_bson(const BasicJsonType& j)
        method write_cbor (line 12867) | void write_cbor(const BasicJsonType& j)
        method write_msgpack (line 13172) | void write_msgpack(const BasicJsonType& j)
        method write_ubjson (line 13496) | void write_ubjson(const BasicJsonType& j, const bool use_count,
        method calc_bson_entry_header_size (line 13703) | static std::size_t calc_bson_entry_header_size(const string_t& name)
        method write_bson_entry_header (line 13718) | void write_bson_entry_header(const string_t& name,
        method write_bson_boolean (line 13730) | void write_bson_boolean(const string_t& name,
        method write_bson_double (line 13740) | void write_bson_double(const string_t& name,
        method calc_bson_string_size (line 13750) | static std::size_t calc_bson_string_size(const string_t& value)
        method write_bson_string (line 13758) | void write_bson_string(const string_t& name,
        method write_bson_null (line 13772) | void write_bson_null(const string_t& name)
        method calc_bson_integer_size (line 13780) | static std::size_t calc_bson_integer_size(const std::int64_t value)
        method write_bson_integer (line 13790) | void write_bson_integer(const string_t& name,
        method calc_bson_unsigned_size (line 13808) | static constexpr std::size_t calc_bson_unsigned_size(const std::ui...
        method write_bson_unsigned (line 13818) | void write_bson_unsigned(const string_t& name,
        method write_bson_object_entry (line 13840) | void write_bson_object_entry(const string_t& name,
        method calc_bson_array_size (line 13850) | static std::size_t calc_bson_array_size(const typename BasicJsonTy...
        method calc_bson_binary_size (line 13865) | static std::size_t calc_bson_binary_size(const typename BasicJsonT...
        method write_bson_array (line 13873) | void write_bson_array(const string_t& name,
        method write_bson_binary (line 13892) | void write_bson_binary(const string_t& name,
        method calc_bson_element_size (line 13907) | static std::size_t calc_bson_element_size(const string_t& name,
        method write_bson_element (line 13955) | void write_bson_element(const string_t& name,
        method calc_bson_object_size (line 14001) | static std::size_t calc_bson_object_size(const typename BasicJsonT...
        method write_bson_object (line 14016) | void write_bson_object(const typename BasicJsonType::object_t& value)
        method CharType (line 14032) | static constexpr CharType get_cbor_float_prefix(float /*unused*/)
        method CharType (line 14037) | static constexpr CharType get_cbor_float_prefix(double /*unused*/)
        method CharType (line 14046) | static constexpr CharType get_msgpack_float_prefix(float /*unused*/)
        method CharType (line 14051) | static constexpr CharType get_msgpack_float_prefix(double /*unused*/)
        method write_number_with_ubjson_prefix (line 14063) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14076) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14139) | void write_number_with_ubjson_prefix(const NumberType n,
        method CharType (line 14203) | CharType ubjson_prefix(const BasicJsonType& j) const noexcept
        method CharType (line 14283) | static constexpr CharType get_ubjson_float_prefix(float /*unused*/)
        method CharType (line 14288) | static constexpr CharType get_ubjson_float_prefix(double /*unused*/)
        method write_number (line 14309) | void write_number(const NumberType n)
        method write_compact_float (line 14325) | void write_compact_float(const number_float_t n, detail::input_for...
        method CharType (line 14352) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14359) | static CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14370) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14381) | static constexpr CharType to_char_type(InputCharType x) noexcept
      type dtoa_impl (line 14450) | namespace dtoa_impl
        function Target (line 14454) | Target reinterpret_bits(const Source source)
        type diyfp (line 14463) | struct diyfp // f * 2^e
          method diyfp (line 14470) | constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_...
          method diyfp (line 14476) | static diyfp sub(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14488) | static diyfp mul(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14553) | static diyfp normalize(diyfp x) noexcept
          method diyfp (line 14570) | static diyfp normalize_to(const diyfp& x, const int target_expon...
        type boundaries (line 14581) | struct boundaries
        function boundaries (line 14595) | boundaries compute_boundaries(FloatType value)
        type cached_power (line 14720) | struct cached_power // c = f * 2^e ~= 10^k
        function cached_power (line 14734) | inline cached_power get_cached_power_for_binary_exponent(int e)
        function find_largest_pow10 (line 14898) | inline int find_largest_pow10(const std::uint32_t n, std::uint32_t...
        function grisu2_round (line 14954) | inline void grisu2_round(char* buf, int len, std::uint64_t dist, s...
        function grisu2_digit_gen (line 14995) | inline void grisu2_digit_gen(char* buffer, int& length, int& decim...
        function grisu2 (line 15236) | inline void grisu2(char* buf, int& len, int& decimal_exponent,
        function JSON_HEDLEY_NON_NULL (line 15295) | JSON_HEDLEY_NON_NULL(1)
      type error_handler_t (line 15543) | enum class error_handler_t
      class serializer (line 15551) | class serializer
        method serializer (line 15567) | serializer(output_adapter_t<char> s, const char ichar,
        method serializer (line 15579) | serializer(const serializer&) = delete;
        method serializer (line 15580) | serializer& operator=(const serializer&) = delete;
        method serializer (line 15581) | serializer(serializer&&) = delete;
        method serializer (line 15582) | serializer& operator=(serializer&&) = delete;
        method dump (line 15607) | void dump(const BasicJsonType& val,
        method switch (line 15905) | switch (decode(state, codepoint, byte))
    type detail (line 2385) | namespace detail
      type position_t (line 86) | struct position_t
      class exception (line 2419) | class exception : public std::exception
        method JSON_HEDLEY_RETURNS_NON_NULL (line 2423) | JSON_HEDLEY_RETURNS_NON_NULL
        method JSON_HEDLEY_NON_NULL (line 2433) | JSON_HEDLEY_NON_NULL(3)
        method name (line 2436) | static std::string name(const std::string& ename, int id_)
      class parse_error (line 2491) | class parse_error : public exception
        method parse_error (line 2503) | static parse_error create(int id_, const position_t& pos, const st...
        method parse_error (line 2510) | static parse_error create(int id_, std::size_t byte_, const std::s...
        method parse_error (line 2530) | parse_error(int id_, std::size_t byte_, const char* what_arg)
        method position_string (line 2533) | static std::string position_string(const position_t& pos)
      class invalid_iterator (line 2577) | class invalid_iterator : public exception
        method invalid_iterator (line 2580) | static invalid_iterator create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2587) | JSON_HEDLEY_NON_NULL(3)
      class type_error (line 2631) | class type_error : public exception
        method type_error (line 2634) | static type_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2641) | JSON_HEDLEY_NON_NULL(3)
      class out_of_range (line 2678) | class out_of_range : public exception
        method out_of_range (line 2681) | static out_of_range create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2688) | JSON_HEDLEY_NON_NULL(3)
      class other_error (line 2716) | class other_error : public exception
        method other_error (line 2719) | static other_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2726) | JSON_HEDLEY_NON_NULL(3)
      type index_sequence (line 2754) | struct index_sequence
        method size (line 2758) | static constexpr std::size_t size() noexcept
      type merge_and_renumber (line 2765) | struct merge_and_renumber
      type make_index_sequence (line 2772) | struct make_index_sequence
      type make_index_sequence<0> (line 2776) | struct make_index_sequence<0> : index_sequence<> {}
      type make_index_sequence<1> (line 2777) | struct make_index_sequence<1> : index_sequence<0> {}
      type priority_tag (line 2783) | struct priority_tag : priority_tag < N - 1 > {}
      type priority_tag<0> (line 2784) | struct priority_tag<0> {}
      type static_const (line 2788) | struct static_const
      type make_void (line 2817) | struct make_void
      type iterator_types (line 2833) | struct iterator_types {}
      type iterator_types <
    It,
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
    typename It::reference, typename It::iterator_category >> (line 2836) | struct iterator_types <
      type iterator_traits (line 2851) | struct iterator_traits
      type iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> (line 2856) | struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
      type iterator_traits<T*, enable_if_t<std::is_object<T>::value>> (line 2862) | struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
      type nonesuch (line 2890) | struct nonesuch
        method nonesuch (line 2892) | nonesuch() = delete;
        method nonesuch (line 2894) | nonesuch(nonesuch const&) = delete;
        method nonesuch (line 2895) | nonesuch(nonesuch const&&) = delete;
      type detector (line 2904) | struct detector
      type is_basic_json (line 3044) | struct is_basic_json : std::false_type {}
      class json_ref (line 3054) | class json_ref
        method json_ref (line 12606) | json_ref(value_type&& value)
        method json_ref (line 12612) | json_ref(const value_type& value)
        method json_ref (line 12617) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12626) | json_ref(Args && ... args)
        method json_ref (line 12633) | json_ref(json_ref&&) = default;
        method json_ref (line 12634) | json_ref(const json_ref&) = delete;
        method json_ref (line 12635) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12636) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12639) | value_type moved_or_copied() const
        method value_type (line 12648) | value_type const& operator*() const
        method value_type (line 12653) | value_type const* operator->() const
      type is_json_ref (line 3057) | struct is_json_ref : std::false_type {}
      type is_json_ref<json_ref<T>> (line 3060) | struct is_json_ref<json_ref<T>> : std::true_type {}
      type has_from_json (line 3101) | struct has_from_json : std::false_type {}
      type is_getable (line 3108) | struct is_getable
      type has_from_json < BasicJsonType, T,
           enable_if_t < !is_basic_json<T>::value >> (line 3114) | struct has_from_json < BasicJsonType, T,
      type has_non_default_from_json (line 3127) | struct has_non_default_from_json : std::false_type {}
      type has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3130) | struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !...
      type has_to_json (line 3142) | struct has_to_json : std::false_type {}
      type has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3145) | struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<...
      type is_iterator_traits (line 3160) | struct is_iterator_traits : std::false_type {}
      type is_iterator_traits<iterator_traits<T>> (line 3163) | struct is_iterator_traits<iterator_traits<T>>
      type is_complete_type (line 3180) | struct is_complete_type : std::false_type {}
      type is_complete_type<T, decltype(void(sizeof(T)))> (line 3183) | struct is_complete_type<T, decltype(void(sizeof(T)))> : std::true_ty...
      type is_compatible_object_type_impl (line 3187) | struct is_compatible_object_type_impl : std::false_type {}
      type is_compatible_object_type_impl <
    BasicJsonType, CompatibleObjectType,
    enable_if_t < is_detected<mapped_type_t, CompatibleObjectType>::value&&
    is_detected<key_type_t, CompatibleObjectType>::value >> (line 3190) | struct is_compatible_object_type_impl <
      type is_compatible_object_type (line 3207) | struct is_compatible_object_type
      type is_constructible_object_type_impl (line 3212) | struct is_constructible_object_type_impl : std::false_type {}
      type is_constructible_object_type_impl <
    BasicJsonType, ConstructibleObjectType,
    enable_if_t < is_detected<mapped_type_t, ConstructibleObjectType>::value&&
    is_detected<key_type_t, ConstructibleObjectType>::value >> (line 3215) | struct is_constructible_object_type_impl <
      type is_constructible_object_type (line 3239) | struct is_constructible_object_type
      type is_compatible_string_type_impl (line 3245) | struct is_compatible_string_type_impl : std::false_type {}
      type is_compatible_string_type_impl <
    BasicJsonType, CompatibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, CompatibleStringType>::value >> (line 3248) | struct is_compatible_string_type_impl <
      type is_compatible_string_type (line 3258) | struct is_compatible_string_type
      type is_constructible_string_type_impl (line 3263) | struct is_constructible_string_type_impl : std::false_type {}
      type is_constructible_string_type_impl <
    BasicJsonType, ConstructibleStringType,
    enable_if_t<is_detected_exact<typename BasicJsonType::string_t::value_type,
    value_type_t, ConstructibleStringType>::value >> (line 3266) | struct is_constructible_string_type_impl <
      type is_constructible_string_type (line 3277) | struct is_constructible_string_type
      type is_compatible_array_type_impl (line 3281) | struct is_compatible_array_type_impl : std::false_type {}
      type is_compatible_array_type (line 3300) | struct is_compatible_array_type
      type is_constructible_array_type_impl (line 3304) | struct is_constructible_array_type_impl : std::false_type {}
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t<std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value >> (line 3307) | struct is_constructible_array_type_impl <
      type is_constructible_array_type_impl <
    BasicJsonType, ConstructibleArrayType,
    enable_if_t < !std::is_same<ConstructibleArrayType,
    typename BasicJsonType::value_type>::value&&
    std::is_default_constructible<ConstructibleArrayType>::value&&
(std::is_move_assignable<ConstructibleArrayType>::value ||
 std::is_copy_assignable<ConstructibleArrayType>::value)&&
is_detected<value_type_t, ConstructibleArrayType>::value&&
is_detected<iterator_t, ConstructibleArrayType>::value&&
is_complete_type <
detected_t<value_type_t, ConstructibleArrayType >>::value >> (line 3314) | struct is_constructible_array_type_impl <
      type is_constructible_array_type (line 3343) | struct is_constructible_array_type
      type is_compatible_integer_type_impl (line 3348) | struct is_compatible_integer_type_impl : std::false_type {}
      type is_compatible_integer_type_impl <
    RealIntegerType, CompatibleNumberIntegerType,
    enable_if_t < std::is_integral<RealIntegerType>::value&&
    std::is_integral<CompatibleNumberIntegerType>::value&&
    !std::is_same<bool, CompatibleNumberIntegerType>::value >> (line 3351) | struct is_compatible_integer_type_impl <
      type is_compatible_integer_type (line 3369) | struct is_compatible_integer_type
      type is_compatible_type_impl (line 3374) | struct is_compatible_type_impl: std::false_type {}
      type is_compatible_type_impl <
    BasicJsonType, CompatibleType,
    enable_if_t<is_complete_type<CompatibleType>::value >> (line 3377) | struct is_compatible_type_impl <
      type is_compatible_type (line 3386) | struct is_compatible_type
      type conjunction (line 3390) | struct conjunction : std::true_type { }
      type conjunction<B1> (line 3391) | struct conjunction<B1> : B1 { }
      type is_constructible_tuple (line 3397) | struct is_constructible_tuple : std::false_type {}
      type value_t (line 3444) | enum class value_t : std::uint8_t
      function from_json (line 3493) | void from_json(const BasicJsonType& j, typename std::nullptr_t& n)
      function get_arithmetic_value (line 3507) | void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3533) | void from_json(const BasicJsonType& j, typename BasicJsonType::boole...
      function from_json (line 3543) | void from_json(const BasicJsonType& j, typename BasicJsonType::strin...
      function from_json (line 3559) | void from_json(const BasicJsonType& j, ConstructibleStringType& s)
      function from_json (line 3570) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3576) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3582) | void from_json(const BasicJsonType& j, typename BasicJsonType::numbe...
      function from_json (line 3589) | void from_json(const BasicJsonType& j, EnumType& e)
      function from_json (line 3599) | void from_json(const BasicJsonType& j, std::forward_list<T, Allocato...
      function from_json (line 3616) | void from_json(const BasicJsonType& j, std::valarray<T>& l)
      function from_json (line 3631) | auto from_json(const BasicJsonType& j, T (&arr)[N])
      function from_json_array_impl (line 3641) | void from_json_array_impl(const BasicJsonType& j, typename BasicJson...
      function from_json_array_impl (line 3647) | auto from_json_array_impl(const BasicJsonType& j, std::array<T, N>& ...
      function from_json_array_impl (line 3658) | auto from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json_array_impl (line 3679) | void from_json_array_impl(const BasicJsonType& j, ConstructibleArray...
      function from_json (line 3704) | auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr)
      function from_json (line 3719) | void from_json(const BasicJsonType& j, typename BasicJsonType::binar...
      function from_json (line 3731) | void from_json(const BasicJsonType& j, ConstructibleObjectType& obj)
      function from_json (line 3763) | void from_json(const BasicJsonType& j, ArithmeticType& val)
      function from_json (line 3794) | void from_json(const BasicJsonType& j, std::pair<A1, A2>& p)
      function from_json_tuple_impl (line 3800) | void from_json_tuple_impl(const BasicJsonType& j, Tuple& t, index_se...
      function from_json (line 3806) | void from_json(const BasicJsonType& j, std::tuple<Args...>& t)
      function from_json (line 3814) | void from_json(const BasicJsonType& j, std::map<Key, Value, Compare,...
      function from_json (line 3834) | void from_json(const BasicJsonType& j, std::unordered_map<Key, Value...
      type from_json_fn (line 3851) | struct from_json_fn
      function int_to_string (line 3902) | void int_to_string( string_type& target, std::size_t value )
      class iteration_proxy_value (line 3908) | class iteration_proxy_value
        method iteration_proxy_value (line 3931) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3934) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3940) | iteration_proxy_value& operator++()
        method string_type (line 3961) | const string_type& key() const
        method value (line 3989) | typename IteratorType::reference value() const
      class iteration_proxy (line 3996) | class iteration_proxy
        method iteration_proxy (line 4004) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 4008) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 4014) | iteration_proxy_value<IteratorType> end() noexcept
      function get (line 4023) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      function get (line 4031) | auto get(const nlohmann::detail::iteration_proxy_value<IteratorType>...
      type external_constructor (line 4081) | struct external_constructor
      type external_constructor<value_t::boolean> (line 4084) | struct external_constructor<value_t::boolean>
        method construct (line 4087) | static void construct(BasicJsonType& j, typename BasicJsonType::bo...
      type external_constructor<value_t::string> (line 4096) | struct external_constructor<value_t::string>
        method construct (line 4099) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4107) | static void construct(BasicJsonType& j, typename BasicJsonType::st...
        method construct (line 4117) | static void construct(BasicJsonType& j, const CompatibleStringType...
      type external_constructor<value_t::binary> (line 4126) | struct external_constructor<value_t::binary>
        method construct (line 4129) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4138) | static void construct(BasicJsonType& j, typename BasicJsonType::bi...
      type external_constructor<value_t::number_float> (line 4148) | struct external_constructor<value_t::number_float>
        method construct (line 4151) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_unsigned> (line 4160) | struct external_constructor<value_t::number_unsigned>
        method construct (line 4163) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::number_integer> (line 4172) | struct external_constructor<value_t::number_integer>
        method construct (line 4175) | static void construct(BasicJsonType& j, typename BasicJsonType::nu...
      type external_constructor<value_t::array> (line 4184) | struct external_constructor<value_t::array>
        method construct (line 4187) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4195) | static void construct(BasicJsonType& j, typename BasicJsonType::ar...
        method construct (line 4205) | static void construct(BasicJsonType& j, const CompatibleArrayType&...
        method construct (line 4215) | static void construct(BasicJsonType& j, const std::vector<bool>& arr)
        method construct (line 4229) | static void construct(BasicJsonType& j, const std::valarray<T>& arr)
      type external_constructor<value_t::object> (line 4243) | struct external_constructor<value_t::object>
        method construct (line 4246) | static void construct(BasicJsonType& j, const typename BasicJsonTy...
        method construct (line 4254) | static void construct(BasicJsonType& j, typename BasicJsonType::ob...
        method construct (line 4263) | static void construct(BasicJsonType& j, const CompatibleObjectType...
      function to_json (line 4280) | void to_json(BasicJsonType& j, T b) noexcept
      function to_json (line 4287) | void to_json(BasicJsonType& j, const CompatibleString& s)
      function to_json (line 4293) | void to_json(BasicJsonType& j, typename BasicJsonType::string_t&& s)
      function to_json (line 4300) | void to_json(BasicJsonType& j, FloatType val) noexcept
      function to_json (line 4307) | void to_json(BasicJsonType& j, CompatibleNumberUnsignedType val) noe...
      function to_json (line 4314) | void to_json(BasicJsonType& j, CompatibleNumberIntegerType val) noex...
      function to_json (line 4321) | void to_json(BasicJsonType& j, EnumType e) noexcept
      function to_json (line 4328) | void to_json(BasicJsonType& j, const std::vector<bool>& e)
      function to_json (line 4341) | void to_json(BasicJsonType& j, const CompatibleArrayType& arr)
      function to_json (line 4347) | void to_json(BasicJsonType& j, const typename BasicJsonType::binary_...
      function to_json (line 4354) | void to_json(BasicJsonType& j, const std::valarray<T>& arr)
      function to_json (line 4360) | void to_json(BasicJsonType& j, typename BasicJsonType::array_t&& arr)
      function to_json (line 4367) | void to_json(BasicJsonType& j, const CompatibleObjectType& obj)
      function to_json (line 4373) | void to_json(BasicJsonType& j, typename BasicJsonType::object_t&& obj)
      function to_json (line 4383) | void to_json(BasicJsonType& j, const T(&arr)[N])
      function to_json (line 4389) | void to_json(BasicJsonType& j, const std::pair<T1, T2>& p)
      function to_json (line 4397) | void to_json(BasicJsonType& j, const T& b)
      function to_json_tuple_impl (line 4403) | void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequ...
      function to_json (line 4409) | void to_json(BasicJsonType& j, const T& t)
      type to_json_fn (line 4414) | struct to_json_fn
      function combine (line 4662) | inline std::size_t combine(std::size_t seed, std::size_t h) noexcept
      function hash (line 4680) | std::size_t hash(const BasicJsonType& j)
      type input_format_t (line 4812) | enum class input_format_t { json, cbor, msgpack, ubjson, bson }
      class file_input_adapter (line 4822) | class file_input_adapter
        method file_input_adapter (line 4828) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4833) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4834) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4835) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4836) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4838) | std::char_traits<char>::int_type get_character() noexcept
      class input_stream_adapter (line 4858) | class input_stream_adapter
        method input_stream_adapter (line 4873) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4878) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4879) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4880) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4882) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4891) | std::char_traits<char>::int_type get_character()
      class iterator_input_adapter (line 4911) | class iterator_input_adapter
        method iterator_input_adapter (line 4916) | iterator_input_adapter(IteratorType first, IteratorType last)
        method get_character (line 4919) | typename std::char_traits<char_type>::int_type get_character()
        method empty (line 4940) | bool empty() const
      type wide_string_input_helper (line 4949) | struct wide_string_input_helper
      type wide_string_input_helper<BaseInputAdapter, 4> (line 4952) | struct wide_string_input_helper<BaseInputAdapter, 4>
        method fill_buffer (line 4955) | static void fill_buffer(BaseInputAdapter& input,
      type wide_string_input_helper<BaseInputAdapter, 2> (line 5010) | struct wide_string_input_helper<BaseInputAdapter, 2>
        method fill_buffer (line 5013) | static void fill_buffer(BaseInputAdapter& input,
      class wide_string_input_adapter (line 5073) | class wide_string_input_adapter
        method wide_string_input_adapter (line 5078) | wide_string_input_adapter(BaseInputAdapter base)
        method get_character (line 5081) | typename std::char_traits<char>::int_type get_character() noexcept
        method fill_buffer (line 5102) | void fill_buffer()
      type iterator_input_adapter_factory (line 5118) | struct iterator_input_adapter_factory
        method adapter_type (line 5124) | static adapter_type create(IteratorType first, IteratorType last)
      type is_iterator_of_multibyte (line 5131) | struct is_iterator_of_multibyte
      type iterator_input_adapter_factory<IteratorType, enable_if_t<is_iterator_of_multibyte<IteratorType>::value>> (line 5141) | struct iterator_input_adapter_factory<IteratorType, enable_if_t<is_i...
        method adapter_type (line 5148) | static adapter_type create(IteratorType first, IteratorType last)
      function input_adapter (line 5156) | typename iterator_input_adapter_factory<IteratorType>::adapter_type ...
      function input_adapter (line 5164) | auto input_adapter(const ContainerType& container) -> decltype(input...
      function file_input_adapter (line 5174) | inline file_input_adapter input_adapter(std::FILE* file)
        method file_input_adapter (line 4828) | explicit file_input_adapter(std::FILE* f) noexcept
        method file_input_adapter (line 4833) | file_input_adapter(const file_input_adapter&) = delete;
        method file_input_adapter (line 4834) | file_input_adapter(file_input_adapter&&) = default;
        method file_input_adapter (line 4835) | file_input_adapter& operator=(const file_input_adapter&) = delete;
        method file_input_adapter (line 4836) | file_input_adapter& operator=(file_input_adapter&&) = delete;
        method get_character (line 4838) | std::char_traits<char>::int_type get_character() noexcept
      function input_stream_adapter (line 5179) | inline input_stream_adapter input_adapter(std::istream& stream)
        method input_stream_adapter (line 4873) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4878) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4879) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4880) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4882) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4891) | std::char_traits<char>::int_type get_character()
      function input_stream_adapter (line 5184) | inline input_stream_adapter input_adapter(std::istream&& stream)
        method input_stream_adapter (line 4873) | explicit input_stream_adapter(std::istream& i)
        method input_stream_adapter (line 4878) | input_stream_adapter(const input_stream_adapter&) = delete;
        method input_stream_adapter (line 4879) | input_stream_adapter& operator=(input_stream_adapter&) = delete;
        method input_stream_adapter (line 4880) | input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete;
        method input_stream_adapter (line 4882) | input_stream_adapter(input_stream_adapter&& rhs) noexcept : is(rhs...
        method get_character (line 4891) | std::char_traits<char>::int_type get_character()
      function contiguous_bytes_input_adapter (line 5199) | contiguous_bytes_input_adapter input_adapter(CharT b)
      function input_adapter (line 5207) | auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, a...
      class span_input_adapter (line 5215) | class span_input_adapter
        method span_input_adapter (line 5224) | span_input_adapter(CharT b, std::size_t l)
        method span_input_adapter (line 5231) | span_input_adapter(IteratorType first, IteratorType last)
        method contiguous_bytes_input_adapter (line 5234) | contiguous_bytes_input_adapter&& get()
      class json_sax_dom_parser (line 5396) | class json_sax_dom_parser
        method json_sax_dom_parser (line 5410) | explicit json_sax_dom_parser(BasicJsonType& r, const bool allow_ex...
        method json_sax_dom_parser (line 5415) | json_sax_dom_parser(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5416) | json_sax_dom_parser(json_sax_dom_parser&&) = default;
        method json_sax_dom_parser (line 5417) | json_sax_dom_parser& operator=(const json_sax_dom_parser&) = delete;
        method json_sax_dom_parser (line 5418) | json_sax_dom_parser& operator=(json_sax_dom_parser&&) = default;
        method null (line 5421) | bool null()
        method boolean (line 5427) | bool boolean(bool val)
        method number_integer (line 5433) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5439) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5445) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5451) | bool string(string_t& val)
        method binary (line 5457) | bool binary(binary_t& val)
        method start_object (line 5463) | bool start_object(std::size_t len)
        method key (line 5476) | bool key(string_t& val)
        method end_object (line 5483) | bool end_object()
        method start_array (line 5489) | bool start_array(std::size_t len)
        method end_array (line 5502) | bool end_array()
        method parse_error (line 5509) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5521) | constexpr bool is_errored() const
        method JSON_HEDLEY_RETURNS_NON_NULL (line 5534) | JSON_HEDLEY_RETURNS_NON_NULL
      class json_sax_dom_callback_parser (line 5570) | class json_sax_dom_callback_parser
        method json_sax_dom_callback_parser (line 5581) | json_sax_dom_callback_parser(BasicJsonType& r,
        method json_sax_dom_callback_parser (line 5590) | json_sax_dom_callback_parser(const json_sax_dom_callback_parser&) ...
        method json_sax_dom_callback_parser (line 5591) | json_sax_dom_callback_parser(json_sax_dom_callback_parser&&) = def...
        method json_sax_dom_callback_parser (line 5592) | json_sax_dom_callback_parser& operator=(const json_sax_dom_callbac...
        method json_sax_dom_callback_parser (line 5593) | json_sax_dom_callback_parser& operator=(json_sax_dom_callback_pars...
        method null (line 5596) | bool null()
        method boolean (line 5602) | bool boolean(bool val)
        method number_integer (line 5608) | bool number_integer(number_integer_t val)
        method number_unsigned (line 5614) | bool number_unsigned(number_unsigned_t val)
        method number_float (line 5620) | bool number_float(number_float_t val, const string_t& /*unused*/)
        method string (line 5626) | bool string(string_t& val)
        method binary (line 5632) | bool binary(binary_t& val)
        method start_object (line 5638) | bool start_object(std::size_t len)
        method key (line 5656) | bool key(string_t& val)
        method end_object (line 5673) | bool end_object()
        method start_array (line 5702) | bool start_array(std::size_t len)
        method end_array (line 5719) | bool end_array()
        method parse_error (line 5748) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
        method is_errored (line 5760) | constexpr bool is_errored() const
        method handle_value (line 5782) | std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool...
      class json_sax_acceptor (line 5866) | class json_sax_acceptor
        method null (line 5875) | bool null()
        method boolean (line 5880) | bool boolean(bool /*unused*/)
        method number_integer (line 5885) | bool number_integer(number_integer_t /*unused*/)
        method number_unsigned (line 5890) | bool number_unsigned(number_unsigned_t /*unused*/)
        method number_float (line 5895) | bool number_float(number_float_t /*unused*/, const string_t& /*unu...
        method string (line 5900) | bool string(string_t& /*unused*/)
        method binary (line 5905) | bool binary(binary_t& /*unused*/)
        method start_object (line 5910) | bool start_object(std::size_t /*unused*/ = std::size_t(-1))
        method key (line 5915) | bool key(string_t& /*unused*/)
        method end_object (line 5920) | bool end_object()
        method start_array (line 5925) | bool start_array(std::size_t /*unused*/ = std::size_t(-1))
        method end_array (line 5930) | bool end_array()
        method parse_error (line 5935) | bool parse_error(std::size_t /*unused*/, const std::string& /*unus...
      class lexer_base (line 5973) | class lexer_base
        type token_type (line 5977) | enum class token_type
      class lexer (line 6050) | class lexer : public lexer_base<BasicJsonType>
        method lexer (line 6062) | explicit lexer(InputAdapterType&& adapter, bool ignore_comments_ =...
        method lexer (line 6069) | lexer(const lexer&) = delete;
        method lexer (line 6070) | lexer(lexer&&) = default;
        method lexer (line 6071) | lexer& operator=(lexer&) = delete;
        method lexer (line 6072) | lexer& operator=(lexer&&) = default;
        method JSON_HEDLEY_PURE (line 6081) | JSON_HEDLEY_PURE
        method get_codepoint (line 6108) | int get_codepoint()
        method next_byte_in_range (line 6156) | bool next_byte_in_range(std::initializer_list<char_int_type> ranges)
        method token_type (line 6193) | token_type scan_string()
        method scan_comment (line 6783) | bool scan_comment()
        method strtof (line 6851) | static void strtof(float& f, const char* str, char** endptr) noexcept
        method strtof (line 6857) | static void strtof(double& f, const char* str, char** endptr) noex...
        method strtof (line 6863) | static void strtof(long double& f, const char* str, char** endptr)...
        method token_type (line 6908) | token_type scan_number()  // lgtm [cpp/use-of-goto]
      type is_sax (line 7641) | struct is_sax
      type is_sax_static_asserts (line 7672) | struct is_sax_static_asserts
      type cbor_tag_handler_t (line 7736) | enum class cbor_tag_handler_t
      function little_endianess (line 7749) | static inline bool little_endianess(int num = 1) noexcept
      class binary_reader (line 7763) | class binary_reader
        method binary_reader (line 7780) | explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(...
        method binary_reader (line 7786) | binary_reader(const binary_reader&) = delete;
        method binary_reader (line 7787) | binary_reader(binary_reader&&) = default;
        method binary_reader (line 7788) | binary_reader& operator=(const binary_reader&) = delete;
        method binary_reader (line 7789) | binary_reader& operator=(binary_reader&&) = default;
        method JSON_HEDLEY_NON_NULL (line 7800) | JSON_HEDLEY_NON_NULL(3)
        method parse_bson_internal (line 7862) | bool parse_bson_internal()
        method get_bson_cstr (line 7887) | bool get_bson_cstr(string_t& result)
        method get_bson_string (line 7917) | bool get_bson_string(const NumberType len, string_t& result)
        method get_bson_binary (line 7938) | bool get_bson_binary(const NumberType len, binary_t& result)
        method parse_bson_element_internal (line 7964) | bool parse_bson_element_internal(const char_int_type element_type,
        method parse_bson_element_list (line 8042) | bool parse_bson_element_list(const bool is_array)
        method parse_bson_array (line 8080) | bool parse_bson_array()
        method parse_cbor_internal (line 8110) | bool parse_cbor_internal(const bool get_char,
        method get_cbor_string (line 8556) | bool get_cbor_string(string_t& result)
        method get_cbor_binary (line 8651) | bool get_cbor_binary(binary_t& result)
        method get_cbor_array (line 8745) | bool get_cbor_array(const std::size_t len,
        method get_cbor_object (line 8783) | bool get_cbor_object(const std::size_t len,
        method parse_msgpack_internal (line 8836) | bool parse_msgpack_internal()
        method get_msgpack_string (line 9216) | bool get_msgpack_string(string_t& result)
        method get_msgpack_binary (line 9298) | bool get_msgpack_binary(binary_t& result)
        method get_msgpack_array (line 9409) | bool get_msgpack_array(const std::size_t len)
        method get_msgpack_object (line 9431) | bool get_msgpack_object(const std::size_t len)
        method parse_ubjson_internal (line 9468) | bool parse_ubjson_internal(const bool get_char = true)
        method get_ubjson_string (line 9487) | bool get_ubjson_string(string_t& result, const bool get_char = true)
        method get_ubjson_size_value (line 9541) | bool get_ubjson_size_value(std::size_t& result)
        method get_ubjson_size_type (line 9618) | bool get_ubjson_size_type(std::pair<std::size_t, char_int_type>& r...
        method get_ubjson_value (line 9659) | bool get_ubjson_value(const char_int_type prefix)
        method get_ubjson_array (line 9760) | bool get_ubjson_array()
        method get_ubjson_object (line 9822) | bool get_ubjson_object()
        method get_ubjson_high_precision_number (line 9897) | bool get_ubjson_high_precision_number()
        method char_int_type (line 9959) | char_int_type get()
        method char_int_type (line 9968) | char_int_type get_ignore_noop()
        method get_number (line 9993) | bool get_number(const input_format_t format, NumberType& result)
        method get_string (line 10036) | bool get_string(const input_format_t format,
        method get_binary (line 10069) | bool get_binary(const input_format_t format,
        method JSON_HEDLEY_NON_NULL (line 10092) | JSON_HEDLEY_NON_NULL(3)
        method get_token_string (line 10106) | std::string get_token_string() const
        method exception_message (line 10119) | std::string exception_message(const input_format_t format,
      type parse_event_t (line 10206) | enum class parse_event_t : uint8_t
      class parser (line 10232) | class parser
        method parser (line 10243) | explicit parser(InputAdapterType&& adapter,
        method parse (line 10265) | void parse(const bool strict, BasicJsonType& result)
        method accept (line 10326) | bool accept(const bool strict = true)
        method sax_parse (line 10334) | bool sax_parse(SAX* sax, const bool strict = true)
        method sax_parse_internal (line 10354) | bool sax_parse_internal(SAX* sax)
        method token_type (line 10636) | token_type get_token()
        method exception_message (line 10641) | std::string exception_message(const token_type expected, const std...
      class primitive_iterator_t (line 10705) | class primitive_iterator_t
        method difference_type (line 10717) | constexpr difference_type get_value() const noexcept
        method set_begin (line 10723) | void set_begin() noexcept
        method set_end (line 10729) | void set_end() noexcept
        method is_begin (line 10735) | constexpr bool is_begin() const noexcept
        method is_end (line 10741) | constexpr bool is_end() const noexcept
        method primitive_iterator_t (line 10756) | primitive_iterator_t operator+(difference_type n) noexcept
        method difference_type (line 10763) | constexpr difference_type operator-(primitive_iterator_t lhs, prim...
        method primitive_iterator_t (line 10768) | primitive_iterator_t& operator++() noexcept
        method primitive_iterator_t (line 10774) | primitive_iterator_t const operator++(int) noexcept
        method primitive_iterator_t (line 10781) | primitive_iterator_t& operator--() noexcept
        method primitive_iterator_t (line 10787) | primitive_iterator_t const operator--(int) noexcept
        method primitive_iterator_t (line 10794) | primitive_iterator_t& operator+=(difference_type n) noexcept
        method primitive_iterator_t (line 10800) | primitive_iterator_t& operator-=(difference_type n) noexcept
      type internal_iterator (line 10820) | struct internal_iterator
      class iteration_proxy (line 10858) | class iteration_proxy
        method iteration_proxy (line 4004) | explicit iteration_proxy(typename IteratorType::reference cont) no...
        method begin (line 4008) | iteration_proxy_value<IteratorType> begin() noexcept
        method end (line 4014) | iteration_proxy_value<IteratorType> end() noexcept
      class iteration_proxy_value (line 10859) | class iteration_proxy_value
        method iteration_proxy_value (line 3931) | explicit iteration_proxy_value(IteratorType it) noexcept : anchor(...
        method iteration_proxy_value (line 3934) | iteration_proxy_value& operator*()
        method iteration_proxy_value (line 3940) | iteration_proxy_value& operator++()
        method string_type (line 3961) | const string_type& key() const
        method value (line 3989) | typename IteratorType::reference value() const
      function set_end (line 10878) | class iter_impl
      class json_reverse_iterator (line 11514) | class json_reverse_iterator : public std::reverse_iterator<Base>
        method json_reverse_iterator (line 11524) | explicit json_reverse_iterator(const typename base_iterator::itera...
        method json_reverse_iterator (line 11528) | explicit json_reverse_iterator(const base_iterator& it) noexcept :...
        method json_reverse_iterator (line 11531) | json_reverse_iterator const operator++(int)
        method json_reverse_iterator (line 11537) | json_reverse_iterator& operator++()
        method json_reverse_iterator (line 11543) | json_reverse_iterator const operator--(int)
        method json_reverse_iterator (line 11549) | json_reverse_iterator& operator--()
        method json_reverse_iterator (line 11555) | json_reverse_iterator& operator+=(difference_type i)
        method json_reverse_iterator (line 11561) | json_reverse_iterator operator+(difference_type i) const
        method json_reverse_iterator (line 11567) | json_reverse_iterator operator-(difference_type i) const
        method difference_type (line 11573) | difference_type operator-(const json_reverse_iterator& other) const
        method reference (line 11579) | reference operator[](difference_type n) const
        method key (line 11585) | auto key() const -> decltype(std::declval<Base>().key())
        method reference (line 11592) | reference value() const
      class json_ref (line 12601) | class json_ref
        method json_ref (line 12606) | json_ref(value_type&& value)
        method json_ref (line 12612) | json_ref(const value_type& value)
        method json_ref (line 12617) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12626) | json_ref(Args && ... args)
        method json_ref (line 12633) | json_ref(json_ref&&) = default;
        method json_ref (line 12634) | json_ref(const json_ref&) = delete;
        method json_ref (line 12635) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12636) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12639) | value_type moved_or_copied() const
        method value_type (line 12648) | value_type const& operator*() const
        method value_type (line 12653) | value_type const* operator->() const
      type output_adapter_protocol (line 12706) | struct output_adapter_protocol
      class output_vector_adapter (line 12719) | class output_vector_adapter : public output_adapter_protocol<CharType>
        method output_vector_adapter (line 12722) | explicit output_vector_adapter(std::vector<CharType>& vec) noexcept
        method write_character (line 12726) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12731) | JSON_HEDLEY_NON_NULL(2)
      class output_stream_adapter (line 12743) | class output_stream_adapter : public output_adapter_protocol<CharType>
        method output_stream_adapter (line 12746) | explicit output_stream_adapter(std::basic_ostream<CharType>& s) no...
        method write_character (line 12750) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12755) | JSON_HEDLEY_NON_NULL(2)
      class output_string_adapter (line 12767) | class output_string_adapter : public output_adapter_protocol<CharType>
        method output_string_adapter (line 12770) | explicit output_string_adapter(StringType& s) noexcept
        method write_character (line 12774) | void write_character(CharType c) override
        method JSON_HEDLEY_NON_NULL (line 12779) | JSON_HEDLEY_NON_NULL(2)
      class output_adapter (line 12790) | class output_adapter
        method output_adapter (line 12793) | output_adapter(std::vector<CharType>& vec)
        method output_adapter (line 12796) | output_adapter(std::basic_ostream<CharType>& s)
        method output_adapter (line 12799) | output_adapter(StringType& s)
      class binary_writer (line 12826) | class binary_writer
        method binary_writer (line 12838) | explicit binary_writer(output_adapter_t<CharType> adapter) : oa(ad...
        method write_bson (line 12847) | void write_bson(const BasicJsonType& j)
        method write_cbor (line 12867) | void write_cbor(const BasicJsonType& j)
        method write_msgpack (line 13172) | void write_msgpack(const BasicJsonType& j)
        method write_ubjson (line 13496) | void write_ubjson(const BasicJsonType& j, const bool use_count,
        method calc_bson_entry_header_size (line 13703) | static std::size_t calc_bson_entry_header_size(const string_t& name)
        method write_bson_entry_header (line 13718) | void write_bson_entry_header(const string_t& name,
        method write_bson_boolean (line 13730) | void write_bson_boolean(const string_t& name,
        method write_bson_double (line 13740) | void write_bson_double(const string_t& name,
        method calc_bson_string_size (line 13750) | static std::size_t calc_bson_string_size(const string_t& value)
        method write_bson_string (line 13758) | void write_bson_string(const string_t& name,
        method write_bson_null (line 13772) | void write_bson_null(const string_t& name)
        method calc_bson_integer_size (line 13780) | static std::size_t calc_bson_integer_size(const std::int64_t value)
        method write_bson_integer (line 13790) | void write_bson_integer(const string_t& name,
        method calc_bson_unsigned_size (line 13808) | static constexpr std::size_t calc_bson_unsigned_size(const std::ui...
        method write_bson_unsigned (line 13818) | void write_bson_unsigned(const string_t& name,
        method write_bson_object_entry (line 13840) | void write_bson_object_entry(const string_t& name,
        method calc_bson_array_size (line 13850) | static std::size_t calc_bson_array_size(const typename BasicJsonTy...
        method calc_bson_binary_size (line 13865) | static std::size_t calc_bson_binary_size(const typename BasicJsonT...
        method write_bson_array (line 13873) | void write_bson_array(const string_t& name,
        method write_bson_binary (line 13892) | void write_bson_binary(const string_t& name,
        method calc_bson_element_size (line 13907) | static std::size_t calc_bson_element_size(const string_t& name,
        method write_bson_element (line 13955) | void write_bson_element(const string_t& name,
        method calc_bson_object_size (line 14001) | static std::size_t calc_bson_object_size(const typename BasicJsonT...
        method write_bson_object (line 14016) | void write_bson_object(const typename BasicJsonType::object_t& value)
        method CharType (line 14032) | static constexpr CharType get_cbor_float_prefix(float /*unused*/)
        method CharType (line 14037) | static constexpr CharType get_cbor_float_prefix(double /*unused*/)
        method CharType (line 14046) | static constexpr CharType get_msgpack_float_prefix(float /*unused*/)
        method CharType (line 14051) | static constexpr CharType get_msgpack_float_prefix(double /*unused*/)
        method write_number_with_ubjson_prefix (line 14063) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14076) | void write_number_with_ubjson_prefix(const NumberType n,
        method write_number_with_ubjson_prefix (line 14139) | void write_number_with_ubjson_prefix(const NumberType n,
        method CharType (line 14203) | CharType ubjson_prefix(const BasicJsonType& j) const noexcept
        method CharType (line 14283) | static constexpr CharType get_ubjson_float_prefix(float /*unused*/)
        method CharType (line 14288) | static constexpr CharType get_ubjson_float_prefix(double /*unused*/)
        method write_number (line 14309) | void write_number(const NumberType n)
        method write_compact_float (line 14325) | void write_compact_float(const number_float_t n, detail::input_for...
        method CharType (line 14352) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14359) | static CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14370) | static constexpr CharType to_char_type(std::uint8_t x) noexcept
        method CharType (line 14381) | static constexpr CharType to_char_type(InputCharType x) noexcept
      type dtoa_impl (line 14450) | namespace dtoa_impl
        function Target (line 14454) | Target reinterpret_bits(const Source source)
        type diyfp (line 14463) | struct diyfp // f * 2^e
          method diyfp (line 14470) | constexpr diyfp(std::uint64_t f_, int e_) noexcept : f(f_), e(e_...
          method diyfp (line 14476) | static diyfp sub(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14488) | static diyfp mul(const diyfp& x, const diyfp& y) noexcept
          method diyfp (line 14553) | static diyfp normalize(diyfp x) noexcept
          method diyfp (line 14570) | static diyfp normalize_to(const diyfp& x, const int target_expon...
        type boundaries (line 14581) | struct boundaries
        function boundaries (line 14595) | boundaries compute_boundaries(FloatType value)
        type cached_power (line 14720) | struct cached_power // c = f * 2^e ~= 10^k
        function cached_power (line 14734) | inline cached_power get_cached_power_for_binary_exponent(int e)
        function find_largest_pow10 (line 14898) | inline int find_largest_pow10(const std::uint32_t n, std::uint32_t...
        function grisu2_round (line 14954) | inline void grisu2_round(char* buf, int len, std::uint64_t dist, s...
        function grisu2_digit_gen (line 14995) | inline void grisu2_digit_gen(char* buffer, int& length, int& decim...
        function grisu2 (line 15236) | inline void grisu2(char* buf, int& len, int& decimal_exponent,
        function JSON_HEDLEY_NON_NULL (line 15295) | JSON_HEDLEY_NON_NULL(1)
      type error_handler_t (line 15543) | enum class error_handler_t
      class serializer (line 15551) | class serializer
        method serializer (line 15567) | serializer(output_adapter_t<char> s, const char ichar,
        method serializer (line 15579) | serializer(const serializer&) = delete;
        method serializer (line 15580) | serializer& operator=(const serializer&) = delete;
        method serializer (line 15581) | serializer(serializer&&) = delete;
        method serializer (line 15582) | serializer& operator=(serializer&&) = delete;
        method dump (line 15607) | void dump(const BasicJsonType& val,
        method switch (line 15905) | switch (decode(state, codepoint, byte))
    type detail (line 2742) | namespace detail
      type position_t (line 86) | struct position_t
      class exception (line 2419) | class exception : public std::exception
        method JSON_HEDLEY_RETURNS_NON_NULL (line 2423) | JSON_HEDLEY_RETURNS_NON_NULL
        method JSON_HEDLEY_NON_NULL (line 2433) | JSON_HEDLEY_NON_NULL(3)
        method name (line 2436) | static std::string name(const std::string& ename, int id_)
      class parse_error (line 2491) | class parse_error : public exception
        method parse_error (line 2503) | static parse_error create(int id_, const position_t& pos, const st...
        method parse_error (line 2510) | static parse_error create(int id_, std::size_t byte_, const std::s...
        method parse_error (line 2530) | parse_error(int id_, std::size_t byte_, const char* what_arg)
        method position_string (line 2533) | static std::string position_string(const position_t& pos)
      class invalid_iterator (line 2577) | class invalid_iterator : public exception
        method invalid_iterator (line 2580) | static invalid_iterator create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2587) | JSON_HEDLEY_NON_NULL(3)
      class type_error (line 2631) | class type_error : public exception
        method type_error (line 2634) | static type_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2641) | JSON_HEDLEY_NON_NULL(3)
      class out_of_range (line 2678) | class out_of_range : public exception
        method out_of_range (line 2681) | static out_of_range create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2688) | JSON_HEDLEY_NON_NULL(3)
      class other_error (line 2716) | class other_error : public exception
        method other_error (line 2719) | static other_error create(int id_, const std::string& what_arg)
        method JSON_HEDLEY_NON_NULL (line 2726) | JSON_HEDLEY_NON_NULL(3)
      type index_sequence (line 2754) | struct index_sequence
        method size (line 2758) | static constexpr std::size_t size() noexcept
      type merge_and_renumber (line 2765) | struct merge_and_renumber
      type make_index_sequence (line 2772) | struct make_index_sequence
      type make_index_sequence<0> (line 2776) | struct make_index_sequence<0> : index_sequence<> {}
      type make_index_sequence<1> (line 2777) | struct make_index_sequence<1> : index_sequence<0> {}
      type priority_tag (line 2783) | struct priority_tag : priority_tag < N - 1 > {}
      type priority_tag<0> (line 2784) | struct priority_tag<0> {}
      type static_const (line 2788) | struct static_const
      type make_void (line 2817) | struct make_void
      type iterator_types (line 2833) | struct iterator_types {}
      type iterator_types <
    It,
    void_t<typename It::difference_type, typename It::value_type, typename It::pointer,
    typename It::reference, typename It::iterator_category >> (line 2836) | struct iterator_types <
      type iterator_traits (line 2851) | struct iterator_traits
      type iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >> (line 2856) | struct iterator_traits < T, enable_if_t < !std::is_pointer<T>::value >>
      type iterator_traits<T*, enable_if_t<std::is_object<T>::value>> (line 2862) | struct iterator_traits<T*, enable_if_t<std::is_object<T>::value>>
      type nonesuch (line 2890) | struct nonesuch
        method nonesuch (line 2892) | nonesuch() = delete;
        method nonesuch (line 2894) | nonesuch(nonesuch const&) = delete;
        method nonesuch (line 2895) | nonesuch(nonesuch const&&) = delete;
      type detector (line 2904) | struct detector
      type is_basic_json (line 3044) | struct is_basic_json : std::false_type {}
      class json_ref (line 3054) | class json_ref
        method json_ref (line 12606) | json_ref(value_type&& value)
        method json_ref (line 12612) | json_ref(const value_type& value)
        method json_ref (line 12617) | json_ref(std::initializer_list<json_ref> init)
        method json_ref (line 12626) | json_ref(Args && ... args)
        method json_ref (line 12633) | json_ref(json_ref&&) = default;
        method json_ref (line 12634) | json_ref(const json_ref&) = delete;
        method json_ref (line 12635) | json_ref& operator=(const json_ref&) = delete;
        method json_ref (line 12636) | json_ref& operator=(json_ref&&) = delete;
        method value_type (line 12639) | value_type moved_or_copied() const
        method value_type (line 12648) | value_type const& operator*() const
        method value_type (line 12653) | value_type const* operator->() const
      type is_json_ref (line 3057) | struct is_json_ref : std::false_type {}
      type is_json_ref<json_ref<T>> (line 3060) | struct is_json_ref<json_ref<T>> : std::true_type {}
      type has_from_json (line 3101) | struct has_from_json : std::false_type {}
      type is_getable (line 3108) | struct is_getable
      type has_from_json < BasicJsonType, T,
           enable_if_t < !is_basic_json<T>::value >> (line 3114) | struct has_from_json < BasicJsonType, T,
      type has_non_default_from_json (line 3127) | struct has_non_default_from_json : std::false_type {}
      type has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3130) | struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !...
      type has_to_json (line 3142) | struct has_to_json : std::false_type {}
      type has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<T>::value >> (line 3145) | struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json<...
      type is_iterator_traits (line 3160) | struct is_iterator_traits : std::false_type {}
      t
Condensed preview — 76 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,885K chars).
[
  {
    "path": ".gitattributes",
    "chars": 111,
    "preview": "*.h linguist-language=Assembly\n*.hpp linguist-language=C++\n*.c linguist-language=C\n*.cpp linguist-language=C++\n"
  },
  {
    "path": ".gitignore",
    "chars": 6033,
    "preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## G"
  },
  {
    "path": "LICENSE",
    "chars": 1088,
    "preview": "MIT License\n\nCopyright (c) 2021-2023 R3nzTheCodeGOD and B3akers\n\nPermission is hereby granted, free of charge, to any pe"
  },
  {
    "path": "PythonScripts/lolskin_to_skin.py",
    "chars": 1292,
    "preview": "import configparser\nimport json\nimport os\n\n\ndef skin_to_dictionary(path):\n    config = configparser.ConfigParser()\n\n    "
  },
  {
    "path": "R3nzSkin/CheatManager.hpp",
    "chars": 775,
    "preview": "#pragma once\n\n#include <memory>\n\n#include \"Config.hpp\"\n#include \"GUI.hpp\"\n#include \"Hooks.hpp\"\n#include \"Logger.hpp\"\n#in"
  },
  {
    "path": "R3nzSkin/Config.cpp",
    "chars": 4699,
    "preview": "#include <fstream>\n#include <string>\n#include <system_error>\n\n#include <Windows.h>\n#include <ShlObj.h>\n\n#include \"Json/j"
  },
  {
    "path": "R3nzSkin/Config.hpp",
    "chars": 1263,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <filesystem>\n#include <map>\n\n#include \"json/json.hpp\"\n\n#include \"Utils.hpp\"\n\nu"
  },
  {
    "path": "R3nzSkin/GUI.cpp",
    "chars": 12340,
    "preview": "#include <algorithm>\n#include <cstdio>\n#include <string>\n#include <vector>\n\n#include \"CheatManager.hpp\"\n#include \"GUI.hp"
  },
  {
    "path": "R3nzSkin/GUI.hpp",
    "chars": 150,
    "preview": "#pragma once\n\nclass GUI {\npublic:\n\tvoid render() noexcept;\n\n\tbool is_open{ true };\n\tstd::once_flag set_font_scale;\npriva"
  },
  {
    "path": "R3nzSkin/Hooks.cpp",
    "chars": 18607,
    "preview": "#pragma warning(disable : 6011)\n\n#include <Windows.h>\n#include <ShlObj.h>\n#include <cinttypes>\n#include <filesystem>\n#in"
  },
  {
    "path": "R3nzSkin/Hooks.hpp",
    "chars": 224,
    "preview": "#pragma once\n\n#include <Windows.h>\n#include <mutex>\n\ninline std::once_flag change_skins;\ninline WNDPROC originalWndProc;"
  },
  {
    "path": "R3nzSkin/Logger.hpp",
    "chars": 2907,
    "preview": "#pragma once\n\n#include \"imgui/imgui.h\"\n\nclass R3nzSkinLogger {\npublic:\n    R3nzSkinLogger() { this->clear(); }\n\n    void"
  },
  {
    "path": "R3nzSkin/R3nzSkin.cpp",
    "chars": 2230,
    "preview": "#pragma warning(disable : 6387 4715)\n\n#include <Windows.h>\n#include <clocale>\n#include <chrono>\n#include <thread>\n\n#incl"
  },
  {
    "path": "R3nzSkin/R3nzSkin.rc",
    "chars": 2215,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "R3nzSkin/R3nzSkin.vcxproj",
    "chars": 14006,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
  },
  {
    "path": "R3nzSkin/R3nzSkin.vcxproj.filters",
    "chars": 7090,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "R3nzSkin/SDK/AIBaseCommon.cpp",
    "chars": 1569,
    "preview": "#include <cstdint>\n#include <string>\n\n#include \"AIBaseCommon.hpp\"\n\n#include \"../encryption.hpp\"\n#include \"../fnv_hash.hp"
  },
  {
    "path": "R3nzSkin/SDK/AIBaseCommon.hpp",
    "chars": 500,
    "preview": "#pragma once\n\n#include <cstdint>\n\n#include \"CharacterDataStack.hpp\"\n#include \"GameObject.hpp\"\n\nclass AIBaseCommon : publ"
  },
  {
    "path": "R3nzSkin/SDK/AIHero.hpp",
    "chars": 91,
    "preview": "#pragma once\n\n#include \"AIBaseCommon.hpp\"\n\nclass AIHero : public AIBaseCommon {\npublic:\n};\n"
  },
  {
    "path": "R3nzSkin/SDK/AIMinionClient.cpp",
    "chars": 360,
    "preview": "#include \"AIMinionClient.hpp\"\n\n#include <cstdint>\n\n#include \"../CheatManager.hpp\"\n\nAIBaseCommon* AIMinionClient::getGold"
  },
  {
    "path": "R3nzSkin/SDK/AIMinionClient.hpp",
    "chars": 168,
    "preview": "#pragma once\n\n#include \"AIBaseCommon.hpp\"\n\nclass AIMinionClient : public AIBaseCommon {\npublic:\n\t[[nodiscard]] AIBaseCom"
  },
  {
    "path": "R3nzSkin/SDK/AITurret.hpp",
    "chars": 93,
    "preview": "#pragma once\n\n#include \"AIBaseCommon.hpp\"\n\nclass AITurret : public AIBaseCommon {\npublic:\n};\n"
  },
  {
    "path": "R3nzSkin/SDK/AString.hpp",
    "chars": 125,
    "preview": "#pragma once\n\n#include <cstdint>\n\nclass AString {\npublic:\n\tconst char* str;\n\tstd::int32_t length;\n\tstd::int32_t capacity"
  },
  {
    "path": "R3nzSkin/SDK/Champion.hpp",
    "chars": 191,
    "preview": "#pragma once\n\n#include \"AString.hpp\"\n#include \"Pad.hpp\"\n#include \"Skin.hpp\"\n#include \"RiotArray.hpp\"\n\nclass Champion {\n\t"
  },
  {
    "path": "R3nzSkin/SDK/ChampionManager.hpp",
    "chars": 173,
    "preview": "#pragma once\n\n#include <vector>\n\n#include \"Champion.hpp\"\n#include \"Pad.hpp\"\n#include \"RiotArray.hpp\"\n\nclass ChampionMana"
  },
  {
    "path": "R3nzSkin/SDK/CharacterDataStack.cpp",
    "chars": 954,
    "preview": "#include <cstdint>\n\n#include \"../CheatManager.hpp\"\n#include \"../Offsets.hpp\"\n\n#include \"CharacterDataStack.hpp\"\n\nvoid Ch"
  },
  {
    "path": "R3nzSkin/SDK/CharacterDataStack.hpp",
    "chars": 316,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <vector>\n\n#include \"CharacterStackData.hpp\"\n\nclass CharacterDataStack {\npublic"
  },
  {
    "path": "R3nzSkin/SDK/CharacterStackData.hpp",
    "chars": 220,
    "preview": "#pragma once\n\n#include <cstdint>\n\n#include \"AString.hpp\"\n#include \"Pad.hpp\"\n\nclass CharacterStackData {\npublic:\n    AStr"
  },
  {
    "path": "R3nzSkin/SDK/GameClient.hpp",
    "chars": 117,
    "preview": "#pragma once\n\n#include \"GameState.hpp\"\n#include \"Pad.hpp\"\n\nclass GameClient {\n\tPAD(0xC)\n\tGGameState_s game_state;\n};\n"
  },
  {
    "path": "R3nzSkin/SDK/GameObject.hpp",
    "chars": 1231,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <string>\n\n#include \"../offsets.hpp\"\n#include \"Pad.hpp\"\n\nclass GameObject {\npub"
  },
  {
    "path": "R3nzSkin/SDK/GameState.hpp",
    "chars": 171,
    "preview": "#pragma once\n\n#include <cstdint>\n\nenum class GGameState_s : std::int32_t {\n\tLoadingScreen = 0,\n\tConnecting = 1,\n\tRunning"
  },
  {
    "path": "R3nzSkin/SDK/ManagerTemplate.hpp",
    "chars": 167,
    "preview": "#pragma once\n\n#include <cstdint>\n\n#include \"Pad.hpp\"\n\ntemplate <class T>\nclass ManagerTemplate {\n\tPAD(0x8)\n\tT** list;\n\ts"
  },
  {
    "path": "R3nzSkin/SDK/Pad.hpp",
    "chars": 849,
    "preview": "#pragma once\n\n#include <cstddef>\n\n#define CONCAT(a, b) a##b\n#define PAD_NAME(n) CONCAT(pad, n)\n#define PAD(size) \\\npriva"
  },
  {
    "path": "R3nzSkin/SDK/RiotArray.hpp",
    "chars": 131,
    "preview": "#pragma once\n\n#include <cstdint>\n\ntemplate <class T>\nclass RiotArray {\npublic:\n\tT* list;\n\tstd::int32_t size;\n\tstd::int32"
  },
  {
    "path": "R3nzSkin/SDK/Skin.hpp",
    "chars": 154,
    "preview": "#pragma once\n\n#include <cstdint>\n\n#include \"AString.hpp\"\n#include \"Pad.hpp\"\n\nclass Skin {\npublic:\n\tstd::int32_t skin_id;"
  },
  {
    "path": "R3nzSkin/SkinDatabase.cpp",
    "chars": 3083,
    "preview": "#include <algorithm>\n#include <cstdint>\n#include <map>\n#include <ranges>\n#include <string>\n#include <utility>\n\n#include "
  },
  {
    "path": "R3nzSkin/SkinDatabase.hpp",
    "chars": 2727,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <map>\n#include <utility>\n#include <vector>\n\n#include \"fnv_hash.hpp\"\n \nclass Sk"
  },
  {
    "path": "R3nzSkin/Utils.cpp",
    "chars": 9172,
    "preview": "#include <Windows.h>\n#include <algorithm>\n#include <array>\n#include <string_view>\n\n#include \"imgui/imgui.h\"\n#define IMGU"
  },
  {
    "path": "R3nzSkin/Utils.hpp",
    "chars": 3168,
    "preview": "#pragma once\n\n#include <concepts>\n#include <mutex>\n#include <random>\n#include <string>\n\n#include \"imgui/imgui.h\"\n\nclass "
  },
  {
    "path": "R3nzSkin/encryption.hpp",
    "chars": 2182,
    "preview": "#pragma once\n\n#include <cstdint>\n#include <intrin.h>\n\n#pragma pack(push, 4)\ntemplate <typename T>\nclass xor_value {\n\tT x"
  },
  {
    "path": "R3nzSkin/fnv_hash.hpp",
    "chars": 1529,
    "preview": "#pragma once\n\n#include <cstdlib>\n#include <cstdint>\n\nnamespace detail {\n\ttemplate <typename Type, Type OffsetBasis, Type"
  },
  {
    "path": "R3nzSkin/imgui/imconfig.h",
    "chars": 168,
    "preview": "#pragma once\n\n#define IMGUI_DISABLE_DEMO_WINDOWS\n#define IMGUI_DISABLE_METRICS_WINDOW\n#define IMGUI_IMPL_WIN32_DISABLE_G"
  },
  {
    "path": "R3nzSkin/imgui/imgui.cpp",
    "chars": 581615,
    "preview": "// dear imgui, v1.84\n// (main code and documentation)\n\n// Help:\n// - Read FAQ at http://dearimgui.org/faq\n// - Newcomers"
  },
  {
    "path": "R3nzSkin/imgui/imgui.h",
    "chars": 279337,
    "preview": "// dear imgui, v1.84\n// (headers)\n\n// Help:\n// - Read FAQ at http://dearimgui.org/faq\n// - Newcomers, read 'Programmer g"
  },
  {
    "path": "R3nzSkin/imgui/imgui_demo.cpp",
    "chars": 387607,
    "preview": "// dear imgui, v1.84\n// (demo code)\n\n// Help:\n// - Read FAQ at http://dearimgui.org/faq\n// - Newcomers, read 'Programmer"
  },
  {
    "path": "R3nzSkin/imgui/imgui_draw.cpp",
    "chars": 212093,
    "preview": "// dear imgui, v1.84\n// (drawing and font code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] STB libraries implementation\n// ["
  },
  {
    "path": "R3nzSkin/imgui/imgui_impl_dx11.cpp",
    "chars": 28226,
    "preview": "// dear imgui: Renderer Backend for DirectX11\n// This needs to be used along with a Platform Backend (e.g. Win32)\n\n// Im"
  },
  {
    "path": "R3nzSkin/imgui/imgui_impl_dx11.h",
    "chars": 1368,
    "preview": "// dear imgui: Renderer Backend for DirectX11\n// This needs to be used along with a Platform Backend (e.g. Win32)\n\n// Im"
  },
  {
    "path": "R3nzSkin/imgui/imgui_impl_win32.cpp",
    "chars": 30161,
    "preview": "// dear imgui: Platform Backend for Windows (standard windows API for 32 and 64 bits applications)\n// This needs to be u"
  },
  {
    "path": "R3nzSkin/imgui/imgui_impl_win32.h",
    "chars": 2839,
    "preview": "// dear imgui: Platform Backend for Windows (standard windows API for 32 and 64 bits applications)\n// This needs to be u"
  },
  {
    "path": "R3nzSkin/imgui/imgui_internal.h",
    "chars": 195748,
    "preview": "// dear imgui, v1.84\n// (internal structures/api)\n\n// You may use this file to debug, understand or extend ImGui feature"
  },
  {
    "path": "R3nzSkin/imgui/imgui_tables.cpp",
    "chars": 214248,
    "preview": "// dear imgui, v1.84\n// (tables and columns code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] Commentary\n// [SECTION] Header "
  },
  {
    "path": "R3nzSkin/imgui/imgui_widgets.cpp",
    "chars": 400322,
    "preview": "// dear imgui, v1.84\n// (widgets code)\n\n/*\n\nIndex of this file:\n\n// [SECTION] Forward Declarations\n// [SECTION] Widgets:"
  },
  {
    "path": "R3nzSkin/imgui/imstb_rectpack.h",
    "chars": 20503,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_rect_pack.h 1.00.\n// Those changes would need to be pushed"
  },
  {
    "path": "R3nzSkin/imgui/imstb_textedit.h",
    "chars": 55006,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_textedit.h 1.13.\n// Those changes would need to be pushed "
  },
  {
    "path": "R3nzSkin/imgui/imstb_truetype.h",
    "chars": 192357,
    "preview": "// [DEAR IMGUI]\n// This is a slightly modified version of stb_truetype.h 1.20.\n// Mostly fixing for compiler and static "
  },
  {
    "path": "R3nzSkin/json/json.hpp",
    "chars": 929924,
    "preview": "/*\n    __ _____ _____ _____\n __|  |   __|     |   | |  JSON for Modern C++\n|  |  |__   |  |  | | | |  version 3.9.1\n|___"
  },
  {
    "path": "R3nzSkin/memory.cpp",
    "chars": 5251,
    "preview": "#pragma warning(disable: 28182 6011)\n\n#include <Windows.h>\n#include <chrono>\n#include <cstdint>\n#include <string>\n#inclu"
  },
  {
    "path": "R3nzSkin/memory.hpp",
    "chars": 3156,
    "preview": "#pragma once\n\n#include <Windows.h>\n#include <cstdint>\n#include <d3d11.h>\n\n#include \"Offsets.hpp\"\n\n#include \"SDK/AIBaseCo"
  },
  {
    "path": "R3nzSkin/offsets.hpp",
    "chars": 1259,
    "preview": "#pragma once\n\n#include <cstdint>\n\nnamespace offsets {\n\tnamespace GameObject {\n\t\tnamespace VTable {\n\t\t\tenum {\n\t\t\t\tIsLaneM"
  },
  {
    "path": "R3nzSkin/resource.h",
    "chars": 396,
    "preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ generated include file.\n// Used by R3nzSkin.rc\n\n// Yeni nesneler iin sonra"
  },
  {
    "path": "R3nzSkin/vmt_smart_hook.hpp",
    "chars": 2905,
    "preview": "#pragma once\n\n#include <Windows.h>\n#include <cassert>\n#include <cstddef>\n#include <cstdint>\n#include <cstring>\n\nauto is_"
  },
  {
    "path": "R3nzSkin.sln",
    "chars": 3062,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.3.3292"
  },
  {
    "path": "R3nzSkin_Injector/Injector.cpp",
    "chars": 10241,
    "preview": "#include <Windows.h>\n#include <cstdlib>\n#include <fstream>\n#include <psapi.h>\n#include <string>\n#include <thread>\n#inclu"
  },
  {
    "path": "R3nzSkin_Injector/Injector.hpp",
    "chars": 680,
    "preview": "#pragma once\n\n#include <Windows.h>\n#include <chrono>\n#include <cinttypes>\n#include <string>\n#include <vector>\n\nusing nam"
  },
  {
    "path": "R3nzSkin_Injector/R3nzSkin_Injector.rc",
    "chars": 2492,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n#define APSTUDIO_READONLY_SYMBOLS\n/////////"
  },
  {
    "path": "R3nzSkin_Injector/R3nzSkin_Injector.vcxproj",
    "chars": 11177,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
  },
  {
    "path": "R3nzSkin_Injector/R3nzSkin_Injector.vcxproj.filters",
    "chars": 1440,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "R3nzSkin_Injector/R3nzUI.hpp",
    "chars": 17931,
    "preview": "#pragma once\n\n#include \"xorstr.hpp\"\n\nnamespace R3nzSkinInjector {\n\n\tusing namespace System;\n\tusing namespace System::Com"
  },
  {
    "path": "R3nzSkin_Injector/R3nzUI.resx",
    "chars": 39245,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "R3nzSkin_Injector/lazy_importer.hpp",
    "chars": 25689,
    "preview": "/*\n * Copyright 2018-2022 Justas Masiulis\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you m"
  },
  {
    "path": "R3nzSkin_Injector/main.cpp",
    "chars": 870,
    "preview": "#include <Windows.h>\n#include <ctime>\n#include <cstdlib>\n#include <thread>\n#include <regex>\n#include <msclr/marshal_cpps"
  },
  {
    "path": "R3nzSkin_Injector/resource.h",
    "chars": 454,
    "preview": "//{{NO_DEPENDENCIES}}\n// Microsoft Visual C++ ierme dosyas oluturdu.\n// R3nzSkin_Injector.rc tarafndan kullanlm\n//\n#defi"
  },
  {
    "path": "R3nzSkin_Injector/xorstr.hpp",
    "chars": 2711,
    "preview": "#pragma once\n#include <array>\n\nnamespace XorCompileTime\n{\n    constexpr auto time = __TIME__;\n    constexpr auto seed = "
  },
  {
    "path": "README.md",
    "chars": 7818,
    "preview": "# R3nzSkin - League of Legends Skin Changer\n\n<div align=\"center\">\n\n[![Build Status](https://img.shields.io/badge/build-"
  },
  {
    "path": "README_zh.md",
    "chars": 4579,
    "preview": "# R3nzSkin - 英雄联盟皮肤修改工具\n\n<div align=\"center\">\n\n[![Build Status](https://img.shields.io/badge/build-passing-brightgreen)]"
  }
]

About this extraction

This page contains the full source code of the SFHJavaer/R3nzSkinTencent GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 76 files (3.6 MB), approximately 947.7k tokens, and a symbol index with 1949 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!