// File: /workspace/github_c_makefile_star2_O2/stanfordnlp[P]GloVe/src/glove.c
// Function: save_params
int save_params(int nb_iter) {
    /*
     * nb_iter is the number of iteration (= a full pass through the cooccurrence matrix).
     *   nb_iter  > 0 => checkpointing the intermediate parameters, so nb_iter is in the filename of output file.
     *   nb_iter == 0 => checkpointing the initial parameters
     *   else         => saving the final paramters, so nb_iter is ignored.
     */

    long long a, b;
    char format[20];
    char output_file[MAX_STRING_LENGTH+20], output_file_gsq[MAX_STRING_LENGTH+20];
    char *word = malloc(sizeof(char) * MAX_STRING_LENGTH + 1);
    if (NULL == word) {
        return 1;
    }
    FILE *fid, *fout;
    FILE *fgs = NULL;
    
    if (use_binary > 0 || nb_iter == 0) {
        // Save parameters in binary file
        // note: always save initial parameters in binary, as the reading code expects binary
        if (nb_iter < 0)
            sprintf(output_file,"%s.bin",save_W_file);
        else
            sprintf(output_file,"%s.%03d.bin",save_W_file,nb_iter);

        fout = fopen(output_file,"wb");
        if (fout == NULL) {log_file_loading_error("weights file", save_W_file); free(word); return 1;}
        for (a = 0; a < 2 * vocab_size * (vector_size + 1); a++) fwrite(&W[a], sizeof(real), 1,fout);
        fclose(fout);
        if (save_gradsq > 0) {
            if (nb_iter < 0)
                sprintf(output_file_gsq,"%s.bin",save_gradsq_file);
            else
                sprintf(output_file_gsq,"%s.%03d.bin",save_gradsq_file,nb_iter);

            fgs = fopen(output_file_gsq,"wb");
            if (fgs == NULL) {log_file_loading_error("gradsq file", save_gradsq_file); free(word); return 1;}
            for (a = 0; a < 2 * vocab_size * (vector_size + 1); a++) fwrite(&gradsq[a], sizeof(real), 1,fgs);
            fclose(fgs);
        }
    }
    if (use_binary != 1) { // Save parameters in text file
        if (nb_iter < 0)
            sprintf(output_file,"%s.txt",save_W_file);
        else
            sprintf(output_file,"%s.%03d.txt",save_W_file,nb_iter);
        if (save_gradsq > 0) {
            if (nb_iter < 0)
                sprintf(output_file_gsq,"%s.txt",save_gradsq_file);
            else
                sprintf(output_file_gsq,"%s.%03d.txt",save_gradsq_file,nb_iter);

            fgs = fopen(output_file_gsq,"wb");
            if (fgs == NULL) {log_file_loading_error("gradsq file", save_gradsq_file); free(word); return 1;}
        }
        fout = fopen(output_file,"wb");
        if (fout == NULL) {log_file_loading_error("weights file", save_W_file); free(word); return 1;}
        fid = fopen(vocab_file, "r");
        sprintf(format,"%%%ds",MAX_STRING_LENGTH);
        if (fid == NULL) {log_file_loading_error("vocab file", vocab_file); free(word); fclose(fout); return 1;}
        if (write_header) fprintf(fout, "%lld %d\n", vocab_size, vector_size);
        for (a = 0; a < vocab_size; a++) {
            if (fscanf(fid,format,word) == 0) {free(word); fclose(fid); fclose(fout); return 1;}
            // input vocab cannot contain special <unk> keyword
            if (strcmp(word, "<unk>") == 0) {free(word); fclose(fid); fclose(fout);  return 1;}
            fprintf(fout, "%s",word);
            if (model == 0) { // Save all parameters (including bias)
                for (b = 0; b < (vector_size + 1); b++) fprintf(fout," %lf", W[a * (vector_size + 1) + b]);
                for (b = 0; b < (vector_size + 1); b++) fprintf(fout," %lf", W[(vocab_size + a) * (vector_size + 1) + b]);
            }
            if (model == 1) // Save only "word" vectors (without bias)
                for (b = 0; b < vector_size; b++) fprintf(fout," %lf", W[a * (vector_size + 1) + b]);
            if (model == 2) // Save "word + context word" vectors (without bias)
                for (b = 0; b < vector_size; b++) fprintf(fout," %lf", W[a * (vector_size + 1) + b] + W[(vocab_size + a) * (vector_size + 1) + b]);
            if (model == 3) { // Save "word" and "context" vectors (without bias; row-concatenated)
                for (b = 0; b < vector_size; b++) fprintf(fout," %lf", W[a * (vector_size + 1) + b]);
                for (b = 0; b < vector_size; b++) fprintf(fout," %lf", W[(vocab_size + a) * (vector_size + 1) + b]);
            }
            fprintf(fout,"\n");
            if (save_gradsq > 0) { // Save gradsq
                fprintf(fgs, "%s",word);
                for (b = 0; b < (vector_size + 1); b++) fprintf(fgs," %lf", gradsq[a * (vector_size + 1) + b]);
                for (b = 0; b < (vector_size + 1); b++) fprintf(fgs," %lf", gradsq[(vocab_size + a) * (vector_size + 1) + b]);
                fprintf(fgs,"\n");
            }
            if (fscanf(fid,format,word) == 0) {
                // Eat irrelevant frequency entry
                fclose(fout);
                fclose(fid);
                free(word); 
                return 1;
                } 
        }

        if (use_unk_vec) {
            real* unk_vec = (real*)calloc((vector_size + 1), sizeof(real));
            real* unk_context = (real*)calloc((vector_size + 1), sizeof(real));
            strcpy(word, "<unk>");

            long long num_rare_words = vocab_size < 100 ? vocab_size : 100;

            for (a = vocab_size - num_rare_words; a < vocab_size; a++) {
                for (b = 0; b < (vector_size + 1); b++) {
                    unk_vec[b] += W[a * (vector_size + 1) + b] / num_rare_words;
                    unk_context[b] += W[(vocab_size + a) * (vector_size + 1) + b] / num_rare_words;
                }
            }

            fprintf(fout, "%s",word);
            if (model == 0) { // Save all parameters (including bias)
                for (b = 0; b < (vector_size + 1); b++) fprintf(fout," %lf", unk_vec[b]);
                for (b = 0; b < (vector_size + 1); b++) fprintf(fout," %lf", unk_context[b]);
            }
            if (model == 1) // Save only "word" vectors (without bias)
                for (b = 0; b < vector_size; b++) fprintf(fout," %lf", unk_vec[b]);
            if (model == 2) // Save "word + context word" vectors (without bias)
                for (b = 0; b < vector_size; b++) fprintf(fout," %lf", unk_vec[b] + unk_context[b]);
            if (model == 3) { // Save "word" and "context" vectors (without bias; row-concatenated)
                for (b = 0; b < vector_size; b++) fprintf(fout," %lf", unk_vec[b]);
                for (b = 0; b < vector_size; b++) fprintf(fout," %lf", unk_context[b]);
            }
            fprintf(fout,"\n");

            free(unk_vec);
            free(unk_context);
        }

        fclose(fid);
        fclose(fout);
        if (save_gradsq > 0) fclose(fgs);
    }
    free(word);
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x848, %rsp            # imm = 0x848
movl %edi, %ebp
movl $0x3e9, %edi            # imm = 0x3E9
callq 0x11b0
pushq $0x1
popq %r12
testq %rax, %rax
je 0x2563
movq %rax, %rbx
testl %ebp, %ebp
movq %rax, 0x8(%rsp)
je 0x1d08
cmpl $0x0, 0x5507(%rip)      # 0x71bc
jg 0x1d08
xorl %r14d, %r14d
testl %ebp, %ebp
js 0x1d34
leaq 0x24fb(%rip), %rsi      # 0x41c0
leaq 0x6104(%rip), %rdx      # 0x7dd0
leaq 0x440(%rsp), %rdi
movl %ebp, %ecx
xorl %eax, %eax
callq 0x1220
cmpl $0x0, 0x54d4(%rip)      # 0x71b8
jle 0x1d91
leaq 0x24cf(%rip), %rsi      # 0x41c0
leaq 0x64c8(%rip), %rdx      # 0x81c0
leaq 0x40(%rsp), %rdi
movl %ebp, %ecx
xorl %eax, %eax
callq 0x1220
jmp 0x1d74
testl %ebp, %ebp
js 0x20fc
leaq 0x247a(%rip), %rsi      # 0x4191
leaq 0x60b2(%rip), %rdx      # 0x7dd0
leaq 0x440(%rsp), %rdi
movl %ebp, %ecx
xorl %eax, %eax
callq 0x1220
jmp 0x2119
leaq 0x247e(%rip), %rsi      # 0x41b9
leaq 0x608e(%rip), %rdx      # 0x7dd0
leaq 0x440(%rsp), %rdi
xorl %eax, %eax
callq 0x1220
cmpl $0x0, 0x5460(%rip)      # 0x71b8
jle 0x1d91
leaq 0x2458(%rip), %rsi      # 0x41b9
leaq 0x6458(%rip), %rdx      # 0x81c0
leaq 0x40(%rsp), %rdi
xorl %eax, %eax
callq 0x1220
leaq 0x2422(%rip), %rsi      # 0x419d
leaq 0x40(%rsp), %rdi
callq 0x1200
movq %rax, %r14
testq %rax, %rax
je 0x229a
leaq 0x2405(%rip), %rsi      # 0x419d
leaq 0x440(%rsp), %rdi
callq 0x1200
testq %rax, %rax
je 0x217d
movq %rax, %r15
leaq 0x67f8(%rip), %rdi      # 0x85b0
leaq 0x2596(%rip), %rsi      # 0x4355
callq 0x1200
movq %rax, %r13
leaq 0x23fe(%rip), %rsi      # 0x41cc
leaq 0x20(%rsp), %rdi
movl $0x3e8, %edx            # imm = 0x3E8
xorl %eax, %eax
callq 0x1220
movq %r13, 0x10(%rsp)
testq %r13, %r13
je 0x21d4
cmpl $0x0, 0x53bc(%rip)      # 0x71b0
je 0x1e14
movq 0x53d3(%rip), %rdx      # 0x71d0
movl 0x536d(%rip), %ecx      # 0x7170
leaq 0x23d3(%rip), %rsi      # 0x41dd
movq %r15, %rdi
xorl %eax, %eax
callq 0x1170
leaq 0x23d1(%rip), %rbp      # 0x41ec
xorl %r12d, %r12d
xorl %r13d, %r13d
movq 0x53a8(%rip), %rbx      # 0x71d0
cmpq %rbx, %r13
jge 0x22dd
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq 0x8(%rsp), %rbx
movq %rbx, %rdx
xorl %eax, %eax
callq 0x1080
testl %eax, %eax
je 0x21fc
movq %rbx, %rdi
leaq 0x238a(%rip), %rsi      # 0x41e6
callq 0x1160
testl %eax, %eax
je 0x21fc
movq %rbx, %rdi
movq %r15, %rsi
callq 0x1100
movl 0x52fa(%rip), %eax      # 0x7174
testl %eax, %eax
jne 0x1ef9
xorl %ebx, %ebx
movslq 0x52e9(%rip), %rax      # 0x7170
leaq 0x1(%rax), %rcx
cmpq %rcx, %rbx
jge 0x1eb2
imulq %r12, %rcx
addq 0x533d(%rip), %rcx      # 0x71d8
movsd (%rcx,%rbx,8), %xmm0
movq %r15, %rdi
movq %rbp, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x1e80
xorl %ebx, %ebx
incl %eax
cltq
cmpq %rax, %rbx
jge 0x1ef3
movq 0x530c(%rip), %rcx      # 0x71d0
addq %r13, %rcx
imulq %rax, %rcx
shlq $0x3, %rcx
addq 0x5302(%rip), %rcx      # 0x71d8
movsd (%rcx,%rbx,8), %xmm0
movq %r15, %rdi
movq %rbp, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
movl 0x527f(%rip), %eax      # 0x7170
jmp 0x1eb4
movl 0x527b(%rip), %eax      # 0x7174
cmpl $0x1, %eax
jne 0x1f37
xorl %ebx, %ebx
movslq 0x5269(%rip), %rax      # 0x7170
cmpq %rax, %rbx
jge 0x1f31
incq %rax
imulq %r12, %rax
addq 0x52be(%rip), %rax      # 0x71d8
movsd (%rax,%rbx,8), %xmm0
movq %r15, %rdi
movq %rbp, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x1f00
movl 0x523d(%rip), %eax      # 0x7174
cmpl $0x2, %eax
jne 0x1f92
xorl %ebx, %ebx
movslq 0x522b(%rip), %rax      # 0x7170
cmpq %rax, %rbx
jge 0x1f8c
movq 0x5287(%rip), %rcx      # 0x71d8
incq %rax
movq %r12, %rdx
imulq %rax, %rdx
addq %rcx, %rdx
movsd (%rdx,%rbx,8), %xmm0
movq 0x5266(%rip), %rdx      # 0x71d0
addq %r13, %rdx
imulq %rax, %rdx
leaq (%rcx,%rdx,8), %rax
addsd (%rax,%rbx,8), %xmm0
movq %r15, %rdi
movq %rbp, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x1f3e
movl 0x51e2(%rip), %eax      # 0x7174
cmpl $0x3, %eax
jne 0x2010
xorl %ebx, %ebx
movl 0x51d1(%rip), %eax      # 0x7170
movslq %eax, %rcx
cmpq %rcx, %rbx
jge 0x1fcc
incq %rcx
imulq %r12, %rcx
addq 0x5223(%rip), %rcx      # 0x71d8
movsd (%rcx,%rbx,8), %xmm0
movq %r15, %rdi
movq %rbp, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x1f99
xorl %ebx, %ebx
movslq %eax, %rcx
cmpq %rcx, %rbx
jge 0x2010
incl %eax
cltq
movq 0x51ef(%rip), %rcx      # 0x71d0
addq %r13, %rcx
imulq %rax, %rcx
shlq $0x3, %rcx
addq 0x51e5(%rip), %rcx      # 0x71d8
movsd (%rcx,%rbx,8), %xmm0
movq %r15, %rdi
movq %rbp, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
movl 0x5162(%rip), %eax      # 0x7170
jmp 0x1fce
pushq $0xa
popq %rdi
movq %r15, %rsi
callq 0x1130
cmpl $0x0, 0x5196(%rip)      # 0x71b8
jle 0x20b5
movq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x1100
xorl %ebx, %ebx
movslq 0x5132(%rip), %rax      # 0x7170
leaq 0x1(%rax), %rcx
cmpq %rcx, %rbx
jge 0x2069
imulq %r12, %rcx
addq 0x518e(%rip), %rcx      # 0x71e0
movsd (%rcx,%rbx,8), %xmm0
movq %r14, %rdi
movq %rbp, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x2037
xorl %ebx, %ebx
incl %eax
cltq
cmpq %rax, %rbx
jge 0x20aa
movq 0x5155(%rip), %rcx      # 0x71d0
addq %r13, %rcx
imulq %rax, %rcx
shlq $0x3, %rcx
addq 0x5153(%rip), %rcx      # 0x71e0
movsd (%rcx,%rbx,8), %xmm0
movq %r14, %rdi
movq %rbp, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
movl 0x50c8(%rip), %eax      # 0x7170
jmp 0x206b
pushq $0xa
popq %rdi
movq %r14, %rsi
callq 0x1130
movq 0x10(%rsp), %rdi
leaq 0x20(%rsp), %rsi
movq 0x8(%rsp), %rbx
movq %rbx, %rdx
xorl %eax, %eax
callq 0x1080
incq %r13
addq $0x8, %r12
testl %eax, %eax
jne 0x1e21
movq %r15, %rdi
callq 0x10e0
movq 0x10(%rsp), %rdi
callq 0x10e0
movq %rbx, %rdi
callq 0x1030
jmp 0x2216
leaq 0x2087(%rip), %rsi      # 0x418a
leaq 0x5cc6(%rip), %rdx      # 0x7dd0
leaq 0x440(%rsp), %rdi
xorl %eax, %eax
callq 0x1220
leaq 0x207d(%rip), %rsi      # 0x419d
leaq 0x440(%rsp), %rdi
callq 0x1200
testq %rax, %rax
je 0x217d
movq %rax, %r14
xorl %ebx, %ebx
pushq $0x8
popq %r15
pushq $0x1
popq %r12
xorl %r13d, %r13d
movslq 0x5027(%rip), %rax      # 0x7170
incq %rax
imulq 0x507c(%rip), %rax      # 0x71d0
addq %rax, %rax
cmpq %rax, %r13
jge 0x2190
movq 0x5075(%rip), %rdi      # 0x71d8
addq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x1240
incq %r13
addq $0x8, %rbx
jmp 0x2142
leaq 0x201c(%rip), %rdi      # 0x41a0
leaq 0x5c45(%rip), %rsi      # 0x7dd0
jmp 0x22a8
movq %r14, %rdi
callq 0x10e0
cmpl $0x0, 0x5019(%rip)      # 0x71b8
jle 0x21cc
testl %ebp, %ebp
movq 0x8(%rsp), %rbx
pushq $0x1
popq %r12
js 0x221f
leaq 0x1fdc(%rip), %rsi      # 0x4191
leaq 0x6004(%rip), %rdx      # 0x81c0
leaq 0x40(%rsp), %rdi
movl %ebp, %ecx
xorl %eax, %eax
callq 0x1220
jmp 0x2239
xorl %r14d, %r14d
jmp 0x22c2
leaq 0x1ff7(%rip), %rdi      # 0x41d2
leaq 0x63ce(%rip), %rsi      # 0x85b0
callq 0x33e1
movq %rbx, %rdi
callq 0x1030
movq %r15, %rdi
callq 0x10e0
jmp 0x2563
movq %rbx, %rdi
callq 0x1030
movq 0x10(%rsp), %rdi
callq 0x10e0
movq %r15, %rdi
callq 0x10e0
pushq $0x1
popq %r12
jmp 0x2563
leaq 0x1f64(%rip), %rsi      # 0x418a
leaq 0x5f93(%rip), %rdx      # 0x81c0
leaq 0x40(%rsp), %rdi
xorl %eax, %eax
callq 0x1220
leaq 0x1f5d(%rip), %rsi      # 0x419d
leaq 0x40(%rsp), %rdi
callq 0x1200
testq %rax, %rax
je 0x229a
movq %rax, %r14
xorl %ebx, %ebx
pushq $0x8
popq %r15
pushq $0x1
popq %r12
xorl %r13d, %r13d
movslq 0x4f0a(%rip), %rax      # 0x7170
incq %rax
imulq 0x4f5f(%rip), %rax      # 0x71d0
addq %rax, %rax
cmpq %rax, %r13
jge 0x22ba
movq 0x4f60(%rip), %rdi      # 0x71e0
addq %rbx, %rdi
movq %r15, %rsi
movq %r12, %rdx
movq %r14, %rcx
callq 0x1240
incq %r13
addq $0x8, %rbx
jmp 0x225f
leaq 0x1f0c(%rip), %rdi      # 0x41ad
leaq 0x5f18(%rip), %rsi      # 0x81c0
callq 0x33e1
movq %rbx, %rdi
callq 0x1030
jmp 0x2563
movq %r14, %rdi
callq 0x10e0
movq 0x8(%rsp), %rbx
pushq $0x1
popq %r12
cmpl $0x1, 0x4eea(%rip)      # 0x71bc
jne 0x1cba
jmp 0x2558
cmpl $0x0, 0x4e80(%rip)      # 0x7164
je 0x2530
movslq 0x4e7f(%rip), %rax      # 0x7170
movq %rax, 0x18(%rsp)
leaq 0x1(%rax), %r12
pushq $0x8
popq %rbp
movq %r12, %rdi
movq %rbp, %rsi
callq 0x1150
movq %rax, %r13
movq %r12, %rdi
movq %rbp, %rsi
callq 0x1150
movq %rax, %rbp
movq 0x8(%rsp), %rax
movl $0x6b6e753c, (%rax)     # imm = 0x6B6E753C
movw $0x3e, 0x4(%rax)
cmpq $0x64, %rbx
pushq $0x64
popq %rsi
cmovlq %rbx, %rsi
movq %rbx, %rax
subq %rsi, %rax
movq 0x4e96(%rip), %rdi      # 0x71d8
cvtsi2sd %rsi, %xmm0
xorl %ecx, %ecx
testq %r12, %r12
cmovleq %rcx, %r12
movq 0x18(%rsp), %rcx
leaq 0x8(,%rcx,8), %rcx
leaq (%rbx,%rbx), %rdx
subq %rsi, %rdx
imulq %rcx, %rdx
addq %rdi, %rdx
movq %rcx, %rsi
imulq %rax, %rsi
addq %rdi, %rsi
cmpq %rbx, %rax
jge 0x23bd
xorl %edi, %edi
cmpq %rdi, %r12
je 0x23b2
movsd (%rsi,%rdi,8), %xmm1
divsd %xmm0, %xmm1
addsd (%r13,%rdi,8), %xmm1
movsd %xmm1, (%r13,%rdi,8)
movsd (%rdx,%rdi,8), %xmm1
divsd %xmm0, %xmm1
addsd (%rbp,%rdi,8), %xmm1
movsd %xmm1, (%rbp,%rdi,8)
incq %rdi
jmp 0x237c
incq %rax
addq %rcx, %rdx
addq %rcx, %rsi
jmp 0x2375
movq 0x8(%rsp), %rdi
movq %r15, %rsi
callq 0x1100
movl 0x4da4(%rip), %eax      # 0x7174
testl %eax, %eax
jne 0x243c
xorl %ebx, %ebx
leaq 0x1e0f(%rip), %r12      # 0x41ec
movslq 0x4d8c(%rip), %rax      # 0x7170
leaq 0x1(%rax), %rcx
cmpq %rcx, %rbx
jge 0x2406
movsd (%r13,%rbx,8), %xmm0
movq %r15, %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x23dd
xorl %ebx, %ebx
leaq 0x1ddd(%rip), %r12      # 0x41ec
incl %eax
cltq
cmpq %rax, %rbx
jge 0x2436
movsd (%rbp,%rbx,8), %xmm0
movq %r15, %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
movl 0x4d3c(%rip), %eax      # 0x7170
jmp 0x240f
movl 0x4d38(%rip), %eax      # 0x7174
cmpl $0x1, %eax
jne 0x2475
xorl %ebx, %ebx
leaq 0x1da2(%rip), %r12      # 0x41ec
movslq 0x4d1f(%rip), %rax      # 0x7170
cmpq %rax, %rbx
jge 0x246f
movsd (%r13,%rbx,8), %xmm0
movq %r15, %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x244a
movl 0x4cff(%rip), %eax      # 0x7174
cmpl $0x2, %eax
jne 0x24b4
xorl %ebx, %ebx
leaq 0x1d69(%rip), %r12      # 0x41ec
movslq 0x4ce6(%rip), %rax      # 0x7170
cmpq %rax, %rbx
jge 0x24ae
movsd (%r13,%rbx,8), %xmm0
addsd (%rbp,%rbx,8), %xmm0
movq %r15, %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x2483
movl 0x4cc0(%rip), %eax      # 0x7174
cmpl $0x3, %eax
jne 0x2515
xorl %ebx, %ebx
leaq 0x1d2a(%rip), %r12      # 0x41ec
movslq 0x4ca7(%rip), %rax      # 0x7170
cmpq %rax, %rbx
jge 0x24e7
movsd (%r13,%rbx,8), %xmm0
movq %r15, %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
jmp 0x24c2
xorl %ebx, %ebx
leaq 0x1cfc(%rip), %r12      # 0x41ec
cltq
cmpq %rax, %rbx
jge 0x2515
movsd (%rbp,%rbx,8), %xmm0
movq %r15, %rdi
movq %r12, %rsi
movb $0x1, %al
callq 0x1170
incq %rbx
movl 0x4c5d(%rip), %eax      # 0x7170
jmp 0x24f0
pushq $0xa
popq %rdi
movq %r15, %rsi
callq 0x1130
movq %r13, %rdi
callq 0x1030
movq %rbp, %rdi
callq 0x1030
movq 0x10(%rsp), %rdi
callq 0x10e0
movq %r15, %rdi
callq 0x10e0
cmpl $0x0, 0x4c6f(%rip)      # 0x71b8
movq 0x8(%rsp), %rbx
jle 0x2558
movq %r14, %rdi
callq 0x10e0
movq %rbx, %rdi
callq 0x1030
xorl %r12d, %r12d
movl %r12d, %eax
addq $0x848, %rsp            # imm = 0x848
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq