LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listbox.cpp
// Function: smooth::GUI::ListBox::OnScrollbarValueChange()
S::Void S::GUI::ListBox::OnScrollbarValueChange()
{
	if (!IsVisible()) return;

	/* Redraw only the list entries.
	 */
	Surface	*surface = GetDrawSurface();

	Rect	 frame		= Rect(GetRealPosition(), GetRealSize());

	Int	 headerHeight	= (header->IsVisible()	  ? header->GetRealSize().cy	: 0);
	Int	 scrollbarWidth	= (scrollbar->IsVisible() ? scrollbar->GetRealSize().cx : 0);

	surface->StartPaint(frame + Point(2, 2 + headerHeight) - Size(4 + scrollbarWidth, 4 + headerHeight));

	Paint(SP_PAINT);

	surface->EndPaint();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
movq (%rdi), %rax
callq *0x90(%rax)
testb %al, %al
je 0x8439a
movabsq $-0x100000000, %rbp     # imm = 0xFFFFFFFF00000000
movabsq $0x200000000, %r13      # imm = 0x200000000
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x40(%rax)
movq %rax, %r14
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x48(%rax)
movq %rax, %r12
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x50(%rax)
movq %rax, %r15
movq 0x6d8(%rbx), %rdi
movq (%rdi), %rax
callq *0x90(%rax)
testb %al, %al
je 0x84306
movq 0x6d8(%rbx), %rdi
movq (%rdi), %rax
callq *0x50(%rax)
movq %rax, %r13
andq %rbp, %r13
movabsq $0x200000000, %rax      # imm = 0x200000000
addq %rax, %r13
movq 0x6c8(%rbx), %rdi
movq (%rdi), %rax
callq *0x90(%rax)
movq $-0x4, %rcx
testb %al, %al
je 0x84338
movq 0x6c8(%rbx), %rdi
movq (%rdi), %rax
callq *0x50(%rax)
movq $-0x4, %rcx
subq %rax, %rcx
addq %r12, %r13
andq %rbp, %r13
leaq 0x2(%r12), %rax
addl %r15d, %ecx
addl %eax, %ecx
movl %eax, %eax
orq %r13, %rax
andq %rbp, %r12
movabsq $-0x400000000, %rdx     # imm = 0xFFFFFFFC00000000
addq %rdx, %r15
addq %r12, %r15
andq %rbp, %r15
movabsq $0x200000000, %rdx      # imm = 0x200000000
addq %rdx, %r15
orq %r15, %rcx
leaq 0x8(%rsp), %rsi
movq %rax, (%rsi)
movq %rcx, 0x8(%rsi)
movq %r14, %rdi
callq 0x55160
movq (%rbx), %rax
movq %rbx, %rdi
xorl %esi, %esi
callq *0x78(%rax)
movq %r14, %rdi
callq 0x58780
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listbox.cpp
// Function: smooth::GUI::ListBox::GetEntriesHeight() const
S::Int S::GUI::ListBox::GetEntriesHeight() const
{
	Int	 entriesHeight	= 0;

	for (Int i = 0; i < Length(); i++)
	{
		entriesHeight += GetNthEntry(i)->GetHeight();
	}

	return entriesHeight;
}

// Assembly:
pushq %rbp
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq (%rdi), %rax
callq *0x178(%rax)
testl %eax, %eax
jle 0x84b28
xorl %r14d, %r14d
xorl %ebp, %ebp
movq (%rbx), %rax
movq %rbx, %rdi
movl %r14d, %esi
callq *0x180(%rax)
addl 0xb4(%rax), %ebp
incl %r14d
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x178(%rax)
cmpl %eax, %r14d
jl 0x84afd
jmp 0x84b2a
xorl %ebp, %ebp
movl %ebp, %eax
popq %rbx
popq %r14
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listboxheader.cpp
// Function: smooth::GUI::ListBoxHeader::OnMouseDragStart(smooth::GUI::Point const&)
S::Void S::GUI::ListBoxHeader::OnMouseDragStart(const Point &mousePos)
{
	if (moveTab == -1) return;

	startMousePos = mousePos;

	moveTabStartWidth = tabWidths.GetNth(moveTab);
	lastTabStartWidth = tabWidths.GetNth(tabWidths.Length() - 1);

	draggingTab = True;
}

// Assembly:
movq %rsi, %rax
movl 0x5b8(%rdi), %esi
cmpl $-0x1, %esi
je 0x8547e
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movq (%rax), %rax
movq %rax, 0x5c0(%rdi)
leaq 0x630(%rdi), %r14
movq %r14, %rdi
callq 0x86b48
movl (%rax), %eax
movl %eax, 0x5c8(%rbx)
movl 0x638(%rbx), %esi
decl %esi
movq %r14, %rdi
callq 0x86b48
movl (%rax), %eax
movl %eax, 0x5cc(%rbx)
movb $0x1, 0x5bc(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listboxheader.cpp
// Function: smooth::GUI::ListBoxHeader::OnMouseDrag(smooth::GUI::Point const&)
S::Void S::GUI::ListBoxHeader::OnMouseDrag(const Point &mousePos)
{
	if (!draggingTab) return;

	Int	 bias = Math::Round((startMousePos.x - mousePos.x) * 96.0 / Surface().GetSurfaceDPI());

	if (bias != 0)
	{
		tabWidths.SetNth(moveTab, (Int) Math::Max(Math::Abs(moveTabStartWidth) - bias, 1) * Math::Sign(moveTabStartWidth));
		tabWidths.SetNth(tabWidths.Length() - 1, (Int) Math::Max(Math::Abs(lastTabStartWidth) + bias, 1) * Math::Sign(lastTabStartWidth));

		OnChangeSize(GetSize());

		container->Paint(SP_PAINT);
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x10, %rsp
cmpb $0x1, 0x5bc(%rdi)
jne 0x855a7
movq %rdi, %rbx
movl 0x5c0(%rdi), %ebp
movl (%rsi), %r15d
leaq 0x8(%rsp), %rdx
movq $0x0, (%rdx)
movq %rsp, %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x57150
movq %r14, %rdi
callq 0x58930
subl %r15d, %ebp
cvtsi2sd %ebp, %xmm0
mulsd 0x6f01b(%rip), %xmm0    # 0xf44f0
cwtl
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
xorpd %xmm1, %xmm1
xorl %eax, %eax
ucomisd %xmm0, %xmm1
seta %al
leaq 0x6f3ce(%rip), %rcx     # 0xf48c0
addsd (%rcx,%rax,8), %xmm0
cvttsd2si %xmm0, %r12
movq %rsp, %rdi
callq 0x57b20
testl %r12d, %r12d
je 0x855a7
leaq 0x630(%rbx), %r14
movl 0x5c8(%rbx), %eax
movl %eax, %ecx
sarl $0x1f, %ecx
movl $0x1, %ebp
orl %ebp, %ecx
testl %eax, %eax
cmovel %eax, %ecx
imull %ecx, %eax
subl %r12d, %eax
cmpl $0x2, %eax
cmovll %ebp, %eax
movl 0x5b8(%rbx), %esi
imull %ecx, %eax
movq %rsp, %r15
movl %eax, (%r15)
movq %r14, %rdi
movq %r15, %rdx
callq 0x86ba4
movl 0x638(%rbx), %esi
decl %esi
movl 0x5cc(%rbx), %eax
movl %eax, %ecx
sarl $0x1f, %ecx
orl $0x1, %ecx
testl %eax, %eax
cmovel %eax, %ecx
imull %ecx, %eax
addl %r12d, %eax
cmpl $0x2, %eax
cmovll %ebp, %eax
imull %ecx, %eax
movl %eax, (%r15)
movq %rsp, %rdx
movq %r14, %rdi
callq 0x86ba4
leaq 0xb0(%rbx), %rsi
movq %rbx, %rdi
callq 0x591c8
movq 0x190(%rbx), %rdi
movq (%rdi), %rax
xorl %esi, %esi
callq *0x78(%rax)
addq $0x10, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq %rsp, %rdi
callq 0x57b20
movq %rbx, %rdi
callq 0x57090
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listboxheader.cpp
// Function: smooth::GUI::ListBoxHeader::OnLeftButtonClick(smooth::GUI::Point const&)
S::Void S::GUI::ListBoxHeader::OnLeftButtonClick(const Point &mousePos)
{
	if (draggingTab) return;

	Surface	*surface = GetDrawSurface();
	Point	 realPos = GetRealPosition();

	for (Int n = 0; n < GetNOfTabs(); n++)
	{
		if (mousePos.x - realPos.x >= GetNthTabOffset(n)		      * surface->GetSurfaceDPI() / 96.0 &&
		    mousePos.x - realPos.x < (GetNthTabOffset(n) + GetNthTabWidth(n)) * surface->GetSurfaceDPI() / 96.0)
		{
			onClickTab.Emit(n);

			break;
		}
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
cmpb $0x0, 0x5bc(%rdi)
jne 0x856f5
movq %rsi, %r14
movq %rdi, %rbx
movq (%rdi), %rax
callq *0x40(%rax)
movq %rax, %r15
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x48(%rax)
cmpl $0x0, 0x638(%rbx)
jle 0x856f5
movq %rax, %r12
leaq 0x630(%rbx), %rax
movq %rax, 0x8(%rsp)
xorl %ebp, %ebp
movq %r12, 0x10(%rsp)
movl (%r14), %eax
subl %r12d, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movsd %xmm0, (%rsp)
movq %rbx, %rdi
movl %ebp, %esi
callq 0x57a40
movl %eax, %r13d
movq %r15, %rdi
callq 0x58930
movsd 0x6ee9b(%rip), %xmm1    # 0xf44f0
cwtl
imull %r13d, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
divsd %xmm1, %xmm0
movsd (%rsp), %xmm1
ucomisd %xmm0, %xmm1
jb 0x856e7
movl (%r14), %eax
subl %r12d, %eax
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
movsd %xmm0, (%rsp)
movq %rbx, %rdi
movl %ebp, %esi
callq 0x57a40
movl %eax, %r13d
movq 0x8(%rsp), %rdi
movl %ebp, %esi
callq 0x86b48
movl (%rax), %eax
movq %r14, %r12
movl %eax, %r14d
sarl $0x1f, %r14d
orl $0x1, %r14d
testl %eax, %eax
cmovel %eax, %r14d
imull %eax, %r14d
addl %r13d, %r14d
movq %r15, %rdi
callq 0x58930
movsd 0x6ee28(%rip), %xmm1    # 0xf44f0
cwtl
imull %r14d, %eax
movq %r12, %r14
movq 0x10(%rsp), %r12
xorps %xmm0, %xmm0
cvtsi2sd %eax, %xmm0
divsd %xmm1, %xmm0
ucomisd (%rsp), %xmm0
ja 0x85704
incl %ebp
cmpl 0x638(%rbx), %ebp
jl 0x85626
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
addq $0x738, %rbx            # imm = 0x738
movq %rbx, %rdi
movl %ebp, %esi
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x72dc0
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listboxheader.cpp
// Function: smooth::GUI::ListBoxHeader::OnChangeSize(smooth::GUI::Size const&)
S::Void S::GUI::ListBoxHeader::OnChangeSize(const Size &nSize)
{
	Int	 varSizeTabs	  = 0;
	Int	 sumFixedTabSizes = 0;

	for (Int i = 0; i < tabWidths.Length(); i++)
	{
		if (tabWidths.GetNth(i) <= 0)	varSizeTabs++;
		else				sumFixedTabSizes += tabWidths.GetNth(i);
	}

	if (varSizeTabs > 0)
	{
		for (Int i = 0; i < tabWidths.Length(); i++)
		{
			if (tabWidths.GetNth(i) <= 0) tabWidths.SetNth(i, -Math::Max(0, (GetWidth() - sumFixedTabSizes) / varSizeTabs));
		}
	}

	dragHotspot->SetSize(nSize);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rsi, 0x10(%rsp)
movq %rdi, %r14
leaq 0x630(%rdi), %r15
cmpl $0x0, 0x638(%rdi)
jle 0x8577e
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %r13d, %r13d
movq %r15, %rdi
movl %ebp, %esi
callq 0x86b48
cmpl $0x0, (%rax)
jle 0x8576e
movq %r15, %rdi
movl %ebp, %esi
callq 0x86b48
addl (%rax), %ebx
jmp 0x85771
incl %r13d
incl %ebp
cmpl 0x638(%r14), %ebp
jl 0x85751
jmp 0x85783
xorl %r13d, %r13d
xorl %ebx, %ebx
testl %r13d, %r13d
jle 0x857dd
cmpl $0x0, 0x638(%r14)
jle 0x857dd
leaq 0xc(%rsp), %r12
xorl %ebp, %ebp
movq %r15, %rdi
movl %ebp, %esi
callq 0x86b48
cmpl $0x0, (%rax)
jg 0x857d2
movl 0xb0(%r14), %eax
subl %ebx, %eax
cltd
idivl %r13d
testl %eax, %eax
movl $0x0, %ecx
cmovlel %ecx, %eax
negl %eax
movl %eax, 0xc(%rsp)
movq %r15, %rdi
movl %ebp, %esi
movq %r12, %rdx
callq 0x86ba4
incl %ebp
cmpl 0x638(%r14), %ebp
jl 0x85799
movq 0x5d0(%r14), %rdi
leaq 0xa8(%rdi), %rsi
movq (%rdi), %rax
movq 0x10(%rsp), %rdx
callq *0x150(%rax)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listboxheader.cpp
// Function: smooth::GUI::ListBoxHeader::EnableLocking(bool)
S::Int S::GUI::ListBoxHeader::EnableLocking(Bool enable)
{
	if (enable)
	{
		tabNames.EnableLocking();
		tabWidths.EnableLocking();
		tabOrientations.EnableLocking();
		tabChecked.EnableLocking();
	}
	else
	{
		tabNames.DisableLocking();
		tabWidths.DisableLocking();
		tabOrientations.DisableLocking();
		tabChecked.DisableLocking();
	}

	return Widget::EnableLocking(enable);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movl %esi, %ebp
movq %rdi, %rbx
addq $0x5d8, %rdi            # imm = 0x5D8
leaq 0x630(%rbx), %r12
leaq 0x688(%rbx), %r15
leaq 0x6e0(%rbx), %r14
testl %esi, %esi
je 0x858e8
callq 0x571b0
movq %r12, %rdi
callq 0x571b0
movq %r15, %rdi
callq 0x571b0
movq %r14, %rdi
callq 0x571b0
jmp 0x85905
callq 0x57810
movq %r12, %rdi
callq 0x57810
movq %r15, %rdi
callq 0x57810
movq %r14, %rdi
callq 0x57810
movzbl %bpl, %esi
movq %rbx, %rdi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x58ea0
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listboxheader.cpp
// Function: smooth::GUI::ListBoxHeader::AddTab(smooth::String const&, int, int)
S::Int S::GUI::ListBoxHeader::AddTab(const String &iTabName, Int iTabWidth, Int iTabOrientation)
{
	tabNames.Add(iTabName);
	tabWidths.Add(iTabWidth);
	tabOrientations.Add(iTabOrientation);
	tabChecked.Add(False);

	OnChangeSize(GetSize());

	return Success();
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
leaq 0xc(%rsp), %r14
movl %edx, (%r14)
leaq 0x8(%rsp), %r15
movl %ecx, (%r15)
addq $0x5d8, %rdi            # imm = 0x5D8
callq 0x64280
leaq 0x630(%rbx), %rdi
movq %r14, %rsi
callq 0x86944
leaq 0x688(%rbx), %rdi
movq %r15, %rsi
callq 0x86944
leaq 0x6e0(%rbx), %rdi
leaq 0x71cb4(%rip), %rsi     # 0xf7622
callq 0x86ade
leaq 0xb0(%rbx), %rsi
movq %rbx, %rdi
callq 0x591c8
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listboxheader.cpp
// Function: smooth::GUI::ListBoxHeader::RemoveAllTabs()
S::Int S::GUI::ListBoxHeader::RemoveAllTabs()
{
	tabNames.RemoveAll();
	tabWidths.RemoveAll();
	tabOrientations.RemoveAll();
	tabChecked.RemoveAll();

	OnChangeSize(GetSize());

	return Success();
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
addq $0x5d8, %rdi            # imm = 0x5D8
callq 0x640f6
leaq 0x630(%rbx), %rdi
callq 0x86554
leaq 0x688(%rbx), %rdi
callq 0x86554
leaq 0x6e0(%rbx), %rdi
callq 0x80d66
leaq 0xb0(%rbx), %rsi
movq %rbx, %rdi
callq 0x591c8
xorl %eax, %eax
popq %rbx
retq
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listboxheader.cpp
// Function: smooth::GUI::ListBoxHeader::GetNthTabOffset(int) const
S::Int S::GUI::ListBoxHeader::GetNthTabOffset(Int n) const
{
	if (n >= tabWidths.Length()) return -1;

	Int	 offset = 0;

	for (Int i = 0; i < n; i++)
	{
		offset += (Int) Math::Abs(tabWidths.GetNth(i));
	}

	return offset;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl $0xffffffff, %ebp       # imm = 0xFFFFFFFF
cmpl %esi, 0x638(%rdi)
jle 0x85a32
movl %esi, %ebx
testl %esi, %esi
jle 0x85a30
movq %rdi, %r14
addq $0x630, %r14            # imm = 0x630
xorl %r15d, %r15d
xorl %ebp, %ebp
movq %r14, %rdi
movl %r15d, %esi
callq 0x86b48
movl (%rax), %eax
movl %eax, %ecx
sarl $0x1f, %ecx
orl $0x1, %ecx
testl %eax, %eax
cmovel %eax, %ecx
imull %eax, %ecx
addl %ecx, %ebp
incl %r15d
cmpl %r15d, %ebx
jne 0x85a07
jmp 0x85a32
xorl %ebp, %ebp
movl %ebp, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listentry.cpp
// Function: smooth::GUI::ListEntry::InitDrag()
S::Void S::GUI::ListEntry::InitDrag()
{
	if (container->GetObjectType() == ListBox::classID)
	{
		Point	 mousePos  = container->GetContainerWindow()->GetMousePosition();
		Point	 entryPos  = GetRealPosition();
		Size	 entrySize = GetRealSize();

		if	(mousePos.y <  entryPos.y		) ((ListBox *) container)->DragSelectedEntry(True);
		else if (mousePos.y >= entryPos.y + entrySize.cy) ((ListBox *) container)->DragSelectedEntry(False);
	}
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
movq 0x190(%rdi), %rdi
addq $0x20, %rdi
movq 0xe60ae(%rip), %rax     # 0x16cf68
movswl (%rax), %esi
callq 0x57520
testb %al, %al
je 0x86f0b
movq 0x190(%rbx), %rdi
callq 0x559e0
movq %rax, %rdi
callq 0x56b50
movq %rax, %r14
shrq $0x20, %r14
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x48(%rax)
movq %rax, %r15
shrq $0x20, %r15
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x50(%rax)
cmpl %r15d, %r14d
jl 0x86f11
shrq $0x20, %rax
addl %r15d, %eax
cmpl %r14d, %eax
jle 0x86f11
popq %rbx
popq %r14
popq %r15
retq
xorl %esi, %esi
cmpl %r15d, %r14d
setl %sil
movq 0x190(%rbx), %rdi
popq %rbx
popq %r14
popq %r15
jmp 0x587a0
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listentry.cpp
// Function: smooth::GUI::ListEntry::GetNthTabText(int) const
S::String S::GUI::ListEntry::GetNthTabText(Int i) const
{
	String	 tabText;
	Int	 tabCount = 0;

	for (Int p = 0; p < text.Length(); p++)
	{
		if (tabCount == i)
		{
			for (Int q = p; q < text.Length(); q++)
			{
				if (text[q] == tabDelimiter[0]) break;

				tabText[q - p] = text[q];
			}

			break;
		}

		if (text[p] == tabDelimiter[0]) tabCount++;
	}

	return tabText;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movl %edx, %ebp
movq %rsi, %r14
xorl %ebx, %ebx
movq %rdi, (%rsp)
xorl %esi, %esi
callq 0x58e20
addq $0xf0, %r14
movq 0xe4c7d(%rip), %r12     # 0x16cbb0
xorl %r15d, %r15d
movq %r14, %rdi
callq 0x57180
cmpl %eax, %r15d
jge 0x87fc7
cmpl %ebp, %ebx
je 0x87f72
movq %r14, %rdi
movl %r15d, %esi
callq 0x57fe0
movl %eax, %r13d
movq %r12, %rdi
xorl %esi, %esi
callq 0x57fe0
xorl %ecx, %ecx
cmpl %eax, %r13d
sete %cl
addl %ecx, %ebx
incl %r15d
jmp 0x87f36
xorl %r12d, %r12d
movq 0xe4c34(%rip), %rbx     # 0x16cbb0
movq %r14, %rdi
callq 0x57180
leal (%r15,%r12), %ebp
cmpl %eax, %ebp
jge 0x87fc7
movq %r14, %rdi
movl %ebp, %esi
callq 0x57fe0
movl %eax, %r13d
movq %rbx, %rdi
xorl %esi, %esi
callq 0x57fe0
cmpl %eax, %r13d
je 0x87fc7
movq %r14, %rdi
movl %ebp, %esi
callq 0x57fe0
movl %eax, %ebp
movq (%rsp), %rdi
movl %r12d, %esi
callq 0x58990
movl %ebp, (%rax)
incl %r12d
jmp 0x87f7c
movq (%rsp), %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x87fdc
movq %rax, %r14
movq (%rsp), %rdi
callq 0x59200
movq %r14, %rdi
callq 0x57090
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listentry.cpp
// Function: smooth::GUI::ListEntry::SetMark(bool)
S::Int S::GUI::ListEntry::SetMark(Bool nMarked)
{
	if (nMarked == marked) return Success();

	marked = nMarked;

	if (IsRegistered())
	{
		Paint(SP_PAINT);

		((List *) container)->onMarkEntry.Emit(this);
	}

	onToggleMark.Emit(marked);

	return Success();
}

// Assembly:
cmpb %sil, 0x5b8(%rdi)
je 0x88047
pushq %rbx
movq %rdi, %rbx
movb %sil, 0x5b8(%rdi)
movq (%rdi), %rax
callq *0x88(%rax)
testb %al, %al
je 0x88030
movq (%rbx), %rax
movq %rbx, %rdi
xorl %esi, %esi
callq *0x78(%rax)
movl $0x6a8, %edi            # imm = 0x6A8
addq 0x190(%rbx), %rdi
movq %rbx, %rsi
callq 0x769e4
movzbl 0x5b8(%rbx), %esi
addq $0x610, %rbx            # imm = 0x610
movq %rbx, %rdi
callq 0x882e6
popq %rbx
xorl %eax, %eax
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listentry.cpp
// Function: smooth::GUI::ListEntry::Select()
S::Int S::GUI::ListEntry::Select()
{
	selected = True;

	internalOnSelectEntry.Emit(container->GetHandle(), GetHandle());

	Paint(SP_PAINT);

	((List *) container)->onSelectEntry.Emit(this);

	onSelect.Emit();

	return Success();
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movb $0x1, 0x5b9(%rdi)
movq 0x190(%rdi), %rax
movl 0x8(%rax), %esi
movl 0x8(%rdi), %edx
movq 0xe4c3f(%rip), %rdi     # 0x16cca8
callq 0x72e5c
movq (%rbx), %rax
movq %rbx, %rdi
xorl %esi, %esi
callq *0x78(%rax)
movl $0x688, %edi            # imm = 0x688
addq 0x190(%rbx), %rdi
movq %rbx, %rsi
callq 0x769e4
addq $0x5d0, %rbx            # imm = 0x5D0
movq %rbx, %rdi
callq 0x70488
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listentry.cpp
// Function: smooth::GUI::ListEntry::Deselect()
S::Int S::GUI::ListEntry::Deselect()
{
	selected = False;

	Paint(SP_PAINT);

	onDeselect.Emit();

	return Success();
}

// Assembly:
pushq %rbx
movq %rdi, %rbx
movb $0x0, 0x5b9(%rdi)
movq (%rdi), %rax
xorl %esi, %esi
callq *0x78(%rax)
addq $0x5f0, %rbx            # imm = 0x5F0
movq %rbx, %rdi
callq 0x70488
xorl %eax, %eax
popq %rbx
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listentryseparator.cpp
// Function: smooth::GUI::ListEntrySeparator::ListEntrySeparator()
S::GUI::ListEntrySeparator::ListEntrySeparator() : ListEntry(NIL)
{
	type		= classID;

	font.SetColor(Setup::InactiveTextColor);

	SetHeight(3);

	Remove(hotspot);
	Remove(markHotspot);

	internalOnSelectEntry.Disconnect(&ListEntry::OnSelectOtherEntry, this);
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
movq %rsp, %r14
movq %r14, %rdi
xorl %esi, %esi
callq 0x58e20
movq %rbx, %rdi
movq %r14, %rsi
callq 0x55290
movq %rsp, %rdi
callq 0x59200
movq 0xe3ddf(%rip), %rax     # 0x16c3c8
addq $0x10, %rax
movq %rax, (%rbx)
movq 0xe45c1(%rip), %rax     # 0x16cbb8
movzwl (%rax), %eax
movw %ax, 0x20(%rbx)
leaq 0x140(%rbx), %rdi
movq 0xe4344(%rip), %rsi     # 0x16c950
callq 0x58650
leaq 0xa8(%rbx), %rsi
movl 0xb0(%rbx), %eax
movq %rsp, %rdx
movl %eax, (%rdx)
movl $0x3, 0x4(%rdx)
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x150(%rax)
movq 0x5c0(%rbx), %rsi
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x38(%rax)
movq 0x5c8(%rbx), %rsi
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x38(%rax)
movq 0xe464b(%rip), %rdi     # 0x16cca8
movq 0xe3eac(%rip), %rsi     # 0x16c510
xorl %edx, %edx
movq %rbx, %rcx
callq 0x887fe
addq $0x18, %rsp
popq %rbx
popq %r14
retq
movq %rax, %r14
movq %rsp, %rdi
callq 0x59200
jmp 0x8868e
movq %rax, %r14
movq %rbx, %rdi
callq 0x58ed0
movq %r14, %rdi
callq 0x57090
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/list/listentryseparator.cpp
// Function: smooth::GUI::ListEntrySeparator::Paint(int)
S::Int S::GUI::ListEntrySeparator::Paint(Int message)
{
	if (!IsRegistered()) return Error();
	if (!IsVisible())    return Success();

	switch (message)
	{
		case SP_PAINT:
			{
				Surface	*surface = GetDrawSurface();
				Rect	 frame	 = Rect(GetRealPosition(), GetRealSize());

				surface->Box(frame + Point(4, 1) - Size(8, 2), font.GetColor(), Rect::Filled);
			}
	}

	return Widget::Paint(message);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x18, %rsp
movl %esi, %ebx
movq %rdi, %r14
movq (%rdi), %rax
callq *0x88(%rax)
movl %eax, %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
testb %cl, %cl
je 0x887d9
movq (%r14), %rax
movq %r14, %rdi
callq *0x90(%rax)
movl %eax, %ecx
xorl %eax, %eax
testb %cl, %cl
je 0x887d9
testl %ebx, %ebx
jne 0x887cf
movq (%r14), %rax
movq %r14, %rdi
callq *0x40(%rax)
movq %rax, %r15
movq (%r14), %rax
movq %r14, %rdi
callq *0x48(%rax)
movq %rax, %r12
movq (%r14), %rax
movq %r14, %rdi
callq *0x50(%rax)
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
movq %rax, %rdx
andq %rcx, %rdx
movq %r12, %rsi
andq %rcx, %rsi
movl $0xfffffffc, %edi       # imm = 0xFFFFFFFC
orq %rdi, %rsi
leal 0x4(%r12), %r8d
addl %r12d, %edi
addl %edi, %eax
addq %r8, %rsi
addq $0x4, %rsi
addq %r12, %rdx
andq %rcx, %rdx
orq %rdx, %rax
addq %rcx, %rax
leaq 0x8(%rsp), %r12
movq %rsi, (%r12)
movq %rax, 0x8(%r12)
leaq 0x140(%r14), %rdi
callq 0x57550
movq 0xe47f3(%rip), %rcx     # 0x16cfa8
movl (%rcx), %ecx
movq %rsp, %r8
movq $0x0, (%r8)
movq %r15, %rdi
movq %r12, %rsi
movq %rax, %rdx
callq 0x57930
movq %r14, %rdi
movl %ebx, %esi
callq 0x567d0
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
retq
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/menubar.cpp
// Function: smooth::GUI::Menubar::Menubar()
S::GUI::Menubar::Menubar()
{
	type		= classID;
	orientation	= OR_TOP;
	subtype		= WO_SEPARATOR;

#ifdef __APPLE__
	menubarCocoa = NIL;
#endif

	SetSize(Size(18, 18));

	onRegister.Connect(&Menubar::OnRegister, this);
	onUnregister.Connect(&Menubar::OnUnregister, this);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
callq 0x57670
movq 0xe46b9(%rip), %rax     # 0x16cf90
addq $0x10, %rax
movq %rax, (%rbx)
movq 0xe3f2b(%rip), %rax     # 0x16c810
movzwl (%rax), %eax
movw %ax, 0x20(%rbx)
movw $0x4, 0xd0(%rbx)
movw $0x1, 0x1a0(%rbx)
movabsq $0x1200000012, %rax     # imm = 0x1200000012
movq %rsp, %rdx
movq %rax, (%rdx)
leaq 0xa8(%rbx), %rsi
movq %rbx, %rdi
callq 0x57080
leaq 0x558(%rbx), %rdi
movq 0xe3d3d(%rip), %rsi     # 0x16c668
xorl %edx, %edx
movq %rbx, %rcx
callq 0x890b6
leaq 0x578(%rbx), %rdi
movq 0xe4075(%rip), %rsi     # 0x16c9b8
xorl %edx, %edx
movq %rbx, %rcx
callq 0x890b6
addq $0x8, %rsp
popq %rbx
popq %r14
retq
jmp 0x88957
movq %rax, %r14
movq %rbx, %rdi
callq 0x554e0
movq %r14, %rdi
callq 0x57090
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/menubar.cpp
// Function: smooth::GUI::Menubar::AddEntryInternal(smooth::String const&, smooth::GUI::Bitmap const&, smooth::GUI::PopupMenu*, bool*, int*, int)
S::GUI::MenuEntry *S::GUI::Menubar::AddEntryInternal(const String &text, const Bitmap &bitmap, PopupMenu *popupMenu, Bool *bVar, Int *iVar, Int iCode)
{
	MenuEntry	*newEntry = new MenubarEntry(text, bitmap, popupMenu, bVar, iVar, iCode);

	if (Add(newEntry) == Success())
	{
		createdEntry.Set(newEntry->GetHandle(), True);

		if (GetHeight() < newEntry->GetHeight() + 2) SetHeight(newEntry->GetHeight() + 2);
		if (GetWidth() < newEntry->GetWidth() + 3) SetWidth(newEntry->GetWidth() + 3);

		return newEntry;
	}

	DeleteObject(newEntry);

	return NIL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r9, 0x8(%rsp)
movq %r8, %r12
movq %rcx, %r13
movq %rdx, %rbp
movq %rsi, %r15
movq %rdi, %r14
movl $0x608, %edi            # imm = 0x608
callq 0x556b0
movq %rax, %rbx
movl 0x50(%rsp), %eax
movl %eax, (%rsp)
movq %rbx, %rdi
movq %r15, %rsi
movq %rbp, %rdx
movq %r13, %rcx
movq %r12, %r8
movq 0x8(%rsp), %r9
callq 0x574f0
movq (%r14), %rax
movq %r14, %rdi
movq %rbx, %rsi
callq *0x30(%rax)
testl %eax, %eax
je 0x889fa
movq %rbx, %rdi
callq 0x58cc0
xorl %ebx, %ebx
jmp 0x88a7c
leaq 0x5b8(%r14), %rdi
movl 0x8(%rbx), %esi
leaq 0x6edfb(%rip), %rdx     # 0xf7806
callq 0x83dd8
movl 0xb4(%rbx), %eax
addl $0x2, %eax
cmpl %eax, 0xb4(%r14)
jge 0x88a46
leaq 0xa8(%r14), %rsi
movl 0xb0(%r14), %ecx
leaq 0x10(%rsp), %rdx
movl %ecx, (%rdx)
movl %eax, 0x4(%rdx)
movq (%r14), %rax
movq %r14, %rdi
callq *0x150(%rax)
movl 0xb0(%rbx), %eax
addl $0x3, %eax
cmpl %eax, 0xb0(%r14)
jge 0x88a7c
leaq 0xa8(%r14), %rsi
movl 0xb4(%r14), %ecx
leaq 0x10(%rsp), %rdx
movl %eax, (%rdx)
movl %ecx, 0x4(%rdx)
movq (%r14), %rax
movq %r14, %rdi
callq *0x150(%rax)
movq %rbx, %rax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movl $0x608, %esi            # imm = 0x608
movq %rbx, %rdi
callq 0x55480
movq %r14, %rdi
callq 0x57090
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/menubarentry.cpp
// Function: smooth::GUI::MenubarEntry::ClosePopupMenu()
S::Void S::GUI::MenubarEntry::ClosePopupMenu()
{
	if (popup == NIL || popup->GetContainer() != this) return;

	if (IsRegistered()) container->SetFlags(container->GetFlags() & ~MB_POPUPOPEN);

	Remove(popup);

	popup->internalRequestClose.Disconnect(&MenubarEntry::ClosePopupMenu, this);

	if (IsRegistered())
	{
		Window	*window	 = container->GetContainerWindow();
		Surface	*surface = GetDrawSurface();
		Rect	 frame	 = Rect(GetRealPosition(), GetRealSize());

		surface->StartPaint(frame);

		if (!window->IsMouseOn(frame)) Paint(SP_MOUSEOUT);

		hotspot->Activate();

		surface->EndPaint();
	}

	popupMenuClosed = S::System::System::Clock();
}

// Assembly:
movq 0x5b8(%rdi), %rax
testq %rax, %rax
je 0x89a33
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
cmpq %rdi, 0x190(%rax)
jne 0x89a25
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x88(%rax)
testb %al, %al
je 0x89945
movq 0x190(%rbx), %rax
andl $-0x3, 0x30(%rax)
movq 0x5b8(%rbx), %rsi
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x38(%rax)
movl $0x698, %edi            # imm = 0x698
addq 0x5b8(%rbx), %rdi
movq 0xe3518(%rip), %rsi     # 0x16ce80
xorl %edx, %edx
movq %rbx, %rcx
callq 0x8aaca
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x88(%rax)
testb %al, %al
je 0x89a19
movq 0x190(%rbx), %rdi
callq 0x559e0
movq %rax, %r15
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x40(%rax)
movq %rax, %r14
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x48(%rax)
movq %rax, %r12
movq %rax, %rbp
shrq $0x20, %rbp
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x50(%rax)
leal (%rax,%r12), %ecx
shrq $0x20, %rax
leaq 0x8(%rsp), %r13
movl %r12d, (%r13)
movl %ebp, 0x4(%r13)
movl %ecx, 0x8(%r13)
addl %ebp, %eax
movl %eax, 0xc(%r13)
movq %r14, %rdi
movq %r13, %rsi
callq 0x55160
movq %r15, %rdi
movq %r13, %rsi
callq 0x578a0
testb %al, %al
jne 0x89a04
movq (%rbx), %rax
movq %rbx, %rdi
movl $0x3, %esi
callq *0x78(%rax)
movq 0x5f8(%rbx), %rdi
movq (%rdi), %rax
callq *0x68(%rax)
movq %r14, %rdi
callq 0x58780
callq 0x570e0
movq %rax, 0x5f0(%rbx)
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/menuentry.cpp
// Function: smooth::GUI::MenuEntry::MenuEntry(smooth::String const&, smooth::GUI::Bitmap const&, smooth::GUI::PopupMenu*, bool*, int*, int)
S::GUI::MenuEntry::MenuEntry(const String &iText, const Bitmap &iBitmap, PopupMenu *iPopup, Bool *ibVar, Int *iiVar, Int iiCode)
{
	type	    = classID;

	popup	    = NIL;
	bVar	    = ibVar;
	iVar	    = iiVar;
	iCode	    = iiCode;
	orientation = OR_LEFT;

	shortcut    = NIL;

	SetText(iText);
	SetBitmap(iBitmap);

	SetPopupMenu(iPopup);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %r9, %r14
movq %r8, %r15
movq %rcx, 0x10(%rsp)
movq %rdx, %r12
movq %rsi, %rbp
movq %rdi, %rbx
callq 0x588f0
movq 0xe2092(%rip), %rax     # 0x16ccf8
addq $0x10, %rax
movq %rax, (%rbx)
leaq 0x5c0(%rbx), %rdi
movq %rdi, 0x8(%rsp)
xorl %esi, %esi
callq 0x58950
leaq 0x5c8(%rbx), %r13
movq %r13, %rdi
xorl %esi, %esi
callq 0x58950
movl 0x50(%rsp), %eax
movq 0xe1fb4(%rip), %rcx     # 0x16cc50
movzwl (%rcx), %ecx
movw %cx, 0x20(%rbx)
xorl %ecx, %ecx
movq %rcx, 0x5b8(%rbx)
movq %r15, 0x5d8(%rbx)
movq %r14, 0x5e0(%rbx)
movl %eax, 0x5e8(%rbx)
movw $0x10, 0xd0(%rbx)
movq %rcx, 0x5d0(%rbx)
movq (%rbx), %rax
movq %rbx, %rdi
movq %rbp, %rsi
callq *0xa0(%rax)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x56610
movq %rbx, %rdi
movq 0x10(%rsp), %rsi
callq 0x565f0
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
jmp 0x8ad1b
movq %rax, %r14
jmp 0x8ad25
movq %rax, %r14
movq %r13, %rdi
callq 0x59148
movq 0x8(%rsp), %rdi
callq 0x59148
movq %rbx, %rdi
callq 0x57040
movq %r14, %rdi
callq 0x57090
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/menuentry.cpp
// Function: smooth::GUI::MenuEntry::SetBitmap(smooth::GUI::Bitmap const&)
S::Int S::GUI::MenuEntry::SetBitmap(const Bitmap &newBitmap)
{
	bitmap	= newBitmap;
	graymap	= newBitmap;

	if (bitmap == NIL) return Success();

	graymap.GrayscaleBitmap();

	return Success();
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rsi, %r14
movq %rdi, %rbx
leaq 0x5c0(%rdi), %r15
movq %r15, %rdi
callq 0x582c0
addq $0x5c8, %rbx            # imm = 0x5C8
movq %rbx, %rdi
movq %r14, %rsi
callq 0x582c0
movq %r15, %rdi
xorl %esi, %esi
callq 0x57e30
testb %al, %al
jne 0x8ad78
movq %rbx, %rdi
callq 0x56db0
xorl %eax, %eax
popq %rbx
popq %r14
popq %r15
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/menuentry.cpp
// Function: smooth::GUI::MenuEntry::SetPopupMenu(smooth::GUI::PopupMenu*)
S::Int S::GUI::MenuEntry::SetPopupMenu(PopupMenu *nPopup)
{
	if (popup != NIL) popup->onEnqueueForDeletion.Disconnect(&MenuEntry::InternalOnDeletePopup, this);

	popup = nPopup;

	if (popup != NIL) popup->onEnqueueForDeletion.Connect(&MenuEntry::InternalOnDeletePopup, this);

	return Success();
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %r14
movq %rdi, %rbx
movq 0x5b8(%rdi), %rdi
testq %rdi, %rdi
je 0x8adae
addq $0x598, %rdi            # imm = 0x598
movq 0xe206c(%rip), %rsi     # 0x16ce10
xorl %edx, %edx
movq %rbx, %rcx
callq 0x8af16
movq %r14, 0x5b8(%rbx)
testq %r14, %r14
je 0x8add5
addq $0x598, %r14            # imm = 0x598
movq 0xe2048(%rip), %rsi     # 0x16ce10
movq %r14, %rdi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x8af82
xorl %eax, %eax
addq $0x8, %rsp
popq %rbx
popq %r14
retq
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/menuentry.cpp
// Function: smooth::GUI::MenuEntry::SetShortcut(int, int, smooth::GUI::Window*)
S::Int S::GUI::MenuEntry::SetShortcut(Int scFlags, Int scKey, Window *window)
{
	shortcut = new Shortcut(scFlags, scKey, this);
	shortcut->onKeyDown.Connect(&onAction);

	window->Add(shortcut);

	return Success();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rcx, %rbx
movl %edx, %ebp
movl %esi, %r12d
movq %rdi, %r14
movl $0x5e8, %edi            # imm = 0x5E8
callq 0x556b0
movq %rax, %r15
movq %rax, %rdi
movl %r12d, %esi
movl %ebp, %edx
movq %r14, %rcx
xorl %r8d, %r8d
callq 0x57aa0
movq %r15, 0x5d0(%r14)
addq $0x5c8, %r15            # imm = 0x5C8
leaq 0x478(%r14), %rsi
movq %r15, %rdi
callq 0x72aa2
movq 0x5d0(%r14), %rsi
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x30(%rax)
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movl $0x5e8, %esi            # imm = 0x5E8
movq %r15, %rdi
callq 0x55480
movq %rbx, %rdi
callq 0x57090
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/micromenu.cpp
// Function: smooth::GUI::MicroMenu::MicroMenu(smooth::GUI::Point const&, smooth::GUI::Size const&, int)
S::GUI::MicroMenu::MicroMenu(const Point &iPos, const Size &iSize, Int sType)
{
	type	= classID;
	subtype	= sType;

	SetMetrics(iPos, iSize);

	if (GetWidth() == 0) SetWidth(subtype == OR_VERT ? 13 : 7);
	if (GetHeight() == 0) SetHeight(subtype == OR_VERT ? 7 : 13);

	onOpenPopupMenu.SetParentObject(this);
	onClosePopupMenu.SetParentObject(this);

	hotspot	= new HotspotSimpleButton(Point(), GetSize());

	hotspot->onLeftButtonDown.Connect(&MicroMenu::OpenPopupMenu, this);

	Add(hotspot);

	popup = new PopupMenu();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movl %ecx, %ebp
movq %rdx, %r14
movq %rsi, %r15
movq %rdi, %rbx
callq 0x57670
movq 0xe1d82(%rip), %rax     # 0x16ce60
addq $0x10, %rax
movq %rax, (%rbx)
xorl %eax, %eax
movq %rax, 0x6a0(%rbx)
leaq 0xd7653(%rip), %rcx     # 0x162748
movq %rcx, 0x698(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x6a8(%rbx)
movq %rax, 0x6c0(%rbx)
movq %rcx, 0x6b8(%rbx)
movups %xmm0, 0x6c8(%rbx)
movq 0xe1956(%rip), %rax     # 0x16ca78
movzwl (%rax), %eax
movw %ax, 0x20(%rbx)
movw %bp, 0x1a0(%rbx)
movq %rbx, %rdi
movq %r15, %rsi
movq %r14, %rdx
callq 0x57080
cmpl $0x0, 0xb0(%rbx)
jne 0x8b17d
cmpw $0x2, 0x1a0(%rbx)
movl $0xd, %eax
movl $0x7, %ecx
cmovel %eax, %ecx
leaq 0xa8(%rbx), %rsi
movl 0xb4(%rbx), %eax
movq %rsp, %rdx
movl %ecx, (%rdx)
movl %eax, 0x4(%rdx)
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x150(%rax)
cmpl $0x0, 0xb4(%rbx)
jne 0x8b1bc
cmpw $0x2, 0x1a0(%rbx)
movl $0x7, %eax
movl $0xd, %ecx
cmovel %eax, %ecx
leaq 0xa8(%rbx), %rsi
movl 0xb0(%rbx), %eax
movq %rsp, %rdx
movl %eax, (%rdx)
movl %ecx, 0x4(%rdx)
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x150(%rax)
movq %rbx, 0x6a0(%rbx)
movq %rbx, 0x6c0(%rbx)
movl $0x5b8, %edi            # imm = 0x5B8
callq 0x556b0
movq %rax, %r15
leaq 0xb0(%rbx), %rdx
movq %rsp, %rsi
movq $0x0, (%rsi)
movq %rax, %rdi
callq 0x55a60
movq %r15, 0x688(%rbx)
addq $0x2f8, %r15            # imm = 0x2F8
movq 0xe19db(%rip), %rsi     # 0x16cbe0
movq %r15, %rdi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x8ba28
movq 0x688(%rbx), %rsi
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x30(%rax)
movl $0x6b8, %edi            # imm = 0x6B8
callq 0x556b0
movq %rax, %r15
movq %rax, %rdi
callq 0x58d00
movq %r15, 0x690(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movl $0x6b8, %esi            # imm = 0x6B8
jmp 0x8b25b
movq %rax, %r14
movl $0x5b8, %esi            # imm = 0x5B8
movq %r15, %rdi
callq 0x55480
jmp 0x8b268
movq %rax, %r14
leaq 0x698(%rbx), %r15
leaq 0x6b8(%rbx), %rdi
callq 0x703d2
movq %r15, %rdi
callq 0x703d2
movq %rbx, %rdi
callq 0x554e0
movq %r14, %rdi
callq 0x57090
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/micromenu.cpp
// Function: smooth::GUI::MicroMenu::ClosePopupMenu()
S::Void S::GUI::MicroMenu::ClosePopupMenu()
{
	if (popup == NIL || popup->GetContainer() != this) return;

	Remove(popup);

	onClosePopupMenu.Emit();

	popup->internalRequestClose.Disconnect(&MicroMenu::ClosePopupMenu, this);

	hotspot->Activate();
}

// Assembly:
pushq %rbx
movq 0x690(%rdi), %rsi
testq %rsi, %rsi
je 0x8b9e5
movq %rdi, %rbx
cmpq %rdi, 0x190(%rsi)
je 0x8b9e7
popq %rbx
retq
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x38(%rax)
leaq 0x6b8(%rbx), %rdi
callq 0x70488
movl $0x698, %edi            # imm = 0x698
addq 0x690(%rbx), %rdi
movq 0xe1059(%rip), %rsi     # 0x16ca68
xorl %edx, %edx
movq %rbx, %rcx
callq 0x8bc98
movq 0x688(%rbx), %rdi
movq (%rdi), %rax
popq %rbx
jmpq *0x68(%rax)
nop
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/popupmenu.cpp
// Function: smooth::GUI::PopupMenu::PopupMenu()
S::GUI::PopupMenu::PopupMenu()
{
	type		= classID;
	orientation	= OR_FREE;

	closedByClick	= False;

	toolWindow = NIL;

	internalRequestClose.SetParentObject(this);

	internalOnOpenPopupMenu.Connect(&PopupMenu::OnOpenPopupMenu, this);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
movq %rdi, %rbx
callq 0x57670
movq 0xe0c70(%rip), %rax     # 0x16ca08
addq $0x10, %rax
movq %rax, (%rbx)
leaq 0x698(%rbx), %r14
xorl %eax, %eax
movq %rax, 0x6a0(%rbx)
leaq 0xd6992(%rip), %rcx     # 0x162748
movq %rcx, 0x698(%rbx)
xorps %xmm0, %xmm0
movups %xmm0, 0x6a8(%rbx)
movq 0xe0bf2(%rip), %rcx     # 0x16c9c0
movzwl (%rcx), %ecx
movw %cx, 0x20(%rbx)
movw $0x80, 0xd0(%rbx)
movb $0x0, 0x690(%rbx)
movq %rax, 0x688(%rbx)
movq %rbx, 0x6a0(%rbx)
movq 0xe098e(%rip), %rdi     # 0x16c788
movq 0xe0b8f(%rip), %rsi     # 0x16c990
xorl %edx, %edx
movq %rbx, %rcx
callq 0x8c54c
popq %rbx
popq %r14
popq %r15
retq
movq %rax, %r15
movq %r14, %rdi
callq 0x703d2
movq %rbx, %rdi
callq 0x554e0
movq %r15, %rdi
callq 0x57090
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/popupmenu.cpp
// Function: smooth::GUI::PopupMenu::AddEntryInternal(smooth::String const&, smooth::GUI::Bitmap const&, smooth::GUI::PopupMenu*, bool*, int*, int)
S::GUI::MenuEntry *S::GUI::PopupMenu::AddEntryInternal(const String &text, const Bitmap &bitmap, PopupMenu *popupMenu, Bool *bVar, Int *iVar, Int iCode)
{
	PopupMenuEntry	*newEntry = NIL;

	if	(bVar != NIL) newEntry = new PopupMenuEntryCheck(text, bVar);
	else if (iVar != NIL) newEntry = new PopupMenuEntryOption(text, iVar, iCode);
	else		      newEntry = new PopupMenuEntry(text, bitmap, popupMenu);

	newEntry->SetOwner(this);

	if (Add(newEntry) == Success())
	{
		createdEntry.Set(newEntry->GetHandle(), True);

		return newEntry;
	}

	DeleteObject(newEntry);

	return NIL;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r15
movq %rdi, %r14
testq %r8, %r8
je 0x8beea
movq %r8, %r13
movl $0x618, %edi            # imm = 0x618
callq 0x556b0
movq %rax, %rbx
movq %rax, %rdi
movq %r15, %rsi
movq %r13, %rdx
callq 0x56600
jmp 0x8bf2a
movq %r9, %r12
movq %rdx, %rbp
movq %rcx, %r13
movl $0x618, %edi            # imm = 0x618
callq 0x556b0
movq %rax, %rbx
testq %r12, %r12
je 0x8bf19
movl 0x40(%rsp), %ecx
movq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
callq 0x55dd0
jmp 0x8bf2a
movq %rbx, %rdi
movq %r15, %rsi
movq %rbp, %rdx
movq %r13, %rcx
callq 0x58b40
movq %r14, 0x600(%rbx)
movq (%r14), %rax
movq %r14, %rdi
movq %rbx, %rsi
callq *0x30(%rax)
testl %eax, %eax
je 0x8bf4d
movq %rbx, %rdi
callq 0x58cc0
xorl %ebx, %ebx
jmp 0x8bf66
addq $0x5b8, %r14            # imm = 0x5B8
movl 0x8(%rbx), %esi
leaq 0x6ba16(%rip), %rdx     # 0xf7974
movq %r14, %rdi
callq 0x83dd8
movq %rbx, %rax
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x8bf7c
jmp 0x8bf7c
movq %rax, %r14
movl $0x618, %esi            # imm = 0x618
movq %rbx, %rdi
callq 0x55480
movq %r14, %rdi
callq 0x57090
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/popupmenu.cpp
// Function: smooth::GUI::PopupMenu::Show()
S::Int S::GUI::PopupMenu::Show()
{
	if (IsVisible()) return Success();

	visible = True;

	if (!IsRegistered()) return Success();

	SetFlags(GetFlags() & ~MB_POPUPOPEN);

	closedByClick = False;

	Window	*window = container->GetContainerWindow();

	/* Create tool window, add entries and display it.
	 */
	toolWindow = new ToolWindow(GetPosition(), GetSize());
	toolWindow->onPaint.Connect(&PopupMenu::OnToolWindowPaint, this);
	toolWindow->onLoseFocus.Connect(&internalRequestClose);

	window->onChangePosition.Connect(&internalRequestClose);
	window->onChangeSize.Connect(&internalRequestClose);

	for (Int i = 0; i < Length(); i++)
	{
		MenuEntry	*entry = GetNthEntry(i);

		if (entry->GetObjectType() != PopupMenuEntry::classID) continue;

		entry->SetRegisteredFlag(False);

		toolWindow->Add(entry);
	}

	Add(toolWindow);

	internalOnOpenPopupMenu.Emit(GetHandle());

	toolWindow->Show();

	/* Notify subscribers of popup open.
	 */
	onShow.Emit();

	return Success();
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdi, %rbx
movq (%rdi), %rax
callq *0x90(%rax)
testb %al, %al
jne 0x8c10b
movb $0x1, 0xcb(%rbx)
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x88(%rax)
testb %al, %al
je 0x8c10b
andb $-0x3, 0x30(%rbx)
movb $0x0, 0x690(%rbx)
movq 0x190(%rbx), %rdi
callq 0x559e0
movq %rax, %r15
movl $0x6d8, %edi            # imm = 0x6D8
callq 0x556b0
movq %rax, %r12
leaq 0xa8(%rbx), %rsi
leaq 0xb0(%rbx), %rdx
movq %rax, %rdi
callq 0x59000
movq %r12, 0x688(%rbx)
addq $0x648, %r12            # imm = 0x648
movq 0xe051b(%rip), %rsi     # 0x16c538
xorl %r14d, %r14d
movq %r12, %rdi
xorl %edx, %edx
movq %rbx, %rcx
callq 0x8c676
movl $0x518, %edi            # imm = 0x518
addq 0x688(%rbx), %rdi
leaq 0x698(%rbx), %r12
movq %r12, %rsi
callq 0x76842
leaq 0x278(%r15), %rdi
movq %r12, %rsi
callq 0x71a12
addq $0x298, %r15            # imm = 0x298
movq %r15, %rdi
movq %r12, %rsi
callq 0x8c734
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x178(%rax)
testl %eax, %eax
jle 0x8c0d0
movq 0xe0608(%rip), %rax     # 0x16c688
movswl (%rax), %ebp
movq (%rbx), %rax
movq %rbx, %rdi
movl %r14d, %esi
callq *0x180(%rax)
movq %rax, %r15
leaq 0x20(%rax), %rdi
movl %ebp, %esi
callq 0x57520
testb %al, %al
je 0x8c0bc
movb $0x0, 0xca(%r15)
movq 0x688(%rbx), %rdi
movq (%rdi), %rax
movq %r15, %rsi
callq *0x30(%rax)
incl %r14d
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x178(%rax)
cmpl %eax, %r14d
jl 0x8c083
movq 0x688(%rbx), %rsi
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x30(%rax)
movl 0x8(%rbx), %esi
movq 0xe069e(%rip), %rdi     # 0x16c788
callq 0x72dc0
movq 0x688(%rbx), %rdi
movq (%rdi), %rax
callq *0x58(%rax)
addq $0x1f8, %rbx            # imm = 0x1F8
movq %rbx, %rdi
callq 0x70488
xorl %eax, %eax
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movl $0x6d8, %esi            # imm = 0x6D8
movq %r12, %rdi
callq 0x55480
movq %rbx, %rdi
callq 0x57090
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/popupmenu.cpp
// Function: smooth::GUI::PopupMenu::OnToolWindowPaint()
S::Void S::GUI::PopupMenu::OnToolWindowPaint()
{
	if (toolWindow == NIL) return;

	Surface	*surface = toolWindow->GetDrawSurface();
	Rect	 frame = Rect(Point(0, 0), GetRealSize());

	surface->Frame(frame, FRAME_UP);
}

// Assembly:
pushq %r14
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbx
movq 0x688(%rdi), %rdi
testq %rdi, %rdi
je 0x8c176
movq (%rdi), %rax
callq *0x40(%rax)
movq %rax, %r14
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x50(%rax)
leaq 0x8(%rsp), %rsi
movq $0x0, (%rsi)
movl %eax, 0x8(%rsi)
shrq $0x20, %rax
movl %eax, 0xc(%rsi)
movq %r14, %rdi
xorl %edx, %edx
callq 0x57890
addq $0x18, %rsp
popq %rbx
popq %r14
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/popupmenu.cpp
// Function: smooth::GUI::PopupMenu::Hide()
S::Int S::GUI::PopupMenu::Hide()
{
	if (!visible) return Success();

	visible = False;

	if (!IsRegistered()) return Success();

	Window	*window = container->GetContainerWindow();

	/* Close tool window, remove entries and delete it.
	 */
	toolWindow->Close();

	window->onChangePosition.Disconnect(&internalRequestClose);
	window->onChangeSize.Disconnect(&internalRequestClose);

	for (Int i = 0; i < Length(); i++)
	{
		MenuEntry	*entry = GetNthEntry(i);

		if (entry->GetObjectType() != PopupMenuEntry::classID) continue;

		toolWindow->Remove(entry);

		entry->SetRegisteredFlag(True);
		entry->SetContainer(this);
	}

	DeleteObject(toolWindow);

	toolWindow = NIL;

	/* Notify subscribers of popup close.
	 */
	onHide.Emit();

	return Success();
}

// Assembly:
cmpb $0x1, 0xcb(%rdi)
jne 0x8c28f
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
movq %rdi, %rbx
movb $0x0, 0xcb(%rdi)
movq (%rdi), %rax
callq *0x88(%rax)
testb %al, %al
je 0x8c285
movq 0x190(%rbx), %rdi
callq 0x559e0
movq %rax, %r14
movq 0x688(%rbx), %rdi
callq 0x58420
leaq 0x278(%r14), %rdi
leaq 0x698(%rbx), %r15
movq %r15, %rsi
callq 0x8c7e4
addq $0x298, %r14            # imm = 0x298
movq %r14, %rdi
movq %r15, %rsi
callq 0x8c848
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x178(%rax)
testl %eax, %eax
jle 0x8c25f
movq 0xe0481(%rip), %rax     # 0x16c688
xorl %ebp, %ebp
movswl (%rax), %r14d
movq (%rbx), %rax
movq %rbx, %rdi
movl %ebp, %esi
callq *0x180(%rax)
movq %rax, %r15
leaq 0x20(%rax), %rdi
movl %r14d, %esi
callq 0x57520
testb %al, %al
je 0x8c24d
movq 0x688(%rbx), %rdi
movq (%rdi), %rax
movq %r15, %rsi
callq *0x38(%rax)
movb $0x1, 0xca(%r15)
movq %rbx, 0x190(%r15)
incl %ebp
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x178(%rax)
cmpl %eax, %ebp
jl 0x8c20d
movq 0x688(%rbx), %rdi
callq 0x58cc0
movq $0x0, 0x688(%rbx)
addq $0x218, %rbx            # imm = 0x218
movq %rbx, %rdi
callq 0x70488
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
xorl %eax, %eax
retq
// File: /workspace/github_c_makefile_star2_O1/enzo1982[P]smooth/classes/gui/widgets/multi/menu/../../../../../include/smooth/templates/signals/signal.h
// Function: int smooth::Signal1<void, smooth::GUI::Point const&>::Disconnect<void>(smooth::Signal0<void>*)
Int Disconnect(Signal0<slotReturnTYPE> *sig)
			{
				if (slots0 == NIL) return Error();

				SlotSignal0<slotReturnTYPE>	 slot(sig);

				for (Int i = slots0->Length() - 1; i >= 0; i--)
				{
					if ((*((SlotBase0<Void> *) slots0->GetNth(i))) == slot)
					{
						RemoveNth0(i);

						break;
					}
				}

				return Success();
			}

// Assembly:
movq 0x18(%rdi), %rax
testq %rax, %rax
je 0x8c842
pushq %rbp
pushq %r14
pushq %rbx
subq $0x10, %rsp
movq %rdi, %rbx
leaq 0xd6301(%rip), %rcx     # 0x162b00
movq %rsp, %r14
movq %rcx, (%r14)
movq %rsi, 0x8(%r14)
movl 0x8(%rax), %ebp
testl %ebp, %ebp
jle 0x8c837
decl %ebp
movq 0x18(%rbx), %rdi
movl %ebp, %esi
callq 0x5b0a4
movq (%rax), %rdi
movq (%rdi), %rax
movq %r14, %rsi
callq *0x20(%rax)
testb %al, %al
je 0x8c80c
movq %rbx, %rdi
movl %ebp, %esi
callq 0x70ef0
xorl %eax, %eax
addq $0x10, %rsp
popq %rbx
popq %r14
popq %rbp
retq
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
retq