// File: iZhangHui[P]CppPrimer/CH16_TemplatesAndGenericProgramming/examples/useChcking.cc
// Function: main
int main()
{
	vector<int> v1(3, 43), v2(10);
	Blob<int> a1(v1.begin(), v1.end()),
	          a2 = {0,1,2,3,4,5,6,7,8,9},
	          a3(v2.begin(), v2.end());

	cout << a1 << "\n\n" << a2 << "\n\n" << a3 << endl;

	cout << "\ncopy" << "\n\n";
	Blob<int> a5(a1);
	cout << a5 << endl;

	cout << "\nassignment" << "\n\n";

	a1 = a3;
	cout << a1 << "\n\n" << a2 << "\n\n" << a3 << endl;

	cout << "\nelement assignment" << "\n\n";
	a1[0] = 42;
	a1[a1.size() - 1] = 15;
	cout << a1 << "\n\n" << a3 << endl;

	Blob<string> s1 = {"hi", "bye", "now"};
	BlobPtr<string> p(s1);    // p points to the vector inside s1
	*p = "okay";                 // assigns to the first element in s1
	cout << p->size() << endl;   // prints 4, the size of the first element in s1
	cout << (*p).size() << endl; // equivalent to p->size()

	Blob<string> s2{"one", "two", "three"};
	// run the string empty function in the first element in s2
	if (s2[0].empty())
	    s2[0] = "empty"; // assign a new value to the first string in s2

	cout << a1 << endl;
	cout << a2 << endl;
	a2.swap(a1);
	cout << a1 << endl;
	cout << a2 << endl;

	return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x570, %rsp            # imm = 0x570
movl $0x0, -0x4(%rbp)
movl $0x2b, -0x24(%rbp)
leaq -0x25(%rbp), %rdi
movq %rdi, -0x300(%rbp)
callq 0x33b0
movq -0x300(%rbp), %rcx
leaq -0x20(%rbp), %rdi
movl $0x3, %esi
leaq -0x24(%rbp), %rdx
callq 0x33d0
jmp 0x23a4
leaq -0x25(%rbp), %rdi
callq 0x3450
leaq -0x51(%rbp), %rdi
movq %rdi, -0x308(%rbp)
callq 0x33b0
movq -0x308(%rbp), %rdx
leaq -0x50(%rbp), %rdi
movl $0xa, %esi
callq 0x3470
jmp 0x23d4
leaq -0x51(%rbp), %rdi
callq 0x3450
leaq -0x20(%rbp), %rdi
movq %rdi, -0x310(%rbp)
callq 0x34e0
movq -0x310(%rbp), %rdi
movq %rax, -0x70(%rbp)
callq 0x3510
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rsi
movq -0x78(%rbp), %rdx
leaq -0x68(%rbp), %rdi
callq 0x3540
jmp 0x2414
movups 0x5bf9(%rip), %xmm0     # 0x8014
movaps %xmm0, -0xb0(%rbp)
movups 0x5bdb(%rip), %xmm0     # 0x8004
movaps %xmm0, -0xc0(%rbp)
movabsq $0x900000008, %rax      # imm = 0x900000008
movq %rax, -0xa0(%rbp)
leaq -0xc0(%rbp), %rax
movq %rax, -0x98(%rbp)
movq $0xa, -0x90(%rbp)
movq -0x98(%rbp), %rsi
movq -0x90(%rbp), %rdx
leaq -0x88(%rbp), %rdi
callq 0x3570
jmp 0x2476
leaq -0x50(%rbp), %rdi
movq %rdi, -0x318(%rbp)
callq 0x34e0
movq -0x318(%rbp), %rdi
movq %rax, -0xd8(%rbp)
callq 0x3510
movq %rax, -0xe0(%rbp)
movq -0xd8(%rbp), %rsi
movq -0xe0(%rbp), %rdx
leaq -0xd0(%rbp), %rdi
callq 0x3540
jmp 0x24bc
leaq -0xf0(%rbp), %rdi
movq %rdi, -0x328(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x3640
movq -0x328(%rbp), %rsi
movq 0xaadf(%rip), %rdi      # 0xcfc0
callq 0x35a0
movq %rax, -0x320(%rbp)
jmp 0x24ef
movq -0x320(%rbp), %rdi
leaq 0x5b2f(%rip), %rsi      # 0x802c
callq 0x2100
movq %rax, -0x330(%rbp)
jmp 0x250b
leaq -0x100(%rbp), %rdi
movq %rdi, -0x340(%rbp)
leaq -0x88(%rbp), %rsi
callq 0x3640
movq -0x330(%rbp), %rdi
movq -0x340(%rbp), %rsi
callq 0x35a0
movq %rax, -0x338(%rbp)
jmp 0x2541
movq -0x338(%rbp), %rdi
leaq 0x5add(%rip), %rsi      # 0x802c
callq 0x2100
movq %rax, -0x348(%rbp)
jmp 0x255d
leaq -0x110(%rbp), %rdi
movq %rdi, -0x358(%rbp)
leaq -0xd0(%rbp), %rsi
callq 0x3640
movq -0x348(%rbp), %rdi
movq -0x358(%rbp), %rsi
callq 0x35a0
movq %rax, -0x350(%rbp)
jmp 0x2593
movq -0x350(%rbp), %rdi
movq 0xa9ff(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x25a8
leaq -0x110(%rbp), %rdi
callq 0x3670
leaq -0x100(%rbp), %rdi
callq 0x3670
leaq -0xf0(%rbp), %rdi
callq 0x3670
movq 0xa9ed(%rip), %rdi      # 0xcfc0
leaq 0x5a55(%rip), %rsi      # 0x802f
callq 0x2100
movq %rax, -0x360(%rbp)
jmp 0x25e8
movq -0x360(%rbp), %rdi
leaq 0x5a36(%rip), %rsi      # 0x802c
callq 0x2100
jmp 0x25fd
leaq -0x120(%rbp), %rdi
movq %rdi, -0x378(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x3640
movq -0x378(%rbp), %rsi
leaq -0x130(%rbp), %rdi
movq %rdi, -0x370(%rbp)
callq 0x3640
movq -0x370(%rbp), %rsi
movq 0xa984(%rip), %rdi      # 0xcfc0
callq 0x35a0
movq %rax, -0x368(%rbp)
jmp 0x264a
movq -0x368(%rbp), %rdi
movq 0xa948(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x265f
leaq -0x130(%rbp), %rdi
callq 0x3670
movq 0xa94e(%rip), %rdi      # 0xcfc0
leaq 0x59bc(%rip), %rsi      # 0x8035
callq 0x2100
movq %rax, -0x380(%rbp)
jmp 0x2687
movq -0x380(%rbp), %rdi
leaq 0x5997(%rip), %rsi      # 0x802c
callq 0x2100
jmp 0x269c
leaq -0x68(%rbp), %rdi
movq %rdi, -0x398(%rbp)
leaq -0xd0(%rbp), %rsi
callq 0x3690
movq -0x398(%rbp), %rsi
leaq -0x140(%rbp), %rdi
movq %rdi, -0x390(%rbp)
callq 0x3640
movq -0x390(%rbp), %rsi
movq 0xa8e5(%rip), %rdi      # 0xcfc0
callq 0x35a0
movq %rax, -0x388(%rbp)
jmp 0x26e9
movq -0x388(%rbp), %rdi
leaq 0x5935(%rip), %rsi      # 0x802c
callq 0x2100
movq %rax, -0x3a0(%rbp)
jmp 0x2705
leaq -0x150(%rbp), %rdi
movq %rdi, -0x3b0(%rbp)
leaq -0x88(%rbp), %rsi
callq 0x3640
movq -0x3a0(%rbp), %rdi
movq -0x3b0(%rbp), %rsi
callq 0x35a0
movq %rax, -0x3a8(%rbp)
jmp 0x273b
movq -0x3a8(%rbp), %rdi
leaq 0x58e3(%rip), %rsi      # 0x802c
callq 0x2100
movq %rax, -0x3b8(%rbp)
jmp 0x2757
leaq -0x160(%rbp), %rdi
movq %rdi, -0x3c8(%rbp)
leaq -0xd0(%rbp), %rsi
callq 0x3640
movq -0x3b8(%rbp), %rdi
movq -0x3c8(%rbp), %rsi
callq 0x35a0
movq %rax, -0x3c0(%rbp)
jmp 0x278d
movq -0x3c0(%rbp), %rdi
movq 0xa805(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x27a2
leaq -0x160(%rbp), %rdi
callq 0x3670
leaq -0x150(%rbp), %rdi
callq 0x3670
leaq -0x140(%rbp), %rdi
callq 0x3670
movq 0xa7f3(%rip), %rdi      # 0xcfc0
leaq 0x586d(%rip), %rsi      # 0x8041
callq 0x2100
movq %rax, -0x3d0(%rbp)
jmp 0x27e2
movq -0x3d0(%rbp), %rdi
leaq 0x583c(%rip), %rsi      # 0x802c
callq 0x2100
jmp 0x27f7
xorl %eax, %eax
movl %eax, %esi
leaq -0x68(%rbp), %rdi
callq 0x36c0
movq %rax, -0x3d8(%rbp)
jmp 0x280d
movq -0x3d8(%rbp), %rax
movl $0x2a, (%rax)
leaq -0x68(%rbp), %rdi
callq 0x3780
movq %rax, -0x3e0(%rbp)
jmp 0x282c
movq -0x3e0(%rbp), %rsi
decq %rsi
leaq -0x68(%rbp), %rdi
callq 0x36c0
movq %rax, -0x3e8(%rbp)
jmp 0x2848
movq -0x3e8(%rbp), %rax
movl $0xf, (%rax)
leaq -0x170(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x3640
movq -0x3f8(%rbp), %rsi
movq 0xa746(%rip), %rdi      # 0xcfc0
callq 0x35a0
movq %rax, -0x3f0(%rbp)
jmp 0x2888
movq -0x3f0(%rbp), %rdi
leaq 0x5796(%rip), %rsi      # 0x802c
callq 0x2100
movq %rax, -0x400(%rbp)
jmp 0x28a4
leaq -0x180(%rbp), %rdi
movq %rdi, -0x410(%rbp)
leaq -0xd0(%rbp), %rsi
callq 0x3640
movq -0x400(%rbp), %rdi
movq -0x410(%rbp), %rsi
callq 0x35a0
movq %rax, -0x408(%rbp)
jmp 0x28da
movq -0x408(%rbp), %rdi
movq 0xa6b8(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x28ef
leaq -0x180(%rbp), %rdi
callq 0x3670
leaq -0x170(%rbp), %rdi
callq 0x3670
movb $0x1, -0x20c(%rbp)
leaq -0x200(%rbp), %rax
movq %rax, -0x420(%rbp)
movq %rax, -0x208(%rbp)
leaq -0x209(%rbp), %rdi
movq %rdi, -0x418(%rbp)
callq 0x2210
movq -0x420(%rbp), %rdi
movq -0x418(%rbp), %rdx
leaq 0x570a(%rip), %rsi      # 0x8055
callq 0x2160
jmp 0x2952
leaq -0x1e0(%rbp), %rax
movq %rax, -0x430(%rbp)
movq %rax, -0x208(%rbp)
leaq -0x20a(%rbp), %rdi
movq %rdi, -0x428(%rbp)
callq 0x2210
movq -0x430(%rbp), %rdi
movq -0x428(%rbp), %rdx
leaq 0x56c9(%rip), %rsi      # 0x8058
callq 0x2160
jmp 0x2996
leaq -0x1c0(%rbp), %rax
movq %rax, -0x440(%rbp)
movq %rax, -0x208(%rbp)
leaq -0x20b(%rbp), %rdi
movq %rdi, -0x438(%rbp)
callq 0x2210
movq -0x440(%rbp), %rdi
movq -0x438(%rbp), %rdx
leaq 0x5689(%rip), %rsi      # 0x805c
callq 0x2160
jmp 0x29da
movb $0x0, -0x20c(%rbp)
leaq -0x200(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq $0x3, -0x198(%rbp)
movq -0x1a0(%rbp), %rsi
movq -0x198(%rbp), %rdx
leaq -0x190(%rbp), %rdi
callq 0x37b0
jmp 0x2a16
leaq -0x200(%rbp), %rax
movq %rax, -0x450(%rbp)
addq $0x60, %rax
movq %rax, -0x448(%rbp)
movq -0x448(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x458(%rbp)
callq 0x20b0
movq -0x450(%rbp), %rcx
movq -0x458(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x448(%rbp)
jne 0x2a2f
leaq -0x20b(%rbp), %rdi
callq 0x2140
leaq -0x20a(%rbp), %rdi
callq 0x2140
leaq -0x209(%rbp), %rdi
callq 0x2140
xorl %eax, %eax
movl %eax, %edx
leaq -0x228(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x37e0
jmp 0x2a9d
leaq -0x228(%rbp), %rdi
callq 0x3820
movq %rax, -0x460(%rbp)
jmp 0x2ab2
movq -0x460(%rbp), %rdi
leaq 0x55a0(%rip), %rsi      # 0x8060
callq 0x2150
jmp 0x2ac7
leaq -0x228(%rbp), %rdi
callq 0x38f0
movq %rax, -0x468(%rbp)
jmp 0x2adc
movq -0x468(%rbp), %rdi
callq 0x20c0
movq %rax, %rsi
movq 0xa4ce(%rip), %rdi      # 0xcfc0
callq 0x2030
movq %rax, -0x470(%rbp)
jmp 0x2b00
movq -0x470(%rbp), %rdi
movq 0xa492(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x2b15
leaq -0x228(%rbp), %rdi
callq 0x3820
movq %rax, -0x478(%rbp)
jmp 0x2b2a
movq -0x478(%rbp), %rdi
callq 0x20c0
movq %rax, %rsi
movq 0xa480(%rip), %rdi      # 0xcfc0
callq 0x2030
movq %rax, -0x480(%rbp)
jmp 0x2b4e
movq -0x480(%rbp), %rdi
movq 0xa444(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x2b63
movb $0x1, -0x2b4(%rbp)
leaq -0x2a8(%rbp), %rax
movq %rax, -0x490(%rbp)
movq %rax, -0x2b0(%rbp)
leaq -0x2b1(%rbp), %rdi
movq %rdi, -0x488(%rbp)
callq 0x2210
movq -0x490(%rbp), %rdi
movq -0x488(%rbp), %rdx
leaq 0x54be(%rip), %rsi      # 0x8065
callq 0x2160
jmp 0x2bae
leaq -0x288(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movq %rax, -0x2b0(%rbp)
leaq -0x2b2(%rbp), %rdi
movq %rdi, -0x498(%rbp)
callq 0x2210
movq -0x4a0(%rbp), %rdi
movq -0x498(%rbp), %rdx
leaq 0x547e(%rip), %rsi      # 0x8069
callq 0x2160
jmp 0x2bf2
leaq -0x268(%rbp), %rax
movq %rax, -0x4b0(%rbp)
movq %rax, -0x2b0(%rbp)
leaq -0x2b3(%rbp), %rdi
movq %rdi, -0x4a8(%rbp)
callq 0x2210
movq -0x4b0(%rbp), %rdi
movq -0x4a8(%rbp), %rdx
leaq 0x543e(%rip), %rsi      # 0x806d
callq 0x2160
jmp 0x2c36
movb $0x0, -0x2b4(%rbp)
leaq -0x2a8(%rbp), %rax
movq %rax, -0x248(%rbp)
movq $0x3, -0x240(%rbp)
movq -0x248(%rbp), %rsi
movq -0x240(%rbp), %rdx
leaq -0x238(%rbp), %rdi
callq 0x37b0
jmp 0x2c72
leaq -0x2a8(%rbp), %rax
movq %rax, -0x4c0(%rbp)
addq $0x60, %rax
movq %rax, -0x4b8(%rbp)
movq -0x4b8(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x4c8(%rbp)
callq 0x20b0
movq -0x4c0(%rbp), %rcx
movq -0x4c8(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x4b8(%rbp)
jne 0x2c8b
leaq -0x2b3(%rbp), %rdi
callq 0x2140
leaq -0x2b2(%rbp), %rdi
callq 0x2140
leaq -0x2b1(%rbp), %rdi
callq 0x2140
xorl %eax, %eax
movl %eax, %esi
leaq -0x238(%rbp), %rdi
callq 0x3910
movq %rax, -0x4d0(%rbp)
jmp 0x2cf9
movq -0x4d0(%rbp), %rdi
callq 0x21d0
testb $0x1, %al
jne 0x2d0e
jmp 0x30ff
xorl %eax, %eax
movl %eax, %esi
leaq -0x238(%rbp), %rdi
callq 0x3910
movq %rax, -0x4d8(%rbp)
jmp 0x2d27
movq -0x4d8(%rbp), %rdi
leaq 0x533e(%rip), %rsi      # 0x8073
callq 0x2150
jmp 0x2d3c
jmp 0x30ff
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x25(%rbp), %rdi
callq 0x3450
jmp 0x33a6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x51(%rbp), %rdi
callq 0x3450
jmp 0x339d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3394
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x338b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x337f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2de8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2ddc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x110(%rbp), %rdi
callq 0x3670
leaq -0x100(%rbp), %rdi
callq 0x3670
leaq -0xf0(%rbp), %rdi
callq 0x3670
jmp 0x3373
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3373
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x3670
jmp 0x3367
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3367
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2e78
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2e6c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x160(%rbp), %rdi
callq 0x3670
leaq -0x150(%rbp), %rdi
callq 0x3670
leaq -0x140(%rbp), %rdi
callq 0x3670
jmp 0x3367
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2eaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x3670
leaq -0x170(%rbp), %rdi
callq 0x3670
jmp 0x3367
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2f5d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2f51
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x2f45
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x200(%rbp), %rax
movq %rax, -0x4e8(%rbp)
addq $0x60, %rax
movq %rax, -0x4e0(%rbp)
movq -0x4e0(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x4f0(%rbp)
callq 0x20b0
movq -0x4e8(%rbp), %rcx
movq -0x4f0(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x4e0(%rbp)
jne 0x2f12
jmp 0x2f45
leaq -0x20b(%rbp), %rdi
callq 0x2140
leaq -0x20a(%rbp), %rdi
callq 0x2140
leaq -0x209(%rbp), %rdi
callq 0x2140
testb $0x1, -0x20c(%rbp)
jne 0x2f74
jmp 0x2fc1
movq -0x208(%rbp), %rax
leaq -0x200(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x4f8(%rbp)
je 0x2fbf
movq -0x4f8(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x500(%rbp)
callq 0x20b0
movq -0x500(%rbp), %rax
leaq -0x200(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x4f8(%rbp)
jne 0x2f8e
jmp 0x2fc1
jmp 0x3367
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x335b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x334f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3085
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3079
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x306d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x2a8(%rbp), %rax
movq %rax, -0x510(%rbp)
addq $0x60, %rax
movq %rax, -0x508(%rbp)
movq -0x508(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x518(%rbp)
callq 0x20b0
movq -0x510(%rbp), %rcx
movq -0x518(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x508(%rbp)
jne 0x303a
jmp 0x306d
leaq -0x2b3(%rbp), %rdi
callq 0x2140
leaq -0x2b2(%rbp), %rdi
callq 0x2140
leaq -0x2b1(%rbp), %rdi
callq 0x2140
testb $0x1, -0x2b4(%rbp)
jne 0x309c
jmp 0x30e9
movq -0x2b0(%rbp), %rax
leaq -0x2a8(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x520(%rbp)
je 0x30e7
movq -0x520(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x528(%rbp)
callq 0x20b0
movq -0x528(%rbp), %rax
leaq -0x2a8(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x520(%rbp)
jne 0x30b6
jmp 0x30e9
jmp 0x334f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x3343
leaq -0x2c8(%rbp), %rdi
movq %rdi, -0x538(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x3640
movq -0x538(%rbp), %rsi
movq 0x9e9c(%rip), %rdi      # 0xcfc0
callq 0x35a0
movq %rax, -0x530(%rbp)
jmp 0x3132
movq -0x530(%rbp), %rdi
movq 0x9e60(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x3147
leaq -0x2c8(%rbp), %rdi
callq 0x3670
leaq -0x2d8(%rbp), %rdi
movq %rdi, -0x548(%rbp)
leaq -0x88(%rbp), %rsi
callq 0x3640
movq -0x548(%rbp), %rsi
movq 0x9e45(%rip), %rdi      # 0xcfc0
callq 0x35a0
movq %rax, -0x540(%rbp)
jmp 0x3189
movq -0x540(%rbp), %rdi
movq 0x9e09(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x319e
leaq -0x2d8(%rbp), %rdi
callq 0x3670
leaq -0x88(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x39d0
jmp 0x31bc
leaq -0x2e8(%rbp), %rdi
movq %rdi, -0x558(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x3640
movq -0x558(%rbp), %rsi
movq 0x9ddf(%rip), %rdi      # 0xcfc0
callq 0x35a0
movq %rax, -0x550(%rbp)
jmp 0x31ef
movq -0x550(%rbp), %rdi
movq 0x9da3(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x3204
leaq -0x2e8(%rbp), %rdi
callq 0x3670
leaq -0x2f8(%rbp), %rdi
movq %rdi, -0x568(%rbp)
leaq -0x88(%rbp), %rsi
callq 0x3640
movq -0x568(%rbp), %rsi
movq 0x9d88(%rip), %rdi      # 0xcfc0
callq 0x35a0
movq %rax, -0x560(%rbp)
jmp 0x3246
movq -0x560(%rbp), %rdi
movq 0x9d4c(%rip), %rsi      # 0xcfa0
callq 0x2130
jmp 0x325b
leaq -0x2f8(%rbp), %rdi
callq 0x3670
movl $0x0, -0x4(%rbp)
leaq -0x238(%rbp), %rdi
callq 0x3a00
leaq -0x228(%rbp), %rdi
callq 0x3a20
leaq -0x190(%rbp), %rdi
callq 0x3a00
leaq -0x120(%rbp), %rdi
callq 0x3670
leaq -0xd0(%rbp), %rdi
callq 0x3670
leaq -0x88(%rbp), %rdi
callq 0x3670
leaq -0x68(%rbp), %rdi
callq 0x3670
leaq -0x50(%rbp), %rdi
callq 0x3a40
leaq -0x20(%rbp), %rdi
callq 0x3a40
movl -0x4(%rbp), %eax
addq $0x570, %rsp            # imm = 0x570
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x2c8(%rbp), %rdi
callq 0x3670
jmp 0x3343
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x3670
jmp 0x3343
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x2e8(%rbp), %rdi
callq 0x3670
jmp 0x3343
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x2f8(%rbp), %rdi
callq 0x3670
leaq -0x238(%rbp), %rdi
callq 0x3a00
leaq -0x228(%rbp), %rdi
callq 0x3a20
leaq -0x190(%rbp), %rdi
callq 0x3a00
leaq -0x120(%rbp), %rdi
callq 0x3670
leaq -0xd0(%rbp), %rdi
callq 0x3670
leaq -0x88(%rbp), %rdi
callq 0x3670
leaq -0x68(%rbp), %rdi
callq 0x3670
leaq -0x50(%rbp), %rdi
callq 0x3a40
leaq -0x20(%rbp), %rdi
callq 0x3a40
movq -0x30(%rbp), %rdi
callq 0x2200
nop