// File: /workspace/github_cpp_makefile_star2_O2/Heptagon196[P]Gos/Reflection/JSON.cpp
// Function: Tokenizer::getToken[abi:cxx11]()
Token getToken() {
        if (lastToken.second != "") {
            Token ret = lastToken;
            lastToken.second = "";
            return ret;
        }
        char ch = getChar();
        while (ch == ' ' || ch == '\n' || ch == '\r' || ch == '\t') {
            ch = getChar();
        }
        if (ch == EOF) {
            return { TypeID::get<void>(), "" };
        }
        std::string content;
        content = ch;
        if (ch == '"') {
            content = "";
            ch = getChar();
            while (ch != '"') {
                if (ch == '\\') {
                    ch = getChar();
                    if (ch == 'n') {
                        ch = '\n';
                    } else if (ch == 'r') {
                        ch = '\r';
                    } else if (ch == 't') {
                        ch = '\t';
                    }
                }
                content.push_back(ch);
                ch = getChar();
            }
            return { TypeID::get<std::string>(), content };
        } else if (isdigit(ch) || isalpha(ch) || ch == '-' || ch == '+' || ch == '.') {
            bool hasAlpha = isalpha(ch);
            bool hasDot = ch == '.';
            ch = getChar();
            while (isdigit(ch) || isalpha(ch) || ch == '-' || ch == '+' || ch == '.') {
                if (isalpha(ch)) {
                    hasAlpha = true;
                }
                if (ch == '.') {
                    if (hasDot) {
                        hasAlpha = true;
                    }
                    hasDot = true;
                }
                content.push_back(ch);
                ch = getChar();
            }
            backChar(ch);
            if (hasAlpha) {
                return { TypeID::get<std::string>(), content };
            } else if (hasDot) {
                return { TypeID::get<float>(), content };
            } else {
                return { TypeID::get<int>(), content };
            }
        } else {
            return { TypeID::get<void>(), content };
        }
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movq %rsi, %r14
movq %rdi, %r13
leaq 0x30(%rsi), %r15
leaq 0x43e4b(%rip), %rsi     # 0xa97b6
movq %r15, %rdi
callq 0x21c5b
testb %al, %al
je 0x659c5
movabsq $0x100002600, %r15      # imm = 0x100002600
movq %r14, %rdi
callq 0x66470
movl %eax, %ebp
movzbl %al, %ebx
cmpb $0x20, %bl
ja 0x65999
btq %rbx, %r15
jb 0x65981
cmpl $0xff, %ebx
jne 0x659e8
leaq 0x28(%rsp), %r14
movq %r14, %rdi
callq 0x20c9a
leaq 0x43e01(%rip), %rdx     # 0xa97b6
movq %r13, %rdi
movq %r14, %rsi
callq 0x6648a
jmp 0x65c46
addq $0x10, %r14
movq %r13, %rdi
movq %r14, %rsi
callq 0x65e2a
leaq 0x43ddb(%rip), %rsi     # 0xa97b6
movq %r15, %rdi
callq 0x664c4
jmp 0x65c46
movsbl %bpl, %r15d
leaq 0x38(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x28(%rsp), %rdi
movl %r15d, %esi
callq 0x664b0
cmpb $0x22, %bpl
jne 0x65a7b
leaq 0x43d9f(%rip), %rsi     # 0xa97b6
leaq 0x28(%rsp), %rdi
callq 0x664c4
movq %r14, %rdi
callq 0x66470
pushq $0x9
popq %rbx
leaq 0x28(%rsp), %r15
cmpb $0x5c, %al
je 0x65a42
movzbl %al, %ecx
cmpl $0x22, %ecx
jne 0x65a66
jmp 0x65b65
movq %r14, %rdi
callq 0x66470
movl %eax, %ecx
cmpb $0x6e, %al
je 0x65a5c
movzbl %cl, %eax
cmpl $0x72, %eax
jne 0x65a60
movb $0xd, %al
jmp 0x65a66
movb $0xa, %al
jmp 0x65a66
cmpb $0x74, %cl
cmovel %ebx, %eax
movsbl %al, %esi
movq %r15, %rdi
callq 0x537e8
movq %r14, %rdi
callq 0x66470
jmp 0x65a31
leal -0x30(%r15), %eax
cmpl $0xa, %eax
jb 0x65aae
movl %r15d, %edi
callq 0x114e0
testl %eax, %eax
jne 0x65aae
cmpb $0x2e, %bpl
ja 0x65c58
movabsq $0x680000000000, %rax   # imm = 0x680000000000
btq %rbx, %rax
jae 0x65c58
movl %r15d, %edi
callq 0x114e0
movl %eax, %ebx
movq %r14, 0x50(%rsp)
movq %r14, %rdi
callq 0x66470
movl %eax, %r12d
movq %r13, 0x48(%rsp)
cmpb $0x2e, %bpl
sete %r15b
testl %ebx, %ebx
setne %bl
movsbl %r12b, %r13d
leal -0x30(%r13), %eax
cmpl $0xa, %eax
jb 0x65b15
movl %r13d, %edi
callq 0x114e0
testl %eax, %eax
jne 0x65b15
cmpb $0x2e, %r12b
ja 0x65b96
movzbl %r12b, %eax
movabsq $0x680000000000, %rcx   # imm = 0x680000000000
btq %rax, %rcx
jae 0x65b96
movl %r13d, %edi
callq 0x114e0
movl %eax, %ebp
leaq 0x28(%rsp), %rdi
movl %r13d, %esi
callq 0x537e8
cmpb $0x2e, %r12b
sete %r13b
movzbl %r15b, %r14d
pushq $0x1
popq %rax
cmovel %eax, %r14d
testl %ebp, %ebp
setne %al
andb %r15b, %r13b
orb %bl, %r13b
orb %al, %r13b
movq 0x50(%rsp), %rdi
callq 0x66470
movl %eax, %r12d
movl %r13d, %ebx
movl %r14d, %r15d
jmp 0x65ada
leaq 0x8(%rsp), %rdi
callq 0x2140e
movups 0x8(%rsp), %xmm0
movups 0x18(%rsp), %xmm1
movups %xmm1, 0x10(%r13)
movups %xmm0, (%r13)
leaq 0x20(%r13), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2b71e
jmp 0x65c3c
movq 0x50(%rsp), %rax
movb %r12b, 0x8(%rax)
testb $0x1, %bl
je 0x65bd7
leaq 0x8(%rsp), %rdi
callq 0x2140e
movq 0x48(%rsp), %r13
movups 0x8(%rsp), %xmm0
movups 0x18(%rsp), %xmm1
movups %xmm1, 0x10(%r13)
movups %xmm0, (%r13)
leaq 0x20(%r13), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2b71e
jmp 0x65c3c
testb $0x1, %r15b
movq 0x48(%rsp), %r13
je 0x65c10
leaq 0x8(%rsp), %rdi
callq 0x40692
movups 0x8(%rsp), %xmm0
movups 0x18(%rsp), %xmm1
movups %xmm1, 0x10(%r13)
movups %xmm0, (%r13)
leaq 0x20(%r13), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2b71e
jmp 0x65c3c
leaq 0x8(%rsp), %rdi
callq 0x22a52
movups 0x8(%rsp), %xmm0
movups 0x18(%rsp), %xmm1
movups %xmm1, 0x10(%r13)
movups %xmm0, (%r13)
leaq 0x20(%r13), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2b71e
leaq 0x28(%rsp), %rdi
callq 0x209be
movq %r13, %rax
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x8(%rsp), %rdi
callq 0x20c9a
movups 0x8(%rsp), %xmm0
movups 0x18(%rsp), %xmm1
movups %xmm1, 0x10(%r13)
movups %xmm0, (%r13)
leaq 0x20(%r13), %rdi
leaq 0x28(%rsp), %rsi
callq 0x2b71e
jmp 0x65c3c
jmp 0x65ca2
jmp 0x65ca2
jmp 0x65ca2
jmp 0x65ca2
jmp 0x65ca2
jmp 0x65ca2
jmp 0x65ca2
movq %rax, %r14
addq $0x20, %r13
movq %r13, %rdi
jmp 0x65caa
jmp 0x65ca2
movq %rax, %r14
leaq 0x28(%rsp), %rdi
callq 0x209be
movq %r14, %rdi
callq 0x11570