// File: shuwenyue[P]MD_code_cell_list/main.cpp
// Function: main
int main () 
{
	// define parameters
	int NParticles; // number of particles in box
	double T; // temperature in reduced units
	double density; // density = Number of Particles / Volume of Box
	double cutoff; // maximum distance between any two particles where interaction energy is explicitly calculated
	double cellist; // algorithm that reduces calculation time from N2 to N
	double BoxLength;
	double tmax; // total run time
	double dt; // time step

	// set configuration parameters in reduced units 
	cout << "-------------------------------------------------------------------" << endl;
	cout << "Enter Parameters for 3D Lennard Jones Molecular Dynamics Simulation" << endl;
	cout << "(in reduced units)" << endl;
	cout << "-------------------------------------------------------------------" << endl;
	cout << "Number of Particles (only perfect cube numbers e.g. 512, 10648, 27000):";
	cin >> NParticles;
	cout << "Temperature (e.g. 1):";
	cin >> T;
	cout << "Density (e.g. 0.5):";
	cin >> density;
	cout << "Cutoff distance (e.g. 3):";
	cin >> cutoff;
	cout << "Run Time (e.g. 5 seconds):";
	cin >> tmax;
	cout << "Time Step (e.g. 0.005):";
	cin >> dt;
	cout << "Use cellist? (0 for NO, 1 for YES)";
	cin >> cellist;
	BoxLength = pow((NParticles/density), 1.0/3.0);
	cout << "BoxLength: " << BoxLength << endl;
	cout << "-------------------------------------------------------------------" << endl;

	// pre-assigned parameters
    /*T = 1.6; 
    NParticles = 512; 
	density = 0.7;
    cutoff = 3;
	BoxLength = pow((NParticles/density), 1.0/3.0);
	cellist = 1; // 0 for no cellist, 1 for cellist
	tmax = 1; // total run time
    dt = 0.005; // time step*/

	cout << "BoxLength: " << BoxLength << endl;
    
	double energy;
	double ETotal;
	double rtotal;

	// print to output file
    ofstream trajFile;
    trajFile.open("traj.xyz"); // trajectory file (position coordinates of every particle at every timestep, can view movie in VMD)
    ofstream logFile;
    logFile.open("test.log"); // output of temperature and energy at each timestep

	// clock (to calculate total run time of simulation)
	clock_t start, end;

	// define objects to use functions in other classes 
	particle particleObj;
	box boxObj;
	force forceObj;

	// initialize positions of particles on a lattice in a box and initialize velocities
    particleObj.initialize(BoxLength, NParticles, T, dt); 
	vector<double3> initial = particleObj.getpositionVector(); // save initial positions of particles

	// start clock
	start = clock();

	// print header for screen output
	cout << "-------------------------------------------------------------------" << endl;
	cout << endl;
	cout << "Timestep" << "          Temperature" << "         Energy" << endl;
	cout << endl;
	cout << "-------------------------------------------------------------------" << endl;

    for (double t = 0; t<tmax; t=t+dt)
    {

		// call getForce (no cellist) or getForcecellist (with cellist) to calculate forces on all particles (in matrix called forceVector) and return total energy from particle interactions
		if (cellist == 0)
		{
			energy = forceObj.getForce(NParticles, BoxLength, cutoff, density, particleObj.getpositionVector());
		}

		if (cellist == 1)
		{
			energy = forceObj.getForcecellist(t, NParticles, BoxLength, cutoff, density, particleObj.getpositionVector());
		}
    
        // access forceVector from force class and place in variable called forceV
		vector<double3> forceV = forceObj.getforceVector();

		// integrate forces using verlet algorithm and return total velocity^2 squared (to be used in Temperature and Energy calculation later)
		double totalV2 = particleObj.verlet(dt, NParticles, BoxLength, forceV);

		// velocity verlet algorithm
		//double totalV2 = particleObj.velocityverlet(NParticles, BoxLength, cutoff, density, dt, cellist, forceV);

		// temperature calculation using averaged velocity: velocity^2/NParticles
		T = totalV2 / (3*NParticles);

		// total energy calculating using total velocity^2 and energy using averaged velocity
		ETotal = (energy + 0.5*totalV2)/NParticles;

		// print to screen the (1) timestep, (2) temperature, (3) energy 
		cout << "Timestep: " << t << " ---  T: " << T << " ---  E: " << ETotal << endl;

		// print to output file the (1) timestep, (2) temperature, (3) energy 
		logFile << t << "  " << T << "  " << ETotal << endl;

		// print particle positions at every time step to trajectory xyz file 
		vector<double3> positionOutput = particleObj.getpositionVector();
		trajFile << NParticles << endl;
		trajFile << endl;
		for (int i = 0; i < NParticles; i++)
		{
			trajFile << "1 " << positionOutput[i].x << " " << positionOutput[i].y << " " << positionOutput[i].z << endl;
		}
    }

	end = clock();
	// print total CPU time from simulation
	cout << "CPU time: " << ((float)(end - start)/CLOCKS_PER_SEC) << endl;

	logFile.close();
	trajFile.close();

    return 0;
}

