// File: /workspace/github_cpp_makefile_star2_O3/donfreiday[P]gb/./imgui/imgui.cpp
// Function: ImGui::Shutdown()
void ImGui::Shutdown()
{
    ImGuiState& g = *GImGui;
    if (!g.Initialized)
        return;

    SaveSettings();

    for (int i = 0; i < g.Windows.Size; i++)
    {
        g.Windows[i]->~ImGuiWindow();
        ImGui::MemFree(g.Windows[i]);
    }
    g.Windows.clear();
    g.WindowsSortBuffer.clear();
    g.CurrentWindowStack.clear();
    g.FocusedWindow = NULL;
    g.HoveredWindow = NULL;
    g.HoveredRootWindow = NULL;
    for (int i = 0; i < g.Settings.Size; i++)
        ImGui::MemFree(g.Settings[i].Name);
    g.Settings.clear();
    g.ColorModifiers.clear();
    g.StyleModifiers.clear();
    g.FontStack.clear();
    g.OpenedPopupStack.clear();
    g.CurrentPopupStack.clear();
    for (int i = 0; i < IM_ARRAYSIZE(g.RenderDrawLists); i++)
        g.RenderDrawLists[i].clear();
    g.OverlayDrawList.ClearFreeMemory();
    g.ColorEditModeStorage.Clear();
    if (g.PrivateClipboard)
    {
        ImGui::MemFree(g.PrivateClipboard);
        g.PrivateClipboard = NULL;
    }
    g.InputTextState.Text.clear();
    g.InputTextState.InitialText.clear();
    g.InputTextState.TempTextBuffer.clear();

    if (g.LogFile && g.LogFile != stdout)
    {
        fclose(g.LogFile);
        g.LogFile = NULL;
    }
    if (g.LogClipboard)
    {
        g.LogClipboard->~ImGuiTextBuffer();
        ImGui::MemFree(g.LogClipboard);
    }

    if (g.IO.Fonts) // Testing for NULL to allow user to NULLify in case of running Shutdown() on multiple contexts. Bit hacky.
        g.IO.Fonts->Clear();

    g.Initialized = false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq 0x48ffa(%rip), %rbx     # 0x55480
cmpb $0x1, (%rbx)
jne 0xc899
callq 0xc12d
cmpl $0x0, 0x1738(%rbx)
jle 0xc4f2
xorl %r14d, %r14d
movq 0x1740(%rbx), %rax
movq (%rax,%r14,8), %rdi
callq 0xa7d0
movslq 0x1738(%rbx), %rax
cmpq %rax, %r14
jge 0xc8a4
movq 0x1740(%rbx), %rax
movq (%rax,%r14,8), %rdi
movq 0x48fae(%rip), %rax     # 0x55480
testq %rdi, %rdi
je 0xc4dd
decl 0x334(%rax)
callq *0xd8(%rax)
incq %r14
movslq 0x1738(%rbx), %rax
cmpq %rax, %r14
jl 0xc4a0
movq 0x1740(%rbx), %rdi
testq %rdi, %rdi
je 0xc522
xorl %r14d, %r14d
movq %r14, 0x1738(%rbx)
movq 0x48f71(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x1740(%rbx)
movq 0x1750(%rbx), %rdi
testq %rdi, %rdi
je 0xc552
xorl %r14d, %r14d
movq %r14, 0x1748(%rbx)
movq 0x48f41(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x1750(%rbx)
movq 0x1768(%rbx), %rdi
testq %rdi, %rdi
je 0xc582
xorl %r14d, %r14d
movq %r14, 0x1760(%rbx)
movq 0x48f11(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x1768(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x1770(%rbx)
movq $0x0, 0x1780(%rbx)
cmpl $0x0, 0x17b0(%rbx)
jle 0xc5dc
xorl %r14d, %r14d
xorl %r15d, %r15d
movq 0x17b8(%rbx), %rax
movq (%rax,%r14), %rdi
movq 0x48ec8(%rip), %rax     # 0x55480
testq %rdi, %rdi
je 0xc5c3
decl 0x334(%rax)
callq *0xd8(%rax)
incq %r15
movslq 0x17b0(%rbx), %rax
addq $0x20, %r14
cmpq %rax, %r15
jl 0xc5a6
movq 0x17b8(%rbx), %rdi
testq %rdi, %rdi
je 0xc60c
xorl %r14d, %r14d
movq %r14, 0x17b0(%rbx)
movq 0x48e87(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x17b8(%rbx)
movq 0x17d0(%rbx), %rdi
testq %rdi, %rdi
je 0xc63c
xorl %r14d, %r14d
movq %r14, 0x17c8(%rbx)
movq 0x48e57(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x17d0(%rbx)
movq 0x17e0(%rbx), %rdi
testq %rdi, %rdi
je 0xc66c
xorl %r14d, %r14d
movq %r14, 0x17d8(%rbx)
movq 0x48e27(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x17e0(%rbx)
movq 0x17f0(%rbx), %rdi
testq %rdi, %rdi
je 0xc69c
xorl %r14d, %r14d
movq %r14, 0x17e8(%rbx)
movq 0x48df7(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x17f0(%rbx)
movq 0x1800(%rbx), %rdi
testq %rdi, %rdi
je 0xc6cc
xorl %r14d, %r14d
movq %r14, 0x17f8(%rbx)
movq 0x48dc7(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x1800(%rbx)
movq 0x1810(%rbx), %rdi
testq %rdi, %rdi
je 0xc6fc
xorl %r14d, %r14d
movq %r14, 0x1808(%rbx)
movq 0x48d97(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x1810(%rbx)
movl $0x1878, %r14d          # imm = 0x1878
xorl %r15d, %r15d
movq (%rbx,%r14), %rdi
testq %rdi, %rdi
je 0xc72a
movq %r15, -0x8(%rbx,%r14)
movq 0x48d66(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r15, (%rbx,%r14)
addq $0x10, %r14
cmpq $0x18a8, %r14           # imm = 0x18A8
jne 0xc705
leaq 0x18a8(%rbx), %rdi
callq 0x2ca56
movq 0x27b0(%rbx), %rdi
testq %rdi, %rdi
je 0xc773
xorl %r14d, %r14d
movq %r14, 0x27a8(%rbx)
movq 0x48d20(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x27b0(%rbx)
movq 0x2be0(%rbx), %rdi
testq %rdi, %rdi
je 0xc79d
movq 0x48cfa(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq $0x0, 0x2be0(%rbx)
movq 0x1ac0(%rbx), %rdi
testq %rdi, %rdi
je 0xc7cd
xorl %r14d, %r14d
movq %r14, 0x1ab8(%rbx)
movq 0x48cc6(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x1ac0(%rbx)
movq 0x1ad0(%rbx), %rdi
testq %rdi, %rdi
je 0xc7fd
xorl %r14d, %r14d
movq %r14, 0x1ac8(%rbx)
movq 0x48c96(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x1ad0(%rbx)
movq 0x1ae0(%rbx), %rdi
testq %rdi, %rdi
je 0xc82d
xorl %r14d, %r14d
movq %r14, 0x1ad8(%rbx)
movq 0x48c66(%rip), %rax     # 0x55480
decl 0x334(%rax)
callq *0xd8(%rax)
movq %r14, 0x1ae0(%rbx)
movq 0x2bf0(%rbx), %rdi
testq %rdi, %rdi
je 0xc855
movq 0x48790(%rip), %rax     # 0x54fd0
cmpq (%rax), %rdi
je 0xc855
callq 0x7330
movq $0x0, 0x2bf0(%rbx)
movq 0x2bf8(%rbx), %rdi
testq %rdi, %rdi
je 0xc885
callq 0x248da
movq 0x2bf8(%rbx), %rdi
movq 0x48c0c(%rip), %rax     # 0x55480
testq %rdi, %rdi
je 0xc87f
decl 0x334(%rax)
callq *0xd8(%rax)
movq 0x90(%rbx), %rdi
testq %rdi, %rdi
je 0xc896
callq 0x30d10
movb $0x0, (%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x32535(%rip), %rdi     # 0x3ede0
leaq 0x32211(%rip), %rsi     # 0x3eac3
leaq 0x32987(%rip), %rcx     # 0x3f240
movl $0x31c, %edx            # imm = 0x31C
callq 0x7140