// File: /workspace/github_c_makefile_star2_O0/samtools[P]htslib/hfile_libcurl.c
// Function: libcurl_open
static hFILE *
libcurl_open(const char *url, const char *modes, http_headers *headers)
{
    hFILE_libcurl *fp;
    struct curl_slist *list;
    char mode;
    const char *s;
    CURLcode err;
    CURLMcode errm;
    int save, is_recursive;
    kstring_t in_header = {0, 0, NULL};
    long response;

    is_recursive = strchr(modes, 'R') != NULL;

    if ((s = strpbrk(modes, "rwa+")) != NULL) {
        mode = *s;
        if (strpbrk(&s[1], "rwa+")) mode = 'e';
    }
    else mode = '\0';

    if (mode != 'r' && mode != 'w') { errno = EINVAL; goto early_error; }

    fp = (hFILE_libcurl *) hfile_init(sizeof (hFILE_libcurl), modes, 0);
    if (fp == NULL) goto early_error;

    if (headers) {
        fp->headers = *headers;
    } else {
        memset(&fp->headers, 0, sizeof(fp->headers));
        fp->headers.fail_on_error = 1;
    }

    fp->file_size = -1;
    fp->buffer.ptr.rd = NULL;
    fp->buffer.len = 0;
    fp->final_result = (CURLcode) -1;
    fp->paused = fp->closing = fp->finished = fp->perform_again = 0;
    fp->can_seek = 1;
    fp->tried_seek = 0;
    fp->delayed_seek = fp->last_offset = -1;
    fp->preserved = NULL;
    fp->preserved_bytes = fp->preserved_size = 0;
    fp->is_recursive = is_recursive;
    fp->nrunning = 0;
    fp->easy = NULL;

    fp->multi = curl_multi_init();
    if (fp->multi == NULL) { errno = ENOMEM; goto error; }

    fp->easy = curl_easy_init();
    if (fp->easy == NULL) { errno = ENOMEM; goto error; }

    // Make a route to the hFILE_libcurl* given just a CURL* easy handle
    err = curl_easy_setopt(fp->easy, CURLOPT_PRIVATE, fp);

    // Avoid many repeated CWD calls with FTP, instead requesting the filename
    // by full path (but not strictly compliant with RFC1738).
    err |= curl_easy_setopt(fp->easy, CURLOPT_FTP_FILEMETHOD,
                            (long) CURLFTPMETHOD_NOCWD);

    if (mode == 'r') {
        err |= curl_easy_setopt(fp->easy, CURLOPT_WRITEFUNCTION, recv_callback);
        err |= curl_easy_setopt(fp->easy, CURLOPT_WRITEDATA, fp);
        fp->is_read = 1;
    }
    else {
        err |= curl_easy_setopt(fp->easy, CURLOPT_READFUNCTION, send_callback);
        err |= curl_easy_setopt(fp->easy, CURLOPT_READDATA, fp);
        err |= curl_easy_setopt(fp->easy, CURLOPT_UPLOAD, 1L);
        if (append_header(&fp->headers.fixed,
                          "Transfer-Encoding: chunked", 1) < 0)
            goto error;
        fp->is_read = 0;
    }

    err |= curl_easy_setopt(fp->easy, CURLOPT_SHARE, curl.share);
    err |= curl_easy_setopt(fp->easy, CURLOPT_URL, url);
    {
        char* env_curl_ca_bundle = getenv("CURL_CA_BUNDLE");
        if (env_curl_ca_bundle) {
            err |= curl_easy_setopt(fp->easy, CURLOPT_CAINFO, env_curl_ca_bundle);
        }
    }
    err |= curl_easy_setopt(fp->easy, CURLOPT_USERAGENT, curl.useragent.s);
    if (fp->headers.callback) {
        if (add_callback_headers(fp) != 0) goto error;
    }
    if (get_auth_token(fp, url) < 0)
        goto error;
    if ((list = get_header_list(fp)) != NULL)
        err |= curl_easy_setopt(fp->easy, CURLOPT_HTTPHEADER, list);

    if (hts_verbose <= 8 && fp->headers.fail_on_error)
        err |= curl_easy_setopt(fp->easy, CURLOPT_FAILONERROR, 1L);
    if (hts_verbose >= 8)
        err |= curl_easy_setopt(fp->easy, CURLOPT_VERBOSE, 1L);

    if (fp->headers.redirect) {
        err |= curl_easy_setopt(fp->easy, CURLOPT_HEADERFUNCTION, header_callback);
        err |= curl_easy_setopt(fp->easy, CURLOPT_HEADERDATA, (void *)&in_header);
    } else {
        err |= curl_easy_setopt(fp->easy, CURLOPT_FOLLOWLOCATION, 1L);
    }

    if (err != 0) { errno = ENOSYS; goto error; }

    errm = curl_multi_add_handle(fp->multi, fp->easy);
    if (errm != CURLM_OK) { errno = multi_errno(errm); goto error; }
    fp->nrunning++;

    while (! fp->paused && ! fp->finished) {
        if (wait_perform(fp) < 0) goto error_remove;
    }

    curl_easy_getinfo(fp->easy, CURLINFO_RESPONSE_CODE, &response);
    if (fp->headers.http_response_ptr) {
        *fp->headers.http_response_ptr = response;
    }

    if (fp->finished && fp->final_result != CURLE_OK) {
        errno = easy_errno(fp->easy, fp->final_result);
        goto error_remove;
    }

    if (fp->headers.redirect) {
        if (response >= 300 && response < 400) { // redirection
            kstring_t new_url = {0, 0, NULL};

            if (fp->headers.redirect(fp->headers.redirect_data, response,
                                     &in_header, &new_url)) {
                errno = ENOSYS;
                goto error;
            }

            err |= curl_easy_setopt(fp->easy, CURLOPT_URL, new_url.s);
            err |= curl_easy_setopt(fp->easy, CURLOPT_HEADERFUNCTION, NULL);
            err |= curl_easy_setopt(fp->easy, CURLOPT_HEADERDATA, NULL);
            free(ks_release(&in_header));

            if (err != 0) { errno = ENOSYS; goto error; }
            free(ks_release(&new_url));

            if (restart_from_position(fp, 0) < 0) {
                goto error_remove;
            }

            if (fp->headers.http_response_ptr) {
                curl_easy_getinfo(fp->easy, CURLINFO_RESPONSE_CODE,
                                  fp->headers.http_response_ptr);
            }

            if (fp->finished && fp->final_result != CURLE_OK) {
                errno = easy_errno(fp->easy, fp->final_result);
                goto error_remove;
            }
        } else {
            // we no longer need to look at the headers
            err |= curl_easy_setopt(fp->easy, CURLOPT_HEADERFUNCTION, NULL);
            err |= curl_easy_setopt(fp->easy, CURLOPT_HEADERDATA, NULL);
            free(ks_release(&in_header));

            if (err != 0) { errno = ENOSYS; goto error; }
        }
    }

    if (mode == 'r') {
#if LIBCURL_VERSION_NUM >= 0x073700 // 7.55.0
        curl_off_t offset;

        if (curl_easy_getinfo(fp->easy, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
                              &offset) == CURLE_OK && offset > 0)
            fp->file_size = (off_t) offset;
#else
        double dval;

        if (curl_easy_getinfo(fp->easy, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
                              &dval) == CURLE_OK && dval >= 0.0)
            fp->file_size = (off_t) (dval + 0.1);
#endif
    }
    fp->base.backend = &libcurl_backend;
    return &fp->base;

error_remove:
    save = errno;
    (void) curl_multi_remove_handle(fp->multi, fp->easy);
    fp->nrunning--;
    errno = save;

error:
    if (fp->headers.redirect) free(in_header.s);
    save = errno;
    if (fp->easy) curl_easy_cleanup(fp->easy);
    if (fp->multi) curl_multi_cleanup(fp->multi);
    free_headers(&fp->headers.extra, 1);
    hfile_destroy((hFILE *) fp);
    errno = save;
    return NULL;

early_error:
    return NULL;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xb0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
leaq -0x68(%rbp), %rdi
xorl %esi, %esi
movl $0x18, %edx
callq 0x4250
movq -0x18(%rbp), %rdi
movl $0x52, %esi
callq 0x4170
cmpq $0x0, %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x50(%rbp)
movq -0x18(%rbp), %rdi
leaq 0x28486(%rip), %rsi     # 0xf75a5
callq 0x48d0
movq %rax, -0x40(%rbp)
cmpq $0x0, %rax
je 0xcf157
movq -0x40(%rbp), %rax
movb (%rax), %al
movb %al, -0x31(%rbp)
movq -0x40(%rbp), %rdi
addq $0x1, %rdi
leaq 0x2845f(%rip), %rsi     # 0xf75a5
callq 0x48d0
cmpq $0x0, %rax
je 0xcf155
movb $0x65, -0x31(%rbp)
jmp 0xcf15b
movb $0x0, -0x31(%rbp)
movsbl -0x31(%rbp), %eax
cmpl $0x72, %eax
je 0xcf17d
movsbl -0x31(%rbp), %eax
cmpl $0x77, %eax
je 0xcf17d
callq 0x4050
movl $0x16, (%rax)
jmp 0xcfaaf
movq -0x18(%rbp), %rsi
movl $0xf8, %edi
xorl %eax, %eax
movl %eax, %edx
callq 0x13800
movq %rax, -0x28(%rbp)
cmpq $0x0, -0x28(%rbp)
jne 0xcf19f
jmp 0xcfaaf
cmpq $0x0, -0x20(%rbp)
je 0xcf1be
movq -0x28(%rbp), %rdi
addq $0x70, %rdi
movq -0x20(%rbp), %rsi
movl $0x60, %edx
callq 0x43b0
jmp 0xcf1e0
movq -0x28(%rbp), %rdi
addq $0x70, %rdi
xorl %esi, %esi
movl $0x60, %edx
callq 0x4250
movq -0x28(%rbp), %rax
movl $0x1, 0xc8(%rax)
movq -0x28(%rbp), %rax
movq $-0x1, 0x48(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x50(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x58(%rax)
movq -0x28(%rbp), %rax
movl $0xffffffff, 0x60(%rax) # imm = 0xFFFFFFFF
movq -0x28(%rbp), %rax
movb 0x64(%rax), %cl
andb $-0x9, %cl
orb $0x0, %cl
movb %cl, 0x64(%rax)
movq -0x28(%rbp), %rax
movb 0x64(%rax), %cl
andb $-0x5, %cl
orb $0x0, %cl
movb %cl, 0x64(%rax)
movq -0x28(%rbp), %rax
movb 0x64(%rax), %cl
andb $-0x3, %cl
orb $0x0, %cl
movb %cl, 0x64(%rax)
movq -0x28(%rbp), %rax
movb 0x64(%rax), %cl
andb $-0x2, %cl
orb $0x0, %cl
movb %cl, 0x64(%rax)
movq -0x28(%rbp), %rax
movb 0x64(%rax), %cl
andb $-0x21, %cl
orb $0x20, %cl
movb %cl, 0x64(%rax)
movq -0x28(%rbp), %rax
movb 0x64(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x64(%rax)
movq -0x28(%rbp), %rax
movq $-0x1, 0xd8(%rax)
movq -0x28(%rbp), %rax
movq $-0x1, 0xd0(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0xe0(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0xf0(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0xe8(%rax)
movl -0x50(%rbp), %ecx
movq -0x28(%rbp), %rax
movb %cl, %dl
movb 0x64(%rax), %cl
andb $0x1, %dl
shlb $0x6, %dl
andb $-0x41, %cl
orb %dl, %cl
movb %cl, 0x64(%rax)
movq -0x28(%rbp), %rax
movl $0x0, 0x68(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x38(%rax)
callq 0x4800
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x40(%rax)
jne 0xcf316
callq 0x4050
movl $0xc, (%rax)
jmp 0xcfa1f
callq 0x4640
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x38(%rax)
jne 0xcf341
callq 0x4050
movl $0xc, (%rax)
jmp 0xcfa1f
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x28(%rbp), %rdx
movl $0x2777, %esi           # imm = 0x2777
movb $0x0, %al
callq 0x4560
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x8a, %esi
movl $0x2, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movsbl -0x31(%rbp), %eax
cmpl $0x72, %eax
jne 0xcf3d8
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x4e2b, %esi           # imm = 0x4E2B
leaq 0x738(%rip), %rdx       # 0xcfad0
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x28(%rbp), %rdx
movl $0x2711, %esi           # imm = 0x2711
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movb 0x64(%rax), %cl
andb $-0x11, %cl
orb $0x10, %cl
movb %cl, 0x64(%rax)
jmp 0xcf469
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x4e2c, %esi           # imm = 0x4E2C
leaq 0x7a4(%rip), %rdx       # 0xcfb90
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x28(%rbp), %rdx
movl $0x2719, %esi           # imm = 0x2719
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x2e, %esi
movl $0x1, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rdi
addq $0x70, %rdi
leaq 0x28165(%rip), %rsi     # 0xf75aa
movl $0x1, %edx
callq 0xcfc70
cmpl $0x0, %eax
jge 0xcf459
jmp 0xcfa1f
movq -0x28(%rbp), %rax
movb 0x64(%rax), %cl
andb $-0x11, %cl
orb $0x0, %cl
movb %cl, 0x64(%rax)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq 0x43450(%rip), %rdx     # 0x1128c8
movl $0x2774, %esi           # imm = 0x2774
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x10(%rbp), %rdx
movl $0x2712, %esi           # imm = 0x2712
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
leaq 0x28116(%rip), %rdi     # 0xf75c5
callq 0x45e0
movq %rax, -0x78(%rbp)
cmpq $0x0, -0x78(%rbp)
je 0xcf4dd
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x78(%rbp), %rdx
movl $0x2751, %esi           # imm = 0x2751
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq 0x433d4(%rip), %rdx     # 0x1128c0
movl $0x2722, %esi           # imm = 0x2722
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x90(%rax)
je 0xcf521
movq -0x28(%rbp), %rdi
callq 0xcfe20
cmpl $0x0, %eax
je 0xcf51f
jmp 0xcfa1f
jmp 0xcf521
movq -0x28(%rbp), %rdi
movq -0x10(%rbp), %rsi
callq 0xd0030
cmpl $0x0, %eax
jge 0xcf538
jmp 0xcfa1f
movq -0x28(%rbp), %rdi
callq 0xd0320
movq %rax, -0x30(%rbp)
cmpq $0x0, %rax
je 0xcf569
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x30(%rbp), %rdx
movl $0x2727, %esi           # imm = 0x2727
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
leaq 0x3e220(%rip), %rax     # 0x10d790
cmpl $0x8, (%rax)
jg 0xcf5a1
movq -0x28(%rbp), %rax
cmpl $0x0, 0xc8(%rax)
je 0xcf5a1
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x2d, %esi
movl $0x1, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
leaq 0x3e1e8(%rip), %rax     # 0x10d790
cmpl $0x8, (%rax)
jl 0xcf5cc
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x29, %esi
movl $0x1, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0xb0(%rax)
je 0xcf61b
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x4e6f, %esi           # imm = 0x4E6F
leaq 0xd82(%rip), %rdx       # 0xd0370
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x272d, %esi           # imm = 0x272D
leaq -0x68(%rbp), %rdx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
jmp 0xcf63a
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x34, %esi
movl $0x1, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
cmpl $0x0, -0x44(%rbp)
je 0xcf650
callq 0x4050
movl $0x26, (%rax)
jmp 0xcfa1f
movq -0x28(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0x4930
movl %eax, -0x48(%rbp)
cmpl $0x0, -0x48(%rbp)
je 0xcf68e
movl -0x48(%rbp), %edi
callq 0xd03d0
movl %eax, -0x9c(%rbp)
callq 0x4050
movl -0x9c(%rbp), %ecx
movl %ecx, (%rax)
jmp 0xcfa1f
movq -0x28(%rbp), %rax
movl 0x68(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x68(%rax)
movq -0x28(%rbp), %rax
movb 0x64(%rax), %al
andb $0x1, %al
movzbl %al, %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x9d(%rbp)
jne 0xcf6d1
movq -0x28(%rbp), %rax
movb 0x64(%rax), %al
shrb $0x2, %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
movb %al, -0x9d(%rbp)
movb -0x9d(%rbp), %al
testb $0x1, %al
jne 0xcf6dd
jmp 0xcf6f2
movq -0x28(%rbp), %rdi
callq 0xd0470
cmpl $0x0, %eax
jge 0xcf6f0
jmp 0xcf9dd
jmp 0xcf69b
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x200002, %esi         # imm = 0x200002
leaq -0x70(%rbp), %rdx
movb $0x0, %al
callq 0x4280
movq -0x28(%rbp), %rax
cmpq $0x0, 0xc0(%rax)
je 0xcf72a
movq -0x70(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movb 0x64(%rax), %al
shrb $0x2, %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0xcf774
movq -0x28(%rbp), %rax
cmpl $0x0, 0x60(%rax)
je 0xcf774
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x28(%rbp), %rax
movl 0x60(%rax), %esi
callq 0xced50
movl %eax, -0xa4(%rbp)
callq 0x4050
movl -0xa4(%rbp), %ecx
movl %ecx, (%rax)
jmp 0xcf9dd
movq -0x28(%rbp), %rax
cmpq $0x0, 0xb0(%rax)
je 0xcf97d
cmpq $0x12c, -0x70(%rbp)     # imm = 0x12C
jl 0xcf916
cmpq $0x190, -0x70(%rbp)     # imm = 0x190
jge 0xcf916
leaq -0x90(%rbp), %rdi
xorl %esi, %esi
movl $0x18, %edx
callq 0x4250
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0xb8(%rcx), %rdi
movq -0x70(%rbp), %rsi
leaq -0x68(%rbp), %rdx
leaq -0x90(%rbp), %rcx
callq *%rax
cmpl $0x0, %eax
je 0xcf7f1
callq 0x4050
movl $0x26, (%rax)
jmp 0xcfa1f
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x80(%rbp), %rdx
movl $0x2712, %esi           # imm = 0x2712
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x4e6f, %esi           # imm = 0x4E6F
xorl %eax, %eax
movl %eax, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x272d, %esi           # imm = 0x272D
xorl %eax, %eax
movl %eax, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
leaq -0x68(%rbp), %rdi
callq 0xd0750
movq %rax, %rdi
callq 0x45a0
cmpl $0x0, -0x44(%rbp)
je 0xcf872
callq 0x4050
movl $0x26, (%rax)
jmp 0xcfa1f
leaq -0x90(%rbp), %rdi
callq 0xd0750
movq %rax, %rdi
callq 0x45a0
movq -0x28(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xd0790
cmpl $0x0, %eax
jge 0xcf89d
jmp 0xcf9dd
movq -0x28(%rbp), %rax
cmpq $0x0, 0xc0(%rax)
je 0xcf8ca
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rdx
movl $0x200002, %esi         # imm = 0x200002
movb $0x0, %al
callq 0x4280
movq -0x28(%rbp), %rax
movb 0x64(%rax), %al
shrb $0x2, %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0xcf914
movq -0x28(%rbp), %rax
cmpl $0x0, 0x60(%rax)
je 0xcf914
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x28(%rbp), %rax
movl 0x60(%rax), %esi
callq 0xced50
movl %eax, -0xa8(%rbp)
callq 0x4050
movl -0xa8(%rbp), %ecx
movl %ecx, (%rax)
jmp 0xcf9dd
jmp 0xcf97b
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x4e6f, %esi           # imm = 0x4E6F
xorl %eax, %eax
movl %eax, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x272d, %esi           # imm = 0x272D
xorl %eax, %eax
movl %eax, %edx
movb $0x0, %al
callq 0x4560
orl -0x44(%rbp), %eax
movl %eax, -0x44(%rbp)
leaq -0x68(%rbp), %rdi
callq 0xd0750
movq %rax, %rdi
callq 0x45a0
cmpl $0x0, -0x44(%rbp)
je 0xcf979
callq 0x4050
movl $0x26, (%rax)
jmp 0xcfa1f
jmp 0xcf97b
jmp 0xcf97d
movsbl -0x31(%rbp), %eax
cmpl $0x72, %eax
jne 0xcf9c1
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
movl $0x60000f, %esi         # imm = 0x60000F
leaq -0x98(%rbp), %rdx
movb $0x0, %al
callq 0x4280
cmpl $0x0, %eax
jne 0xcf9bf
cmpq $0x0, -0x98(%rbp)
jle 0xcf9bf
movq -0x98(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
jmp 0xcf9c1
movq -0x28(%rbp), %rax
leaq 0x3d394(%rip), %rcx     # 0x10cd60
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0xcfab7
callq 0x4050
movl (%rax), %eax
movl %eax, -0x4c(%rbp)
movq -0x28(%rbp), %rax
movq 0x40(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rsi
callq 0x4140
movq -0x28(%rbp), %rax
movl 0x68(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x68(%rax)
movl -0x4c(%rbp), %eax
movl %eax, -0xac(%rbp)
callq 0x4050
movl -0xac(%rbp), %ecx
movl %ecx, (%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0xb0(%rax)
je 0xcfa36
movq -0x58(%rbp), %rdi
callq 0x45a0
callq 0x4050
movl (%rax), %eax
movl %eax, -0x4c(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x38(%rax)
je 0xcfa58
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rdi
callq 0x4600
movq -0x28(%rbp), %rax
cmpq $0x0, 0x40(%rax)
je 0xcfa70
movq -0x28(%rbp), %rax
movq 0x40(%rax), %rdi
callq 0x4830
movq -0x28(%rbp), %rdi
addq $0x70, %rdi
addq $0x10, %rdi
movl $0x1, %esi
callq 0xd0d20
movq -0x28(%rbp), %rdi
callq 0x13980
movl -0x4c(%rbp), %eax
movl %eax, -0xb0(%rbp)
callq 0x4050
movl -0xb0(%rbp), %ecx
movl %ecx, (%rax)
movq $0x0, -0x8(%rbp)
jmp 0xcfab7
movq $0x0, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0xb0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)