// File: /workspace/github_cpp_makefile_star2_O1/misohena[P]drawstars/drawstars.cpp
// Function: main
int main(int argc, char *argv[])
{
    Options options = {};
    setOptionsDefault(options);
    if(!parseCommandLine(options, argc, argv)){
        return -1;
    }

    const char * const GAIA_FILE = "gaia/gaia_ra_dec_g_bp_rp_teff.dat";
    const char * const HIP_FILE = "hip2/hip2_ra_dec_mag_bv.dat";
    const ProjectionMode projectionMode = options.projectionMode;
    // Input Options
    const std::string catalogDir(options.catalogDir);
    const std::string gaiaFile = catalogDir + "/" + GAIA_FILE;
    const std::string hipFile = catalogDir + "/" + HIP_FILE;

    // Rendering Options
    const unsigned int canvasWidth = options.width;
    const unsigned int canvasHeight = options.height;
    const StarAppearanceOptions starAppearanceOptions= {
        options.fluxOffset,
        options.fluxMultiplier,
        1.0f / options.fluxGamma,
        options.fluxMax,
        options.fluxIncRadius,
        options.radiusDefault,
        options.radiusMax
    };

    // Output Options
    std::string outputFloatsFile(options.outputFloatsFile);
    std::string outputImageFile(options.outputImageFile);

    // prepare rendering target
    ImageType canvas(canvasWidth, canvasHeight);

    if(0){
        // 描画テスト
        for(int y = -900; y <= 900; y += 100){
            drawStarOnEquirectangular(canvas, HipStar{float(180*DEG2RAD), float((y+0)*PI/canvasHeight), 0, 0}, StarAppearanceOptions{1.0, 0.5, 2.0});
            drawStarOnEquirectangular(canvas, HipStar{float(185*DEG2RAD), float((y+0.25)*PI/canvasHeight), 0, 0}, StarAppearanceOptions{1.0, 0.5, 2.0});
            drawStarOnEquirectangular(canvas, HipStar{float(190*DEG2RAD), float((y+0.5)*PI/canvasHeight), 0, 0}, StarAppearanceOptions{1.0, 0.5, 2.0});
            drawStarOnEquirectangular(canvas, HipStar{float(195*DEG2RAD), float((y+0.75)*PI/canvasHeight), 0, 0}, StarAppearanceOptions{1.0, 0.5, 2.0});
            drawStarOnEquirectangular(canvas, HipStar{float(200*DEG2RAD), float((y+1.0)*PI/canvasHeight), 0, 0}, StarAppearanceOptions{1.0, 0.5, 2.0});
        }
    }
    else if(projectionMode == PROJ_LOAD_FLOATS){
        canvas = readRawFile<ImageType>(outputFloatsFile.c_str());
        if(!canvas){
            printf("Failed to load %s\n", outputFloatsFile.c_str());
            return -1;
        }
        printf("%s loaded\n", outputFloatsFile.c_str());
    }
    else if(projectionMode == PROJ_EQUIRECTANGULAR){
        if(options.gaiaEnabled && !drawStars<GaiaStar>(
               canvas, gaiaFile.c_str(),
               [=](ImageType &canvas, GaiaStarRange stars){
                   drawStarsOnEquirectangular(canvas, stars, std::max(options.gaiaMinMag, options.minMag), options.maxMag, starAppearanceOptions);
               })){
            return -1;
        }
        if(options.hip2Enabled && !drawStars<HipStar>(
               canvas, hipFile.c_str(),
               [=](ImageType &canvas, HipStarRange stars){
                   drawStarsOnEquirectangular(canvas, stars, options.minMag, std::min(options.maxMag, options.hip2MaxMag), starAppearanceOptions);
               })){
            return -1;
        }
    }
    else{
        // calculate matrix
        printf("unixSeconds=%lf\n", options.unixSeconds);
        const Mat4F matEquToHor = createEquatorialToHorizontalMatrix(options.lat, options.lng, options.unixSeconds);
        float viewAz = options.viewAz;
        float viewEl = options.viewEl;
        if((options.hasViewRA && options.hasViewDec) || !(options.hasViewAz || options.hasViewEl)){
            const float viewRA = options.viewRA;
            const float viewDec = options.viewDec;
            const std::pair<float, float> viewAzEl = convertRADecToAzEl(options.viewRA*DEG2RAD, options.viewDec*DEG2RAD, matEquToHor);
            viewAz += viewAzEl.first; //deg
            viewEl += viewAzEl.second; //deg
        }
        printf("az=%lf el=%lf roll=%lf\n", viewAz, viewEl, options.viewRoll);
        const Mat4F mat = createProjectionMatrix(canvasWidth, canvasHeight, options.fovYDeg, options.viewZ)
            * createViewMatrix(viewAz, viewEl, options.viewRoll)
            * matEquToHor;
        // draw stars
        if(options.gaiaEnabled && !drawStars<GaiaStar>(
               canvas, gaiaFile.c_str(),
               [=](ImageType &canvas, GaiaStarRange stars){
                   drawStarsPerspective(canvas, stars, mat, std::max(options.gaiaMinMag, options.minMag), options.maxMag, starAppearanceOptions);
               })){
            return -1;
        }
        if(options.hip2Enabled && !drawStars<HipStar>(
               canvas, hipFile.c_str(),
               [=](ImageType &canvas, HipStarRange stars){
                   drawStarsPerspective(canvas, stars, mat, options.minMag, std::min(options.maxMag, options.hip2MaxMag), starAppearanceOptions);
               })){
            return -1;
        }
    }

    //
    // output results
    //
    writeRawFile(outputFloatsFile.c_str(), canvas);

    const ColorType postOffsetColor(options.postOffset, options.postOffset, options.postOffset);
    const double invG = 1.0/options.postGamma;
    ImageType image = apply(
        canvas,
        [&](ColorType p){
            return pow(postOffsetColor + options.postMultiplier * p, invG);
        });
    if(options.postKeepColor){
        image.apply([&](ColorType p){return saturateKeepColor(p);});
    }
    writeImageFile(outputImageFile.c_str(), image, options.jpegQuality);

    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x5a8, %rsp            # imm = 0x5A8
movq %rsi, %rbx
movl %edi, %ebp
leaq 0x240(%rsp), %r14
movl $0x0, 0x14(%r14)
xorl %eax, %eax
movb %al, 0x18(%r14)
xorpd %xmm0, %xmm0
movapd %xmm0, (%r14)
movb %al, 0x10(%r14)
movupd %xmm0, 0x1c(%r14)
movupd %xmm0, 0x2c(%r14)
movupd %xmm0, 0x3c(%r14)
movupd %xmm0, 0x4c(%r14)
movupd %xmm0, 0x5c(%r14)
movupd %xmm0, 0x6c(%r14)
movq $0x0, 0x79(%r14)
movupd %xmm0, 0x88(%r14)
movupd %xmm0, 0x98(%r14)
movupd %xmm0, 0xa8(%r14)
movq %r14, %rdi
callq 0x7734
movq %r14, %rdi
movl %ebp, %esi
movq %rbx, %rdx
callq 0x7960
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
testb %al, %al
je 0x94fd
movl 0x28c(%rsp), %r15d
movq 0x248(%rsp), %rsi
leaq 0x1d0(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x240(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1c0(%rsp), %rbx
movq %rbx, %rdi
callq 0xa86a
leaq 0x308(%rsp), %r14
movq %r14, -0x10(%r14)
movq (%rbx), %rsi
movq 0x8(%rbx), %rdx
addq %rsi, %rdx
leaq 0x2f8(%rsp), %rdi
callq 0xa8fa
leaq 0x5901(%rip), %rsi      # 0xd4cb
leaq 0x2f8(%rsp), %rdi
callq 0x4570
leaq 0x58af(%rip), %rsi      # 0xd48d
leaq 0x2f8(%rsp), %rdi
callq 0x4570
leaq 0x190(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7c1b
movq %rdx, 0x180(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x190(%rsp)
jmp 0x7c23
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x188(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x2f8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7c5b
movq 0x308(%rsp), %rsi
incq %rsi
callq 0x42e0
leaq 0x2f8(%rsp), %rdi
movq %r14, (%rdi)
movq 0x1c0(%rsp), %rsi
movq 0x1c8(%rsp), %rdx
addq %rsi, %rdx
callq 0xa8fa
leaq 0x5846(%rip), %rsi      # 0xd4cb
leaq 0x2f8(%rsp), %rdi
callq 0x4570
leaq 0x5816(%rip), %rsi      # 0xd4af
leaq 0x2f8(%rsp), %rdi
callq 0x4570
leaq 0x170(%rsp), %rsi
movq %rsi, -0x10(%rsi)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x7cd6
movq %rdx, 0x160(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x170(%rsp)
jmp 0x7cde
movupd (%rcx), %xmm0
movupd %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x168(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x2f8(%rsp), %rdi
cmpq %r14, %rdi
je 0x7d16
movq 0x308(%rsp), %rsi
incq %rsi
callq 0x42e0
movl 0x290(%rsp), %ebp
movl 0x294(%rsp), %r13d
movsd 0x298(%rsp), %xmm0
movaps %xmm0, 0xd0(%rsp)
movss 0x52d2(%rip), %xmm0     # 0xd010
divss 0x2a0(%rsp), %xmm0
movss %xmm0, 0x70(%rsp)
movupd 0x2a4(%rsp), %xmm0
movapd %xmm0, 0xc0(%rsp)
movq 0x270(%rsp), %rsi
leaq 0x1b0(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x268(%rsp), %rdx
addq %rsi, %rdx
leaq 0x1a0(%rsp), %rdi
callq 0xa86a
movq 0x280(%rsp), %rsi
leaq 0x230(%rsp), %rax
movq %rax, -0x10(%rax)
movq 0x278(%rsp), %rdx
addq %rsi, %rdx
leaq 0x220(%rsp), %rdi
callq 0xa86a
movl %ebp, 0x40(%rsp)
movl %r13d, 0x44(%rsp)
movl %r13d, %ebx
imull %ebp, %ebx
leaq (,%rbx,8), %rax
leaq (%rax,%rax,2), %rdi
movq %rdi, 0x50(%rsp)
callq 0x4030
movq %rax, %r14
testq %rbx, %rbx
je 0x7e14
movq 0x50(%rsp), %rax
addq $-0x18, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rcx
shrq $0x4, %rdx
leaq (%rdx,%rdx,2), %rax
leaq 0x18(,%rax,8), %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x4180
movq %r14, 0x48(%rsp)
testl %r15d, %r15d
je 0x7ea6
cmpl $0x2, %r15d
jne 0x8014
movq 0x1a0(%rsp), %rsi
leaq 0x2f8(%rsp), %rdi
callq 0xa5c3
movupd 0x2f8(%rsp), %xmm0
movq 0x48(%rsp), %rdi
movupd %xmm0, 0x40(%rsp)
movq $0x0, 0x300(%rsp)
testq %rdi, %rdi
je 0x7e6b
callq 0x4370
movq 0x300(%rsp), %rdi
testq %rdi, %rdi
je 0x7e7d
callq 0x4370
movl 0x44(%rsp), %eax
orl 0x40(%rsp), %eax
movq 0x1a0(%rsp), %rsi
je 0x835f
leaq 0x5646(%rip), %rdi      # 0xd4e0
xorl %eax, %eax
callq 0x4050
jmp 0x91b8
cmpb $0x1, 0x250(%rsp)
jne 0x861e
movq %rbx, 0x20(%rsp)
movq 0x180(%rsp), %rbx
leaq 0x2f8(%rsp), %rdi
leaq 0x240(%rsp), %rsi
movl $0xb8, %edx
callq 0x4260
leaq 0x56da(%rip), %rsi      # 0xd5bc
movq %rbx, %rdi
callq 0x4350
movq %rax, %r12
testq %rax, %rax
je 0x8608
callq 0x43b0
movl %eax, %ebx
leaq 0x56bb(%rip), %rdi      # 0xd5bf
movl %eax, %esi
xorl %eax, %eax
callq 0x4050
movl %ebx, %r15d
leaq 0x8(,%r15,8), %rdi
movq %r12, 0x18(%rsp)
callq 0x4030
movq %rax, %rbx
leaq (,%r15,8), %r14
movq %r15, (%rax)
addq $0x8, %rbx
testq %r15, %r15
je 0x7f46
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4180
movq %r14, 0x28(%rsp)
movq %rbx, 0x120(%rsp)
movq %r15, %r14
shlq $0x4, %r14
leaq 0x8(%r14), %rdi
callq 0x4030
movq %rax, %rbx
addq $0x8, %rbx
movq %r15, (%rax)
movq %r15, 0x30(%rsp)
testq %r15, %r15
je 0x8372
xorl %r15d, %r15d
movq %rbx, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4180
movq %rbx, 0x80(%rsp)
movq 0x50(%rsp), %rdi
leaq -0x18(%rdi), %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rcx
shrq $0x4, %rdx
leaq (%rdx,%rdx,2), %rax
leaq 0x18(,%rax,8), %rax
movq %rax, 0x8(%rsp)
callq 0x4030
movq %rax, %rbx
cmpl $0x0, 0x20(%rsp)
je 0x7fdc
movq %rbx, %rdi
xorl %esi, %esi
movq 0x8(%rsp), %rdx
callq 0x4180
movq 0x80(%rsp), %rax
movl %ebp, (%rax,%r15)
movl %r13d, 0x4(%rax,%r15)
movq 0x8(%rax,%r15), %rdi
movq %rbx, 0x8(%rax,%r15)
testq %rdi, %rdi
je 0x8001
callq 0x4370
addq $0x10, %r15
cmpq %r15, %r14
movq 0x50(%rsp), %rdi
jne 0x7fbe
jmp 0x837a
movsd 0x2c8(%rsp), %xmm0
leaq 0x54c7(%rip), %rdi      # 0xd4eb
movb $0x1, %al
callq 0x4050
xorps %xmm0, %xmm0
cvtss2sd 0x2d0(%rsp), %xmm0
cvtss2sd 0x2d4(%rsp), %xmm1
movsd 0x2c8(%rsp), %xmm2
leaq 0x2f8(%rsp), %rdi
callq 0x6ecf
movsd 0x2dc(%rsp), %xmm1
cmpb $0x1, 0x2f2(%rsp)
jne 0x8073
cmpb $0x0, 0x2f3(%rsp)
jne 0x8087
cmpb $0x0, 0x2f0(%rsp)
jne 0x80d4
cmpb $0x0, 0x2f1(%rsp)
jne 0x80d4
movaps %xmm1, 0x30(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x2e4(%rsp), %xmm0
movsd 0x5098(%rip), %xmm1     # 0xd138
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
xorps %xmm2, %xmm2
cvtss2sd 0x2e8(%rsp), %xmm2
mulsd %xmm1, %xmm2
xorps %xmm1, %xmm1
cvtsd2ss %xmm2, %xmm1
leaq 0x2f8(%rsp), %rdi
callq 0x6d54
movaps 0x30(%rsp), %xmm1
addps %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtss2sd %xmm1, %xmm0
shufps $0x55, %xmm1, %xmm1     # xmm1 = xmm1[1,1,1,1]
cvtss2sd %xmm1, %xmm1
xorps %xmm2, %xmm2
cvtss2sd 0x2d8(%rsp), %xmm2
leaq 0x5406(%rip), %rdi      # 0xd4fc
movsd %xmm0, 0x30(%rsp)
movsd %xmm1, 0x8(%rsp)
movb $0x3, %al
callq 0x4050
movl %ebp, %eax
xorps %xmm0, %xmm0
cvtsi2sd %rax, %xmm0
movl %r13d, %eax
xorps %xmm1, %xmm1
cvtsi2sd %rax, %xmm1
xorps %xmm2, %xmm2
cvtss2sd 0x2ec(%rsp), %xmm2
cvtss2sd 0x2f4(%rsp), %xmm3
leaq 0x80(%rsp), %rdi
callq 0x7291
xorps %xmm2, %xmm2
cvtss2sd 0x2d8(%rsp), %xmm2
leaq 0xe0(%rsp), %rdi
movsd 0x30(%rsp), %xmm0
movsd 0x8(%rsp), %xmm1
callq 0x706b
leaq 0x120(%rsp), %rdi
leaq 0x80(%rsp), %rsi
leaq 0xe0(%rsp), %rdx
callq 0xa2f6
leaq 0x1e0(%rsp), %rdi
leaq 0x120(%rsp), %rsi
leaq 0x2f8(%rsp), %rdx
callq 0xa2f6
cmpb $0x1, 0x250(%rsp)
jne 0x8a66
movq 0x180(%rsp), %rbx
movupd 0x1e0(%rsp), %xmm0
movupd 0x1f0(%rsp), %xmm1
movupd 0x200(%rsp), %xmm2
movups 0x210(%rsp), %xmm3
leaq 0x4f0(%rsp), %rdi
movapd %xmm0, -0x40(%rdi)
movapd %xmm1, -0x30(%rdi)
movapd %xmm2, -0x20(%rdi)
movaps %xmm3, -0x10(%rdi)
leaq 0x240(%rsp), %rsi
movl $0xb8, %edx
callq 0x4260
movl 0x40(%rsp), %eax
movl %eax, 0x28(%rsp)
movl 0x44(%rsp), %eax
movq %rax, 0x18(%rsp)
leaq 0x539f(%rip), %rsi      # 0xd5bc
movq %rbx, %rdi
callq 0x4350
movq %rax, %rbx
testq %rax, %rax
je 0x8a50
movq %rbx, 0x20(%rsp)
callq 0x43b0
movl %eax, %ebx
leaq 0x537b(%rip), %rdi      # 0xd5bf
movl %eax, %esi
xorl %eax, %eax
callq 0x4050
movl %ebx, %ebx
leaq 0x8(,%rbx,8), %rdi
callq 0x4030
movq %rax, %r15
leaq (,%rbx,8), %r14
movq %rbx, (%rax)
addq $0x8, %r15
testq %rbx, %rbx
je 0x8280
movq %r15, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4180
movq %r15, 0x80(%rsp)
movq %rbx, %rbp
shlq $0x4, %rbp
leaq 0x8(%rbp), %rdi
callq 0x4030
movq %rax, %r15
movq %r14, 0x68(%rsp)
addq $0x8, %r15
movq %rbx, (%rax)
movq %rbx, 0x30(%rsp)
testq %rbx, %rbx
je 0x87a8
xorl %ebx, %ebx
movq %r15, %rdi
xorl %esi, %esi
movq %rbp, %rdx
callq 0x4180
movq %r15, 0xe0(%rsp)
movq 0x18(%rsp), %r14
imull 0x28(%rsp), %r14d
leaq (,%r14,8), %rax
leaq (%rax,%rax,2), %r15
leaq (%rax,%rax,2), %rax
addq $-0x18, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rcx
shrq $0x4, %rdx
leaq (%rdx,%rdx,2), %rax
leaq 0x18(,%rax,8), %r12
movq %r15, %rdi
callq 0x4030
movq %rax, %r13
testl %r14d, %r14d
je 0x8325
movq %r13, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x4180
movq 0xe0(%rsp), %rax
movl 0x28(%rsp), %ecx
movl %ecx, (%rax,%rbx)
movq 0x18(%rsp), %rcx
movl %ecx, 0x4(%rax,%rbx)
movq 0x8(%rax,%rbx), %rdi
movq %r13, 0x8(%rax,%rbx)
testq %rdi, %rdi
je 0x8351
callq 0x4370
addq $0x10, %rbx
cmpq %rbx, %rbp
jne 0x8308
jmp 0x87b0
leaq 0x5167(%rip), %rdi      # 0xd4cd
xorl %eax, %eax
callq 0x4050
jmp 0x8ee6
movq %rbx, 0x80(%rsp)
movl $0x16e3600, %edi        # imm = 0x16E3600
callq 0x4030
movq %rax, 0x10(%rsp)
movq 0x30(%rsp), %r14
leaq -0x1(%r14), %rax
movq %rax, 0x68(%rsp)
testl %r14d, %r14d
sete %bl
movl $0x18, %esi
movl $0xf4240, %edx          # imm = 0xF4240
movq 0x10(%rsp), %rdi
movq %r12, %rcx
callq 0x4430
movq %rax, %rcx
movq 0x68(%rsp), %rax
leaq (%rax,%rcx), %rsi
movq %rsi, %rax
xorl %edx, %edx
divq %r14
movq %rcx, (%rsp)
testq %rcx, %rcx
sete %cl
orb %bl, %cl
jne 0x8522
movl $0x1, %r15d
xorl %r13d, %r13d
movq (%rsp), %r12
movq %rsi, 0x60(%rsp)
movq %rax, 0x58(%rsp)
cmpq %r12, %rax
movq %r12, %rbp
cmovbq %rax, %rbp
cmpq 0x30(%rsp), %rsi
jb 0x8508
movq 0x80(%rsp), %r14
addq %r13, %r14
movq $0x0, 0xe0(%rsp)
movl $0xf8, %edi
callq 0x42d0
movq %rax, %rbx
movq (%rsp), %rax
subq %r12, %rax
leaq (%rax,%rax,2), %rax
movq 0x10(%rsp), %rcx
leaq (%rcx,%rax,8), %rax
movq %rax, 0x8(%rsp)
leaq 0x9446(%rip), %rax      # 0x11890
movq %rax, (%rbx)
movq %r14, 0x8(%rbx)
movq %rbx, %rdi
addq $0x10, %rdi
movl $0xb8, %edx
leaq 0x2f8(%rsp), %rsi
callq 0x4260
movaps 0xd0(%rsp), %xmm0
movlps %xmm0, 0xc8(%rbx)
movss 0x70(%rsp), %xmm0
movss %xmm0, 0xd0(%rbx)
movapd 0xc0(%rsp), %xmm0
movupd %xmm0, 0xd4(%rbx)
movq 0x8(%rsp), %rax
movq %rax, 0xe8(%rbx)
movq %rbp, 0xf0(%rbx)
movq %rbx, 0x1e0(%rsp)
leaq 0xe0(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
xorl %edx, %edx
callq 0x4290
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x84dd
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x120(%rsp), %rax
cmpq $0x0, -0x8(%rax,%r15,8)
jne 0x9511
movq 0xe0(%rsp), %rcx
movq %rcx, -0x8(%rax,%r15,8)
movq 0x60(%rsp), %rsi
movq 0x58(%rsp), %rax
cmpq 0x30(%rsp), %r15
jae 0x8522
subq %rbp, %r12
incq %r15
addq $0x10, %r13
testq %r12, %r12
jne 0x83f1
movq 0x30(%rsp), %r14
testq %r14, %r14
movq 0x28(%rsp), %r15
je 0x8553
xorl %ebx, %ebx
movq 0x120(%rsp), %rdi
cmpq $0x0, (%rdi,%rbx)
je 0x854a
addq %rbx, %rdi
callq 0x44c0
addq $0x8, %rbx
cmpq %rbx, %r15
jne 0x8533
cmpq $0xf423f, (%rsp)        # imm = 0xF423F
movq 0x18(%rsp), %r12
ja 0x8397
testq %r14, %r14
movq 0x50(%rsp), %r8
je 0x85ca
movq 0x80(%rsp), %rax
movq 0x48(%rsp), %rcx
xorl %edx, %edx
cmpl $0x0, 0x20(%rsp)
je 0x85c2
movq %rdx, %rsi
shlq $0x4, %rsi
movq 0x8(%rax,%rsi), %rsi
xorl %edi, %edi
movsd 0x10(%rsi,%rdi), %xmm0
movupd (%rsi,%rdi), %xmm1
movupd (%rcx,%rdi), %xmm2
addpd %xmm1, %xmm2
movupd %xmm2, (%rcx,%rdi)
addsd 0x10(%rcx,%rdi), %xmm0
movsd %xmm0, 0x10(%rcx,%rdi)
addq $0x18, %rdi
cmpq %rdi, %r8
jne 0x8594
incq %rdx
cmpq %r14, %rdx
jne 0x857f
movq 0x10(%rsp), %rdi
callq 0x4370
movq 0x80(%rsp), %rsi
testq %rsi, %rsi
je 0x85ee
leaq 0x80(%rsp), %rdi
callq 0xbe0c
movq 0x120(%rsp), %rsi
testq %rsi, %rsi
je 0x8608
leaq 0x120(%rsp), %rdi
callq 0xbe62
testq %r12, %r12
je 0x8615
movq %r12, %rdi
callq 0x42c0
testq %r12, %r12
je 0x8ee6
cmpb $0x1, 0x258(%rsp)
jne 0x91b8
movq 0x160(%rsp), %rbx
leaq 0x2f8(%rsp), %rdi
leaq 0x240(%rsp), %rsi
movl $0xb8, %edx
callq 0x4260
movl 0x40(%rsp), %eax
movl %eax, 0x28(%rsp)
movl 0x44(%rsp), %eax
movq %rax, 0x18(%rsp)
leaq 0x4f56(%rip), %rsi      # 0xd5bc
movq %rbx, %rdi
callq 0x4350
movq %rax, %rbx
testq %rax, %rax
je 0x8ed0
movq %rbx, 0x20(%rsp)
callq 0x43b0
movl %eax, %ebx
leaq 0x4f32(%rip), %rdi      # 0xd5bf
movl %eax, %esi
xorl %eax, %eax
callq 0x4050
movl %ebx, %ebx
leaq 0x8(,%rbx,8), %rdi
callq 0x4030
movq %rax, %r15
leaq (,%rbx,8), %r14
movq %rbx, (%rax)
addq $0x8, %r15
testq %rbx, %rbx
je 0x86c9
movq %r15, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4180
movq %r15, 0x120(%rsp)
movq %rbx, %rbp
shlq $0x4, %rbp
leaq 0x8(%rbp), %rdi
callq 0x4030
movq %rax, %r15
movq %r14, 0x68(%rsp)
addq $0x8, %r15
movq %rbx, (%rax)
movq %rbx, 0x58(%rsp)
testq %rbx, %rbx
je 0x8c26
xorl %ebx, %ebx
movq %r15, %rdi
xorl %esi, %esi
movq %rbp, %rdx
callq 0x4180
movq %r15, 0x80(%rsp)
movq 0x18(%rsp), %r14
imull 0x28(%rsp), %r14d
leaq (,%r14,8), %rax
leaq (%rax,%rax,2), %r15
leaq (%rax,%rax,2), %rax
addq $-0x18, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rcx
shrq $0x4, %rdx
leaq (%rdx,%rdx,2), %rax
leaq 0x18(,%rax,8), %r12
movq %r15, %rdi
callq 0x4030
movq %rax, %r13
testl %r14d, %r14d
je 0x876e
movq %r13, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x4180
movq 0x80(%rsp), %rax
movl 0x28(%rsp), %ecx
movl %ecx, (%rax,%rbx)
movq 0x18(%rsp), %rcx
movl %ecx, 0x4(%rax,%rbx)
movq 0x8(%rax,%rbx), %rdi
movq %r13, 0x8(%rax,%rbx)
testq %rdi, %rdi
je 0x879a
callq 0x4370
addq $0x10, %rbx
cmpq %rbx, %rbp
jne 0x8751
jmp 0x8c2e
movq %r15, 0xe0(%rsp)
movl $0x16e3600, %edi        # imm = 0x16E3600
callq 0x4030
movq %rax, 0x10(%rsp)
movq 0x30(%rsp), %r14
leaq -0x1(%r14), %rax
movq %rax, 0x50(%rsp)
testl %r14d, %r14d
sete %bl
movl $0x18, %esi
movl $0xf4240, %edx          # imm = 0xF4240
movq 0x10(%rsp), %rdi
movq 0x20(%rsp), %rcx
callq 0x4430
movq %rax, %rcx
movq 0x50(%rsp), %rax
leaq (%rax,%rcx), %rsi
movq %rsi, %rax
xorl %edx, %edx
divq %r14
movq %rcx, (%rsp)
testq %rcx, %rcx
sete %cl
orb %bl, %cl
jne 0x8951
movl $0x1, %ebx
xorl %r15d, %r15d
movq (%rsp), %r14
movq %rsi, 0x60(%rsp)
movq %rax, 0x58(%rsp)
cmpq %r14, %rax
movq %r14, %r12
cmovbq %rax, %r12
cmpq 0x30(%rsp), %rsi
jb 0x8937
movq 0xe0(%rsp), %r13
addq %r15, %r13
movq $0x0, 0x78(%rsp)
movl $0x138, %edi            # imm = 0x138
callq 0x42d0
movq %rax, %rbp
movq (%rsp), %rax
subq %r14, %rax
leaq (%rax,%rax,2), %rax
movq 0x10(%rsp), %rcx
leaq (%rcx,%rax,8), %rax
movq %rax, 0x8(%rsp)
leaq 0x9092(%rip), %rax      # 0x11910
movq %rax, (%rbp)
movq %r13, 0x8(%rbp)
movq %rbp, %rdi
addq $0x10, %rdi
movl $0xf8, %edx
leaq 0x4b0(%rsp), %rsi
callq 0x4260
movaps 0xd0(%rsp), %xmm0
movlps %xmm0, 0x108(%rbp)
movss 0x70(%rsp), %xmm0
movss %xmm0, 0x110(%rbp)
movapd 0xc0(%rsp), %xmm0
movupd %xmm0, 0x114(%rbp)
movq 0x8(%rsp), %rax
movq %rax, 0x128(%rbp)
movq %r12, 0x130(%rbp)
movq %rbp, 0x120(%rsp)
leaq 0x78(%rsp), %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
callq 0x4290
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x890f
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x80(%rsp), %rax
cmpq $0x0, -0x8(%rax,%rbx,8)
jne 0x9511
movq 0x78(%rsp), %rcx
movq %rcx, -0x8(%rax,%rbx,8)
movq 0x60(%rsp), %rsi
movq 0x58(%rsp), %rax
cmpq 0x30(%rsp), %rbx
jae 0x8951
subq %r12, %r14
incq %rbx
addq $0x10, %r15
testq %r14, %r14
jne 0x8828
movq 0x30(%rsp), %r14
testq %r14, %r14
movq 0x68(%rsp), %r15
je 0x8982
xorl %ebx, %ebx
movq 0x80(%rsp), %rdi
cmpq $0x0, (%rdi,%rbx)
je 0x8979
addq %rbx, %rdi
callq 0x44c0
addq $0x8, %rbx
cmpq %rbx, %r15
jne 0x8962
cmpq $0xf423f, (%rsp)        # imm = 0xF423F
ja 0x87cd
testq %r14, %r14
movq 0x20(%rsp), %rbx
je 0x8a12
movq 0xe0(%rsp), %rax
movq 0x48(%rsp), %rcx
movq 0x18(%rsp), %rdx
imull 0x28(%rsp), %edx
movq %rdx, %r9
leaq (,%rdx,8), %rdx
leaq (%rdx,%rdx,2), %rdx
xorl %esi, %esi
testl %r9d, %r9d
je 0x8a0a
movq %rsi, %rdi
shlq $0x4, %rdi
movq 0x8(%rax,%rdi), %rdi
xorl %r8d, %r8d
movsd 0x10(%rdi,%r8), %xmm0
movupd (%rdi,%r8), %xmm1
movupd (%rcx,%r8), %xmm2
addpd %xmm1, %xmm2
movupd %xmm2, (%rcx,%r8)
addsd 0x10(%rcx,%r8), %xmm0
movsd %xmm0, 0x10(%rcx,%r8)
addq $0x18, %r8
cmpq %r8, %rdx
jne 0x89d6
incq %rsi
cmpq %r14, %rsi
jne 0x89c2
movq 0x10(%rsp), %rdi
callq 0x4370
movq 0xe0(%rsp), %rsi
testq %rsi, %rsi
je 0x8a36
leaq 0xe0(%rsp), %rdi
callq 0xbe0c
movq 0x80(%rsp), %rsi
testq %rsi, %rsi
je 0x8a50
leaq 0x80(%rsp), %rdi
callq 0xbe62
testq %rbx, %rbx
je 0x8a5d
movq %rbx, %rdi
callq 0x42c0
testq %rbx, %rbx
je 0x91a9
cmpb $0x1, 0x258(%rsp)
jne 0x91a3
movq 0x160(%rsp), %rbx
movupd 0x1e0(%rsp), %xmm0
movupd 0x1f0(%rsp), %xmm1
movupd 0x200(%rsp), %xmm2
movups 0x210(%rsp), %xmm3
leaq 0x3f0(%rsp), %rdi
movapd %xmm0, -0x40(%rdi)
movapd %xmm1, -0x30(%rdi)
movapd %xmm2, -0x20(%rdi)
movaps %xmm3, -0x10(%rdi)
leaq 0x240(%rsp), %rsi
movl $0xb8, %edx
callq 0x4260
movl 0x40(%rsp), %eax
movl %eax, 0x28(%rsp)
movl 0x44(%rsp), %eax
movq %rax, 0x18(%rsp)
leaq 0x4ad8(%rip), %rsi      # 0xd5bc
movq %rbx, %rdi
callq 0x4350
movq %rax, %rbx
testq %rax, %rax
je 0x9191
movq %rbx, 0x20(%rsp)
callq 0x43b0
movl %eax, %ebx
leaq 0x4ab4(%rip), %rdi      # 0xd5bf
movl %eax, %esi
xorl %eax, %eax
callq 0x4050
movl %ebx, %ebx
leaq 0x8(,%rbx,8), %rdi
callq 0x4030
movq %rax, %r15
leaq (,%rbx,8), %r14
movq %rbx, (%rax)
addq $0x8, %r15
testq %rbx, %rbx
je 0x8b47
movq %r15, %rdi
xorl %esi, %esi
movq %r14, %rdx
callq 0x4180
movq %r15, 0x80(%rsp)
movq %rbx, %rbp
shlq $0x4, %rbp
leaq 0x8(%rbp), %rdi
callq 0x4030
movq %rax, %r15
movq %r14, 0x68(%rsp)
addq $0x8, %r15
movq %rbx, (%rax)
movq %rbx, 0x58(%rsp)
testq %rbx, %rbx
je 0x8ef0
xorl %ebx, %ebx
movq %r15, %rdi
xorl %esi, %esi
movq %rbp, %rdx
callq 0x4180
movq %r15, 0xe0(%rsp)
movq 0x18(%rsp), %r14
imull 0x28(%rsp), %r14d
leaq (,%r14,8), %rax
leaq (%rax,%rax,2), %r15
leaq (%rax,%rax,2), %rax
addq $-0x18, %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rcx
shrq $0x4, %rdx
leaq (%rdx,%rdx,2), %rax
leaq 0x18(,%rax,8), %r12
movq %r15, %rdi
callq 0x4030
movq %rax, %r13
testl %r14d, %r14d
je 0x8bec
movq %r13, %rdi
xorl %esi, %esi
movq %r12, %rdx
callq 0x4180
movq 0xe0(%rsp), %rax
movl 0x28(%rsp), %ecx
movl %ecx, (%rax,%rbx)
movq 0x18(%rsp), %rcx
movl %ecx, 0x4(%rax,%rbx)
movq 0x8(%rax,%rbx), %rdi
movq %r13, 0x8(%rax,%rbx)
testq %rdi, %rdi
je 0x8c18
callq 0x4370
addq $0x10, %rbx
cmpq %rbx, %rbp
jne 0x8bcf
jmp 0x8ef8
movq %r15, 0x80(%rsp)
movl $0xf42400, %edi         # imm = 0xF42400
callq 0x4030
movq %rax, (%rsp)
movq 0x58(%rsp), %r12
leaq -0x1(%r12), %rax
movq %rax, 0x50(%rsp)
testl %r12d, %r12d
sete %bl
movl $0x10, %esi
movl $0xf4240, %edx          # imm = 0xF4240
movq (%rsp), %rdi
movq 0x20(%rsp), %rcx
callq 0x4430
movq %rax, %rcx
movq 0x50(%rsp), %rax
leaq (%rax,%rcx), %rsi
movq %rsi, %rax
xorl %edx, %edx
divq %r12
movq %rcx, 0x8(%rsp)
testq %rcx, %rcx
sete %cl
orb %bl, %cl
jne 0x8dd6
movl $0x1, %ebx
xorl %r15d, %r15d
movq 0x8(%rsp), %r14
movq %rsi, 0x10(%rsp)
movq %rax, 0x60(%rsp)
cmpq %r14, %rax
movq %r14, %r13
cmovbq %rax, %r13
cmpq %r12, %rsi
jb 0x8dbe
movq %r13, 0x30(%rsp)
movq 0x80(%rsp), %r13
addq %r15, %r13
movq $0x0, 0xe0(%rsp)
movl $0xf8, %edi
callq 0x42d0
movq %rax, %rbp
movq 0x8(%rsp), %r12
subq %r14, %r12
shlq $0x4, %r12
addq (%rsp), %r12
leaq 0x8bd6(%rip), %rax      # 0x118d0
movq %rax, (%rbp)
movq %r13, 0x8(%rbp)
movq %rbp, %rdi
addq $0x10, %rdi
movl $0xb8, %edx
leaq 0x2f8(%rsp), %rsi
callq 0x4260
movaps 0xd0(%rsp), %xmm0
movlps %xmm0, 0xc8(%rbp)
movss 0x70(%rsp), %xmm0
movss %xmm0, 0xd0(%rbp)
movapd 0xc0(%rsp), %xmm0
movupd %xmm0, 0xd4(%rbp)
movq %r12, 0xe8(%rbp)
movq 0x30(%rsp), %r13
movq %r13, 0xf0(%rbp)
movq %rbp, 0x1e0(%rsp)
leaq 0xe0(%rsp), %rdi
leaq 0x1e0(%rsp), %rsi
xorl %edx, %edx
callq 0x4290
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x8d8e
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x120(%rsp), %rax
cmpq $0x0, -0x8(%rax,%rbx,8)
movq 0x58(%rsp), %r12
jne 0x9511
movq 0xe0(%rsp), %rcx
movq %rcx, -0x8(%rax,%rbx,8)
movq 0x10(%rsp), %rsi
movq 0x60(%rsp), %rax
cmpq %r12, %rbx
jae 0x8dd6
subq %r13, %r14
incq %rbx
addq $0x10, %r15
testq %r14, %r14
jne 0x8ca7
testq %r12, %r12
movq 0x68(%rsp), %r14
je 0x8e02
xorl %ebx, %ebx
movq 0x120(%rsp), %rdi
cmpq $0x0, (%rdi,%rbx)
je 0x8df9
addq %rbx, %rdi
callq 0x44c0
addq $0x8, %rbx
cmpq %rbx, %r14
jne 0x8de2
cmpq $0xf423f, 0x8(%rsp)     # imm = 0xF423F
ja 0x8c4b
testq %r12, %r12
movq 0x20(%rsp), %rbx
je 0x8e93
movq 0x80(%rsp), %rax
movq 0x48(%rsp), %rcx
movq 0x18(%rsp), %rdx
imull 0x28(%rsp), %edx
movq %rdx, %r9
leaq (,%rdx,8), %rdx
leaq (%rdx,%rdx,2), %rdx
xorl %esi, %esi
testl %r9d, %r9d
je 0x8e8b
movq %rsi, %rdi
shlq $0x4, %rdi
movq 0x8(%rax,%rdi), %rdi
xorl %r8d, %r8d
movsd 0x10(%rdi,%r8), %xmm0
movupd (%rdi,%r8), %xmm1
movupd (%rcx,%r8), %xmm2
addpd %xmm1, %xmm2
movupd %xmm2, (%rcx,%r8)
addsd 0x10(%rcx,%r8), %xmm0
movsd %xmm0, 0x10(%rcx,%r8)
addq $0x18, %r8
cmpq %r8, %rdx
jne 0x8e57
incq %rsi
cmpq %r12, %rsi
jne 0x8e43
movq (%rsp), %rdi
callq 0x4370
movq 0x80(%rsp), %rsi
testq %rsi, %rsi
je 0x8eb6
leaq 0x80(%rsp), %rdi
callq 0xbe0c
movq 0x120(%rsp), %rsi
testq %rsi, %rsi
je 0x8ed0
leaq 0x120(%rsp), %rdi
callq 0xbe62
testq %rbx, %rbx
je 0x8edd
movq %rbx, %rdi
callq 0x42c0
testq %rbx, %rbx
jne 0x91b8
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
jmp 0x9435
movq %r15, 0xe0(%rsp)
movl $0xf42400, %edi         # imm = 0xF42400
callq 0x4030
movq %rax, (%rsp)
movq 0x58(%rsp), %r12
leaq -0x1(%r12), %rax
movq %rax, 0x50(%rsp)
testl %r12d, %r12d
sete %bl
movl $0x10, %esi
movl $0xf4240, %edx          # imm = 0xF4240
movq (%rsp), %rdi
movq 0x20(%rsp), %rcx
callq 0x4430
movq %rax, %rcx
movq 0x50(%rsp), %rax
leaq (%rax,%rcx), %rsi
movq %rsi, %rax
xorl %edx, %edx
divq %r12
movq %rcx, 0x8(%rsp)
testq %rcx, %rcx
sete %cl
orb %bl, %cl
jne 0x9097
movl $0x1, %ebx
xorl %r15d, %r15d
movq 0x8(%rsp), %r14
movq %rsi, 0x10(%rsp)
movq %rax, 0x60(%rsp)
cmpq %r14, %rax
movq %r14, %r13
cmovbq %rax, %r13
cmpq %r12, %rsi
jb 0x907f
movq %r13, 0x30(%rsp)
movq 0xe0(%rsp), %r13
addq %r15, %r13
movq $0x0, 0x78(%rsp)
movl $0x138, %edi            # imm = 0x138
callq 0x42d0
movq %rax, %rbp
movq 0x8(%rsp), %r12
subq %r14, %r12
shlq $0x4, %r12
addq (%rsp), %r12
leaq 0x898f(%rip), %rax      # 0x11950
movq %rax, (%rbp)
movq %r13, 0x8(%rbp)
movq %rbp, %rdi
addq $0x10, %rdi
movl $0xf8, %edx
leaq 0x3b0(%rsp), %rsi
callq 0x4260
movaps 0xd0(%rsp), %xmm0
movlps %xmm0, 0x108(%rbp)
movss 0x70(%rsp), %xmm0
movss %xmm0, 0x110(%rbp)
movapd 0xc0(%rsp), %xmm0
movupd %xmm0, 0x114(%rbp)
movq %r12, 0x128(%rbp)
movq 0x30(%rsp), %r13
movq %r13, 0x130(%rbp)
movq %rbp, 0x120(%rsp)
leaq 0x78(%rsp), %rdi
leaq 0x120(%rsp), %rsi
xorl %edx, %edx
callq 0x4290
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x9052
movq (%rdi), %rax
callq *0x8(%rax)
movq 0x80(%rsp), %rax
cmpq $0x0, -0x8(%rax,%rbx,8)
movq 0x58(%rsp), %r12
jne 0x9511
movq 0x78(%rsp), %rcx
movq %rcx, -0x8(%rax,%rbx,8)
movq 0x10(%rsp), %rsi
movq 0x60(%rsp), %rax
cmpq %r12, %rbx
jae 0x9097
subq %r13, %r14
incq %rbx
addq $0x10, %r15
testq %r14, %r14
jne 0x8f71
testq %r12, %r12
movq 0x68(%rsp), %r14
je 0x90c3
xorl %ebx, %ebx
movq 0x80(%rsp), %rdi
cmpq $0x0, (%rdi,%rbx)
je 0x90ba
addq %rbx, %rdi
callq 0x44c0
addq $0x8, %rbx
cmpq %rbx, %r14
jne 0x90a3
cmpq $0xf423f, 0x8(%rsp)     # imm = 0xF423F
ja 0x8f15
testq %r12, %r12
movq 0x20(%rsp), %rbx
je 0x9154
movq 0xe0(%rsp), %rax
movq 0x48(%rsp), %rcx
movq 0x18(%rsp), %rdx
imull 0x28(%rsp), %edx
movq %rdx, %r9
leaq (,%rdx,8), %rdx
leaq (%rdx,%rdx,2), %rdx
xorl %esi, %esi
testl %r9d, %r9d
je 0x914c
movq %rsi, %rdi
shlq $0x4, %rdi
movq 0x8(%rax,%rdi), %rdi
xorl %r8d, %r8d
movsd 0x10(%rdi,%r8), %xmm0
movupd (%rdi,%r8), %xmm1
movupd (%rcx,%r8), %xmm2
addpd %xmm1, %xmm2
movupd %xmm2, (%rcx,%r8)
addsd 0x10(%rcx,%r8), %xmm0
movsd %xmm0, 0x10(%rcx,%r8)
addq $0x18, %r8
cmpq %r8, %rdx
jne 0x9118
incq %rsi
cmpq %r12, %rsi
jne 0x9104
movq (%rsp), %rdi
callq 0x4370
movq 0xe0(%rsp), %rsi
testq %rsi, %rsi
je 0x9177
leaq 0xe0(%rsp), %rdi
callq 0xbe0c
movq 0x80(%rsp), %rsi
testq %rsi, %rsi
je 0x9191
leaq 0x80(%rsp), %rdi
callq 0xbe62
testq %rbx, %rbx
je 0x919e
movq %rbx, %rdi
callq 0x42c0
testq %rbx, %rbx
je 0x91a9
xorl %ebx, %ebx
movb $0x1, %al
jmp 0x91b0
movl $0xffffffff, %ebx       # imm = 0xFFFFFFFF
xorl %eax, %eax
testb %al, %al
je 0x9435
movq 0x1a0(%rsp), %rdi
leaq 0x40(%rsp), %rsi
callq 0xa702
xorps %xmm0, %xmm0
cvtss2sd 0x2b4(%rsp), %xmm0
movsd %xmm0, 0x8(%rsp)
xorps %xmm0, %xmm0
cvtss2sd 0x2bc(%rsp), %xmm0
movsd %xmm0, 0x30(%rsp)
movl 0x40(%rsp), %ebp
movl 0x44(%rsp), %r12d
movl %r12d, %r15d
imull %ebp, %r15d
leaq (,%r15,8), %rax
leaq (%rax,%rax,2), %rbx
movq %rbx, %rdi
callq 0x4030
movq %rax, %r14
movl %r12d, 0x60(%rsp)
movl %ebp, 0x10(%rsp)
testq %r15, %r15
je 0x924e
leaq -0x18(%rbx), %rax
movabsq $-0x5555555555555555, %rcx # imm = 0xAAAAAAAAAAAAAAAB
mulq %rcx
shrq $0x4, %rdx
leaq (%rdx,%rdx,2), %rax
leaq 0x18(,%rax,8), %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x4180
movq %r15, (%rsp)
testl %r15d, %r15d
movsd 0x8(%rsp), %xmm1
je 0x9356
movsd 0x3df7(%rip), %xmm0     # 0xd060
divsd 0x30(%rsp), %xmm0
movsd %xmm0, 0x30(%rsp)
movq 0x48(%rsp), %r13
movq (%rsp), %rax
leaq (%rax,%rax,2), %rax
leaq (,%rax,8), %r12
addq %r13, %r12
xorl %ebp, %ebp
xorps %xmm2, %xmm2
cvtss2sd 0x2b8(%rsp), %xmm2
leaq 0x18(,%rbp), %r15
addq %r13, %r15
movsd -0x18(%r15), %xmm0
mulsd %xmm2, %xmm0
movsd -0x10(%r15), %xmm3
mulsd %xmm2, %xmm3
mulsd -0x8(%r15), %xmm2
addsd %xmm1, %xmm0
addsd %xmm1, %xmm3
movsd %xmm3, 0xc0(%rsp)
addsd %xmm1, %xmm2
movsd %xmm2, 0xd0(%rsp)
movsd 0x30(%rsp), %xmm1
callq 0x44f0
movsd %xmm0, 0x70(%rsp)
movsd 0xc0(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
callq 0x44f0
movsd %xmm0, 0xc0(%rsp)
movsd 0xd0(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
callq 0x44f0
movsd 0x8(%rsp), %xmm1
movsd 0x70(%rsp), %xmm2
movsd %xmm2, (%r14,%rbp)
movsd 0xc0(%rsp), %xmm2
movsd %xmm2, 0x8(%r14,%rbp)
movsd %xmm0, 0x10(%r14,%rbp)
addq $0x18, %rbp
cmpq %r12, %r15
jne 0x928f
movl 0x10(%rsp), %eax
movl %eax, 0x2f8(%rsp)
movl 0x60(%rsp), %eax
movl %eax, 0x2fc(%rsp)
movq %r14, 0x300(%rsp)
cmpb $0x1, 0x2c0(%rsp)
movsd 0x3cdc(%rip), %xmm4     # 0xd060
jne 0x9405
cmpl $0x0, (%rsp)
je 0x9405
xorl %eax, %eax
movsd 0x10(%r14,%rax), %xmm0
movupd (%r14,%rax), %xmm1
movapd %xmm1, %xmm2
unpckhpd %xmm1, %xmm2            # xmm2 = xmm2[1],xmm1[1]
maxsd %xmm1, %xmm2
movapd %xmm0, %xmm3
maxsd %xmm2, %xmm3
xorl %ecx, %ecx
ucomisd %xmm4, %xmm3
seta %dl
movapd %xmm4, %xmm2
divsd %xmm3, %xmm2
jbe 0x93c6
mulsd %xmm2, %xmm0
unpcklpd %xmm2, %xmm2            # xmm2 = xmm2[0,0]
mulpd %xmm1, %xmm2
movb %dl, %cl
movd %ecx, %xmm3
pshufd $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
pslld $0x1f, %xmm3
psrad $0x1f, %xmm3
andpd %xmm3, %xmm2
andnpd %xmm1, %xmm3
orpd %xmm2, %xmm3
movupd %xmm3, (%r14,%rax)
movsd %xmm0, 0x10(%r14,%rax)
addq $0x18, %rax
cmpq %rax, %rbx
jne 0x938e
movq 0x220(%rsp), %rdi
movl 0x288(%rsp), %edx
leaq 0x2f8(%rsp), %rsi
callq 0x68e7
movq 0x300(%rsp), %rdi
testq %rdi, %rdi
je 0x9433
callq 0x4370
xorl %ebx, %ebx
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x9444
callq 0x4370
movq 0x220(%rsp), %rdi
leaq 0x230(%rsp), %rax
cmpq %rax, %rdi
je 0x9469
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x1a0(%rsp), %rdi
leaq 0x1b0(%rsp), %rax
cmpq %rax, %rdi
je 0x948e
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x160(%rsp), %rdi
leaq 0x170(%rsp), %rax
cmpq %rax, %rdi
je 0x94b3
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x180(%rsp), %rdi
leaq 0x190(%rsp), %rax
cmpq %rax, %rdi
je 0x94d8
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x1c0(%rsp), %rdi
leaq 0x1d0(%rsp), %rax
cmpq %rax, %rdi
je 0x94fd
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x42e0
movl %ebx, %eax
addq $0x5a8, %rsp            # imm = 0x5A8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x40b0
jmp 0x960a
jmp 0x9602
jmp 0x9538
jmp 0x9540
movq %rax, %rbx
jmp 0x96f9
jmp 0x9540
jmp 0x960a
jmp 0x9612
movq %rax, %rbx
jmp 0x9754
movq %rax, %rbx
jmp 0x977a
movq %rax, %rbx
jmp 0x97b4
movq %rax, %rbx
jmp 0x97da
jmp 0x958a
jmp 0x958a
jmp 0x958a
jmp 0x958a
movq %rax, %rbx
movq 0x300(%rsp), %rdi
testq %rdi, %rdi
je 0x9575
callq 0x4370
movq $0x0, 0x300(%rsp)
jmp 0x97e4
jmp 0x958a
jmp 0x958a
movq %rax, %rbx
jmp 0x97e4
movq %rax, %rbx
jmp 0x97fc
movq %rax, %rbx
jmp 0x9821
movq %rax, %rbx
jmp 0x9846
jmp 0x95ac
movq %rax, %rbx
movq 0x2f8(%rsp), %rdi
cmpq %r14, %rdi
je 0x986b
movq 0x308(%rsp), %rsi
jmp 0x9863
movq %rax, %rbx
jmp 0x986b
jmp 0x95d7
movq %rax, %rbx
movq 0x2f8(%rsp), %rdi
cmpq %r14, %rdi
je 0x9890
movq 0x308(%rsp), %rsi
jmp 0x9888
movq %rax, %rbx
jmp 0x9890
jmp 0x960a
movq %rax, %rbx
jmp 0x96d3
movq %rax, %rbx
jmp 0x972e
movq %rax, %rbx
jmp 0x978e
movq %rax, %rbx
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x9630
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x120(%rsp)
jmp 0x96c1
movq %rax, %rbx
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x9657
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x1e0(%rsp)
jmp 0x96ca
jmp 0x96be
jmp 0x96c7
movq %rax, %rbx
movq 0x120(%rsp), %rdi
testq %rdi, %rdi
je 0x967f
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x120(%rsp)
jmp 0x9724
movq %rax, %rbx
movq 0x1e0(%rsp), %rdi
testq %rdi, %rdi
je 0x96a6
movq (%rdi), %rax
callq *0x8(%rax)
movq $0x0, 0x1e0(%rsp)
jmp 0x9784
jmp 0x9721
jmp 0x9781
movq %rax, %rbx
movq (%rsp), %rdi
jmp 0x9729
movq %rax, %rbx
movq (%rsp), %rdi
callq 0x4370
movq 0x80(%rsp), %rsi
testq %rsi, %rsi
je 0x96ed
leaq 0x80(%rsp), %rdi
callq 0xbe0c
movq $0x0, 0x80(%rsp)
movq 0x120(%rsp), %rsi
testq %rsi, %rsi
je 0x9713
leaq 0x120(%rsp), %rdi
callq 0xbe62
movq $0x0, 0x120(%rsp)
jmp 0x977a
movq %rax, %rbx
movq 0x10(%rsp), %rdi
callq 0x4370
movq 0xe0(%rsp), %rsi
testq %rsi, %rsi
je 0x9748
leaq 0xe0(%rsp), %rdi
callq 0xbe0c
movq $0x0, 0xe0(%rsp)
movq 0x80(%rsp), %rsi
testq %rsi, %rsi
je 0x976e
leaq 0x80(%rsp), %rdi
callq 0xbe62
movq $0x0, 0x80(%rsp)
movq 0x20(%rsp), %rdi
jmp 0x97df
movq %rax, %rbx
movq 0x10(%rsp), %rdi
callq 0x4370
movq 0x80(%rsp), %rsi
testq %rsi, %rsi
je 0x97a8
leaq 0x80(%rsp), %rdi
callq 0xbe0c
movq $0x0, 0x80(%rsp)
movq 0x120(%rsp), %rsi
testq %rsi, %rsi
je 0x97ce
leaq 0x120(%rsp), %rdi
callq 0xbe62
movq $0x0, 0x120(%rsp)
movq 0x18(%rsp), %rdi
callq 0x42c0
movq 0x48(%rsp), %rdi
testq %rdi, %rdi
je 0x97f3
callq 0x4370
movq $0x0, 0x48(%rsp)
movq 0x220(%rsp), %rdi
leaq 0x230(%rsp), %rax
cmpq %rax, %rdi
je 0x9821
movq 0x230(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x1a0(%rsp), %rdi
leaq 0x1b0(%rsp), %rax
cmpq %rax, %rdi
je 0x9846
movq 0x1b0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x160(%rsp), %rdi
leaq 0x170(%rsp), %rax
cmpq %rax, %rdi
je 0x986b
movq 0x170(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x180(%rsp), %rdi
leaq 0x190(%rsp), %rax
cmpq %rax, %rdi
je 0x9890
movq 0x190(%rsp), %rsi
incq %rsi
callq 0x42e0
movq 0x1c0(%rsp), %rdi
leaq 0x1d0(%rsp), %rax
cmpq %rax, %rdi
je 0x98b5
movq 0x1d0(%rsp), %rsi
incq %rsi
callq 0x42e0
movq %rbx, %rdi
callq 0x4510
nop