// File: Ciaxur[P]yagb-emu/include/imgui/imgui_internal.h
// Function: ImGuiWindowTempData::ImGuiWindowTempData()
struct IMGUI_API ImGuiWindowTempData
{
    // Layout
    ImVec2                  CursorPos;              // Current emitting position, in absolute coordinates.
    ImVec2                  CursorPosPrevLine;
    ImVec2                  CursorStartPos;         // Initial position after Begin(), generally ~ window position + WindowPadding.
    ImVec2                  CursorMaxPos;           // Used to implicitly calculate ContentSize at the beginning of next frame, for scrolling range and auto-resize. Always growing during the frame.
    ImVec2                  IdealMaxPos;            // Used to implicitly calculate ContentSizeIdeal at the beginning of next frame, for auto-resize only. Always growing during the frame.
    ImVec2                  CurrLineSize;
    ImVec2                  PrevLineSize;
    float                   CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added).
    float                   PrevLineTextBaseOffset;
    ImVec1                  Indent;                 // Indentation / start position from left of window (increased by TreePush/TreePop, etc.)
    ImVec1                  ColumnsOffset;          // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API.
    ImVec1                  GroupOffset;

    // Last item status
    ImGuiID                 LastItemId;             // ID for last item
    ImGuiItemStatusFlags    LastItemStatusFlags;    // Status flags for last item (see ImGuiItemStatusFlags_)
    ImRect                  LastItemRect;           // Interaction rect for last item
    ImRect                  LastItemDisplayRect;    // End-user display rect for last item (only valid if LastItemStatusFlags & ImGuiItemStatusFlags_HasDisplayRect)

    // Keyboard/Gamepad navigation
    ImGuiNavLayer           NavLayerCurrent;        // Current layer, 0..31 (we currently only use 0..1)
    int                     NavLayerActiveMask;     // Which layers have been written to (result from previous frame)
    int                     NavLayerActiveMaskNext; // Which layers have been written to (accumulator for current frame)
    ImGuiID                 NavFocusScopeIdCurrent; // Current focus scope ID while appending
    bool                    NavHideHighlightOneFrame;
    bool                    NavHasScroll;           // Set when scrolling can be used (ScrollMax > 0.0f)

    // Miscellaneous
    bool                    MenuBarAppending;       // FIXME: Remove this
    ImVec2                  MenuBarOffset;          // MenuBarOffset.x is sort of equivalent of a per-layer CursorPos.x, saved/restored as we switch to the menu bar. The only situation when MenuBarOffset.y is > 0 if when (SafeAreaPadding.y > FramePadding.y), often used on TVs.
    ImGuiMenuColumns        MenuColumns;            // Simplified columns storage for menu items measurement
    int                     TreeDepth;              // Current tree depth.
    ImU32                   TreeJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary.
    ImVector<ImGuiWindow*>  ChildWindows;
    ImGuiStorage*           StateStorage;           // Current persistent per-window storage (store e.g. tree node open/close state)
    ImGuiOldColumns*        CurrentColumns;         // Current columns set
    int                     CurrentTableIdx;        // Current table index (into g.Tables)
    ImGuiLayoutType         LayoutType;
    ImGuiLayoutType         ParentLayoutType;       // Layout type of parent window at the time of Begin()
    int                     FocusCounterRegular;    // (Legacy Focus/Tabbing system) Sequential counter, start at -1 and increase as assigned via FocusableItemRegister() (FIXME-NAV: Needs redesign)
    int                     FocusCounterTabStop;    // (Legacy Focus/Tabbing system) Same, but only count widgets which you can Tab through.

    // Local parameters stacks
    // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
    ImGuiItemFlags          ItemFlags;              // == g.ItemFlagsStack.back()
    float                   ItemWidth;              // == ItemWidthStack.back(). 0.0: default, >0.0: width in pixels, <0.0: align xx pixels to the right of window
    float                   TextWrapPos;            // == TextWrapPosStack.back() [empty == -1.0f]
    ImVector<float>         ItemWidthStack;
    ImVector<float>         TextWrapPosStack;
    ImGuiStackSizes         StackSizesOnBegin;      // Store size of various stacks for asserting
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x28(%rbp)
callq 0xe7de0
movq -0x28(%rbp), %rdi
addq $0x8, %rdi
callq 0xe7de0
movq -0x28(%rbp), %rdi
addq $0x10, %rdi
callq 0xe7de0
movq -0x28(%rbp), %rdi
addq $0x18, %rdi
callq 0xe7de0
movq -0x28(%rbp), %rdi
addq $0x20, %rdi
callq 0xe7de0
movq -0x28(%rbp), %rdi
addq $0x28, %rdi
callq 0xe7de0
movq -0x28(%rbp), %rdi
addq $0x30, %rdi
callq 0xe7de0
movq -0x28(%rbp), %rdi
addq $0x40, %rdi
callq 0xecc50
movq -0x28(%rbp), %rdi
addq $0x44, %rdi
callq 0xecc50
movq -0x28(%rbp), %rdi
addq $0x48, %rdi
callq 0xecc50
movq -0x28(%rbp), %rdi
addq $0x54, %rdi
callq 0xe8c60
movq -0x28(%rbp), %rdi
addq $0x64, %rdi
callq 0xe8c60
movq -0x28(%rbp), %rdi
addq $0x88, %rdi
callq 0xe7de0
movq -0x28(%rbp), %rdi
addq $0x90, %rdi
callq 0xecc70
movq -0x28(%rbp), %rdi
addq $0xc0, %rdi
movq %rdi, -0x30(%rbp)
callq 0xecca0
movq -0x28(%rbp), %rdi
addq $0x100, %rdi            # imm = 0x100
movq %rdi, -0x20(%rbp)
callq 0xeccd0
jmp 0xe8be2
movq -0x28(%rbp), %rdi
addq $0x110, %rdi            # imm = 0x110
movq %rdi, -0x38(%rbp)
callq 0xeccd0
jmp 0xe8bf8
movq -0x28(%rbp), %rdi
addq $0x120, %rdi            # imm = 0x120
callq 0xecd00
jmp 0xe8c0a
addq $0x40, %rsp
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xe8c4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
jmp 0xe8c41
movq -0x38(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x10(%rbp)
movl %eax, -0x14(%rbp)
callq 0xecd30
movq -0x20(%rbp), %rdi
callq 0xecd30
movq -0x30(%rbp), %rdi
callq 0xecd70
movq -0x10(%rbp), %rdi
callq 0xd620
nopl (%rax)