// File: Myyura[P]MyyuraSat/./source/../include/core/../type/clause.hpp
// Function: MyyuraSat::Clause::subsumes(MyyuraSat::Clause const&) const
inline Literal Clause::subsumes(const Clause& other) const {
    if ((_header.learnt || other._header.learnt) ||
        (!_header.has_extra || !other._header.has_extra)) {
        throw std::logic_error("Clause::subsumes(const Clause& other) - learnt clause error or no extra spaces");
    }

    if (other._header.size < _header.size ||
        (_data[_header.size].abst & ~other._data[other._header.size].abst) != 0) {
        return LITERAL_ERROR;
    }

    Literal result = LITERAL_UNDEF;

    for (int i = 0; i < _header.size; i++) {
        // search for _data[i].lit or ~_data[i].lit
        bool is_found = false;
        for (int j = 0; j < other._header.size; j++) {
            if (_data[i].lit == other._data[j].lit) {
                is_found = true;
                break;
            } else if (result == LITERAL_UNDEF && _data[i].lit == ~other._data[j].lit) {
                result = _data[i].lit;
                is_found = true;
                break;
            }
        }

        if (!is_found) { return LITERAL_ERROR; }
    }

    return result;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x40(%rbp)
movl (%rax), %eax
shrl $0x2, %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x9278
movq -0x18(%rbp), %rax
movl (%rax), %eax
shrl $0x2, %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x9278
movq -0x40(%rbp), %rax
movl (%rax), %eax
shrl $0x3, %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x9278
movq -0x18(%rbp), %rax
movl (%rax), %eax
shrl $0x3, %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0x92cb
movl $0x10, %edi
callq 0x2090
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x48(%rbp)
leaq 0x61ac(%rip), %rsi      # 0xf43f
callq 0x21a0
jmp 0x929a
movq -0x48(%rbp), %rdi
movq 0xcd33(%rip), %rsi      # 0x15fd8
movq 0xcce4(%rip), %rdx      # 0x15f90
callq 0x2210
movq -0x48(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x20(%rbp)
movl %eax, -0x24(%rbp)
callq 0x20c0
jmp 0x9458
movq -0x40(%rbp), %rcx
movq -0x18(%rbp), %rax
movl (%rax), %eax
shrl $0x5, %eax
movl (%rcx), %ecx
shrl $0x5, %ecx
cmpl %ecx, %eax
jl 0x930d
movq -0x40(%rbp), %rax
movl (%rax), %ecx
shrl $0x5, %ecx
movl %ecx, %ecx
movl 0x4(%rax,%rcx,4), %eax
movq -0x18(%rbp), %rcx
movq -0x18(%rbp), %rdx
movl (%rdx), %edx
shrl $0x5, %edx
movl %edx, %edx
movl 0x4(%rcx,%rdx,4), %ecx
xorl $-0x1, %ecx
andl %ecx, %eax
cmpl $0x0, %eax
je 0x931b
movl 0xce3d(%rip), %eax      # 0x16150
movl %eax, -0x4(%rbp)
jmp 0x944f
movl 0xce2b(%rip), %eax      # 0x1614c
movl %eax, -0x28(%rbp)
movl $0x0, -0x2c(%rbp)
movq -0x40(%rbp), %rcx
movl -0x2c(%rbp), %eax
movl (%rcx), %ecx
shrl $0x5, %ecx
cmpl %ecx, %eax
jge 0x9449
movb $0x0, -0x2d(%rbp)
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
movq -0x18(%rbp), %rcx
movl (%rcx), %ecx
shrl $0x5, %ecx
cmpl %ecx, %eax
jge 0x9428
movq -0x40(%rbp), %rdi
addq $0x4, %rdi
movslq -0x2c(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rdi
movq -0x18(%rbp), %rsi
addq $0x4, %rsi
movslq -0x34(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x7820
testb $0x1, %al
jne 0x938f
jmp 0x9398
movb $0x1, -0x2d(%rbp)
jmp 0x9428
leaq -0x28(%rbp), %rdi
leaq 0xcda9(%rip), %rsi      # 0x1614c
callq 0x7820
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x49(%rbp)
jne 0x93b6
jmp 0x93f8
movq -0x40(%rbp), %rax
addq $0x4, %rax
movslq -0x2c(%rbp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x18(%rbp), %rdi
addq $0x4, %rdi
movslq -0x34(%rbp), %rax
shlq $0x2, %rax
addq %rax, %rdi
callq 0x75b0
movq -0x58(%rbp), %rdi
movl %eax, -0x38(%rbp)
leaq -0x38(%rbp), %rsi
callq 0x7820
movb %al, -0x49(%rbp)
movb -0x49(%rbp), %al
testb $0x1, %al
jne 0x9401
jmp 0x9416
movq -0x40(%rbp), %rax
movslq -0x2c(%rbp), %rcx
movl 0x4(%rax,%rcx,4), %eax
movl %eax, -0x28(%rbp)
movb $0x1, -0x2d(%rbp)
jmp 0x9428
jmp 0x9418
jmp 0x941a
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0x934a
testb $0x1, -0x2d(%rbp)
jne 0x9439
movl 0xcd1c(%rip), %eax      # 0x16150
movl %eax, -0x4(%rbp)
jmp 0x944f
jmp 0x943b
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x932b
movl -0x28(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x60, %rsp
popq %rbp
retq
movq -0x20(%rbp), %rdi
callq 0x2230
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)