// File: /workspace/github_cpp_makefile_star2_O2/alan0201tw[P]RayTracer/src/util.cpp
// Function: next_week_final()
std::shared_ptr<hitable> next_week_final()
{
    int nb = 20;
    std::vector<std::shared_ptr<hitable>> list;
    std::vector<std::shared_ptr<hitable>> box_list;
    std::vector<std::shared_ptr<hitable>> box_list2;

    std::shared_ptr<texture> white_texture = std::make_shared<constant_texture>(vec3(0.73f, 0.73f, 0.73f));
    std::shared_ptr<texture> ground_texture = std::make_shared<constant_texture>(vec3(0.48f, 0.83f, 0.53f));
    auto white_material = std::make_shared<lambertian>(white_texture);
    auto ground_material = std::make_shared<lambertian>(ground_texture);

    list.reserve(30);
    box_list.reserve(10000);
    box_list2.reserve(10000);

    static const float w = 100;
    for(int i = 0; i < nb; i++)
    {
        for(int j = 0; j < nb; j++)
        {
            float x0 = -1000 + i * w;
            float z0 = -1000 + j * w;
            float y0 = 0;
            float x1 = x0 + w;
            float y1 = 100 * (drand48() + 0.01f);
            float z1 = z0 + w;
            box_list.push_back(std::make_shared<box>(vec3(x0, y0, z0), vec3(x1, y1, z1), ground_material));
        }
    }

    list.push_back( std::make_shared<bvh_node>(box_list, 0.0f, 1.0f) );
    
    std::shared_ptr<texture> light_texture = std::make_shared<constant_texture>(vec3(7.0f, 7.0f, 7.0f));
    auto light = std::make_shared<diffuse_light>(light_texture);

    list.push_back(std::make_shared<xz_rect>(123, 423, 147, 412, 554, light));
    vec3 center(400, 400, 200);
    auto moving_sphere_mat = std::make_shared<lambertian>(std::make_shared<constant_texture>(vec3(0.7, 0.3, 0.1)));
    list.push_back(std::make_shared<moving_sphere>(center, center + vec3(30, 0, 0), 0, 1, 50, moving_sphere_mat));
    
    list.push_back(std::make_shared<sphere>(vec3(260, 150, 45), 50, std::make_shared<dielectric>(1.5f)));
    list.push_back(std::make_shared<sphere>(vec3(0, 150, 145), 50, std::make_shared<metal>(vec3(0.8, 0.8, 0.9), 10.0f)));
    {
        std::shared_ptr<hitable> boundary = std::make_shared<sphere>(vec3(360, 150, 145), 70, std::make_shared<dielectric>(1.5f));
        auto texture1 = std::make_shared<constant_texture>(vec3(0.2, 0.4, 0.9));
        list.push_back(boundary);
        list.push_back(std::make_shared<constant_medium>(boundary, 0.2f, texture1));
    }
    {
        std::shared_ptr<hitable> boundary1 = std::make_shared<sphere>(vec3(0, 0, 0), 5000, std::make_shared<dielectric>(1.5f));
        list.push_back(std::make_shared<constant_medium>(boundary1, 0.0001f, white_texture));
    }

    auto emat = std::make_shared<lambertian>(std::make_shared<image_texture>("./resources/texture.jpg"));
    list.push_back(std::make_shared<sphere>(vec3(400, 200, 400), 100, emat));

    auto perlin_texture = std::make_shared<perlin_noise_texture>(0.1f);
    list.push_back(std::make_shared<sphere>(vec3(220, 280, 300), 80, std::make_shared<lambertian>(perlin_texture)));

    int ns = 1000;
    for(int j = 0; j < ns; j++)
    {
        float tmp_x = 165.0f * drand48();
        float tmp_y = 165.0f * drand48();
        float tmp_z = 165.0f * drand48();
        box_list2.push_back(std::make_shared<sphere>(vec3(tmp_x, tmp_y, tmp_z), 10, white_material));
    }

    list.push_back(std::make_shared<translate>(
        std::make_shared<rotate_y>(
            std::make_shared<bvh_node>(box_list2, 0.0f, 1.0f), 
            15.0f), 
        vec3(-100, 270, 395)));

    return std::make_shared<bvh_node>(list, 0.0f, 1.0f);

    // using BVH, with 1920*1080 image. 10 sample per pixel
    // real    0m49.472s
    // user    4m14.656s
    // sys     0m39.828s

    // without
    // real    5m28.462s
    // user    40m24.922s
    // sys     0m27.766s

    // 3000 spp 1920x1080 benchmark
    // real    274m12.543s
    // user    1075m47.013s
    // sys     0m36.908s
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a8, %rsp            # imm = 0x1A8
movq %rdi, %rbx
xorps %xmm0, %xmm0
movaps %xmm0, 0x80(%rsp)
andq $0x0, 0x90(%rsp)
movaps %xmm0, 0x140(%rsp)
andq $0x0, 0x150(%rsp)
movaps %xmm0, 0x120(%rsp)
andq $0x0, 0x130(%rsp)
movsd 0x1c028(%rip), %xmm0    # 0x30640
leaq 0xd0(%rsp), %rsi
movsd %xmm0, (%rsi)
movl $0x3f3ae148, 0x8(%rsi)  # imm = 0x3F3AE148
leaq 0xe0(%rsp), %rdi
callq 0x16b90
leaq 0x108(%rsp), %rax
leaq 0xe8(%rsp), %rdi
movaps -0x8(%rdi), %xmm0
movaps %xmm0, -0x8(%rax)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rdi)
callq 0x7426
movsd 0x1c02c(%rip), %xmm0    # 0x30690
leaq 0x110(%rsp), %rsi
movsd %xmm0, (%rsi)
movl $0x3f07ae14, 0x8(%rsi)  # imm = 0x3F07AE14
leaq 0xd0(%rsp), %rdi
callq 0x16b90
leaq 0xe8(%rsp), %rax
leaq 0xd8(%rsp), %rdi
movaps -0x8(%rdi), %xmm0
movaps %xmm0, -0x8(%rax)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rdi)
callq 0x7426
leaq 0xd0(%rsp), %rdi
leaq 0x100(%rsp), %rsi
callq 0x16bf0
leaq 0x110(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
callq 0x16bf0
movq %rbx, 0x188(%rsp)
leaq 0x80(%rsp), %rdi
pushq $0x1e
popq %rsi
callq 0x71e8
leaq 0x140(%rsp), %rdi
movl $0x2710, %esi           # imm = 0x2710
callq 0x71e8
leaq 0x120(%rsp), %rdi
movl $0x2710, %esi           # imm = 0x2710
callq 0x71e8
xorl %eax, %eax
leaq 0xa0(%rsp), %rbx
leaq 0x40(%rsp), %r14
leaq 0x110(%rsp), %r12
leaq 0x140(%rsp), %r15
leaq 0xb0(%rsp), %r13
cmpl $0x14, %eax
je 0x14869
movl %eax, 0xc8(%rsp)
cvtsi2ss %eax, %xmm1
movss 0x1bdcf(%rip), %xmm0    # 0x30520
mulss %xmm0, %xmm1
addss 0x1bdc7(%rip), %xmm1    # 0x30524
movss %xmm1, 0x160(%rsp)
addss %xmm0, %xmm1
movss %xmm1, 0xcc(%rsp)
xorl %ebp, %ebp
cmpl $0x14, %ebp
je 0x1485b
cvtsi2ss %ebp, %xmm1
movss 0x1bd96(%rip), %xmm0    # 0x30520
mulss %xmm0, %xmm1
addss 0x1bd8e(%rip), %xmm1    # 0x30524
movss %xmm1, 0x170(%rsp)
callq 0x63e0
addsd 0x1bd3c(%rip), %xmm0    # 0x304e8
mulsd 0x1bd3c(%rip), %xmm0    # 0x304f0
cvtsd2ss %xmm0, %xmm0
movss 0x160(%rsp), %xmm1
movss %xmm1, 0xa0(%rsp)
andl $0x0, 0xa4(%rsp)
movss 0x170(%rsp), %xmm1
movss %xmm1, 0xa8(%rsp)
addss 0x1bd34(%rip), %xmm1    # 0x30520
movaps %xmm1, %xmm2
movss 0xcc(%rsp), %xmm1
movss %xmm1, 0x40(%rsp)
movss %xmm0, 0x44(%rsp)
movss %xmm2, 0x48(%rsp)
leaq 0x70(%rsp), %rdi
movq %rbx, %rsi
movq %r14, %rdx
movq %r12, %rcx
callq 0x16f11
movaps 0x70(%rsp), %xmm0
movaps %xmm0, 0xb0(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x70(%rsp)
movq %r15, %rdi
movq %r13, %rsi
callq 0x7b8a
leaq 0xb8(%rsp), %rdi
callq 0x7426
leaq 0x78(%rsp), %rdi
callq 0x7426
incl %ebp
jmp 0x14775
movl 0xc8(%rsp), %eax
incl %eax
jmp 0x14735
leaq 0xa0(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x40(%rsp), %rcx
movl $0x3f800000, (%rcx)     # imm = 0x3F800000
leaq 0x70(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x16d50
leaq 0xb8(%rsp), %r14
leaq 0x78(%rsp), %rbx
movapd -0x8(%rbx), %xmm0
movapd %xmm0, -0x8(%r14)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
movsd 0x1bdc1(%rip), %xmm0    # 0x306a0
leaq 0xa0(%rsp), %rsi
movsd %xmm0, (%rsi)
movl $0x40e00000, 0x8(%rsi)  # imm = 0x40E00000
leaq 0x70(%rsp), %rdi
callq 0x16b90
leaq 0xb8(%rsp), %rax
leaq 0x78(%rsp), %rdi
movapd -0x8(%rdi), %xmm0
movapd %xmm0, -0x8(%rax)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x8(%rdi)
callq 0x7426
leaq 0x70(%rsp), %rbx
leaq 0xb0(%rsp), %rsi
movq %rbx, %rdi
callq 0x16d0e
leaq 0x30(%rsp), %rsi
movl $0x7b, (%rsi)
leaq 0x10(%rsp), %rdx
movl $0x1a7, (%rdx)          # imm = 0x1A7
leaq 0x20(%rsp), %rcx
movl $0x93, (%rcx)
leaq 0x50(%rsp), %r8
movl $0x19c, (%r8)           # imm = 0x19C
leaq 0x60(%rsp), %r9
movl $0x22a, (%r9)           # imm = 0x22A
movq %rbx, (%rsp)
leaq 0x40(%rsp), %rdi
callq 0x16e3c
leaq 0xa8(%rsp), %r14
leaq 0x48(%rsp), %rbx
movapd -0x8(%rbx), %xmm0
movapd %xmm0, -0x8(%r14)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
movsd 0x1bce5(%rip), %xmm0    # 0x306b0
movsd %xmm0, 0x190(%rsp)
movl $0x43480000, 0x198(%rsp) # imm = 0x43480000
movsd 0x1bcd9(%rip), %xmm0    # 0x306c0
leaq 0x30(%rsp), %rsi
movsd %xmm0, (%rsi)
movl $0x3dcccccd, 0x8(%rsi)  # imm = 0x3DCCCCCD
leaq 0x40(%rsp), %rdi
callq 0x16b90
leaq 0xa0(%rsp), %rbx
leaq 0x40(%rsp), %rsi
movq %rbx, %rdi
callq 0x16f59
leaq 0x48(%rsp), %rdi
callq 0x7426
leaq 0x190(%rsp), %rsi
movsd (%rsi), %xmm0
movss 0x1baf4(%rip), %xmm1    # 0x30528
xorps %xmm2, %xmm2
addss 0x8(%rsi), %xmm2
addps %xmm0, %xmm1
leaq 0x10(%rsp), %rdx
movlps %xmm1, (%rdx)
movss %xmm2, 0x8(%rdx)
leaq 0x20(%rsp), %rcx
andl $0x0, (%rcx)
leaq 0x50(%rsp), %r8
movl $0x1, (%r8)
leaq 0x60(%rsp), %r9
movl $0x32, (%r9)
movq %rbx, (%rsp)
leaq 0x30(%rsp), %rdi
callq 0x16f77
leaq 0x48(%rsp), %r14
leaq 0x38(%rsp), %rbx
movaps -0x8(%rbx), %xmm0
movaps %xmm0, -0x8(%r14)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
movsd 0x1bc12(%rip), %xmm0    # 0x306d0
movsd %xmm0, 0x20(%rsp)
movl $0x42340000, 0x28(%rsp) # imm = 0x42340000
movl $0x32, 0x50(%rsp)
leaq 0x60(%rsp), %rsi
movl $0x3fc00000, (%rsi)     # imm = 0x3FC00000
leaq 0x10(%rsp), %rdi
callq 0x16fcc
leaq 0x30(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x10(%rsp), %rcx
callq 0x16fa8
leaq 0x48(%rsp), %r14
leaq 0x38(%rsp), %rbx
movaps -0x8(%rbx), %xmm0
movaps %xmm0, -0x8(%r14)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
leaq 0x18(%rsp), %rdi
callq 0x7426
movsd 0x1bb90(%rip), %xmm0    # 0x306e0
movsd %xmm0, 0x20(%rsp)
movl $0x43110000, 0x28(%rsp) # imm = 0x43110000
movl $0x32, 0x60(%rsp)
movsd 0x1bb82(%rip), %xmm0    # 0x306f0
leaq 0x50(%rsp), %rsi
movsd %xmm0, (%rsi)
movl $0x3f666666, 0x8(%rsi)  # imm = 0x3F666666
leaq 0xf0(%rsp), %rdx
movl $0x41200000, (%rdx)     # imm = 0x41200000
leaq 0x10(%rsp), %rdi
callq 0x1700e
leaq 0x30(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x60(%rsp), %rdx
leaq 0x10(%rsp), %rcx
callq 0x16fea
leaq 0x48(%rsp), %r14
leaq 0x38(%rsp), %rbx
movaps -0x8(%rbx), %xmm0
movaps %xmm0, -0x8(%r14)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
leaq 0x18(%rsp), %rdi
callq 0x7426
movsd 0x1bb03(%rip), %xmm0    # 0x30700
movsd %xmm0, 0x20(%rsp)
movl $0x43110000, 0x28(%rsp) # imm = 0x43110000
movl $0x46, 0x50(%rsp)
leaq 0x60(%rsp), %rsi
movl $0x3fc00000, (%rsi)     # imm = 0x3FC00000
leaq 0x10(%rsp), %rdi
callq 0x16fcc
leaq 0x30(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x10(%rsp), %rcx
callq 0x16fa8
leaq 0x48(%rsp), %r13
leaq 0x38(%rsp), %rdi
movaps -0x8(%rdi), %xmm0
movaps %xmm0, -0x8(%r13)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rdi)
callq 0x7426
leaq 0x18(%rsp), %rbx
movq %rbx, %rdi
callq 0x7426
movsd 0x1ba9b(%rip), %xmm0    # 0x30710
movsd %xmm0, -0x8(%rbx)
movl $0x3f666666, (%rbx)     # imm = 0x3F666666
leaq 0x30(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x16b90
leaq 0x80(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0x17030
leaq 0x50(%rsp), %rdx
movl $0x3e4ccccd, (%rdx)     # imm = 0x3E4CCCCD
leaq 0x20(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x30(%rsp), %rcx
callq 0x1705c
leaq 0x18(%rsp), %r14
leaq 0x28(%rsp), %rbx
movaps -0x8(%rbx), %xmm0
movaps %xmm0, -0x8(%r14)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
leaq 0x38(%rsp), %rdi
callq 0x7426
movq %r13, %rdi
callq 0x7426
andq $0x0, 0x20(%rsp)
andl $0x0, 0x28(%rsp)
movl $0x1388, 0x50(%rsp)     # imm = 0x1388
leaq 0x60(%rsp), %rsi
movl $0x3fc00000, (%rsi)     # imm = 0x3FC00000
leaq 0x10(%rsp), %rdi
callq 0x16fcc
leaq 0x30(%rsp), %rdi
leaq 0x20(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0x10(%rsp), %rcx
callq 0x16fa8
leaq 0x48(%rsp), %rbx
leaq 0x38(%rsp), %rdi
movaps -0x8(%rdi), %xmm0
movaps %xmm0, -0x8(%rbx)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%rdi)
callq 0x7426
leaq 0x18(%rsp), %rdi
callq 0x7426
leaq 0x20(%rsp), %rdx
movl $0x38d1b717, (%rdx)     # imm = 0x38D1B717
leaq 0x10(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x100(%rsp), %rcx
callq 0x16f35
leaq 0x38(%rsp), %r15
leaq 0x18(%rsp), %r14
movaps -0x8(%r14), %xmm0
movaps %xmm0, -0x8(%r15)
xorps %xmm0, %xmm0
movaps %xmm0, -0x8(%r14)
leaq 0x80(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x7b8a
movq %r15, %rdi
callq 0x7426
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
leaq 0x1bf1b(%rip), %rsi     # 0x30d01
leaq 0x30(%rsp), %rdi
callq 0x16bae
leaq 0x40(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x17080
leaq 0x38(%rsp), %rdi
callq 0x7426
movsd 0x1b90f(%rip), %xmm0    # 0x30720
leaq 0x20(%rsp), %rsi
movsd %xmm0, (%rsi)
movl $0x43c80000, 0x8(%rsi)  # imm = 0x43C80000
leaq 0x50(%rsp), %rdx
movl $0x64, (%rdx)
leaq 0x10(%rsp), %rdi
leaq 0x40(%rsp), %rcx
callq 0x1709e
leaq 0x38(%rsp), %r14
leaq 0x18(%rsp), %rbx
movapd -0x8(%rbx), %xmm0
movapd %xmm0, -0x8(%r14)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
leaq 0x10(%rsp), %rsi
movl $0x3dcccccd, (%rsi)     # imm = 0x3DCCCCCD
leaq 0x30(%rsp), %rdi
callq 0x16d98
movsd 0x1b898(%rip), %xmm0    # 0x30730
movsd %xmm0, 0x60(%rsp)
movl $0x43960000, 0x68(%rsp) # imm = 0x43960000
movl $0x50, 0xf0(%rsp)
leaq 0x50(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x170c2
leaq 0x20(%rsp), %rdi
leaq 0x60(%rsp), %rsi
leaq 0xf0(%rsp), %rdx
leaq 0x50(%rsp), %rcx
callq 0x16bcc
leaq 0x18(%rsp), %r14
leaq 0x28(%rsp), %rbx
movapd -0x8(%rbx), %xmm0
movapd %xmm0, -0x8(%r14)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
leaq 0x58(%rsp), %rdi
callq 0x7426
movl $0x3e8, %r12d           # imm = 0x3E8
leaq 0x50(%rsp), %r13
leaq 0x60(%rsp), %rbp
leaq 0xd0(%rsp), %r15
leaq 0x120(%rsp), %rbx
leaq 0x10(%rsp), %r14
subl $0x1, %r12d
jb 0x15001
callq 0x63e0
movapd %xmm0, 0x170(%rsp)
callq 0x63e0
movapd %xmm0, 0x160(%rsp)
callq 0x63e0
mulsd 0x1b57a(%rip), %xmm0    # 0x304f8
cvtsd2ss %xmm0, %xmm0
movapd 0x170(%rsp), %xmm1
unpcklpd 0x160(%rsp), %xmm1      # xmm1 = xmm1[0],mem[0]
mulpd 0x1b7a4(%rip), %xmm1    # 0x30740
cvtpd2ps %xmm1, %xmm1
movlpd %xmm1, 0x50(%rsp)
movss %xmm0, 0x58(%rsp)
movl $0xa, 0x60(%rsp)
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
movq %rbp, %rdx
movq %r15, %rcx
callq 0x1709e
movapd 0x20(%rsp), %xmm0
movapd %xmm0, 0x10(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x20(%rsp)
movq %rbx, %rdi
movq %r14, %rsi
callq 0x7b8a
leaq 0x18(%rsp), %rdi
callq 0x7426
leaq 0x28(%rsp), %rdi
callq 0x7426
jmp 0x14f4b
leaq 0x1a4(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x1a0(%rsp), %rcx
movl $0x3f800000, (%rcx)     # imm = 0x3F800000
leaq 0x60(%rsp), %rdi
leaq 0x120(%rsp), %rsi
callq 0x16d50
leaq 0x19c(%rsp), %rdx
movl $0x41700000, (%rdx)     # imm = 0x41700000
leaq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rsi
callq 0x170e0
movsd 0x1b6ff(%rip), %xmm0    # 0x30750
leaq 0xf0(%rsp), %rdx
movsd %xmm0, (%rdx)
movl $0x43c58000, 0x8(%rdx)  # imm = 0x43C58000
leaq 0x20(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x16ecf
leaq 0x18(%rsp), %r14
leaq 0x28(%rsp), %rbx
movapd -0x8(%rbx), %xmm0
movapd %xmm0, -0x8(%r14)
xorpd %xmm0, %xmm0
movapd %xmm0, -0x8(%rbx)
leaq 0x80(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x7b8a
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
leaq 0x58(%rsp), %rbx
movq %rbx, %rdi
callq 0x7426
leaq 0x68(%rsp), %rdi
callq 0x7426
leaq 0x20(%rsp), %rdx
andl $0x0, (%rdx)
movl $0x3f800000, -0x8(%rbx) # imm = 0x3F800000
leaq 0x10(%rsp), %rdi
leaq 0x80(%rsp), %rsi
leaq 0x50(%rsp), %rcx
callq 0x16d50
leaq 0x18(%rsp), %rdi
movaps -0x8(%rdi), %xmm0
andq $0x0, (%rdi)
movq 0x188(%rsp), %rbx
movups %xmm0, (%rbx)
andq $0x0, -0x8(%rdi)
callq 0x7426
leaq 0x38(%rsp), %rdi
callq 0x7426
leaq 0x48(%rsp), %rdi
callq 0x7426
leaq 0xa8(%rsp), %rdi
callq 0x7426
leaq 0x78(%rsp), %rdi
callq 0x7426
leaq 0xb8(%rsp), %rdi
callq 0x7426
leaq 0x118(%rsp), %rdi
callq 0x7426
leaq 0xd8(%rsp), %rdi
callq 0x7426
leaq 0xe8(%rsp), %rdi
callq 0x7426
leaq 0x108(%rsp), %rdi
callq 0x7426
leaq 0x120(%rsp), %rdi
callq 0x7404
leaq 0x140(%rsp), %rdi
callq 0x7404
leaq 0x80(%rsp), %rdi
callq 0x7404
movq %rbx, %rax
addq $0x1a8, %rsp            # imm = 0x1A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x15349
movq %rax, %r12
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
jmp 0x151d7
movq %rax, %r12
leaq 0x58(%rsp), %rdi
callq 0x7426
jmp 0x151e6
movq %rax, %r12
leaq 0x68(%rsp), %rdi
jmp 0x15360
jmp 0x15349
movq %rax, %r12
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
jmp 0x1520d
movq %rax, %r12
leaq 0x58(%rsp), %rdi
jmp 0x15360
jmp 0x15349
jmp 0x15231
movq %rax, %r12
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
jmp 0x1536a
movq %rax, %r12
jmp 0x1536f
movq %rax, %r12
leaq 0x38(%rsp), %rdi
jmp 0x15374
jmp 0x152d3
movq %rax, %r12
movq %r15, %rdi
callq 0x7426
jmp 0x152c3
movq %rax, %r12
jmp 0x152cb
jmp 0x152b1
jmp 0x152d3
movq %rax, %r12
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
jmp 0x1527b
jmp 0x15278
movq %rax, %r12
leaq 0x38(%rsp), %rdi
callq 0x7426
jmp 0x1528a
movq %rax, %r12
movq %r13, %rdi
jmp 0x15374
jmp 0x152b1
jmp 0x152d3
jmp 0x1529c
jmp 0x152b1
jmp 0x152d3
movq %rax, %r12
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
callq 0x7426
jmp 0x152b4
movq %rax, %r12
leaq 0x18(%rsp), %rdi
jmp 0x15374
jmp 0x152d3
movq %rax, %r12
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
jmp 0x15374
movq %rax, %r12
jmp 0x15379
movq %rax, %r12
leaq 0x48(%rsp), %rdi
jmp 0x15381
jmp 0x152fd
movq %rax, %r12
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
jmp 0x15381
movq %rax, %r12
jmp 0x15386
movq %rax, %r12
jmp 0x15390
jmp 0x1539a
movq %rax, %r12
movq %r14, %rdi
callq 0x7426
movq %rbx, %rdi
jmp 0x153b4
jmp 0x1539a
movq %rax, %r12
jmp 0x153c6
movq %rax, %r12
jmp 0x153d3
movq %rax, %r12
jmp 0x153e0
movq %rax, %r12
jmp 0x153ed
jmp 0x1539a
movq %rax, %r12
jmp 0x15365
movq %rax, %r12
leaq 0x18(%rsp), %rdi
callq 0x7426
leaq 0x28(%rsp), %rdi
callq 0x7426
leaq 0x38(%rsp), %rdi
callq 0x7426
leaq 0x48(%rsp), %rdi
callq 0x7426
leaq 0xa8(%rsp), %rdi
callq 0x7426
leaq 0x78(%rsp), %rdi
callq 0x7426
leaq 0xb8(%rsp), %rdi
jmp 0x153b4
movq %rax, %r12
jmp 0x153b9
movq %rax, %r12
leaq 0xb8(%rsp), %rdi
callq 0x7426
leaq 0x78(%rsp), %rdi
callq 0x7426
leaq 0x118(%rsp), %rdi
callq 0x7426
leaq 0xd8(%rsp), %rdi
callq 0x7426
leaq 0xe8(%rsp), %rdi
callq 0x7426
leaq 0x108(%rsp), %rdi
callq 0x7426
leaq 0x120(%rsp), %rdi
callq 0x7404
leaq 0x140(%rsp), %rdi
callq 0x7404
leaq 0x80(%rsp), %rdi
callq 0x7404
movq %r12, %rdi
callq 0x6710