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

            if (!((*s) & 0x60)) { // special sequences from prev. context
                c = get_char(*pos - 1);
                match = 1;
                if (*s == 0)
                    return 1;
                switch ((*s) & 0x1f) {
                case '\001':
                    if ((c != ' ') && (c != '\t')) {
                        match = 0;
                        break;
                    }
                case '\002':
                    break;
                case '\003':
                    if ((c != ' ') && (c != '\t') && (c != '\n')) {
                        match = 0;
                        break;
                    }
                case '\004':
                    break;
                case '\006':
                    if ((c == ' ') || (c == '\t') || (c == '\n'))
                        break;
                    // fallthrough
                case '\005':
                    match = ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'));
                    break;
                case '\007':
                    match = ((c >= '0') && (c <= '9'));
                    break;
                case '\010':
                    match = is_in_charset(S->id_set, c);
                    break;
                case '\011':
                    match = (c == '\t');
                    break;
                case '\012':
                    match = (c == '\n');
                    break;
                case '\013':
                    match = is_in_charset(S->op_set, c);
                    break;
                case '\014':
                    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;
                s++;
            }
            return match_sequence(s, pos);
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
andl $0x60, %eax
cmpl $0x0, %eax
jne 0x3e68
movq -0x30(%rbp), %rdi
movq -0x20(%rbp), %rax
movl (%rax), %esi
subl $0x1, %esi
callq 0x6c80
movb %al, -0x21(%rbp)
movl $0x1, -0x28(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x3c63
movl $0x1, -0x4(%rbp)
jmp 0x3e7c
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
andl $0x1f, %eax
decl %eax
movl %eax, %ecx
movq %rcx, -0x38(%rbp)
subl $0xb, %eax
ja 0x3e2b
movq -0x38(%rbp), %rax
leaq 0x775b(%rip), %rcx      # 0xb3e4
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsbl -0x21(%rbp), %eax
cmpl $0x20, %eax
je 0x3cb0
movsbl -0x21(%rbp), %eax
cmpl $0x9, %eax
je 0x3cb0
movl $0x0, -0x28(%rbp)
jmp 0x3e2b
jmp 0x3cb2
jmp 0x3e2b
movsbl -0x21(%rbp), %eax
cmpl $0x20, %eax
je 0x3cde
movsbl -0x21(%rbp), %eax
cmpl $0x9, %eax
je 0x3cde
movsbl -0x21(%rbp), %eax
cmpl $0xa, %eax
je 0x3cde
movl $0x0, -0x28(%rbp)
jmp 0x3e2b
jmp 0x3ce0
jmp 0x3e2b
movsbl -0x21(%rbp), %eax
cmpl $0x20, %eax
je 0x3d00
movsbl -0x21(%rbp), %eax
cmpl $0x9, %eax
je 0x3d00
movsbl -0x21(%rbp), %eax
cmpl $0xa, %eax
jne 0x3d05
jmp 0x3e2b
jmp 0x3d07
movsbl -0x21(%rbp), %eax
cmpl $0x61, %eax
jl 0x3d1e
movsbl -0x21(%rbp), %ecx
movb $0x1, %al
cmpl $0x7a, %ecx
movb %al, -0x39(%rbp)
jle 0x3d3f
movsbl -0x21(%rbp), %ecx
xorl %eax, %eax
cmpl $0x41, %ecx
movb %al, -0x3a(%rbp)
jl 0x3d39
movsbl -0x21(%rbp), %eax
cmpl $0x5a, %eax
setle %al
movb %al, -0x3a(%rbp)
movb -0x3a(%rbp), %al
movb %al, -0x39(%rbp)
movb -0x39(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x3e2b
movsbl -0x21(%rbp), %ecx
xorl %eax, %eax
cmpl $0x30, %ecx
movb %al, -0x3b(%rbp)
jl 0x3d6a
movsbl -0x21(%rbp), %eax
cmpl $0x39, %eax
setle %al
movb %al, -0x3b(%rbp)
movb -0x3b(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x3e2b
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq 0xb0(%rax), %rdi
movsbl -0x21(%rbp), %esi
callq 0x6e90
movl %eax, -0x28(%rbp)
jmp 0x3e2b
movsbl -0x21(%rbp), %eax
cmpl $0x9, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x3e2b
movsbl -0x21(%rbp), %eax
cmpl $0xa, %eax
sete %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
jmp 0x3e2b
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq 0xa0(%rax), %rdi
movsbl -0x21(%rbp), %esi
callq 0x6e90
movl %eax, -0x28(%rbp)
jmp 0x3e2b
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq 0xa8(%rax), %rdi
movsbl -0x21(%rbp), %esi
callq 0x6e90
movl %eax, %ecx
movb $0x1, %al
cmpl $0x0, %ecx
movb %al, -0x3c(%rbp)
jne 0x3e20
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq 0xa0(%rax), %rdi
movsbl -0x21(%rbp), %esi
callq 0x6e90
cmpl $0x0, %eax
setne %al
movb %al, -0x3c(%rbp)
movb -0x3c(%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 0x3e4d
cmpl $0x0, -0x28(%rbp)
setne %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x28(%rbp)
cmpl $0x0, -0x28(%rbp)
jne 0x3e5c
movl $0x0, -0x4(%rbp)
jmp 0x3e7c
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x30(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x6810
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)