// File: sus304[P]ForRocket/src/solver/trajectory_solver.cpp
// Function: forrocket::TrajectorySolver::TrajectorySolver(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
forrocket::TrajectorySolver::TrajectorySolver(std::string solver_config_json_file) {
    JsonControl jc_solver_config(solver_config_json_file);
    
    model_id = jc_solver_config.getString("Model ID");
    number_stage = jc_solver_config.getInt("Number of Stage");

    // Making Stage instance
    RocketStageFactory stage_factory;
    for (int i=1; i <= number_stage; ++i) {
        auto jc_stage = JsonControl(jc_solver_config.getString("Stage"+std::to_string(i)+" Config File List"));
        stage_vector.push_back(stage_factory.Create(i, 
                                                jc_stage.getString("Rocket Configuration File Path"),
                                                jc_stage.getString("Engine Configuration File Path"),
                                                jc_stage.getString("Sequence of Event File Path")));
    }

    for (auto& stage : stage_vector) {
        stage.fdr = FlightDataRecorder(&stage.rocket);
    }

    // Prepare Launch - Master Clock
    DateTime launch_date(jc_solver_config.getString("Launch DateTime"));
    master_clock = SequenceClock(launch_date, 0.0);

    // Prepare Launch - Position Velocity Attitude
    Rocket& rocket_first_stage = stage_vector[0].rocket;
    auto jc_launch = jc_solver_config.getSubItem("Launch Condition");

    Eigen::Vector3d pos_init_LLH;
    pos_init_LLH << jc_launch.getDouble("Latitude [deg]"), jc_launch.getDouble("Longitude [deg]"), jc_launch.getDouble("Height for WGS84 [deg]");

    rocket_first_stage.position.Initialize(master_clock.UTC_date_init, pos_init_LLH);

    Eigen::Vector3d vel_init_NED;
    vel_init_NED << jc_launch.getDouble("North Velocity [m/s]"), jc_launch.getDouble("East Velocity [m/s]"), jc_launch.getDouble("Down Velocity [m/s]");
    rocket_first_stage.velocity.Initialize(master_clock.UTC_date_init, vel_init_NED, pos_init_LLH, rocket_first_stage.position.ECI);

    Eigen::Vector3d euler;
    euler << jc_launch.getDouble("Azimuth [deg]"), jc_launch.getDouble("Elevation [deg]"), 0.0;
    euler = euler / 180.0 * 3.14159265;
    rocket_first_stage.attitude.Initialize(euler);

    rocket_first_stage.angular_velocity << 0.0, 0.0, 0.0;

    // Prepare Launch - Wind
    auto jc_wind = jc_solver_config.getSubItem("Wind Condition");
    if (jc_wind.getBool("Enable Wind")) {
        wind = EnvironmentWind(jc_wind.getString("Wind File Path"));
    } else {
        wind = EnvironmentWind(false);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1fc0, %rsp           # imm = 0x1FC0
movq %rsi, -0x1e88(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x1e70(%rbp)
movq %rdi, %rax
movq %rax, -0x1e80(%rbp)
callq 0x65f0
movq -0x1e70(%rbp), %rdi
addq $0x28, %rdi
movq %rdi, -0x1e78(%rbp)
callq 0x873f0
movq -0x1e70(%rbp), %rdi
addq $0x40, %rdi
callq 0x34530
jmp 0x8570d
movq -0x1e80(%rbp), %rdi
addq $0x88, %rdi
movq %rdi, -0x1e90(%rbp)
callq 0x87410
jmp 0x85729
movq -0x1e88(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x6200
jmp 0x8573b
leaq -0x30(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0xa340
jmp 0x8574a
leaq -0x50(%rbp), %rdi
callq 0x6898
leaq -0x91(%rbp), %rdi
movq %rdi, -0x1e98(%rbp)
callq 0x6770
movq -0x1e98(%rbp), %rdx
leaq 0x20fc7(%rip), %rsi     # 0xa673b
leaq -0x90(%rbp), %rdi
callq 0xd1d0
jmp 0x85782
leaq -0x70(%rbp), %rdi
leaq -0x30(%rbp), %rsi
leaq -0x90(%rbp), %rdx
callq 0xa520
jmp 0x85798
movq -0x1e80(%rbp), %rdi
leaq -0x70(%rbp), %rsi
movq %rsi, -0x1ea8(%rbp)
callq 0x6510
movq -0x1ea8(%rbp), %rdi
callq 0x6898
leaq -0x90(%rbp), %rdi
callq 0x6898
leaq -0x91(%rbp), %rdi
callq 0x6490
leaq -0xb9(%rbp), %rdi
movq %rdi, -0x1ea0(%rbp)
callq 0x6770
movq -0x1ea0(%rbp), %rdx
leaq 0x20f50(%rip), %rsi     # 0xa6744
leaq -0xb8(%rbp), %rdi
callq 0xd1d0
jmp 0x85802
leaq -0x30(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0xa570
movl %eax, -0x1eac(%rbp)
jmp 0x8581a
movq -0x1e80(%rbp), %rax
movl -0x1eac(%rbp), %ecx
movl %ecx, 0x20(%rax)
leaq -0xb8(%rbp), %rdi
callq 0x6898
leaq -0xb9(%rbp), %rdi
callq 0x6490
movl $0x1, -0xc0(%rbp)
movq -0x1e80(%rbp), %rcx
movl -0xc0(%rbp), %eax
cmpl 0x20(%rcx), %eax
jg 0x85d0e
movl -0xc0(%rbp), %esi
leaq -0x150(%rbp), %rdi
callq 0xe9c0
jmp 0x85876
leaq 0x20ed1(%rip), %rsi     # 0xa674e
leaq -0x130(%rbp), %rdi
leaq -0x150(%rbp), %rdx
callq 0x1a230
jmp 0x85892
leaq 0x20ebb(%rip), %rdx     # 0xa6754
leaq -0x110(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0xe790
jmp 0x858ae
leaq -0xf0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
leaq -0x110(%rbp), %rdx
callq 0xa520
jmp 0x858c7
leaq -0xd0(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0xa340
jmp 0x858dc
leaq -0xf0(%rbp), %rdi
callq 0x6898
leaq -0x110(%rbp), %rdi
callq 0x6898
leaq -0x130(%rbp), %rdi
callq 0x6898
leaq -0x150(%rbp), %rdi
callq 0x6898
movq -0x1e80(%rbp), %rax
addq $0x28, %rax
movq %rax, -0x1ec8(%rbp)
movl -0xc0(%rbp), %eax
movl %eax, -0x1ebc(%rbp)
leaq -0x13a1(%rbp), %rdi
movq %rdi, -0x1eb8(%rbp)
callq 0x6770
movq -0x1eb8(%rbp), %rdx
leaq 0x20e1b(%rip), %rsi     # 0xa6766
leaq -0x13a0(%rbp), %rdi
callq 0xd1d0
jmp 0x85959
leaq -0x1380(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0x13a0(%rbp), %rdx
callq 0xa520
jmp 0x85975
leaq -0x13e9(%rbp), %rdi
movq %rdi, -0x1ed0(%rbp)
callq 0x6770
movq -0x1ed0(%rbp), %rdx
leaq 0x20def(%rip), %rsi     # 0xa6785
leaq -0x13e8(%rbp), %rdi
callq 0xd1d0
jmp 0x859a4
leaq -0x13c8(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0x13e8(%rbp), %rdx
callq 0xa520
jmp 0x859c0
leaq -0x1431(%rbp), %rdi
movq %rdi, -0x1ed8(%rbp)
callq 0x6770
movq -0x1ed8(%rbp), %rdx
leaq 0x20dc3(%rip), %rsi     # 0xa67a4
leaq -0x1430(%rbp), %rdi
callq 0xd1d0
jmp 0x859ef
leaq -0x1410(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
leaq -0x1430(%rbp), %rdx
callq 0xa520
jmp 0x85a0b
movl -0x1ebc(%rbp), %edx
leaq -0x1360(%rbp), %rdi
leaq -0xba(%rbp), %rsi
leaq -0x1380(%rbp), %rcx
leaq -0x13c8(%rbp), %r8
leaq -0x1410(%rbp), %r9
callq 0x77ec0
jmp 0x85a3b
movq -0x1ec8(%rbp), %rdi
leaq -0x1360(%rbp), %rsi
callq 0x87460
jmp 0x85a50
leaq -0x1360(%rbp), %rdi
callq 0x79aa0
leaq -0x1410(%rbp), %rdi
callq 0x6898
leaq -0x1430(%rbp), %rdi
callq 0x6898
leaq -0x1431(%rbp), %rdi
callq 0x6490
leaq -0x13c8(%rbp), %rdi
callq 0x6898
leaq -0x13e8(%rbp), %rdi
callq 0x6898
leaq -0x13e9(%rbp), %rdi
callq 0x6490
leaq -0x1380(%rbp), %rdi
callq 0x6898
leaq -0x13a0(%rbp), %rdi
callq 0x6898
leaq -0x13a1(%rbp), %rdi
callq 0x6490
leaq -0xd0(%rbp), %rdi
callq 0xaca0
movl -0xc0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc0(%rbp)
jmp 0x8584c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86b35
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86b29
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x6898
jmp 0x86b29
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85b4a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x6898
leaq -0x91(%rbp), %rdi
callq 0x6490
jmp 0x86b20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85b81
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x6898
leaq -0xb9(%rbp), %rdi
callq 0x6490
jmp 0x86b20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86b20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85bfd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85bf1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85be5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0xf0(%rbp), %rdi
callq 0x6898
leaq -0x110(%rbp), %rdi
callq 0x6898
leaq -0x130(%rbp), %rdi
callq 0x6898
leaq -0x150(%rbp), %rdi
callq 0x6898
jmp 0x86b20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85cf1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85ce5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85ccd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85cc1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85ca9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85c9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x85c91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1360(%rbp), %rdi
callq 0x79aa0
leaq -0x1410(%rbp), %rdi
callq 0x6898
leaq -0x1430(%rbp), %rdi
callq 0x6898
leaq -0x1431(%rbp), %rdi
callq 0x6490
leaq -0x13c8(%rbp), %rdi
callq 0x6898
leaq -0x13e8(%rbp), %rdi
callq 0x6898
leaq -0x13e9(%rbp), %rdi
callq 0x6490
leaq -0x1380(%rbp), %rdi
callq 0x6898
leaq -0x13a0(%rbp), %rdi
callq 0x6898
leaq -0x13a1(%rbp), %rdi
callq 0x6490
leaq -0xd0(%rbp), %rdi
callq 0xaca0
jmp 0x86b20
movq -0x1e80(%rbp), %rax
addq $0x28, %rax
movq %rax, -0x1440(%rbp)
movq -0x1440(%rbp), %rdi
callq 0x87490
movq %rax, -0x1448(%rbp)
movq -0x1440(%rbp), %rdi
callq 0x874c0
movq %rax, -0x1450(%rbp)
leaq -0x1448(%rbp), %rdi
leaq -0x1450(%rbp), %rsi
callq 0x874f0
testb $0x1, %al
jne 0x85d5f
jmp 0x85dbf
leaq -0x1448(%rbp), %rdi
callq 0x87530
movq %rax, -0x1458(%rbp)
movq -0x1458(%rbp), %rsi
addq $0x10, %rsi
leaq -0x1728(%rbp), %rdi
callq 0x44030
jmp 0x85d8b
movq -0x1458(%rbp), %rdi
addq $0xe80, %rdi            # imm = 0xE80
leaq -0x1728(%rbp), %rsi
callq 0x87550
leaq -0x1728(%rbp), %rdi
callq 0x79ae0
leaq -0x1448(%rbp), %rdi
callq 0x87870
jmp 0x85d46
leaq -0x1789(%rbp), %rdi
movq %rdi, -0x1ee0(%rbp)
callq 0x6770
movq -0x1ee0(%rbp), %rdx
leaq 0x209e0(%rip), %rsi     # 0xa67c0
leaq -0x1788(%rbp), %rdi
callq 0xd1d0
jmp 0x85dee
leaq -0x1768(%rbp), %rdi
leaq -0x30(%rbp), %rsi
leaq -0x1788(%rbp), %rdx
callq 0xa520
jmp 0x85e07
leaq -0x1744(%rbp), %rdi
leaq -0x1768(%rbp), %rsi
callq 0x33ba0
jmp 0x85e1c
leaq -0x1768(%rbp), %rdi
callq 0x6898
leaq -0x1788(%rbp), %rdi
callq 0x6898
leaq -0x1789(%rbp), %rdi
callq 0x6490
leaq -0x17f4(%rbp), %rdi
leaq -0x1744(%rbp), %rsi
callq 0x33f00
jmp 0x85e55
leaq -0x17d8(%rbp), %rdi
leaq -0x17f4(%rbp), %rsi
xorps %xmm0, %xmm0
callq 0x345e0
jmp 0x85e6d
movq -0x1e80(%rbp), %rdi
addq $0x40, %rdi
leaq -0x17d8(%rbp), %rsi
callq 0x52a90
jmp 0x85e86
movq -0x1e80(%rbp), %rdi
addq $0x28, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x87890
addq $0x10, %rax
movq %rax, -0x1800(%rbp)
leaq -0x1831(%rbp), %rdi
movq %rdi, -0x1ee8(%rbp)
callq 0x6770
movq -0x1ee8(%rbp), %rdx
leaq 0x2090a(%rip), %rsi     # 0xa67d0
leaq -0x1830(%rbp), %rdi
callq 0xd1d0
jmp 0x85ed4
leaq -0x1810(%rbp), %rdi
leaq -0x30(%rbp), %rsi
leaq -0x1830(%rbp), %rdx
callq 0xa600
jmp 0x85eed
leaq -0x1830(%rbp), %rdi
callq 0x6898
leaq -0x1831(%rbp), %rdi
callq 0x6490
leaq -0x1850(%rbp), %rdi
callq 0x2f9d0
jmp 0x85f13
leaq -0x1899(%rbp), %rdi
movq %rdi, -0x1ef0(%rbp)
callq 0x6770
movq -0x1ef0(%rbp), %rdx
leaq 0x208ad(%rip), %rsi     # 0xa67e1
leaq -0x1898(%rbp), %rdi
callq 0xd1d0
jmp 0x85f42
leaq -0x1810(%rbp), %rdi
leaq -0x1898(%rbp), %rsi
callq 0xa5a0
movsd %xmm0, -0x1ef8(%rbp)
jmp 0x85f5f
movsd -0x1ef8(%rbp), %xmm0
movsd %xmm0, -0x1878(%rbp)
leaq -0x1870(%rbp), %rdi
leaq -0x1850(%rbp), %rsi
leaq -0x1878(%rbp), %rdx
callq 0x2f9f0
jmp 0x85f8b
leaq -0x18c9(%rbp), %rdi
movq %rdi, -0x1f00(%rbp)
callq 0x6770
movq -0x1f00(%rbp), %rdx
leaq 0x20844(%rip), %rsi     # 0xa67f0
leaq -0x18c8(%rbp), %rdi
callq 0xd1d0
jmp 0x85fba
leaq -0x1810(%rbp), %rdi
leaq -0x18c8(%rbp), %rsi
callq 0xa5a0
movsd %xmm0, -0x1f08(%rbp)
jmp 0x85fd7
movsd -0x1f08(%rbp), %xmm0
movsd %xmm0, -0x18a8(%rbp)
leaq -0x1870(%rbp), %rdi
leaq -0x18a8(%rbp), %rsi
callq 0x2fa30
movq %rax, -0x1f10(%rbp)
jmp 0x86003
leaq -0x18f9(%rbp), %rdi
movq %rdi, -0x1f18(%rbp)
callq 0x6770
movq -0x1f18(%rbp), %rdx
leaq 0x207dc(%rip), %rsi     # 0xa6800
leaq -0x18f8(%rbp), %rdi
callq 0xd1d0
jmp 0x86032
leaq -0x1810(%rbp), %rdi
leaq -0x18f8(%rbp), %rsi
callq 0xa5a0
movsd %xmm0, -0x1f20(%rbp)
jmp 0x8604f
movq -0x1f10(%rbp), %rdi
movsd -0x1f20(%rbp), %xmm0
movsd %xmm0, -0x18d8(%rbp)
leaq -0x18d8(%rbp), %rsi
callq 0x2fa30
jmp 0x86074
leaq -0x18f8(%rbp), %rdi
callq 0x6898
leaq -0x18f9(%rbp), %rdi
callq 0x6490
leaq -0x18c8(%rbp), %rdi
callq 0x6898
leaq -0x18c9(%rbp), %rdi
callq 0x6490
leaq -0x1870(%rbp), %rdi
callq 0x2fba0
leaq -0x1898(%rbp), %rdi
callq 0x6898
leaq -0x1899(%rbp), %rdi
callq 0x6490
movq -0x1e80(%rbp), %rsi
movq -0x1800(%rbp), %rax
addq $0x2a0, %rax            # imm = 0x2A0
movq %rax, -0x1f28(%rbp)
addq $0x58, %rsi
leaq -0x1918(%rbp), %rdi
callq 0x33f00
jmp 0x860f5
movq -0x1f28(%rbp), %rdi
leaq -0x1918(%rbp), %rsi
leaq -0x1850(%rbp), %rdx
callq 0x3e580
jmp 0x86111
leaq -0x1930(%rbp), %rdi
callq 0x2f9d0
jmp 0x8611f
leaq -0x1979(%rbp), %rdi
movq %rdi, -0x1f30(%rbp)
callq 0x6770
movq -0x1f30(%rbp), %rdx
leaq 0x206d7(%rip), %rsi     # 0xa6817
leaq -0x1978(%rbp), %rdi
callq 0xd1d0
jmp 0x8614e
leaq -0x1810(%rbp), %rdi
leaq -0x1978(%rbp), %rsi
callq 0xa5a0
movsd %xmm0, -0x1f38(%rbp)
jmp 0x8616b
movsd -0x1f38(%rbp), %xmm0
movsd %xmm0, -0x1958(%rbp)
leaq -0x1950(%rbp), %rdi
leaq -0x1930(%rbp), %rsi
leaq -0x1958(%rbp), %rdx
callq 0x2f9f0
jmp 0x86197
leaq -0x19a9(%rbp), %rdi
movq %rdi, -0x1f40(%rbp)
callq 0x6770
movq -0x1f40(%rbp), %rdx
leaq 0x20674(%rip), %rsi     # 0xa682c
leaq -0x19a8(%rbp), %rdi
callq 0xd1d0
jmp 0x861c6
leaq -0x1810(%rbp), %rdi
leaq -0x19a8(%rbp), %rsi
callq 0xa5a0
movsd %xmm0, -0x1f48(%rbp)
jmp 0x861e3
movsd -0x1f48(%rbp), %xmm0
movsd %xmm0, -0x1988(%rbp)
leaq -0x1950(%rbp), %rdi
leaq -0x1988(%rbp), %rsi
callq 0x2fa30
movq %rax, -0x1f50(%rbp)
jmp 0x8620f
leaq -0x19d9(%rbp), %rdi
movq %rdi, -0x1f58(%rbp)
callq 0x6770
movq -0x1f58(%rbp), %rdx
leaq 0x20610(%rip), %rsi     # 0xa6840
leaq -0x19d8(%rbp), %rdi
callq 0xd1d0
jmp 0x8623e
leaq -0x1810(%rbp), %rdi
leaq -0x19d8(%rbp), %rsi
callq 0xa5a0
movsd %xmm0, -0x1f60(%rbp)
jmp 0x8625b
movq -0x1f50(%rbp), %rdi
movsd -0x1f60(%rbp), %xmm0
movsd %xmm0, -0x19b8(%rbp)
leaq -0x19b8(%rbp), %rsi
callq 0x2fa30
jmp 0x86280
leaq -0x19d8(%rbp), %rdi
callq 0x6898
leaq -0x19d9(%rbp), %rdi
callq 0x6490
leaq -0x19a8(%rbp), %rdi
callq 0x6898
leaq -0x19a9(%rbp), %rdi
callq 0x6490
leaq -0x1950(%rbp), %rdi
callq 0x2fba0
leaq -0x1978(%rbp), %rdi
callq 0x6898
leaq -0x1979(%rbp), %rdi
callq 0x6490
movq -0x1e80(%rbp), %rsi
movq -0x1800(%rbp), %rax
addq $0x2e8, %rax            # imm = 0x2E8
movq %rax, -0x1f68(%rbp)
addq $0x58, %rsi
leaq -0x19f8(%rbp), %rdi
callq 0x33f00
jmp 0x86301
movq -0x1f68(%rbp), %rdi
movq -0x1800(%rbp), %r8
addq $0x2a0, %r8             # imm = 0x2A0
leaq -0x19f8(%rbp), %rsi
leaq -0x1930(%rbp), %rdx
leaq -0x1850(%rbp), %rcx
callq 0x41710
jmp 0x86332
leaq -0x1a10(%rbp), %rdi
callq 0x2f9d0
jmp 0x86340
leaq -0x1a59(%rbp), %rdi
movq %rdi, -0x1f70(%rbp)
callq 0x6770
movq -0x1f70(%rbp), %rdx
leaq 0x204f3(%rip), %rsi     # 0xa6854
leaq -0x1a58(%rbp), %rdi
callq 0xd1d0
jmp 0x8636f
leaq -0x1810(%rbp), %rdi
leaq -0x1a58(%rbp), %rsi
callq 0xa5a0
movsd %xmm0, -0x1f78(%rbp)
jmp 0x8638c
movsd -0x1f78(%rbp), %xmm0
movsd %xmm0, -0x1a38(%rbp)
leaq -0x1a30(%rbp), %rdi
leaq -0x1a10(%rbp), %rsi
leaq -0x1a38(%rbp), %rdx
callq 0x2f9f0
jmp 0x863b8
leaq -0x1a89(%rbp), %rdi
movq %rdi, -0x1f80(%rbp)
callq 0x6770
movq -0x1f80(%rbp), %rdx
leaq 0x20489(%rip), %rsi     # 0xa6862
leaq -0x1a88(%rbp), %rdi
callq 0xd1d0
jmp 0x863e7
leaq -0x1810(%rbp), %rdi
leaq -0x1a88(%rbp), %rsi
callq 0xa5a0
movsd %xmm0, -0x1f88(%rbp)
jmp 0x86404
movsd -0x1f88(%rbp), %xmm0
movsd %xmm0, -0x1a68(%rbp)
leaq -0x1a30(%rbp), %rdi
leaq -0x1a68(%rbp), %rsi
callq 0x2fa30
movq %rax, -0x1f90(%rbp)
jmp 0x86430
movq -0x1f90(%rbp), %rdi
movq $0x0, -0x1a98(%rbp)
leaq -0x1a98(%rbp), %rsi
callq 0x2fa30
jmp 0x86450
leaq -0x1a88(%rbp), %rdi
callq 0x6898
leaq -0x1a89(%rbp), %rdi
callq 0x6490
leaq -0x1a30(%rbp), %rdi
callq 0x2fba0
leaq -0x1a58(%rbp), %rdi
callq 0x6898
leaq -0x1a59(%rbp), %rdi
callq 0x6490
movabsq $0x4066800000000000, %rax # imm = 0x4066800000000000
movq %rax, -0x1b00(%rbp)
leaq -0x1af8(%rbp), %rdi
leaq -0x1a10(%rbp), %rsi
leaq -0x1b00(%rbp), %rdx
callq 0x5af70
jmp 0x864b9
movabsq $0x400921fb53c8d4f1, %rax # imm = 0x400921FB53C8D4F1
movq %rax, -0x1b08(%rbp)
leaq -0x1ad8(%rbp), %rdi
leaq -0x1af8(%rbp), %rsi
leaq -0x1b08(%rbp), %rdx
callq 0x878b0
jmp 0x864e6
leaq -0x1a10(%rbp), %rdi
leaq -0x1ad8(%rbp), %rsi
callq 0x87960
jmp 0x864fb
movq -0x1800(%rbp), %rdi
addq $0x3d0, %rdi            # imm = 0x3D0
leaq -0x1a10(%rbp), %rsi
callq 0x377c0
jmp 0x86517
movq -0x1800(%rbp), %rsi
addq $0x430, %rsi            # imm = 0x430
movq $0x0, -0x1b30(%rbp)
leaq -0x1b28(%rbp), %rdi
leaq -0x1b30(%rbp), %rdx
callq 0x2f9f0
jmp 0x86545
movq $0x0, -0x1b38(%rbp)
leaq -0x1b28(%rbp), %rdi
leaq -0x1b38(%rbp), %rsi
callq 0x2fa30
movq %rax, -0x1f98(%rbp)
jmp 0x8656c
movq -0x1f98(%rbp), %rdi
movq $0x0, -0x1b40(%rbp)
leaq -0x1b40(%rbp), %rsi
callq 0x2fa30
jmp 0x8658c
leaq -0x1b28(%rbp), %rdi
callq 0x2fba0
leaq -0x1b71(%rbp), %rdi
movq %rdi, -0x1fa0(%rbp)
callq 0x6770
movq -0x1fa0(%rbp), %rdx
leaq 0x202b9(%rip), %rsi     # 0xa6872
leaq -0x1b70(%rbp), %rdi
callq 0xd1d0
jmp 0x865c7
leaq -0x1b50(%rbp), %rdi
leaq -0x30(%rbp), %rsi
leaq -0x1b70(%rbp), %rdx
callq 0xa600
jmp 0x865e0
leaq -0x1b70(%rbp), %rdi
callq 0x6898
leaq -0x1b71(%rbp), %rdi
callq 0x6490
leaq -0x1b99(%rbp), %rdi
movq %rdi, -0x1fa8(%rbp)
callq 0x6770
movq -0x1fa8(%rbp), %rdx
leaq 0x20268(%rip), %rsi     # 0xa6881
leaq -0x1b98(%rbp), %rdi
callq 0xd1d0
jmp 0x86627
leaq -0x1b50(%rbp), %rdi
leaq -0x1b98(%rbp), %rsi
callq 0xa5d0
movb %al, -0x1fa9(%rbp)
jmp 0x86642
leaq -0x1b98(%rbp), %rdi
callq 0x6898
leaq -0x1b99(%rbp), %rdi
callq 0x6490
movb -0x1fa9(%rbp), %al
testb $0x1, %al
jne 0x86669
jmp 0x86a7c
leaq -0x1d21(%rbp), %rdi
movq %rdi, -0x1fb8(%rbp)
callq 0x6770
movq -0x1fb8(%rbp), %rdx
leaq 0x20203(%rip), %rsi     # 0xa688d
leaq -0x1d20(%rbp), %rdi
callq 0xd1d0
jmp 0x86698
leaq -0x1d00(%rbp), %rdi
leaq -0x1b50(%rbp), %rsi
leaq -0x1d20(%rbp), %rdx
callq 0xa520
jmp 0x866b4
leaq -0x1ce0(%rbp), %rdi
leaq -0x1d00(%rbp), %rsi
callq 0x36110
jmp 0x866c9
movq -0x1e80(%rbp), %rdi
addq $0x88, %rdi
leaq -0x1ce0(%rbp), %rsi
callq 0x87990
jmp 0x866e5
leaq -0x1ce0(%rbp), %rdi
callq 0x879e0
leaq -0x1d00(%rbp), %rdi
callq 0x6898
leaq -0x1d20(%rbp), %rdi
callq 0x6898
leaq -0x1d21(%rbp), %rdi
callq 0x6490
jmp 0x86ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x8675a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x8674e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1768(%rbp), %rdi
callq 0x6898
leaq -0x1788(%rbp), %rdi
callq 0x6898
leaq -0x1789(%rbp), %rdi
callq 0x6490
jmp 0x86b20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86791
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1830(%rbp), %rdi
callq 0x6898
leaq -0x1831(%rbp), %rdi
callq 0x6490
jmp 0x86b20
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86b14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86850
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86844
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x8682c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86820
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86814
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x18f8(%rbp), %rdi
callq 0x6898
leaq -0x18f9(%rbp), %rdi
callq 0x6490
leaq -0x18c8(%rbp), %rdi
callq 0x6898
leaq -0x18c9(%rbp), %rdi
callq 0x6490
leaq -0x1870(%rbp), %rdi
callq 0x2fba0
leaq -0x1898(%rbp), %rdi
callq 0x6898
leaq -0x1899(%rbp), %rdi
callq 0x6490
jmp 0x86b14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x868fe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x868f2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x868da
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x868ce
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x868c2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x19d8(%rbp), %rdi
callq 0x6898
leaq -0x19d9(%rbp), %rdi
callq 0x6490
leaq -0x19a8(%rbp), %rdi
callq 0x6898
leaq -0x19a9(%rbp), %rdi
callq 0x6490
leaq -0x1950(%rbp), %rdi
callq 0x2fba0
leaq -0x1978(%rbp), %rdi
callq 0x6898
leaq -0x1979(%rbp), %rdi
callq 0x6490
jmp 0x86b14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86975
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86969
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86951
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1a88(%rbp), %rdi
callq 0x6898
leaq -0x1a89(%rbp), %rdi
callq 0x6490
leaq -0x1a30(%rbp), %rdi
callq 0x2fba0
leaq -0x1a58(%rbp), %rdi
callq 0x6898
leaq -0x1a59(%rbp), %rdi
callq 0x6490
jmp 0x86b14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1b28(%rbp), %rdi
callq 0x2fba0
jmp 0x86b14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x869c9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1b70(%rbp), %rdi
callq 0x6898
leaq -0x1b71(%rbp), %rdi
callq 0x6490
jmp 0x86b14
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86a00
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1b98(%rbp), %rdi
callq 0x6898
leaq -0x1b99(%rbp), %rdi
callq 0x6490
jmp 0x86b08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86a6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86a5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86a53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1ce0(%rbp), %rdi
callq 0x879e0
leaq -0x1d00(%rbp), %rdi
callq 0x6898
leaq -0x1d20(%rbp), %rdi
callq 0x6898
leaq -0x1d21(%rbp), %rdi
callq 0x6490
jmp 0x86b08
leaq -0x1e68(%rbp), %rdi
xorl %esi, %esi
callq 0x35fe0
jmp 0x86a8c
movq -0x1e80(%rbp), %rdi
addq $0x88, %rdi
leaq -0x1e68(%rbp), %rsi
callq 0x87990
jmp 0x86aa8
leaq -0x1e68(%rbp), %rdi
callq 0x879e0
jmp 0x86ade
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
jmp 0x86b08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x18(%rbp)
movl %eax, -0x1c(%rbp)
leaq -0x1e68(%rbp), %rdi
callq 0x879e0
jmp 0x86b08
leaq -0x1b50(%rbp), %rdi
callq 0xaca0
leaq -0x1810(%rbp), %rdi
callq 0xaca0
leaq -0x30(%rbp), %rdi
callq 0xaca0
addq $0x1fc0, %rsp           # imm = 0x1FC0
popq %rbp
retq
leaq -0x1b50(%rbp), %rdi
callq 0xaca0
leaq -0x1810(%rbp), %rdi
callq 0xaca0
leaq -0x30(%rbp), %rdi
callq 0xaca0
movq -0x1e90(%rbp), %rdi
callq 0x879e0
movq -0x1e78(%rbp), %rdi
callq 0x87a10
movq -0x1e70(%rbp), %rdi
callq 0x6898
movq -0x18(%rbp), %rdi
callq 0x6760
nopw %cs:(%rax,%rax)