// Assembly:
subq $0x788, %rsp            # imm = 0x788
movl $0x0, 0x784(%rsp)
movq 0x9ba7(%rip), %rdi      # 0xbfd0
movq %rdi, 0x150(%rsp)
leaq 0x6bec(%rip), %rsi      # 0x9024
movq %rsi, 0x148(%rsp)
callq 0x2110
movq %rax, %rdi
movq 0x9b71(%rip), %rsi      # 0xbfc0
movq %rsi, 0x160(%rsp)
callq 0x2140
movq 0x150(%rsp), %rdi
leaq 0x6bfd(%rip), %rsi      # 0x9068
callq 0x2110
movq 0x160(%rsp), %rsi
movq %rax, %rdi
callq 0x2140
movq 0x150(%rsp), %rdi
leaq 0x6c1d(%rip), %rsi      # 0x90ac
callq 0x2110
movq 0x160(%rsp), %rsi
movq %rax, %rdi
callq 0x2140
movq 0x148(%rsp), %rsi
movq 0x150(%rsp), %rdi
callq 0x2110
movq 0x160(%rsp), %rsi
movq %rax, %rdi
callq 0x2140
movq 0x150(%rsp), %rdi
leaq 0x6be7(%rip), %rsi      # 0x90bf
callq 0x2110
movq 0x9afc(%rip), %rdi      # 0xbfe0
movq %rdi, 0x140(%rsp)
leaq 0x780(%rsp), %rsi
callq 0x20a0
movq 0x150(%rsp), %rdi
leaq 0x6bff(%rip), %rsi      # 0x9107
callq 0x2110
movq 0x140(%rsp), %rdi
leaq 0x778(%rsp), %rsi
callq 0x20f0
movq 0x150(%rsp), %rdi
leaq 0x6bec(%rip), %rsi      # 0x911d
callq 0x2110
movq 0x140(%rsp), %rdi
leaq 0x770(%rsp), %rsi
callq 0x20f0
movq 0x150(%rsp), %rdi
leaq 0x6bd7(%rip), %rsi      # 0x9131
callq 0x2110
movq 0x140(%rsp), %rdi
leaq 0x768(%rsp), %rsi
callq 0x20f0
movq 0x150(%rsp), %rdi
leaq 0x6bc8(%rip), %rsi      # 0x914b
callq 0x2110
movq 0x140(%rsp), %rdi
leaq 0x750(%rsp), %rsi
callq 0x20f0
movq 0x150(%rsp), %rdi
leaq 0x6bba(%rip), %rsi      # 0x9166
callq 0x2110
movq 0x140(%rsp), %rdi
leaq 0x748(%rsp), %rsi
callq 0x20f0
movq 0x150(%rsp), %rdi
leaq 0x6ba9(%rip), %rsi      # 0x917e
callq 0x2110
movq 0x140(%rsp), %rdi
leaq 0x760(%rsp), %rsi
callq 0x20f0
cvtsi2sdl 0x780(%rsp), %xmm0
movsd 0x770(%rsp), %xmm1
divsd %xmm1, %xmm0
movsd 0x69fb(%rip), %xmm1     # 0x9008
callq 0x21e0
movq 0x150(%rsp), %rdi
movsd %xmm0, 0x758(%rsp)
leaq 0x6b77(%rip), %rsi      # 0x91a1
movq %rsi, 0x158(%rsp)
callq 0x2110
movq %rax, %rdi
movsd 0x758(%rsp), %xmm0
callq 0x2200
movq 0x160(%rsp), %rsi
movq %rax, %rdi
callq 0x2140
movq 0x148(%rsp), %rsi
movq 0x150(%rsp), %rdi
callq 0x2110
movq 0x160(%rsp), %rsi
movq %rax, %rdi
callq 0x2140
movq 0x150(%rsp), %rdi
movq 0x158(%rsp), %rsi
callq 0x2110
movq %rax, %rdi
movsd 0x758(%rsp), %xmm0
callq 0x2200
movq 0x160(%rsp), %rsi
movq %rax, %rdi
callq 0x2140
leaq 0x530(%rsp), %rdi
movq %rdi, 0x168(%rsp)
callq 0x21c0
movq 0x168(%rsp), %rdi
leaq 0x6ad6(%rip), %rsi      # 0x91ad
movl $0x10, %edx
callq 0x2030
jmp 0x26e3
leaq 0x320(%rsp), %rdi
callq 0x21c0
jmp 0x26f2
leaq 0x6abd(%rip), %rsi      # 0x91b6
leaq 0x320(%rsp), %rdi
movl $0x10, %edx
callq 0x2030
jmp 0x270d
leaq 0x2b0(%rsp), %rdi
callq 0x3110
jmp 0x271c
leaq 0x218(%rsp), %rdi
callq 0x3160
jmp 0x272b
movsd 0x758(%rsp), %xmm0
movl 0x780(%rsp), %esi
movsd 0x778(%rsp), %xmm1
movsd 0x748(%rsp), %xmm2
leaq 0x2b0(%rsp), %rdi
callq 0x3e70
jmp 0x275c
leaq 0x200(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0x5c70
jmp 0x2773
callq 0x20b0
movq %rax, 0x318(%rsp)
movq 0x9849(%rip), %rdi      # 0xbfd0
leaq 0x6896(%rip), %rsi      # 0x9024
callq 0x2110
movq %rax, 0x138(%rsp)
jmp 0x279d
movq 0x138(%rsp), %rdi
movq 0x9814(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x27b3
movq 0x9816(%rip), %rdi      # 0xbfd0
movq 0x97ff(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x27c8
movq 0x9801(%rip), %rdi      # 0xbfd0
leaq 0x69e9(%rip), %rsi      # 0x91bf
callq 0x2110
movq %rax, 0x130(%rsp)
jmp 0x27e5
movq 0x130(%rsp), %rdi
leaq 0x69d4(%rip), %rsi      # 0x91c8
callq 0x2110
movq %rax, 0x128(%rsp)
jmp 0x2803
movq 0x128(%rsp), %rdi
leaq 0x69cc(%rip), %rsi      # 0x91de
callq 0x2110
movq %rax, 0x120(%rsp)
jmp 0x2821
movq 0x120(%rsp), %rdi
movq 0x9790(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x2837
movq 0x9792(%rip), %rdi      # 0xbfd0
movq 0x977b(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x284c
movq 0x977d(%rip), %rdi      # 0xbfd0
leaq 0x67ca(%rip), %rsi      # 0x9024
callq 0x2110
movq %rax, 0x118(%rsp)
jmp 0x2869
movq 0x118(%rsp), %rdi
movq 0x9748(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x287f
xorps %xmm0, %xmm0
movsd %xmm0, 0x1f8(%rsp)
movsd 0x1f8(%rsp), %xmm1
movsd 0x750(%rsp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x2fd5
movsd 0x760(%rsp), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x2a27
jp 0x2a27
movl 0x780(%rsp), %eax
movl %eax, 0xfc(%rsp)
movsd 0x758(%rsp), %xmm0
movsd %xmm0, 0x100(%rsp)
movsd 0x768(%rsp), %xmm0
movsd %xmm0, 0x108(%rsp)
movsd 0x770(%rsp), %xmm0
movsd %xmm0, 0x110(%rsp)
leaq 0x1e0(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0x5c70
jmp 0x291e
movsd 0x110(%rsp), %xmm2
movsd 0x108(%rsp), %xmm1
movsd 0x100(%rsp), %xmm0
movl 0xfc(%rsp), %esi
leaq 0x218(%rsp), %rdi
leaq 0x1e0(%rsp), %rdx
callq 0x6600
movsd %xmm0, 0xf0(%rsp)
jmp 0x2960
movsd 0xf0(%rsp), %xmm0
movsd %xmm0, 0x740(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0x31f0
jmp 0x2a27
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
jmp 0x30ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
jmp 0x30e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
jmp 0x30d5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
jmp 0x30c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
jmp 0x30bb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
leaq 0x1e0(%rsp), %rdi
callq 0x31f0
jmp 0x30bb
movsd 0x760(%rsp), %xmm0
movsd 0x65d8(%rip), %xmm1     # 0x9010
ucomisd %xmm1, %xmm0
jne 0x2b47
jp 0x2b47
movsd 0x1f8(%rsp), %xmm0
movsd %xmm0, 0xc8(%rsp)
movl 0x780(%rsp), %eax
movl %eax, 0xd4(%rsp)
movsd 0x758(%rsp), %xmm0
movsd %xmm0, 0xd8(%rsp)
movsd 0x768(%rsp), %xmm0
movsd %xmm0, 0xe0(%rsp)
movsd 0x770(%rsp), %xmm0
movsd %xmm0, 0xe8(%rsp)
leaq 0x1c8(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0x5c70
jmp 0x2ab5
movsd 0xe8(%rsp), %xmm3
movsd 0xe0(%rsp), %xmm2
movsd 0xd8(%rsp), %xmm1
movl 0xd4(%rsp), %esi
movsd 0xc8(%rsp), %xmm0
leaq 0x218(%rsp), %rdi
leaq 0x1c8(%rsp), %rdx
callq 0x6e10
movsd %xmm0, 0xc0(%rsp)
jmp 0x2b00
movsd 0xc0(%rsp), %xmm0
movsd %xmm0, 0x740(%rsp)
leaq 0x1c8(%rsp), %rdi
callq 0x31f0
jmp 0x2b47
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
leaq 0x1c8(%rsp), %rdi
callq 0x31f0
jmp 0x30bb
leaq 0x1b0(%rsp), %rdi
leaq 0x218(%rsp), %rsi
callq 0x7ec0
jmp 0x2b5e
movsd 0x748(%rsp), %xmm0
movsd %xmm0, 0xa8(%rsp)
cvtsi2sdl 0x780(%rsp), %xmm0
movsd %xmm0, 0xb0(%rsp)
movsd 0x758(%rsp), %xmm0
movsd %xmm0, 0xb8(%rsp)
leaq 0x190(%rsp), %rdi
leaq 0x1b0(%rsp), %rsi
callq 0x3250
jmp 0x2bab
movsd 0xb8(%rsp), %xmm2
movsd 0xb0(%rsp), %xmm1
movsd 0xa8(%rsp), %xmm0
leaq 0x2b0(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x48c0
movsd %xmm0, 0xa0(%rsp)
jmp 0x2be6
leaq 0x190(%rsp), %rdi
callq 0x31f0
movsd 0xa0(%rsp), %xmm0
movsd %xmm0, 0x1a8(%rsp)
movsd 0x1a8(%rsp), %xmm0
movl 0x780(%rsp), %ecx
movl %ecx, %eax
leal (%rax,%rax,2), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x778(%rsp)
movsd 0x740(%rsp), %xmm1
movsd 0x1a8(%rsp), %xmm0
movsd 0x63d3(%rip), %xmm2     # 0x9018
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
cvtsi2sdl 0x780(%rsp), %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, 0x738(%rsp)
movq 0x9366(%rip), %rdi      # 0xbfd0
leaq 0x657d(%rip), %rsi      # 0x91ee
callq 0x2110
movq %rax, 0x98(%rsp)
jmp 0x2c80
movq 0x98(%rsp), %rdi
movsd 0x1f8(%rsp), %xmm0
callq 0x2200
movq %rax, 0x90(%rsp)
jmp 0x2ca0
movq 0x90(%rsp), %rdi
leaq 0x654a(%rip), %rsi      # 0x91f9
callq 0x2110
movq %rax, 0x88(%rsp)
jmp 0x2cbe
movq 0x88(%rsp), %rdi
movsd 0x778(%rsp), %xmm0
callq 0x2200
movq %rax, 0x80(%rsp)
jmp 0x2cde
movq 0x80(%rsp), %rdi
leaq 0x6516(%rip), %rsi      # 0x9203
callq 0x2110
movq %rax, 0x78(%rsp)
jmp 0x2cf9
movq 0x78(%rsp), %rdi
movsd 0x738(%rsp), %xmm0
callq 0x2200
movq %rax, 0x70(%rsp)
jmp 0x2d13
movq 0x70(%rsp), %rdi
movq 0x92a1(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x2d26
movsd 0x1f8(%rsp), %xmm0
leaq 0x320(%rsp), %rdi
callq 0x2200
movq %rax, 0x68(%rsp)
jmp 0x2d43
movq 0x68(%rsp), %rdi
leaq 0x64be(%rip), %rsi      # 0x920d
callq 0x2110
movq %rax, 0x60(%rsp)
jmp 0x2d5b
movq 0x60(%rsp), %rdi
movsd 0x778(%rsp), %xmm0
callq 0x2200
movq %rax, 0x58(%rsp)
jmp 0x2d75
movq 0x58(%rsp), %rdi
leaq 0x648c(%rip), %rsi      # 0x920d
callq 0x2110
movq %rax, 0x50(%rsp)
jmp 0x2d8d
movq 0x50(%rsp), %rdi
movsd 0x738(%rsp), %xmm0
callq 0x2200
movq %rax, 0x48(%rsp)
jmp 0x2da7
movq 0x48(%rsp), %rdi
movq 0x920d(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x2dba
leaq 0x178(%rsp), %rdi
leaq 0x2b0(%rsp), %rsi
callq 0x5c70
jmp 0x2dd1
movl 0x780(%rsp), %esi
leaq 0x530(%rsp), %rdi
callq 0x21d0
movq %rax, 0x40(%rsp)
jmp 0x2dec
movq 0x40(%rsp), %rdi
movq 0x91c8(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x2dff
movq 0x91ba(%rip), %rsi      # 0xbfc0
leaq 0x530(%rsp), %rdi
callq 0x2140
jmp 0x2e15
movl $0x0, 0x174(%rsp)
movl 0x174(%rsp), %eax
cmpl 0x780(%rsp), %eax
jge 0x2f89
leaq 0x63d5(%rip), %rsi      # 0x9210
leaq 0x530(%rsp), %rdi
callq 0x2110
movq %rax, 0x38(%rsp)
jmp 0x2e4f
movslq 0x174(%rsp), %rsi
leaq 0x178(%rsp), %rdi
callq 0x3350
movq 0x38(%rsp), %rdi
movsd (%rax), %xmm0
callq 0x2200
movq %rax, 0x30(%rsp)
jmp 0x2e79
movq 0x30(%rsp), %rdi
leaq 0x6389(%rip), %rsi      # 0x920e
callq 0x2110
movq %rax, 0x28(%rsp)
jmp 0x2e91
movslq 0x174(%rsp), %rsi
leaq 0x178(%rsp), %rdi
callq 0x3350
movq 0x28(%rsp), %rdi
movsd 0x8(%rax), %xmm0
callq 0x2200
movq %rax, 0x20(%rsp)
jmp 0x2ebc
movq 0x20(%rsp), %rdi
leaq 0x6346(%rip), %rsi      # 0x920e
callq 0x2110
movq %rax, 0x18(%rsp)
jmp 0x2ed4
movslq 0x174(%rsp), %rsi
leaq 0x178(%rsp), %rdi
callq 0x3350
movq 0x18(%rsp), %rdi
movsd 0x10(%rax), %xmm0
callq 0x2200
movq %rax, 0x10(%rsp)
jmp 0x2eff
movq 0x10(%rsp), %rdi
movq 0x90b5(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x2f12
jmp 0x2f14
movl 0x174(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x174(%rsp)
jmp 0x2e20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
jmp 0x2fc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
leaq 0x190(%rsp), %rdi
callq 0x31f0
jmp 0x2fc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x528(%rsp)
movl %eax, 0x524(%rsp)
leaq 0x178(%rsp), %rdi
callq 0x31f0
jmp 0x2fc3
leaq 0x178(%rsp), %rdi
callq 0x31f0
leaq 0x1b0(%rsp), %rdi
callq 0x31f0
movsd 0x1f8(%rsp), %xmm0
addsd 0x748(%rsp), %xmm0
movsd %xmm0, 0x1f8(%rsp)
jmp 0x288b
leaq 0x1b0(%rsp), %rdi
callq 0x31f0
jmp 0x30bb
callq 0x20b0
movq %rax, 0x310(%rsp)
movq 0x8fe7(%rip), %rdi      # 0xbfd0
leaq 0x6223(%rip), %rsi      # 0x9213
callq 0x2110
movq %rax, 0x8(%rsp)
jmp 0x2ffc
movq 0x8(%rsp), %rdi
movq 0x310(%rsp), %rax
movq 0x318(%rsp), %rcx
subq %rcx, %rax
cvtsi2ss %rax, %xmm0
movss 0x5fff(%rip), %xmm1     # 0x9020
divss %xmm1, %xmm0
callq 0x20c0
movq %rax, (%rsp)
jmp 0x3030
movq (%rsp), %rdi
movq 0x8f85(%rip), %rsi      # 0xbfc0
callq 0x2140
jmp 0x3042
leaq 0x320(%rsp), %rdi
callq 0x2150
jmp 0x3051
leaq 0x530(%rsp), %rdi
callq 0x2150
jmp 0x3060
movl $0x0, 0x784(%rsp)
leaq 0x200(%rsp), %rdi
callq 0x31f0
leaq 0x218(%rsp), %rdi
callq 0x3370
leaq 0x2b0(%rsp), %rdi
callq 0x33d0
leaq 0x320(%rsp), %rdi
callq 0x2170
leaq 0x530(%rsp), %rdi
callq 0x2170
movl 0x784(%rsp), %eax
addq $0x788, %rsp            # imm = 0x788
retq
leaq 0x200(%rsp), %rdi
callq 0x31f0
leaq 0x218(%rsp), %rdi
callq 0x3370
leaq 0x2b0(%rsp), %rdi
callq 0x33d0
leaq 0x320(%rsp), %rdi
callq 0x2170
leaq 0x530(%rsp), %rdi
callq 0x2170
movq 0x528(%rsp), %rdi
callq 0x21f0
nopl (%rax)