// File: /workspace/github_cpp_makefile_star2_O3/t0mm4rx[P]piscine_cpp/day05/ex02/main.cpp
// Function: main
int main(void)
{
	Bureaucrat				john("John", 4);
	Bureaucrat				johnson("Johnson", 140);
	ShrubberyCreationForm	form1("tree");
	RobotomyRequestForm		form2("Micheal");
	PresidentialPardonForm	form3("Johson");

	johnson.signForm(form1);
	johnson.executeForm(form1);
	john.executeForm(form1);
	john.executeForm(form2);
	john.signForm(form2);
	john.executeForm(form2);
	johnson.signForm(form3);
	john.executeForm(form3);
	john.signForm(form3);
	john.executeForm(form3);
	return (0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r14
pushq %rbx
subq $0x200, %rsp            # imm = 0x200
leaq -0xc8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x80f(%rip), %rsi       # 0x441f
leaq 0x80c(%rip), %rdx       # 0x4423
leaq -0xd8(%rbp), %rbx
movq %rbx, %rdi
callq 0x32cc
leaq -0x38(%rbp), %rdi
movq %rbx, %rsi
movl $0x4, %edx
callq 0x247c
movq -0xd8(%rbp), %rdi
cmpq %r14, %rdi
je 0x3c52
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0xa8(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x7c0(%rip), %rsi       # 0x4424
leaq 0x7c0(%rip), %rdx       # 0x442b
leaq -0xb8(%rbp), %rdi
callq 0x32cc
leaq -0x100(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
movl $0x8c, %edx
callq 0x247c
movq -0xb8(%rbp), %rdi
cmpq %r14, %rdi
je 0x3caa
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0x88(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x770(%rip), %rsi       # 0x442c
leaq 0x76d(%rip), %rdx       # 0x4430
leaq -0x98(%rbp), %rdi
callq 0x32cc
leaq -0x208(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x3728
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x3cfd
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0x68(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x725(%rip), %rsi       # 0x4431
leaq 0x725(%rip), %rdx       # 0x4438
leaq -0x78(%rbp), %rdi
callq 0x32cc
leaq -0x1b0(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x336c
movq -0x78(%rbp), %rdi
cmpq %r14, %rdi
je 0x3d41
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0x48(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0x6e9(%rip), %rsi       # 0x4439
leaq 0x6e8(%rip), %rdx       # 0x443f
leaq -0x58(%rbp), %rdi
callq 0x32cc
leaq -0x158(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x2f54
movq -0x58(%rbp), %rdi
cmpq %r14, %rdi
je 0x3d85
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x2100
leaq -0x100(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x25de
leaq -0x100(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x270a
leaq -0x38(%rbp), %rdi
leaq -0x208(%rbp), %rsi
callq 0x270a
leaq -0x38(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x270a
leaq -0x38(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x25de
leaq -0x38(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x270a
leaq -0x100(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x25de
leaq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x270a
leaq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x25de
leaq -0x38(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0x270a
leaq -0x158(%rbp), %rdi
callq 0x31b6
leaq -0x1b0(%rbp), %rdi
callq 0x35ce
leaq -0x208(%rbp), %rdi
callq 0x398a
leaq -0x100(%rbp), %rdi
callq 0x2570
leaq -0x38(%rbp), %rdi
callq 0x2570
xorl %eax, %eax
addq $0x200, %rsp            # imm = 0x200
popq %rbx
popq %r14
popq %rbp
retq
movq %rax, %rbx
movq -0x58(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f44
movq -0x48(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f44
movq %rax, %rbx
jmp 0x3f44
movq %rax, %rbx
movq -0x78(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f50
movq -0x68(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f50
movq %rax, %rbx
jmp 0x3f50
movq %rax, %rbx
movq -0x98(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f5c
movq -0x88(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f5c
movq %rax, %rbx
jmp 0x3f5c
movq %rax, %rbx
movq -0xb8(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f68
movq -0xa8(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f68
movq %rax, %rbx
jmp 0x3f68
movq %rax, %rbx
movq -0xd8(%rbp), %rdi
cmpq %r14, %rdi
je 0x3f71
movq -0xc8(%rbp), %rsi
incq %rsi
callq 0x2100
jmp 0x3f71
movq %rax, %rbx
leaq -0x158(%rbp), %rdi
callq 0x31b6
leaq -0x1b0(%rbp), %rdi
callq 0x35ce
leaq -0x208(%rbp), %rdi
callq 0x398a
leaq -0x100(%rbp), %rdi
callq 0x2570
leaq -0x38(%rbp), %rdi
callq 0x2570
movq %rbx, %rdi
callq 0x2190