// File: momohatt[P]seccampDB/database.cpp
// Function: Transaction::keys[abi:cxx11]()
vector<string> Transaction::keys() {
    TXLOG;

    vector<string> v;
    for (const auto& entry : db_->table) {
        Key key = entry.first;
        if (write_set.count(key) > 0 && write_set[key].first == Delete)
            continue;
        v.push_back(key);
    }
    for (const auto& [key, val] : write_set) {
        if (db_->table.count(key) <= 0 || val.first == Delete)
            continue;
        v.push_back(key);
    }

    wait();
    return v;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq %rdi, -0xa8(%rbp)
movq %rdi, %rax
movq %rax, -0xb0(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0xa0(%rbp)
movl 0x74(%rax), %esi
leaq 0x16067(%rip), %rdi     # 0x1c4d0
leaq 0x15c10(%rip), %rdx     # 0x1c080
movl $0x6f, %ecx
movb $0x0, %al
callq 0x3070
movq -0xa8(%rbp), %rdi
movb $0x0, -0x11(%rbp)
callq 0x4190
movq -0xa0(%rbp), %rax
movq 0xd8(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
callq 0x97e0
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0x9810
movq %rax, -0x30(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9840
testb $0x1, %al
jne 0x64ce
jmp 0x65a6
leaq -0x28(%rbp), %rdi
callq 0x9870
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rsi
leaq -0x58(%rbp), %rdi
callq 0x3150
jmp 0x64ea
movq -0xa0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x9640
movq %rax, -0xb8(%rbp)
jmp 0x6503
movq -0xb8(%rbp), %rax
cmpq $0x0, %rax
jbe 0x6569
movq -0xa0(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x9510
movq %rax, -0xc0(%rbp)
jmp 0x6529
movq -0xc0(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x6569
movl $0x3, -0x68(%rbp)
jmp 0x6582
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x66b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x35f8
jmp 0x66b8
movq -0xa8(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x9470
jmp 0x657b
movl $0x0, -0x68(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x35f8
movl -0x68(%rbp), %eax
testl %eax, %eax
je 0x6596
jmp 0x6594
jmp 0x6598
jmp 0x6598
leaq -0x28(%rbp), %rdi
callq 0x9890
jmp 0x64b8
movq -0xa0(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rdi
callq 0x98c0
movq %rax, -0x78(%rbp)
movq -0x70(%rbp), %rdi
callq 0x98f0
movq %rax, -0x80(%rbp)
leaq -0x78(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x9920
testb $0x1, %al
jne 0x65e1
jmp 0x667d
leaq -0x78(%rbp), %rdi
callq 0x9950
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rdi
callq 0x9970
movq %rax, -0x90(%rbp)
movq -0x88(%rbp), %rdi
callq 0x9990
movq %rax, %rcx
movq -0xa0(%rbp), %rax
movq %rcx, -0x98(%rbp)
movq 0xd8(%rax), %rdi
movq -0x90(%rbp), %rsi
callq 0x9410
movq %rax, -0xc8(%rbp)
jmp 0x663d
movq -0xc8(%rbp), %rax
cmpq $0x0, %rax
jbe 0x6656
movq -0x98(%rbp), %rax
cmpl $0x1, (%rax)
jne 0x6658
jmp 0x666f
movq -0xa8(%rbp), %rdi
movq -0x90(%rbp), %rsi
callq 0x9470
jmp 0x666d
jmp 0x666f
leaq -0x78(%rbp), %rdi
callq 0x99b0
jmp 0x65cb
movq -0xa0(%rbp), %rdi
callq 0x55a0
jmp 0x668b
movb $0x1, -0x11(%rbp)
movl $0x1, -0x68(%rbp)
testb $0x1, -0x11(%rbp)
jne 0x66a8
movq -0xa8(%rbp), %rdi
callq 0x41e0
movq -0xb0(%rbp), %rax
addq $0xd0, %rsp
popq %rbp
retq
movq -0xa8(%rbp), %rdi
callq 0x41e0
movq -0x60(%rbp), %rdi
callq 0x3540
nopl (%rax)