// File: /workspace/github_c_makefile_star2_O0/janet-lang[P]janet/src/core/marsh.c
// Function: unmarshal_one_def
static const uint8_t *unmarshal_one_def(
    UnmarshalState *st,
    const uint8_t *data,
    JanetFuncDef **out,
    int flags) {
    MARSH_EOS(st, data);
    if (*data == LB_FUNCDEF_REF) {
        data++;
        int32_t index = readint(st, &data);
        if (index < 0 || index >= janet_v_count(st->lookup_defs))
            janet_panicf("invalid funcdef reference %d", index);
        *out = st->lookup_defs[index];
    } else {
        /* Initialize with values that will not break garbage collection
         * if unmarshalling fails. */
        JanetFuncDef *def = janet_gcalloc(JANET_MEMORY_FUNCDEF, sizeof(JanetFuncDef));
        def->environments_length = 0;
        def->defs_length = 0;
        def->constants_length = 0;
        def->bytecode_length = 0;
        def->name = NULL;
        def->source = NULL;
        def->closure_bitset = NULL;
        def->defs = NULL;
        def->environments = NULL;
        def->constants = NULL;
        def->bytecode = NULL;
        def->sourcemap = NULL;
        def->symbolmap = NULL;
        def->symbolmap_length = 0;
        janet_v_push(st->lookup_defs, def);

        /* Set default lengths to zero */
        int32_t bytecode_length = 0;
        int32_t constants_length = 0;
        int32_t environments_length = 0;
        int32_t defs_length = 0;
        int32_t symbolmap_length = 0;

        /* Read flags and other fixed values */
        def->flags = readint(st, &data);
        def->slotcount = readnat(st, &data);
        def->arity = readnat(st, &data);
        def->min_arity = readnat(st, &data);
        def->max_arity = readnat(st, &data);

        /* Read some lengths */
        constants_length = readnat(st, &data);
        bytecode_length = readnat(st, &data);
        if (def->flags & JANET_FUNCDEF_FLAG_HASENVS)
            environments_length = readnat(st, &data);
        if (def->flags & JANET_FUNCDEF_FLAG_HASDEFS)
            defs_length = readnat(st, &data);
        if (def->flags & JANET_FUNCDEF_FLAG_HASSYMBOLMAP)
            symbolmap_length = readnat(st, &data);

        /* Check name and source (optional) */
        if (def->flags & JANET_FUNCDEF_FLAG_HASNAME) {
            Janet x;
            data = unmarshal_one(st, data, &x, flags + 1);
            janet_asserttype(x, JANET_STRING, st);
            def->name = janet_unwrap_string(x);
        }
        if (def->flags & JANET_FUNCDEF_FLAG_HASSOURCE) {
            Janet x;
            data = unmarshal_one(st, data, &x, flags + 1);
            janet_asserttype(x, JANET_STRING, st);
            def->source = janet_unwrap_string(x);
        }

        /* Unmarshal constants */
        if (constants_length) {
            def->constants = janet_malloc(sizeof(Janet) * constants_length);
            if (!def->constants) {
                JANET_OUT_OF_MEMORY;
            }
            for (int32_t i = 0; i < constants_length; i++)
                data = unmarshal_one(st, data, def->constants + i, flags + 1);
        } else {
            def->constants = NULL;
        }
        def->constants_length = constants_length;

        /* Unmarshal symbol map, if needed */
        if (def->flags & JANET_FUNCDEF_FLAG_HASSYMBOLMAP) {
            size_t size = sizeof(JanetSymbolMap) * symbolmap_length;
            def->symbolmap = janet_malloc(size);
            if (def->symbolmap == NULL) {
                JANET_OUT_OF_MEMORY;
            }
            for (int32_t i = 0; i < symbolmap_length; i++) {
                def->symbolmap[i].birth_pc = (uint32_t) readint(st, &data);
                def->symbolmap[i].death_pc = (uint32_t) readint(st, &data);
                def->symbolmap[i].slot_index = (uint32_t) readint(st, &data);
                Janet value;
                data = unmarshal_one(st, data, &value, flags + 1);
                if (!janet_checktype(value, JANET_SYMBOL)) {
                    janet_panicf("corrupted symbolmap when unmarshalling debug info, got %v", value);
                }
                def->symbolmap[i].symbol = janet_unwrap_symbol(value);
            }
            def->symbolmap_length = (uint32_t) symbolmap_length;
        }

        /* Unmarshal bytecode */
        def->bytecode = janet_malloc(sizeof(uint32_t) * bytecode_length);
        if (!def->bytecode) {
            JANET_OUT_OF_MEMORY;
        }
        data = janet_unmarshal_u32s(st, data, def->bytecode, bytecode_length);
        def->bytecode_length = bytecode_length;

        /* Unmarshal environments */
        if (def->flags & JANET_FUNCDEF_FLAG_HASENVS) {
            def->environments = janet_calloc(1, sizeof(int32_t) * (size_t) environments_length);
            if (!def->environments) {
                JANET_OUT_OF_MEMORY;
            }
            for (int32_t i = 0; i < environments_length; i++) {
                def->environments[i] = readint(st, &data);
            }
        } else {
            def->environments = NULL;
        }
        def->environments_length = environments_length;

        /* Unmarshal sub funcdefs */
        if (def->flags & JANET_FUNCDEF_FLAG_HASDEFS) {
            def->defs = janet_calloc(1, sizeof(JanetFuncDef *) * (size_t) defs_length);
            if (!def->defs) {
                JANET_OUT_OF_MEMORY;
            }
            for (int32_t i = 0; i < defs_length; i++) {
                data = unmarshal_one_def(st, data, def->defs + i, flags + 1);
            }
        } else {
            def->defs = NULL;
        }
        def->defs_length = defs_length;

        /* Unmarshal source maps if needed */
        if (def->flags & JANET_FUNCDEF_FLAG_HASSOURCEMAP) {
            int32_t current = 0;
            def->sourcemap = janet_malloc(sizeof(JanetSourceMapping) * (size_t) bytecode_length);
            if (!def->sourcemap) {
                JANET_OUT_OF_MEMORY;
            }
            for (int32_t i = 0; i < bytecode_length; i++) {
                current += readint(st, &data);
                def->sourcemap[i].line = current;
                def->sourcemap[i].column = readint(st, &data);
            }
        } else {
            def->sourcemap = NULL;
        }

        /* Unmarshal closure bitset if needed */
        if (def->flags & JANET_FUNCDEF_FLAG_HASCLOBITSET) {
            int32_t n = (def->slotcount + 31) >> 5;
            def->closure_bitset = janet_malloc(sizeof(uint32_t) * (size_t) n);
            if (NULL == def->closure_bitset) {
                JANET_OUT_OF_MEMORY;
            }
            data = janet_unmarshal_u32s(st, data, def->closure_bitset, n);
        }

        /* Validate */
        if (janet_verify(def))
            janet_panic("funcdef has invalid bytecode");

        /* Set def */
        *out = def;
    }
    return data;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x90, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movl %ecx, -0x1c(%rbp)
movq -0x10(%rbp), %rax
movq -0x8(%rbp), %rcx
cmpq 0xf0(%rcx), %rax
jb 0x44ef7
leaq 0x47cfa(%rip), %rdi     # 0x8cbec
callq 0x1ad60
jmp 0x44ef9
movq -0x10(%rbp), %rax
movzbl (%rax), %eax
cmpl $0xdc, %eax
jne 0x44fa4
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x418c0
movl %eax, -0x20(%rbp)
cmpl $0x0, -0x20(%rbp)
jl 0x44f74
movl -0x20(%rbp), %eax
movl %eax, -0x88(%rbp)
movq -0x8(%rbp), %rax
cmpq $0x0, 0xe0(%rax)
je 0x44f5a
movq -0x8(%rbp), %rax
movq 0xe0(%rax), %rax
movl -0x4(%rax), %eax
movl %eax, -0x8c(%rbp)
jmp 0x44f64
xorl %eax, %eax
movl %eax, -0x8c(%rbp)
jmp 0x44f64
movl -0x88(%rbp), %eax
movl -0x8c(%rbp), %ecx
cmpl %ecx, %eax
jl 0x44f85
movl -0x20(%rbp), %esi
leaq 0x47ff5(%rip), %rdi     # 0x8cf73
movb $0x0, %al
callq 0x1ac40
movq -0x8(%rbp), %rax
movq 0xe0(%rax), %rax
movslq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
jmp 0x45893
movl $0xc, %edi
movl $0x80, %esi
callq 0x39e40
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movl $0x0, 0x74(%rax)
movq -0x28(%rbp), %rax
movl $0x0, 0x78(%rax)
movq -0x28(%rbp), %rax
movl $0x0, 0x6c(%rax)
movq -0x28(%rbp), %rax
movl $0x0, 0x70(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x48(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x40(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x30(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x18(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x28(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x38(%rax)
movq -0x28(%rbp), %rax
movq $0x0, 0x50(%rax)
movq -0x28(%rbp), %rax
movl $0x0, 0x7c(%rax)
movq -0x8(%rbp), %rax
cmpq $0x0, 0xe0(%rax)
je 0x45089
movq -0x8(%rbp), %rax
movq 0xe0(%rax), %rax
movl -0x4(%rax), %eax
addl $0x1, %eax
movq -0x8(%rbp), %rcx
movq 0xe0(%rcx), %rcx
cmpl -0x8(%rcx), %eax
jl 0x450b3
movq -0x8(%rbp), %rax
movq 0xe0(%rax), %rdi
movl $0x1, %esi
movl $0x8, %edx
callq 0x70760
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0xe0(%rax)
jmp 0x450b5
jmp 0x450b5
movq -0x28(%rbp), %rdx
movq -0x8(%rbp), %rax
movq 0xe0(%rax), %rax
movq -0x8(%rbp), %rcx
movq 0xe0(%rcx), %rsi
movl -0x4(%rsi), %ecx
movl %ecx, %edi
addl $0x1, %edi
movl %edi, -0x4(%rsi)
movslq %ecx, %rcx
movq %rdx, (%rax,%rcx,8)
movl $0x0, -0x2c(%rbp)
movl $0x0, -0x30(%rbp)
movl $0x0, -0x34(%rbp)
movl $0x0, -0x38(%rbp)
movl $0x0, -0x3c(%rbp)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x418c0
movl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x58(%rax)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x5c(%rax)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x60(%rax)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x64(%rax)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x68(%rax)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, -0x30(%rbp)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, -0x2c(%rbp)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x400000, %eax         # imm = 0x400000
cmpl $0x0, %eax
je 0x451b3
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, -0x34(%rbp)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x200000, %eax         # imm = 0x200000
cmpl $0x0, %eax
je 0x451d4
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, -0x38(%rbp)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x40000, %eax          # imm = 0x40000
cmpl $0x0, %eax
je 0x451f5
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x447b0
movl %eax, -0x3c(%rbp)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x80000, %eax          # imm = 0x80000
cmpl $0x0, %eax
je 0x45247
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x1c(%rbp), %ecx
addl $0x1, %ecx
leaq -0x48(%rbp), %rdx
callq 0x41d80
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdx
movq -0x48(%rbp), %rdi
movl $0x4, %esi
callq 0x45cb0
movq -0x48(%rbp), %rdi
callq 0x7b260
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x100000, %eax         # imm = 0x100000
cmpl $0x0, %eax
je 0x45299
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x1c(%rbp), %ecx
addl $0x1, %ecx
leaq -0x50(%rbp), %rdx
callq 0x41d80
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rdx
movq -0x50(%rbp), %rdi
movl $0x4, %esi
callq 0x45cb0
movq -0x50(%rbp), %rdi
callq 0x7b260
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x40(%rax)
cmpl $0x0, -0x30(%rbp)
je 0x4533c
movslq -0x30(%rbp), %rdi
shlq $0x3, %rdi
callq 0x12770
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x452f6
jmp 0x452c8
movq 0x6ad21(%rip), %rax     # 0xafff0
movq (%rax), %rdi
leaq 0x38d2b(%rip), %rsi     # 0x7e004
leaq 0x479a0(%rip), %rdx     # 0x8cc80
movl $0x3c1, %ecx            # imm = 0x3C1
movb $0x0, %al
callq 0x125f0
movl $0x1, %edi
callq 0x12a70
movl $0x0, -0x54(%rbp)
movl -0x54(%rbp), %eax
cmpl -0x30(%rbp), %eax
jge 0x4533a
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdx
movslq -0x54(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movl -0x1c(%rbp), %ecx
addl $0x1, %ecx
callq 0x41d80
movq %rax, -0x10(%rbp)
movl -0x54(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x54(%rbp)
jmp 0x452fd
jmp 0x45348
movq -0x28(%rbp), %rax
movq $0x0, 0x18(%rax)
movl -0x30(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x6c(%rax)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x40000, %eax          # imm = 0x40000
cmpl $0x0, %eax
je 0x454f6
movslq -0x3c(%rbp), %rax
imulq $0x18, %rax, %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
callq 0x12770
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x50(%rax)
jne 0x453c2
jmp 0x45394
movq 0x6ac55(%rip), %rax     # 0xafff0
movq (%rax), %rdi
leaq 0x38c5f(%rip), %rsi     # 0x7e004
leaq 0x478d4(%rip), %rdx     # 0x8cc80
movl $0x3cf, %ecx            # imm = 0x3CF
movb $0x0, %al
callq 0x125f0
movl $0x1, %edi
callq 0x12a70
movl $0x0, -0x64(%rbp)
movl -0x64(%rbp), %eax
cmpl -0x3c(%rbp), %eax
jge 0x454ec
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x418c0
movl %eax, %ecx
movq -0x28(%rbp), %rax
movq 0x50(%rax), %rax
movslq -0x64(%rbp), %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movl %ecx, (%rax)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x418c0
movl %eax, %ecx
movq -0x28(%rbp), %rax
movq 0x50(%rax), %rax
movslq -0x64(%rbp), %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x4(%rax)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x418c0
movl %eax, %ecx
movq -0x28(%rbp), %rax
movq 0x50(%rax), %rax
movslq -0x64(%rbp), %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movl %ecx, 0x8(%rax)
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movl -0x1c(%rbp), %ecx
addl $0x1, %ecx
leaq -0x70(%rbp), %rdx
callq 0x41d80
movq %rax, -0x10(%rbp)
xorl %eax, %eax
testb $0x1, %al
jne 0x45466
jmp 0x4548c
movsd -0x70(%rbp), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x45478
jmp 0x454bb
movq -0x70(%rbp), %rax
shrq $0x2f, %rax
andq $0xf, %rax
cmpq $0x0, %rax
je 0x454bb
jmp 0x454a9
movabsq $-0x800000000000, %rax  # imm = 0xFFFF800000000000
andq -0x70(%rbp), %rax
movabsq $-0x5800000000000, %rcx # imm = 0xFFFA800000000000
cmpq %rcx, %rax
je 0x454bb
movq -0x70(%rbp), %rsi
leaq 0x47adc(%rip), %rdi     # 0x8cf90
movb $0x0, %al
callq 0x1ac40
movq -0x70(%rbp), %rdi
callq 0x7b260
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x50(%rax), %rax
movslq -0x64(%rbp), %rdx
imulq $0x18, %rdx, %rdx
addq %rdx, %rax
movq %rcx, 0x10(%rax)
movl -0x64(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64(%rbp)
jmp 0x453c9
movl -0x3c(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x7c(%rax)
movslq -0x2c(%rbp), %rdi
shlq $0x2, %rdi
callq 0x12770
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x28(%rax)
jne 0x45549
jmp 0x4551b
movq 0x6aace(%rip), %rax     # 0xafff0
movq (%rax), %rdi
leaq 0x38ad8(%rip), %rsi     # 0x7e004
leaq 0x4774d(%rip), %rdx     # 0x8cc80
movl $0x3e2, %ecx            # imm = 0x3E2
movb $0x0, %al
callq 0x125f0
movl $0x1, %edi
callq 0x12a70
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rax
movq 0x28(%rax), %rdx
movl -0x2c(%rbp), %ecx
callq 0x45d40
movq %rax, -0x10(%rbp)
movl -0x2c(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x70(%rax)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x400000, %eax         # imm = 0x400000
cmpl $0x0, %eax
je 0x45616
movslq -0x34(%rbp), %rsi
shlq $0x2, %rsi
movl $0x1, %edi
callq 0x125a0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x455dc
jmp 0x455ae
movq 0x6aa3b(%rip), %rax     # 0xafff0
movq (%rax), %rdi
leaq 0x38a45(%rip), %rsi     # 0x7e004
leaq 0x476ba(%rip), %rdx     # 0x8cc80
movl $0x3eb, %ecx            # imm = 0x3EB
movb $0x0, %al
callq 0x125f0
movl $0x1, %edi
callq 0x12a70
movl $0x0, -0x74(%rbp)
movl -0x74(%rbp), %eax
cmpl -0x34(%rbp), %eax
jge 0x45614
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x418c0
movl %eax, %edx
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movslq -0x74(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movl -0x74(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x74(%rbp)
jmp 0x455e3
jmp 0x45622
movq -0x28(%rbp), %rax
movq $0x0, 0x10(%rax)
movl -0x34(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x74(%rax)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x200000, %eax         # imm = 0x200000
cmpl $0x0, %eax
je 0x456df
movslq -0x38(%rbp), %rsi
shlq $0x3, %rsi
movl $0x1, %edi
callq 0x125a0
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x45699
jmp 0x4566b
movq 0x6a97e(%rip), %rax     # 0xafff0
movq (%rax), %rdi
leaq 0x38988(%rip), %rsi     # 0x7e004
leaq 0x475fd(%rip), %rdx     # 0x8cc80
movl $0x3f9, %ecx            # imm = 0x3F9
movb $0x0, %al
callq 0x125f0
movl $0x1, %edi
callq 0x12a70
movl $0x0, -0x78(%rbp)
movl -0x78(%rbp), %eax
cmpl -0x38(%rbp), %eax
jge 0x456dd
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rax
movq 0x20(%rax), %rdx
movslq -0x78(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rdx
movl -0x1c(%rbp), %ecx
addl $0x1, %ecx
callq 0x44ec0
movq %rax, -0x10(%rbp)
movl -0x78(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78(%rbp)
jmp 0x456a0
jmp 0x456eb
movq -0x28(%rbp), %rax
movq $0x0, 0x20(%rax)
movl -0x38(%rbp), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x78(%rax)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x800000, %eax         # imm = 0x800000
cmpl $0x0, %eax
je 0x457c4
movl $0x0, -0x7c(%rbp)
movslq -0x2c(%rbp), %rdi
shlq $0x3, %rdi
callq 0x12770
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x38(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x38(%rax)
jne 0x45764
jmp 0x45736
movq 0x6a8b3(%rip), %rax     # 0xafff0
movq (%rax), %rdi
leaq 0x388bd(%rip), %rsi     # 0x7e004
leaq 0x47532(%rip), %rdx     # 0x8cc80
movl $0x408, %ecx            # imm = 0x408
movb $0x0, %al
callq 0x125f0
movl $0x1, %edi
callq 0x12a70
movl $0x0, -0x80(%rbp)
movl -0x80(%rbp), %eax
cmpl -0x2c(%rbp), %eax
jge 0x457c2
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x418c0
addl -0x7c(%rbp), %eax
movl %eax, -0x7c(%rbp)
movl -0x7c(%rbp), %edx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rax
movslq -0x80(%rbp), %rcx
movl %edx, (%rax,%rcx,8)
movq -0x8(%rbp), %rdi
leaq -0x10(%rbp), %rsi
callq 0x418c0
movl %eax, %edx
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rax
movslq -0x80(%rbp), %rcx
movl %edx, 0x4(%rax,%rcx,8)
movl -0x80(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x80(%rbp)
jmp 0x4576b
jmp 0x457d0
movq -0x28(%rbp), %rax
movq $0x0, 0x38(%rax)
movq -0x28(%rbp), %rax
movl 0x58(%rax), %eax
andl $0x2000000, %eax        # imm = 0x2000000
cmpl $0x0, %eax
je 0x4586e
movq -0x28(%rbp), %rax
movl 0x5c(%rax), %eax
addl $0x1f, %eax
sarl $0x5, %eax
movl %eax, -0x84(%rbp)
movslq -0x84(%rbp), %rdi
shlq $0x2, %rdi
callq 0x12770
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rcx
xorl %eax, %eax
cmpq 0x30(%rcx), %rax
jne 0x4584f
jmp 0x45821
movq 0x6a7c8(%rip), %rax     # 0xafff0
movq (%rax), %rdi
leaq 0x387d2(%rip), %rsi     # 0x7e004
leaq 0x47447(%rip), %rdx     # 0x8cc80
movl $0x418, %ecx            # imm = 0x418
movb $0x0, %al
callq 0x125f0
movl $0x1, %edi
callq 0x12a70
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rdx
movl -0x84(%rbp), %ecx
callq 0x45d40
movq %rax, -0x10(%rbp)
movq -0x28(%rbp), %rdi
callq 0x1a5a0
cmpl $0x0, %eax
je 0x45888
leaq 0x47747(%rip), %rdi     # 0x8cfca
callq 0x1ad60
movq -0x28(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, (%rax)
movq -0x10(%rbp), %rax
addq $0x90, %rsp
popq %rbp
retq