// File: cjxgm[P]libgpp/src/libgpp.cpp
// Function: (anonymous namespace)::Preprocessor::match_sequence(char const*, int*)
int match_sequence(const char *s, int *pos) {
            int i = *pos;
            int match;
            char c;

            while (*s != 0) {
                if (!((*s) & 0x60)) { // special sequences
                    match = 1;
                    switch ((*s) & 0x1f) {
                    case '\001':
                        c = get_char(i++);
                        if ((c != ' ') && (c != '\t')) {
                            match = 0;
                            break;
                        }
                        // fallthrough
                    case '\002':
                        i--;
                        do {
                            c = get_char(++i);
                        } while ((c == ' ') || (c == '\t'));
                        break;
                    case '\003':
                        c = get_char(i++);
                        if ((c != ' ') && (c != '\t') && (c != '\n')) {
                            match = 0;
                            break;
                        }
                        // fallthrough
                    case '\004':
                        i--;
                        do {
                            c = get_char(++i);
                        } while ((c == ' ') || (c == '\t') || (c == '\n'));
                        break;
                    case '\006':
                        c = get_char(i++);
                        match = ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'))
                                || (c == ' ') || (c == '\t') || (c == '\n');
                        break;
                    case '\005':
                        c = get_char(i++);
                        match = ((c >= 'a') && (c <= 'z'))
                                || ((c >= 'A') && (c <= 'Z'));
                        break;
                    case '\007':
                        c = get_char(i++);
                        match = ((c >= '0') && (c <= '9'));
                        break;
                    case '\010':
                        c = get_char(i++);
                        match = is_in_charset(S->id_set, c);
                        break;
                    case '\011':
                        c = get_char(i++);
                        match = (c == '\t');
                        break;
                    case '\012':
                        c = get_char(i++);
                        match = (c == '\n');
                        break;
                    case '\013':
                        c = get_char(i++);
                        match = is_in_charset(S->op_set, c);
                        break;
                    case '\014':
                        c = get_char(i++);
                        match = is_in_charset(S->ext_op_set, c)
                                || is_in_charset(S->op_set, c);
                        break;
                    }
                    if ((*s) & 0x80)
                        match = !match;
                    if (!match)
                        return 0;
                } else if (get_char(i++) != *s)
                    return 0;
                s++;
            }
            *pos = i;
            return 1;
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x24(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0x6c5d
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
andl $0x60, %eax
cmpl $0x0, %eax
jne 0x6c1f
movl $0x1, -0x28(%rbp)
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
andl $0x1f, %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x40(%rbp)
subl $0xb, %eax
ja 0x6bec
movq -0x40(%rbp), %rax
leaq 0x4bdf(%rip), %rcx      # 0xb464
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %eax
cmpl $0x20, %eax
je 0x68c3
movsbl -0x29(%rbp), %eax
cmpl $0x9, %eax
je 0x68c3
movl $0x0, -0x28(%rbp)
jmp 0x6bec
jmp 0x68c5
movl -0x24(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $0x1, %esi
movl %esi, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %ecx
movb $0x1, %al
cmpl $0x20, %ecx
movb %al, -0x41(%rbp)
je 0x68fe
movsbl -0x29(%rbp), %eax
cmpl $0x9, %eax
sete %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0x68ce
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %eax
cmpl $0x20, %eax
je 0x6948
movsbl -0x29(%rbp), %eax
cmpl $0x9, %eax
je 0x6948
movsbl -0x29(%rbp), %eax
cmpl $0xa, %eax
je 0x6948
movl $0x0, -0x28(%rbp)
jmp 0x6bec
jmp 0x694a
movl -0x24(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x24(%rbp)
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
addl $0x1, %esi
movl %esi, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %ecx
movb $0x1, %al
cmpl $0x20, %ecx
movb %al, -0x42(%rbp)
je 0x6991
movsbl -0x29(%rbp), %ecx
movb $0x1, %al
cmpl $0x9, %ecx
movb %al, -0x42(%rbp)
je 0x6991
movsbl -0x29(%rbp), %eax
cmpl $0xa, %eax
sete %al
movb %al, -0x42(%rbp)
movb -0x42(%rbp), %al
testb $0x1, %al
jne 0x6953
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %eax
cmpl $0x61, %eax
jl 0x69cb
movsbl -0x29(%rbp), %ecx
movb $0x1, %al
cmpl $0x7a, %ecx
movb %al, -0x43(%rbp)
jle 0x6a0b
movsbl -0x29(%rbp), %eax
cmpl $0x41, %eax
jl 0x69e2
movsbl -0x29(%rbp), %ecx
movb $0x1, %al
cmpl $0x5a, %ecx
movb %al, -0x43(%rbp)
jle 0x6a0b
movsbl -0x29(%rbp), %ecx
movb $0x1, %al
cmpl $0x20, %ecx
movb %al, -0x43(%rbp)
je 0x6a0b
movsbl -0x29(%rbp), %ecx
movb $0x1, %al
cmpl $0x9, %ecx
movb %al, -0x43(%rbp)
je 0x6a0b
movsbl -0x29(%rbp), %eax
cmpl $0xa, %eax
sete %al
movb %al, -0x43(%rbp)
movb -0x43(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %eax
cmpl $0x61, %eax
jl 0x6a49
movsbl -0x29(%rbp), %ecx
movb $0x1, %al
cmpl $0x7a, %ecx
movb %al, -0x44(%rbp)
jle 0x6a6a
movsbl -0x29(%rbp), %ecx
xorl %eax, %eax
cmpl $0x41, %ecx
movb %al, -0x45(%rbp)
jl 0x6a64
movsbl -0x29(%rbp), %eax
cmpl $0x5a, %eax
setle %al
movb %al, -0x45(%rbp)
movb -0x45(%rbp), %al
movb %al, -0x44(%rbp)
movb -0x44(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %ecx
xorl %eax, %eax
cmpl $0x30, %ecx
movb %al, -0x46(%rbp)
jl 0x6aac
movsbl -0x29(%rbp), %eax
cmpl $0x39, %eax
setle %al
movb %al, -0x46(%rbp)
movb -0x46(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, %cl
movq -0x38(%rbp), %rax
movb %cl, -0x29(%rbp)
movq (%rax), %rax
movq 0xb0(%rax), %rdi
movsbl -0x29(%rbp), %esi
callq 0x6e90
movl %eax, -0x28(%rbp)
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %eax
cmpl $0x9, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %eax
cmpl $0xa, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, %cl
movq -0x38(%rbp), %rax
movb %cl, -0x29(%rbp)
movq (%rax), %rax
movq 0xa0(%rax), %rdi
movsbl -0x29(%rbp), %esi
callq 0x6e90
movl %eax, -0x28(%rbp)
jmp 0x6bec
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movb %al, %cl
movq -0x38(%rbp), %rax
movb %cl, -0x29(%rbp)
movq (%rax), %rax
movq 0xa8(%rax), %rdi
movsbl -0x29(%rbp), %esi
callq 0x6e90
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x47(%rbp)
jne 0x6be1
movq -0x38(%rbp), %rax
movq (%rax), %rax
movq 0xa0(%rax), %rdi
movsbl -0x29(%rbp), %esi
callq 0x6e90
cmpl $0x0, %eax
setne %al
movb %al, -0x47(%rbp)
movb -0x47(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
andl $0x80, %eax
cmpl $0x0, %eax
je 0x6c0e
cmpl $0x0, -0x28(%rbp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
cmpl $0x0, -0x28(%rbp)
jne 0x6c1d
movl $0x0, -0x4(%rbp)
jmp 0x6c6d
jmp 0x6c4c
movq -0x38(%rbp), %rdi
movl -0x24(%rbp), %esi
movl %esi, %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
callq 0x6c80
movsbl %al, %eax
movq -0x18(%rbp), %rcx
movsbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x6c4a
movl $0x0, -0x4(%rbp)
jmp 0x6c6d
jmp 0x6c4c
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x6835
movl -0x24(%rbp), %ecx
movq -0x20(%rbp), %rax
movl %ecx, (%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)