// File: /workspace/github_cpp_makefile_star2_O2/dramninjasUMD[P]BOBSim/BOBWrapper.cpp
// Function: BOBSim::BOBWrapper::BOBWrapper(unsigned long)
BOBWrapper::BOBWrapper(uint64_t qemu_mem_size) :
	readDoneCallback(NULL),
	writeDoneCallback(NULL),
	logicDoneCallback(NULL),
	fullSum(0),
	dramSum(0),
	chanSum(0),
	issuedWrites(0),
	committedWrites(0),
	issuedLogicOperations(0),
	returnedReads(0),
	totalLogicResponses(0),
	totalReturnedReads(0),
	totalIssuedWrites(0),
	totalTransactionsServiced(0),
	portRoundRobin(0),
	maxReadsPerCycle(0),
	maxWritesPerCycle(0),
	readsPerCycle(0),
	writesPerCycle(0)
{
#define TMP_STR_LEN 80

	//Initialize output files
	char *sim_desc;
	char tmp_str[TMP_STR_LEN];
	if ((sim_desc = getenv("SIM_DESC")) != NULL)
	{
		snprintf(tmp_str, TMP_STR_LEN, "BOBstats%s%s.txt", sim_desc, VARIANT_SUFFIX);
		statsOut.open(tmp_str);
		snprintf(tmp_str, TMP_STR_LEN, "BOBpower%s%s.txt", sim_desc, VARIANT_SUFFIX);
		powerOut.open(tmp_str);
	}
	else
	{
		snprintf(tmp_str, TMP_STR_LEN, "BOBstats%s.txt", VARIANT_SUFFIX);
		statsOut.open(tmp_str);
		snprintf(tmp_str, TMP_STR_LEN, "BOBpower%s.txt", VARIANT_SUFFIX);
		powerOut.open(tmp_str);
	}

	QEMU_MEMORY_SIZE = qemu_mem_size;

	currentClockCycle=0;

	//Create BOB object and register callbacks
	bob = new BOB();

	Callback<BOBWrapper,void,unsigned,uint64_t> *writeIssuedCB = new Callback<BOBWrapper,void,unsigned,uint64_t>(this, &BOBWrapper::WriteIssuedCallback);
	bob->RegisterWriteIssuedCallback(writeIssuedCB);

	//Incoming request packet fields (to be added to ports)
	inFlightRequest = vector<Transaction*>(NUM_PORTS,NULL);
	inFlightRequestCounter = vector<unsigned>(NUM_PORTS,0);
	inFlightRequestHeaderCounter = vector<unsigned>(NUM_PORTS,0);

	//Outgoing response packet fields (being sent back to cache)
	inFlightResponse = vector<Transaction*>(NUM_PORTS,NULL);
	inFlightResponseCounter = vector<unsigned>(NUM_PORTS,0);
	inFlightResponseHeaderCounter = vector<unsigned>(NUM_PORTS,0);

	//For statistics & bookkeeping
	requestPortEmptyCount = vector<unsigned>(NUM_PORTS,0);
	responsePortEmptyCount = vector<unsigned>(NUM_PORTS,0);
	requestCounterPerPort = vector<unsigned>(NUM_PORTS,0);
	readsPerPort = vector<unsigned>(NUM_PORTS,0);
	writesPerPort = vector<unsigned>(NUM_PORTS,0);
	returnsPerPort = vector<unsigned>(NUM_PORTS,0);
	perChanFullLatencies = vector< vector<unsigned> >(NUM_CHANNELS, vector<unsigned>());
	perChanReqPort = vector< vector<unsigned> >(NUM_CHANNELS, vector<unsigned>());
	perChanRspPort = vector< vector<unsigned> >(NUM_CHANNELS, vector<unsigned>());
	perChanReqLink = vector< vector<unsigned> >(NUM_CHANNELS, vector<unsigned>());
	perChanRspLink = vector< vector<unsigned> >(NUM_CHANNELS, vector<unsigned>());
	perChanAccess = vector< vector<unsigned> >(NUM_CHANNELS, vector<unsigned>());
	perChanRRQ = vector< vector<unsigned> >(NUM_CHANNELS, vector<unsigned>());
	perChanWorkQTimes = vector< vector<unsigned> >(NUM_CHANNELS, vector<unsigned>());

	//Write configuration stuff to output file
	//
	//System Parameters
	//
	statsOut<<"!!!!"<<qemu_mem_size<<"???"<<QEMU_MEMORY_SIZE<<endl;
	statsOut<<"!!SYSTEM_INI"<<endl;
	statsOut<<"NUM_RANKS="<<NUM_RANKS<<endl;
	statsOut<<"NUM_CHANS="<<NUM_CHANNELS<<endl;
	statsOut<<"BUS_ALIGNMENT_SIZE="<<BUS_ALIGNMENT_SIZE<<endl;
	statsOut<<"JEDEC_DATA_BUS_WIDTH="<<DRAM_BUS_WIDTH<<endl;
	statsOut<<"TRANS_QUEUE_DEPTH="<<PORT_QUEUE_DEPTH<<endl;
	statsOut<<"CMD_QUEUE_DEPTH="<<CHANNEL_WORK_Q_MAX<<endl;
	statsOut<<"USE_LOW_POWER=false"<<endl;
	statsOut<<"EPOCH_COUNT="<<EPOCH_LENGTH<<endl;
	statsOut<<"ROW_BUFFER_POLICY=close_page"<<endl;
	statsOut<<"SCHEDULING_POLICY=N/A"<<endl;
	statsOut<<"ADDRESS_MAPPING_SCHEME=scheme"<<mappingScheme<<endl;
	statsOut<<"QUEUING_STRUCTURE=N/A"<<endl;
	statsOut<<"DEBUG_TRANS_Q=false"<<endl;
	statsOut<<"DEBUG_CMD_Q=false"<<endl;
	statsOut<<"DEBUG_ADDR_MAP=false"<<endl;
	statsOut<<"DEBUG_BANKSTATE=false"<<endl;
	statsOut<<"DEBUG_BUS=false"<<endl;
	statsOut<<"DEBUG_BANKS=false"<<endl;
	statsOut<<"DEBUG_POWER=false"<<endl;
	statsOut<<"VERIFICATION_OUTPUT="<<(VERIFICATION_OUTPUT?"true":"false")<<endl;

	//
	//Device Parameters
	//
	statsOut<<"!!DEVICE_INI"<<endl;
	statsOut<<"NUM_BANKS="<<NUM_BANKS<<endl;
	statsOut<<"NUM_ROWS="<<NUM_ROWS<<endl;
	statsOut<<"NUM_COLS="<<NUM_COLS<<endl;
	statsOut<<"DEVICE_WIDTH="<<DEVICE_WIDTH<<endl;
	statsOut<<"REFRESH_PERIOD=7800"<<endl;
	statsOut<<"tCK="<<tCK<<endl;
	statsOut<<"CL="<<tCL<<endl;
	statsOut<<"AL=0"<<endl;
	statsOut<<"BL="<<BL<<endl;
	statsOut<<"tRAS="<<tRAS<<endl;
	statsOut<<"tRCD="<<tRCD<<endl;
	statsOut<<"tRRD="<<tRRD<<endl;
	statsOut<<"tRC="<<tRC<<endl;
	statsOut<<"tRP="<<tRP<<endl;
	statsOut<<"tCCD="<<tCCD<<endl;
	statsOut<<"tRTP="<<tRTP<<endl;
	statsOut<<"tWTR="<<tWTR<<endl;
	statsOut<<"tWR="<<tWR<<endl;
	statsOut<<"tRTRS=1"<<endl;
	statsOut<<"tRFC="<<tRFC<<endl;
	statsOut<<"tFAW="<<tFAW<<endl;
	statsOut<<"tCKE=0"<<endl;
	statsOut<<"tXP=0"<<endl;
	statsOut<<"tCMD=1"<<endl;
	statsOut<<"IDD0="<<IDD0<<endl;
	statsOut<<"IDD1="<<IDD1<<endl;
	statsOut<<"IDD2P="<<IDD2P1<<endl;
	statsOut<<"IDD2Q="<<IDD2Q<<endl;
	statsOut<<"IDD2N="<<IDD2N<<endl;
	statsOut<<"IDD3Pf="<<IDD3P<<endl;
	statsOut<<"IDD3Ps=0"<<endl;
	statsOut<<"IDD3N="<<IDD3N<<endl;
	statsOut<<"IDD4W="<<IDD4W<<endl;
	statsOut<<"IDD4R="<<IDD4R<<endl;
	statsOut<<"IDD5="<<IDD5B<<endl;
	statsOut<<"IDD6="<<IDD6<<endl;
	statsOut<<"IDD6L="<<IDD6ET<<endl;
	statsOut<<"IDD7="<<IDD7<<endl;

	statsOut<<"!!EPOCH_DATA"<<endl;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rsi, %r13
movq %rdi, %r14
leaq 0xf5da(%rip), %rax      # 0x15bb8
movq %rax, (%rdi)
leaq 0x18(%rdi), %rdi
leaq 0x30(%r14), %rax
movq %rax, 0xd0(%rsp)
leaq 0x48(%r14), %rax
movq %rax, 0xc8(%rsp)
leaq 0x60(%r14), %rax
movq %rax, 0xc0(%rsp)
leaq 0x78(%r14), %rax
movq %rax, 0xb8(%rsp)
leaq 0x90(%r14), %rax
movq %rax, 0xb0(%rsp)
leaq 0xc8(%r14), %rax
movq %rax, 0xa8(%rsp)
leaq 0xe0(%r14), %rax
movq %rax, 0xa0(%rsp)
leaq 0xf8(%r14), %rax
movq %rax, 0x98(%rsp)
leaq 0x110(%r14), %rax
movq %rax, 0x90(%rsp)
leaq 0x128(%r14), %rax
movq %rax, 0x88(%rsp)
leaq 0x140(%r14), %rax
movq %rax, 0x80(%rsp)
leaq 0x170(%r14), %rax
movq %rax, 0x78(%rsp)
leaq 0x188(%r14), %rax
movq %rax, 0x70(%rsp)
leaq 0x1a0(%r14), %rax
movq %rax, 0x68(%rsp)
leaq 0x1b8(%r14), %rax
movq %rax, 0x60(%rsp)
leaq 0x1d0(%r14), %rax
movq %rax, 0x58(%rsp)
leaq 0x1e8(%r14), %rax
movq %rax, 0x50(%rsp)
leaq 0x200(%r14), %rax
movq %rax, 0x48(%rsp)
leaq 0x218(%r14), %rax
movq %rax, 0x40(%rsp)
leaq 0x2b0(%r14), %r15
movl $0x234, %edx            # imm = 0x234
movq %rdi, 0xd8(%rsp)
xorl %esi, %esi
callq 0x20d0
xorps %xmm0, %xmm0
movups %xmm0, 0x250(%r14)
movups %xmm0, 0x25c(%r14)
movups %xmm0, 0x270(%r14)
movups %xmm0, 0x280(%r14)
movups %xmm0, 0x290(%r14)
movups %xmm0, 0x29c(%r14)
movq %r15, %rdi
callq 0x22d0
leaq 0x4b0(%r14), %r12
movq %r12, %rdi
callq 0x22d0
andl $0x0, 0x6b0(%r14)
leaq 0x914e(%rip), %rdi      # 0xf8a0
callq 0x21e0
testq %rax, %rax
je 0x67b8
movq %rax, %rbp
leaq 0x9143(%rip), %rdx      # 0xf8a9
leaq 0x984c(%rip), %r8       # 0xffb9
leaq 0xe0(%rsp), %rbx
pushq $0x50
popq %rsi
movq %rbx, %rdi
movq %rax, %rcx
xorl %eax, %eax
callq 0x2280
pushq $0x10
popq %rdx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x2040
leaq 0x9120(%rip), %rdx      # 0xf8ba
leaq 0x9818(%rip), %r8       # 0xffb9
leaq 0xe0(%rsp), %rdi
pushq $0x50
popq %rsi
movq %rbp, %rcx
xorl %eax, %eax
callq 0x2280
jmp 0x6809
leaq 0x910c(%rip), %rdx      # 0xf8cb
leaq 0x97f3(%rip), %rcx      # 0xffb9
leaq 0xe0(%rsp), %rbx
pushq $0x50
popq %rsi
movq %rbx, %rdi
xorl %eax, %eax
callq 0x2280
pushq $0x10
popq %rdx
movq %r15, %rdi
movq %rbx, %rsi
callq 0x2040
leaq 0x90ea(%rip), %rdx      # 0xf8da
leaq 0x97c2(%rip), %rcx      # 0xffb9
leaq 0xe0(%rsp), %rdi
pushq $0x50
popq %rsi
xorl %eax, %eax
callq 0x2280
leaq 0xe0(%rsp), %rsi
pushq $0x10
popq %rdx
movq %r12, %rdi
callq 0x2040
movq %r13, 0xfa6d(%rip)      # 0x16290
andq $0x0, 0x8(%r14)
movl $0x200, %edi            # imm = 0x200
callq 0x2190
movq %rax, %rbp
movq %rax, %rdi
callq 0x274c
movq %rbp, 0x10(%r14)
pushq $0x20
popq %rdi
callq 0x2190
leaq 0xf398(%rip), %rcx      # 0x15be8
movq %rcx, (%rax)
movq %r14, 0x8(%rax)
leaq 0xe16(%rip), %rcx       # 0x7674
movq %rcx, 0x10(%rax)
andq $0x0, 0x18(%rax)
movq %rbp, %rdi
movq %rax, %rsi
callq 0x5148
leaq 0xf937(%rip), %rbp      # 0x161b0
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andq $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x5200
leaq 0x8(%rsp), %rbx
movq 0xd8(%rsp), %rdi
movq %rbx, %rsi
callq 0x58fe
movq %rbx, %rdi
callq 0x5504
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0xd0(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0xc8(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andq $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x5200
leaq 0x8(%rsp), %rbx
movq 0xc0(%rsp), %rdi
movq %rbx, %rsi
callq 0x58fe
movq %rbx, %rdi
callq 0x5504
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0xb8(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0xb0(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0xa8(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0xa0(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0x98(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0x90(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0x88(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
movl (%rbp), %esi
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x8(%rsp), %rdi
leaq 0x7(%rsp), %rcx
callq 0x51aa
leaq 0x8(%rsp), %rbx
movq 0x80(%rsp), %rdi
movq %rbx, %rsi
callq 0x57f6
movq %rbx, %rdi
callq 0x549c
xorps %xmm0, %xmm0
leaq 0x20(%rsp), %rdx
movaps %xmm0, (%rdx)
andq $0x0, 0x10(%rdx)
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
leaq 0x7(%rsp), %rcx
callq 0x9032
leaq 0x8(%rsp), %rbx
movq 0x78(%rsp), %rdi
movq %rbx, %rsi
callq 0x9318
movq %rbx, %rdi
callq 0x9088
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x549c
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
leaq 0x20(%rsp), %rdx
leaq 0x7(%rsp), %rcx
callq 0x9032
leaq 0x8(%rsp), %rbx
movq 0x70(%rsp), %rdi
movq %rbx, %rsi
callq 0x9318
movq %rbx, %rdi
callq 0x9088
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x549c
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
leaq 0x20(%rsp), %rdx
leaq 0x7(%rsp), %rcx
callq 0x9032
leaq 0x8(%rsp), %rbx
movq 0x68(%rsp), %rdi
movq %rbx, %rsi
callq 0x9318
movq %rbx, %rdi
callq 0x9088
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x549c
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
leaq 0x20(%rsp), %rdx
leaq 0x7(%rsp), %rcx
callq 0x9032
leaq 0x8(%rsp), %rbx
movq 0x60(%rsp), %rdi
movq %rbx, %rsi
callq 0x9318
movq %rbx, %rdi
callq 0x9088
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x549c
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
leaq 0x20(%rsp), %rdx
leaq 0x7(%rsp), %rcx
callq 0x9032
leaq 0x8(%rsp), %rbx
movq 0x58(%rsp), %rdi
movq %rbx, %rsi
callq 0x9318
movq %rbx, %rdi
callq 0x9088
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x549c
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
leaq 0x20(%rsp), %rdx
leaq 0x7(%rsp), %rcx
callq 0x9032
leaq 0x8(%rsp), %rbx
movq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x9318
movq %rbx, %rdi
callq 0x9088
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x549c
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
leaq 0x20(%rsp), %rdx
leaq 0x7(%rsp), %rcx
callq 0x9032
leaq 0x8(%rsp), %rbx
movq 0x48(%rsp), %rdi
movq %rbx, %rsi
callq 0x9318
movq %rbx, %rdi
callq 0x9088
leaq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x549c
xorps %xmm0, %xmm0
movaps %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
leaq 0x8(%rsp), %rdi
pushq $0x8
popq %rsi
leaq 0x20(%rsp), %rdx
leaq 0x7(%rsp), %rcx
callq 0x9032
leaq 0x8(%rsp), %rbx
movq 0x40(%rsp), %rdi
movq %rbx, %rsi
callq 0x9318
movq %rbx, %rdi
callq 0x9088
leaq 0x20(%rsp), %rdi
callq 0x549c
leaq 0x8b8e(%rip), %rsi      # 0xf8e9
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
movq %r13, %rsi
callq 0x2100
leaq 0x8b79(%rip), %rsi      # 0xf8ee
movq %rax, %rdi
callq 0x2180
movq 0xf50c(%rip), %rsi      # 0x16290
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8b57(%rip), %rsi      # 0xf8f2
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8b4d(%rip), %rsi      # 0xf8ff
movq %r15, %rdi
callq 0x2180
pushq $0x4
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8b36(%rip), %rsi      # 0xf90a
movq %r15, %rdi
callq 0x2180
pushq $0x8
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8b1f(%rip), %rsi      # 0xf915
movq %r15, %rdi
callq 0x2180
pushq $0x8
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8b11(%rip), %rsi      # 0xf929
movq %r15, %rdi
callq 0x2180
pushq $0x10
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8b05(%rip), %rsi      # 0xf93f
movq %r15, %rdi
callq 0x2180
pushq $0x8
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8af6(%rip), %rsi      # 0xf952
movq %r15, %rdi
callq 0x2180
pushq $0x10
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8ae5(%rip), %rsi      # 0xf963
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ae2(%rip), %rsi      # 0xf977
movq %r15, %rdi
callq 0x2180
movl $0xf4240, %esi          # imm = 0xF4240
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8acb(%rip), %rsi      # 0xf984
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ad1(%rip), %rsi      # 0xf9a1
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ad0(%rip), %rsi      # 0xf9b7
movq %r15, %rdi
callq 0x2180
pushq $0x3
popq %rsi
movq %rax, %rdi
callq 0x22e0
movq %rax, %rdi
callq 0x20b0
leaq 0x8acc(%rip), %rsi      # 0xf9d5
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8acb(%rip), %rsi      # 0xf9eb
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ac8(%rip), %rsi      # 0xf9ff
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ac3(%rip), %rsi      # 0xfa11
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ac1(%rip), %rsi      # 0xfa26
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ac0(%rip), %rsi      # 0xfa3c
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ab9(%rip), %rsi      # 0xfa4c
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8ab4(%rip), %rsi      # 0xfa5e
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8aaf(%rip), %rsi      # 0xfa70
movq %r15, %rdi
callq 0x2180
leaq 0x8a66(%rip), %rsi      # 0xfa36
movq %rax, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8a9e(%rip), %rsi      # 0xfa85
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8a94(%rip), %rsi      # 0xfa92
movq %r15, %rdi
callq 0x2180
pushq $0x8
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8a7d(%rip), %rsi      # 0xfa9d
movq %r15, %rdi
callq 0x2180
movl $0x10000, %esi          # imm = 0x10000
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8a63(%rip), %rsi      # 0xfaa7
movq %r15, %rdi
callq 0x2180
movl $0x800, %esi            # imm = 0x800
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8a49(%rip), %rsi      # 0xfab1
movq %r15, %rdi
callq 0x2180
pushq $0x4
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8a35(%rip), %rsi      # 0xfabf
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x8a32(%rip), %rsi      # 0xfad3
movq %r15, %rdi
callq 0x2180
movsd 0x87bf(%rip), %xmm0     # 0xf870
movq %rax, %rdi
callq 0x2290
movq %rax, %rdi
callq 0x20b0
leaq 0x8a10(%rip), %rsi      # 0xfad8
movq %r15, %rdi
callq 0x2180
pushq $0x9
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x89f2(%rip), %rsi      # 0xfadc
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x89e0(%rip), %rsi      # 0xfae1
movq %r15, %rdi
callq 0x2180
pushq $0x8
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x89c2(%rip), %rsi      # 0xfae5
movq %r15, %rdi
callq 0x2180
pushq $0x18
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x89a6(%rip), %rsi      # 0xfaeb
movq %r15, %rdi
callq 0x2180
pushq $0x9
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x898a(%rip), %rsi      # 0xfaf1
movq %r15, %rdi
callq 0x2180
pushq $0x4
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x896e(%rip), %rsi      # 0xfaf7
movq %r15, %rdi
callq 0x2180
pushq $0x21
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8951(%rip), %rsi      # 0xfafc
movq %r15, %rdi
callq 0x2180
pushq $0x9
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8934(%rip), %rsi      # 0xfb01
movq %r15, %rdi
callq 0x2180
pushq $0x4
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8918(%rip), %rsi      # 0xfb07
movq %r15, %rdi
callq 0x2180
pushq $0x5
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x88fc(%rip), %rsi      # 0xfb0d
movq %r15, %rdi
callq 0x2180
pushq $0x5
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x88e0(%rip), %rsi      # 0xfb13
movq %r15, %rdi
callq 0x2180
pushq $0xa
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x88c3(%rip), %rsi      # 0xfb18
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x88b4(%rip), %rsi      # 0xfb20
movq %r15, %rdi
callq 0x2180
pushq $0x6b
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8898(%rip), %rsi      # 0xfb26
movq %r15, %rdi
callq 0x2180
pushq $0x14
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x887c(%rip), %rsi      # 0xfb2c
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x886c(%rip), %rsi      # 0xfb33
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x885b(%rip), %rsi      # 0xfb39
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x884b(%rip), %rsi      # 0xfb40
movq %r15, %rdi
callq 0x2180
pushq $0x4b
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x882f(%rip), %rsi      # 0xfb46
movq %r15, %rdi
callq 0x2180
pushq $0x5a
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8813(%rip), %rsi      # 0xfb4c
movq %r15, %rdi
callq 0x2180
pushq $0x1e
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x87f8(%rip), %rsi      # 0xfb53
movq %r15, %rdi
callq 0x2180
pushq $0x23
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x87dd(%rip), %rsi      # 0xfb5a
movq %r15, %rdi
callq 0x2180
pushq $0x28
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x87c2(%rip), %rsi      # 0xfb61
movq %r15, %rdi
callq 0x2180
pushq $0x23
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x87a8(%rip), %rsi      # 0xfb69
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
leaq 0x879a(%rip), %rsi      # 0xfb72
movq %r15, %rdi
callq 0x2180
pushq $0x2d
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x877f(%rip), %rsi      # 0xfb79
movq %r15, %rdi
callq 0x2180
movl $0x9b, %esi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8762(%rip), %rsi      # 0xfb80
movq %r15, %rdi
callq 0x2180
movl $0x96, %esi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8745(%rip), %rsi      # 0xfb87
movq %r15, %rdi
callq 0x2180
movl $0xe6, %esi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x8727(%rip), %rsi      # 0xfb8d
movq %r15, %rdi
callq 0x2180
pushq $0xc
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x870b(%rip), %rsi      # 0xfb93
movq %r15, %rdi
callq 0x2180
pushq $0x10
popq %rsi
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x86f0(%rip), %rsi      # 0xfb9a
movq %r15, %rdi
callq 0x2180
movl $0x122, %esi            # imm = 0x122
movq %rax, %rdi
callq 0x2100
movq %rax, %rdi
callq 0x20b0
leaq 0x86d2(%rip), %rsi      # 0xfba0
movq %r15, %rdi
callq 0x2180
movq %rax, %rdi
callq 0x20b0
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x74fe
jmp 0x74fe
jmp 0x74fe
jmp 0x74fe
jmp 0x74fe
jmp 0x74fe
jmp 0x74fe
movq %rax, %r13
leaq 0x20(%rsp), %rdi
callq 0x549c
jmp 0x7546
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
jmp 0x7543
movq %rax, %r13
movl $0x200, %esi            # imm = 0x200
movq %rbp, %rdi
callq 0x21b0
jmp 0x7546
movq %rax, %r13
jmp 0x754e
movq %rax, %r13
jmp 0x7556
jmp 0x7543
movq %rax, %r13
movq %r12, %rdi
callq 0x2320
movq %r15, %rdi
callq 0x2320
leaq 0x250(%r14), %rbx
leaq 0x270(%r14), %rdi
addq $0x230, %r14            # imm = 0x230
callq 0x549c
movq %rbx, %rdi
callq 0x549c
movq %r14, %rdi
callq 0x549c
movq 0x40(%rsp), %rdi
callq 0x9088
movq 0x48(%rsp), %rdi
callq 0x9088
movq 0x50(%rsp), %rdi
callq 0x9088
movq 0x58(%rsp), %rdi
callq 0x9088
movq 0x60(%rsp), %rdi
callq 0x9088
movq 0x68(%rsp), %rdi
callq 0x9088
movq 0x70(%rsp), %rdi
callq 0x9088
movq 0x78(%rsp), %rdi
callq 0x9088
movq 0x80(%rsp), %rdi
callq 0x549c
movq 0x88(%rsp), %rdi
callq 0x549c
movq 0x90(%rsp), %rdi
callq 0x549c
movq 0x98(%rsp), %rdi
callq 0x549c
movq 0xa0(%rsp), %rdi
callq 0x549c
movq 0xa8(%rsp), %rdi
callq 0x549c
movq 0xb0(%rsp), %rdi
callq 0x549c
movq 0xb8(%rsp), %rdi
callq 0x549c
movq 0xc0(%rsp), %rdi
callq 0x5504
movq 0xc8(%rsp), %rdi
callq 0x549c
movq 0xd0(%rsp), %rdi
callq 0x549c
movq 0xd8(%rsp), %rdi
callq 0x5504
movq %r13, %rdi
callq 0x22f0