// File: yanlinlin82[P]icpp/icpp.cpp
// Function: show()
int show()
{
	if (verbose >= 1) {
		for (size_t i = 0; i < external_code_size;) {
			i = print_code(code_sec, i);
		}
	}
	for (size_t i = 0; i < src.size(); ++i) {
		print_source_code_line(i);
		auto it = offset.find(i + 1);
		if (it != offset.end()) {
			log(COLOR_BLUE);
			for (size_t j = it->second.first; j <= it->second.second;) {
				j = print_code(code_sec, j);
			}
			log(COLOR_NORMAL);
		}
	}
	log("\n");

	for (size_t i = (verbose >= 1 ? 0 : external_data_size); i < data_sec.size(); ++i) {
		auto it = data_symbol_dict.find(i);
		if (it != data_symbol_dict.end()) {
			auto name = it->second;
			auto [ is_code, offset, size, type, ret_type, arg_count ] = symbols[name];
			string data_type = "word";
			if (type == "const char*") data_type = "byte";
			log(COLOR_YELLOW "%-10zd", i);
			log(COLOR_BLUE ".%-13s", data_type.c_str());
			size_t width = 0;
			if (type == "const char*") {
				log("\""); ++width;
				const char* s = reinterpret_cast<const char*>(&data_sec[offset]);
				for (size_t i = 0; i + 1 < size * sizeof(int); ++i) {
					switch (s[i]) {
						default: log("%c", s[i]); ++width; break;
						case '\t': log("\\t"); width += 2; break;
						case '\r': log("\\r"); width += 2; break;
						case '\n': log("\\n"); width += 2; break;
						case '\\': log("\\\\"); width += 2; break;
						case '\'': log("\\\'"); width += 2; break;
						case '\"': log("\\\""); width += 2; break;
						case '\0': log("\\0"); width += 2; break;
					}
				}
				log("\""); ++width;
			} else {
				for (size_t i = 0; i < size; ++i) {
					if (i > 0) { log("  "); width += 2; }
					log("0x%08X", static_cast<unsigned int>(data_sec[offset + i]));
					width += 10;
				}
			}
			if (width > 25) {
				log("\n%*s", (10 + 14 + 25), "");
			} else {
				log("%*s", 25 - width, "");
			}
			log(" ; %s %s" COLOR_NORMAL "\n", type.c_str(), name.c_str());
		}
	}
	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1a0, %rsp            # imm = 0x1A0
cmpl $0x1, 0x3a376(%rip)     # 0x50828
jl 0x164e5
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
cmpq 0x3a0c9(%rip), %rax     # 0x50590
jae 0x164e3
movq -0x8(%rbp), %rsi
leaq 0x3a084(%rip), %rdi     # 0x50558
xorl %eax, %eax
movl %eax, %edx
callq 0x5530
movq %rax, -0x8(%rbp)
jmp 0x164bc
jmp 0x164e5
movq $0x0, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x158(%rbp)
leaq 0x39fb9(%rip), %rdi     # 0x504b8
callq 0x1a730
movq %rax, %rcx
movq -0x158(%rbp), %rax
cmpq %rcx, %rax
jae 0x165e1
movq -0x10(%rbp), %rdi
callq 0x4630
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
leaq 0x3a1cd(%rip), %rdi     # 0x50700
leaq -0x20(%rbp), %rsi
callq 0x1a2a0
movq %rax, -0x18(%rbp)
leaq 0x3a1b9(%rip), %rdi     # 0x50700
callq 0x1a300
movq %rax, -0x28(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x1c840
testb $0x1, %al
jne 0x16563
jmp 0x165ce
leaq 0x20da0(%rip), %rdi     # 0x3730a
movb $0x0, %al
callq 0x19420
leaq -0x18(%rbp), %rdi
callq 0x1a3d0
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movq %rax, -0x160(%rbp)
leaq -0x18(%rbp), %rdi
callq 0x1a3d0
movq %rax, %rcx
movq -0x160(%rbp), %rax
cmpq 0x10(%rcx), %rax
ja 0x165c0
movq -0x30(%rbp), %rsi
leaq 0x39fa7(%rip), %rdi     # 0x50558
xorl %eax, %eax
movl %eax, %edx
callq 0x5530
movq %rax, -0x30(%rbp)
jmp 0x16582
leaq 0x21e3e(%rip), %rdi     # 0x38405
movb $0x0, %al
callq 0x19420
jmp 0x165d0
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
jmp 0x164ed
leaq 0x21c6d(%rip), %rdi     # 0x38255
movb $0x0, %al
callq 0x19420
cmpl $0x1, 0x3a232(%rip)     # 0x50828
jl 0x16603
xorl %eax, %eax
movq %rax, -0x168(%rbp)
jmp 0x16611
movq 0x39f7e(%rip), %rax     # 0x50588
movq %rax, -0x168(%rbp)
movq -0x168(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x170(%rbp)
leaq 0x39f42(%rip), %rdi     # 0x50570
callq 0x19990
movq %rax, %rcx
movq -0x170(%rbp), %rax
cmpq %rcx, %rax
jae 0x16c76
leaq 0x39fd3(%rip), %rdi     # 0x50620
leaq -0x38(%rbp), %rsi
callq 0x1a1e0
movq %rax, -0x40(%rbp)
leaq 0x39fbf(%rip), %rdi     # 0x50620
callq 0x1a240
movq %rax, -0x48(%rbp)
leaq -0x40(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x1a210
testb $0x1, %al
jne 0x16680
jmp 0x16c63
leaq -0x40(%rbp), %rdi
callq 0x1a270
movq %rax, %rsi
addq $0x8, %rsi
leaq -0x68(%rbp), %rdi
movq %rdi, -0x180(%rbp)
callq 0x3120
movq -0x180(%rbp), %rsi
leaq 0x39f3a(%rip), %rdi     # 0x505e8
callq 0x19860
movq %rax, -0x178(%rbp)
jmp 0x166bc
movq -0x178(%rbp), %rsi
leaq -0xc8(%rbp), %rdi
callq 0x1aff0
jmp 0x166d1
leaq -0xc8(%rbp), %rdi
movq %rdi, -0x190(%rbp)
callq 0x1b020
movq -0x190(%rbp), %rdi
movq %rax, -0xe0(%rbp)
callq 0x1b040
movq -0x190(%rbp), %rdi
movq %rax, -0xe8(%rbp)
callq 0x1b060
movq -0x190(%rbp), %rdi
movq %rax, -0xf0(%rbp)
callq 0x1b080
movq -0x190(%rbp), %rdi
movq %rax, -0xf8(%rbp)
callq 0x1b0a0
movq -0x190(%rbp), %rdi
movq %rax, -0x100(%rbp)
callq 0x1b0c0
movq %rax, -0x108(%rbp)
leaq -0x129(%rbp), %rdi
movq %rdi, -0x188(%rbp)
callq 0x3470
movq -0x188(%rbp), %rdx
leaq 0x218a8(%rip), %rsi     # 0x38013
leaq -0x128(%rbp), %rdi
callq 0x199b0
jmp 0x16779
leaq -0x129(%rbp), %rdi
callq 0x32b0
movq -0xf8(%rbp), %rdi
leaq 0x216ac(%rip), %rsi     # 0x37e3f
callq 0x1a9c0
movb %al, -0x191(%rbp)
jmp 0x167a0
movb -0x191(%rbp), %al
testb $0x1, %al
jne 0x167ac
jmp 0x16820
leaq 0x21865(%rip), %rsi     # 0x38018
leaq -0x128(%rbp), %rdi
callq 0x3370
jmp 0x167c1
jmp 0x16820
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
jmp 0x16c58
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
leaq -0x129(%rbp), %rdi
callq 0x32b0
jmp 0x16c4c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xd0(%rbp)
movl %eax, -0xd4(%rbp)
leaq -0x128(%rbp), %rdi
callq 0x34d8
jmp 0x16c4c
movq -0x38(%rbp), %rsi
leaq 0x217f2(%rip), %rdi     # 0x3801d
xorl %eax, %eax
callq 0x19420
jmp 0x16834
leaq -0x128(%rbp), %rdi
callq 0x3110
movq %rax, %rsi
leaq 0x217df(%rip), %rdi     # 0x38029
xorl %eax, %eax
callq 0x19420
jmp 0x16853
movq $0x0, -0x138(%rbp)
movq -0xf8(%rbp), %rdi
leaq 0x215d3(%rip), %rsi     # 0x37e3f
callq 0x1a9c0
movb %al, -0x192(%rbp)
jmp 0x16879
movb -0x192(%rbp), %al
testb $0x1, %al
jne 0x16888
jmp 0x16af8
leaq 0x20e81(%rip), %rdi     # 0x37710
xorl %eax, %eax
callq 0x19420
jmp 0x16898
movq -0x138(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x138(%rbp)
movq -0xe8(%rbp), %rax
movq (%rax), %rsi
leaq 0x39cb5(%rip), %rdi     # 0x50570
callq 0x19cf0
movq %rax, -0x140(%rbp)
movq $0x0, -0x148(%rbp)
movq -0x148(%rbp), %rax
addq $0x1, %rax
movq -0xf0(%rbp), %rcx
movq (%rcx), %rcx
shlq $0x2, %rcx
cmpq %rcx, %rax
jae 0x16ad1
movq -0x140(%rbp), %rax
movq -0x148(%rbp), %rcx
movsbl (%rax,%rcx), %eax
movl %eax, -0x198(%rbp)
testl %eax, %eax
je 0x16a96
jmp 0x16916
movl -0x198(%rbp), %eax
subl $0x9, %eax
je 0x169b5
jmp 0x16927
movl -0x198(%rbp), %eax
subl $0xa, %eax
je 0x16a03
jmp 0x16938
movl -0x198(%rbp), %eax
subl $0xd, %eax
je 0x169dc
jmp 0x16949
movl -0x198(%rbp), %eax
subl $0x22, %eax
je 0x16a72
jmp 0x1695a
movl -0x198(%rbp), %eax
subl $0x27, %eax
je 0x16a4e
jmp 0x1696b
movl -0x198(%rbp), %eax
subl $0x5c, %eax
je 0x16a2a
jmp 0x1697c
movq -0x140(%rbp), %rax
movq -0x148(%rbp), %rcx
movsbl (%rax,%rcx), %esi
leaq 0x20824(%rip), %rdi     # 0x371b9
xorl %eax, %eax
callq 0x19420
jmp 0x1699e
movq -0x138(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x138(%rbp)
jmp 0x16ab8
leaq 0x21679(%rip), %rdi     # 0x38035
xorl %eax, %eax
callq 0x19420
jmp 0x169c5
movq -0x138(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x138(%rbp)
jmp 0x16ab8
leaq 0x21655(%rip), %rdi     # 0x38038
xorl %eax, %eax
callq 0x19420
jmp 0x169ec
movq -0x138(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x138(%rbp)
jmp 0x16ab8
leaq 0x21631(%rip), %rdi     # 0x3803b
xorl %eax, %eax
callq 0x19420
jmp 0x16a13
movq -0x138(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x138(%rbp)
jmp 0x16ab8
leaq 0x2160d(%rip), %rdi     # 0x3803e
xorl %eax, %eax
callq 0x19420
jmp 0x16a3a
movq -0x138(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x138(%rbp)
jmp 0x16ab8
leaq 0x215ec(%rip), %rdi     # 0x38041
xorl %eax, %eax
callq 0x19420
jmp 0x16a5e
movq -0x138(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x138(%rbp)
jmp 0x16ab8
leaq 0x215cb(%rip), %rdi     # 0x38044
xorl %eax, %eax
callq 0x19420
jmp 0x16a82
movq -0x138(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x138(%rbp)
jmp 0x16ab8
leaq 0x215aa(%rip), %rdi     # 0x38047
xorl %eax, %eax
callq 0x19420
jmp 0x16aa6
movq -0x138(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x138(%rbp)
jmp 0x16aba
movq -0x148(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x148(%rbp)
jmp 0x168d2
leaq 0x20c38(%rip), %rdi     # 0x37710
xorl %eax, %eax
callq 0x19420
jmp 0x16ae1
movq -0x138(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x138(%rbp)
jmp 0x16ba3
movq $0x0, -0x150(%rbp)
movq -0x150(%rbp), %rax
movq -0xf0(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x16ba1
cmpq $0x0, -0x150(%rbp)
jbe 0x16b46
leaq 0x20694(%rip), %rdi     # 0x371bf
xorl %eax, %eax
callq 0x19420
jmp 0x16b34
movq -0x138(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x138(%rbp)
movq -0xe8(%rbp), %rax
movq (%rax), %rsi
movq -0x150(%rbp), %rax
addq %rax, %rsi
leaq 0x39a0f(%rip), %rdi     # 0x50570
callq 0x19cf0
movl (%rax), %esi
leaq 0x214db(%rip), %rdi     # 0x3804a
xorl %eax, %eax
callq 0x19420
jmp 0x16b78
movq -0x138(%rbp), %rax
addq $0xa, %rax
movq %rax, -0x138(%rbp)
movq -0x150(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x150(%rbp)
jmp 0x16b03
jmp 0x16ba3
cmpq $0x19, -0x138(%rbp)
jbe 0x16bcb
leaq 0x2149d(%rip), %rdi     # 0x38051
leaq 0x21809(%rip), %rdx     # 0x383c4
xorl %eax, %eax
movl $0x31, %esi
callq 0x19420
jmp 0x16bc9
jmp 0x16bf3
movq -0x138(%rbp), %rax
movl $0x19, %esi
subq %rax, %rsi
leaq 0x21471(%rip), %rdi     # 0x38052
leaq 0x217dc(%rip), %rdx     # 0x383c4
xorl %eax, %eax
callq 0x19420
jmp 0x16bf1
jmp 0x16bf3
movq -0xf8(%rbp), %rdi
callq 0x3110
movq %rax, -0x1a0(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x3110
movq -0x1a0(%rbp), %rsi
movq %rax, %rdx
leaq 0x21436(%rip), %rdi     # 0x38056
xorl %eax, %eax
callq 0x19420
jmp 0x16c29
leaq -0x128(%rbp), %rdi
callq 0x34d8
leaq -0xc8(%rbp), %rdi
callq 0x198d0
leaq -0x68(%rbp), %rdi
callq 0x34d8
jmp 0x16c63
leaq -0xc8(%rbp), %rdi
callq 0x198d0
leaq -0x68(%rbp), %rdi
callq 0x34d8
jmp 0x16c81
jmp 0x16c65
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x1661c
xorl %eax, %eax
addq $0x1a0, %rsp            # imm = 0x1A0
popq %rbp
retq
movq -0xd0(%rbp), %rdi
callq 0x3460
nopl (%rax)