// File: volodymyr-kryvoshapov[P]arduino-lcd-menu/src/main.cpp
// Function: main
int main() {
	menu.addRootMenu("root menu")

	.addNode("node 1")
		.addChild("child 1.1")
		.addChild("child 1.2")
		.addChild("child 1.3")
	.done()

	.addNode("node 2")
		.addChild("child 2.1")

		.addNode("node 2.2")
			.addChild("child 2.2.1")
			.addChild("child 2.2.2")
			.addChild("child 2.2.3")
		.done()

		.addChild("child 2.3")

		.addNode("node 2.4")
			.addChild("child 2.4.1")
			.addChild("child 2.4.2")
			.addChild("child 2.4.3")
		.done()

		.addChild("child 2.5")
	.done()

	.addChild("child 3")
	.addChild("child 4");

//	cout << "sizeof(menu): " << sizeof( menu.getMenu() ) << endl;
//	cout << "sizeof(children): " << sizeof( menu.getMenu().getChildren() ) << endl;
//	cout << "menuNodeNum: "<< menu.getMenu().getChildrenNum() << endl;
//	cout << "menuNodeNum: "<< menu.getMenu().getChildren()[1]->getChildrenNum() << endl;

	std::cout << "Hi Man! Welcome to the show!" << endl;

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x460, %rsp            # imm = 0x460
movl $0x0, -0x4(%rbp)
leaq -0x29(%rbp), %rdi
movq %rdi, -0x318(%rbp)
callq 0x21e0
movq -0x318(%rbp), %rdx
leaq 0x2b72(%rip), %rsi      # 0x5012
leaq -0x28(%rbp), %rdi
callq 0x3080
jmp 0x24ab
leaq 0x5c7e(%rip), %rdi      # 0x8130
leaq -0x28(%rbp), %rsi
callq 0x23e0
movq %rax, -0x320(%rbp)
jmp 0x24c4
leaq -0x61(%rbp), %rdi
movq %rdi, -0x328(%rbp)
callq 0x21e0
movq -0x328(%rbp), %rdx
leaq 0x2b3a(%rip), %rsi      # 0x501c
leaq -0x60(%rbp), %rdi
callq 0x3080
jmp 0x24ed
movq -0x320(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x3570
movq %rax, -0x330(%rbp)
jmp 0x2506
leaq -0x89(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x21e0
movq -0x338(%rbp), %rdx
leaq 0x2afc(%rip), %rsi      # 0x5023
leaq -0x88(%rbp), %rdi
callq 0x3080
jmp 0x2535
movq -0x330(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x3600
movq %rax, -0x340(%rbp)
jmp 0x2551
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x348(%rbp)
callq 0x21e0
movq -0x348(%rbp), %rdx
leaq 0x2abb(%rip), %rsi      # 0x502d
leaq -0xb0(%rbp), %rdi
callq 0x3080
jmp 0x2580
movq -0x340(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x3600
movq %rax, -0x350(%rbp)
jmp 0x259c
leaq -0xd9(%rbp), %rdi
movq %rdi, -0x358(%rbp)
callq 0x21e0
movq -0x358(%rbp), %rdx
leaq 0x2a7a(%rip), %rsi      # 0x5037
leaq -0xd8(%rbp), %rdi
callq 0x3080
jmp 0x25cb
movq -0x350(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x3600
movq %rax, -0x360(%rbp)
jmp 0x25e7
movq -0x360(%rbp), %rdi
callq 0x3690
movq %rax, -0x368(%rbp)
jmp 0x25fc
leaq -0x101(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0x21e0
movq -0x370(%rbp), %rdx
leaq 0x2a24(%rip), %rsi      # 0x5041
leaq -0x100(%rbp), %rdi
callq 0x3080
jmp 0x262b
movq -0x368(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x3570
movq %rax, -0x378(%rbp)
jmp 0x2647
leaq -0x129(%rbp), %rdi
movq %rdi, -0x380(%rbp)
callq 0x21e0
movq -0x380(%rbp), %rdx
leaq 0x29e0(%rip), %rsi      # 0x5048
leaq -0x128(%rbp), %rdi
callq 0x3080
jmp 0x2676
movq -0x378(%rbp), %rdi
leaq -0x128(%rbp), %rsi
callq 0x3600
movq %rax, -0x388(%rbp)
jmp 0x2692
leaq -0x151(%rbp), %rdi
movq %rdi, -0x390(%rbp)
callq 0x21e0
movq -0x390(%rbp), %rdx
leaq 0x299f(%rip), %rsi      # 0x5052
leaq -0x150(%rbp), %rdi
callq 0x3080
jmp 0x26c1
movq -0x388(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0x3570
movq %rax, -0x398(%rbp)
jmp 0x26dd
leaq -0x179(%rbp), %rdi
movq %rdi, -0x3a0(%rbp)
callq 0x21e0
movq -0x3a0(%rbp), %rdx
leaq 0x295d(%rip), %rsi      # 0x505b
leaq -0x178(%rbp), %rdi
callq 0x3080
jmp 0x270c
movq -0x398(%rbp), %rdi
leaq -0x178(%rbp), %rsi
callq 0x3600
movq %rax, -0x3a8(%rbp)
jmp 0x2728
leaq -0x1a1(%rbp), %rdi
movq %rdi, -0x3b0(%rbp)
callq 0x21e0
movq -0x3b0(%rbp), %rdx
leaq 0x291e(%rip), %rsi      # 0x5067
leaq -0x1a0(%rbp), %rdi
callq 0x3080
jmp 0x2757
movq -0x3a8(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
callq 0x3600
movq %rax, -0x3b8(%rbp)
jmp 0x2773
leaq -0x1c9(%rbp), %rdi
movq %rdi, -0x3c0(%rbp)
callq 0x21e0
movq -0x3c0(%rbp), %rdx
leaq 0x28df(%rip), %rsi      # 0x5073
leaq -0x1c8(%rbp), %rdi
callq 0x3080
jmp 0x27a2
movq -0x3b8(%rbp), %rdi
leaq -0x1c8(%rbp), %rsi
callq 0x3600
movq %rax, -0x3c8(%rbp)
jmp 0x27be
movq -0x3c8(%rbp), %rdi
callq 0x3690
movq %rax, -0x3d0(%rbp)
jmp 0x27d3
leaq -0x1f1(%rbp), %rdi
movq %rdi, -0x3d8(%rbp)
callq 0x21e0
movq -0x3d8(%rbp), %rdx
leaq 0x288b(%rip), %rsi      # 0x507f
leaq -0x1f0(%rbp), %rdi
callq 0x3080
jmp 0x2802
movq -0x3d0(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x3600
movq %rax, -0x3e0(%rbp)
jmp 0x281e
leaq -0x219(%rbp), %rdi
movq %rdi, -0x3e8(%rbp)
callq 0x21e0
movq -0x3e8(%rbp), %rdx
leaq 0x284a(%rip), %rsi      # 0x5089
leaq -0x218(%rbp), %rdi
callq 0x3080
jmp 0x284d
movq -0x3e0(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x3570
movq %rax, -0x3f0(%rbp)
jmp 0x2869
leaq -0x241(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
callq 0x21e0
movq -0x3f8(%rbp), %rdx
leaq 0x2808(%rip), %rsi      # 0x5092
leaq -0x240(%rbp), %rdi
callq 0x3080
jmp 0x2898
movq -0x3f0(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x3600
movq %rax, -0x400(%rbp)
jmp 0x28b4
leaq -0x269(%rbp), %rdi
movq %rdi, -0x408(%rbp)
callq 0x21e0
movq -0x408(%rbp), %rdx
leaq 0x27c9(%rip), %rsi      # 0x509e
leaq -0x268(%rbp), %rdi
callq 0x3080
jmp 0x28e3
movq -0x400(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x3600
movq %rax, -0x410(%rbp)
jmp 0x28ff
leaq -0x291(%rbp), %rdi
movq %rdi, -0x418(%rbp)
callq 0x21e0
movq -0x418(%rbp), %rdx
leaq 0x278a(%rip), %rsi      # 0x50aa
leaq -0x290(%rbp), %rdi
callq 0x3080
jmp 0x292e
movq -0x410(%rbp), %rdi
leaq -0x290(%rbp), %rsi
callq 0x3600
movq %rax, -0x420(%rbp)
jmp 0x294a
movq -0x420(%rbp), %rdi
callq 0x3690
movq %rax, -0x428(%rbp)
jmp 0x295f
leaq -0x2b9(%rbp), %rdi
movq %rdi, -0x430(%rbp)
callq 0x21e0
movq -0x430(%rbp), %rdx
leaq 0x2736(%rip), %rsi      # 0x50b6
leaq -0x2b8(%rbp), %rdi
callq 0x3080
jmp 0x298e
movq -0x428(%rbp), %rdi
leaq -0x2b8(%rbp), %rsi
callq 0x3600
movq %rax, -0x438(%rbp)
jmp 0x29aa
movq -0x438(%rbp), %rdi
callq 0x3690
movq %rax, -0x440(%rbp)
jmp 0x29bf
leaq -0x2e1(%rbp), %rdi
movq %rdi, -0x448(%rbp)
callq 0x21e0
movq -0x448(%rbp), %rdx
leaq 0x26e0(%rip), %rsi      # 0x50c0
leaq -0x2e0(%rbp), %rdi
callq 0x3080
jmp 0x29ee
movq -0x440(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
callq 0x3600
movq %rax, -0x450(%rbp)
jmp 0x2a0a
leaq -0x309(%rbp), %rdi
movq %rdi, -0x458(%rbp)
callq 0x21e0
movq -0x458(%rbp), %rdx
leaq 0x269d(%rip), %rsi      # 0x50c8
leaq -0x308(%rbp), %rdi
callq 0x3080
jmp 0x2a39
movq -0x450(%rbp), %rdi
leaq -0x308(%rbp), %rsi
callq 0x3600
jmp 0x2a4e
leaq -0x308(%rbp), %rdi
callq 0x2090
leaq -0x309(%rbp), %rdi
callq 0x2150
leaq -0x2e0(%rbp), %rdi
callq 0x2090
leaq -0x2e1(%rbp), %rdi
callq 0x2150
leaq -0x2b8(%rbp), %rdi
callq 0x2090
leaq -0x2b9(%rbp), %rdi
callq 0x2150
leaq -0x290(%rbp), %rdi
callq 0x2090
leaq -0x291(%rbp), %rdi
callq 0x2150
leaq -0x268(%rbp), %rdi
callq 0x2090
leaq -0x269(%rbp), %rdi
callq 0x2150
leaq -0x240(%rbp), %rdi
callq 0x2090
leaq -0x241(%rbp), %rdi
callq 0x2150
leaq -0x218(%rbp), %rdi
callq 0x2090
leaq -0x219(%rbp), %rdi
callq 0x2150
leaq -0x1f0(%rbp), %rdi
callq 0x2090
leaq -0x1f1(%rbp), %rdi
callq 0x2150
leaq -0x1c8(%rbp), %rdi
callq 0x2090
leaq -0x1c9(%rbp), %rdi
callq 0x2150
leaq -0x1a0(%rbp), %rdi
callq 0x2090
leaq -0x1a1(%rbp), %rdi
callq 0x2150
leaq -0x178(%rbp), %rdi
callq 0x2090
leaq -0x179(%rbp), %rdi
callq 0x2150
leaq -0x150(%rbp), %rdi
callq 0x2090
leaq -0x151(%rbp), %rdi
callq 0x2150
leaq -0x128(%rbp), %rdi
callq 0x2090
leaq -0x129(%rbp), %rdi
callq 0x2150
leaq -0x100(%rbp), %rdi
callq 0x2090
leaq -0x101(%rbp), %rdi
callq 0x2150
leaq -0xd8(%rbp), %rdi
callq 0x2090
leaq -0xd9(%rbp), %rdi
callq 0x2150
leaq -0xb0(%rbp), %rdi
callq 0x2090
leaq -0xb1(%rbp), %rdi
callq 0x2150
leaq -0x88(%rbp), %rdi
callq 0x2090
leaq -0x89(%rbp), %rdi
callq 0x2150
leaq -0x60(%rbp), %rdi
callq 0x2090
leaq -0x61(%rbp), %rdi
callq 0x2150
leaq -0x28(%rbp), %rdi
callq 0x2090
leaq -0x29(%rbp), %rdi
callq 0x2150
movq 0x53c7(%rip), %rdi      # 0x7fd8
leaq 0x24b8(%rip), %rsi      # 0x50d0
callq 0x2100
movq %rax, %rdi
movq 0x53a1(%rip), %rsi      # 0x7fc8
callq 0x2130
xorl %eax, %eax
addq $0x460, %rsp            # imm = 0x460
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x305f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x3056
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x304d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x3044
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x3038
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x302c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x3020
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x3014
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x3008
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2ffc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2ff0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2fe4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2fd8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2fcc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2fc0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2fb4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2fa8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f9c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f90
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f6c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f60
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f54
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f48
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f3c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f30
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f24
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f18
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f0c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2f00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2ef4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2ee8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2edc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2ed0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2ec4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x2eb8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x308(%rbp), %rdi
callq 0x2090
leaq -0x309(%rbp), %rdi
callq 0x2150
leaq -0x2e0(%rbp), %rdi
callq 0x2090
leaq -0x2e1(%rbp), %rdi
callq 0x2150
leaq -0x2b8(%rbp), %rdi
callq 0x2090
leaq -0x2b9(%rbp), %rdi
callq 0x2150
leaq -0x290(%rbp), %rdi
callq 0x2090
leaq -0x291(%rbp), %rdi
callq 0x2150
leaq -0x268(%rbp), %rdi
callq 0x2090
leaq -0x269(%rbp), %rdi
callq 0x2150
leaq -0x240(%rbp), %rdi
callq 0x2090
leaq -0x241(%rbp), %rdi
callq 0x2150
leaq -0x218(%rbp), %rdi
callq 0x2090
leaq -0x219(%rbp), %rdi
callq 0x2150
leaq -0x1f0(%rbp), %rdi
callq 0x2090
leaq -0x1f1(%rbp), %rdi
callq 0x2150
leaq -0x1c8(%rbp), %rdi
callq 0x2090
leaq -0x1c9(%rbp), %rdi
callq 0x2150
leaq -0x1a0(%rbp), %rdi
callq 0x2090
leaq -0x1a1(%rbp), %rdi
callq 0x2150
leaq -0x178(%rbp), %rdi
callq 0x2090
leaq -0x179(%rbp), %rdi
callq 0x2150
leaq -0x150(%rbp), %rdi
callq 0x2090
leaq -0x151(%rbp), %rdi
callq 0x2150
leaq -0x128(%rbp), %rdi
callq 0x2090
leaq -0x129(%rbp), %rdi
callq 0x2150
leaq -0x100(%rbp), %rdi
callq 0x2090
leaq -0x101(%rbp), %rdi
callq 0x2150
leaq -0xd8(%rbp), %rdi
callq 0x2090
leaq -0xd9(%rbp), %rdi
callq 0x2150
leaq -0xb0(%rbp), %rdi
callq 0x2090
leaq -0xb1(%rbp), %rdi
callq 0x2150
leaq -0x88(%rbp), %rdi
callq 0x2090
leaq -0x89(%rbp), %rdi
callq 0x2150
leaq -0x60(%rbp), %rdi
callq 0x2090
leaq -0x61(%rbp), %rdi
callq 0x2150
leaq -0x28(%rbp), %rdi
callq 0x2090
leaq -0x29(%rbp), %rdi
callq 0x2150
movq -0x38(%rbp), %rdi
callq 0x21d0
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)