// File: Konano[P]UselessDatabase/./json.hpp
// Function: nlohmann::detail::lexer<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>>::get_codepoint()
int get_codepoint()
    {
        // this function only makes sense after reading `\u`
        assert(current == 'u');
        int codepoint = 0;

        const auto factors = { 12u, 8u, 4u, 0u };
        for (const auto factor : factors)
        {
            get();

            if (current >= '0' and current <= '9')
            {
                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x30u) << factor);
            }
            else if (current >= 'A' and current <= 'F')
            {
                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x37u) << factor);
            }
            else if (current >= 'a' and current <= 'f')
            {
                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x57u) << factor);
            }
            else
            {
                return -1;
            }
        }

        assert(0x0000 <= codepoint and codepoint <= 0xFFFF);
        return codepoint;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x10(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x60(%rbp)
cmpl $0x75, 0x10(%rax)
jne 0x231cc
jmp 0x231eb
leaq 0x5e085(%rip), %rdi     # 0x81258
leaq 0x5b967(%rip), %rsi     # 0x7eb41
movl $0x1c73, %edx           # imm = 0x1C73
leaq 0x5e081(%rip), %rcx     # 0x81267
callq 0x6350
movl $0x0, -0x14(%rbp)
movl $0xc, -0x38(%rbp)
movl $0x8, -0x34(%rbp)
movl $0x4, -0x30(%rbp)
movl $0x0, -0x2c(%rbp)
leaq -0x38(%rbp), %rax
movq %rax, -0x28(%rbp)
movq $0x4, -0x20(%rbp)
leaq -0x28(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rdi
callq 0x235c0
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rdi
callq 0x235e0
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x50(%rbp), %rax
je 0x23301
movq -0x60(%rbp), %rdi
movq -0x48(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x54(%rbp)
callq 0x21310
movq -0x60(%rbp), %rax
cmpl $0x30, 0x10(%rax)
jl 0x2328b
movq -0x60(%rbp), %rax
cmpl $0x39, 0x10(%rax)
jg 0x2328b
movq -0x60(%rbp), %rax
movl 0x10(%rax), %eax
subl $0x30, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x232ee
movq -0x60(%rbp), %rax
cmpl $0x41, 0x10(%rax)
jl 0x232b6
movq -0x60(%rbp), %rax
cmpl $0x46, 0x10(%rax)
jg 0x232b6
movq -0x60(%rbp), %rax
movl 0x10(%rax), %eax
subl $0x37, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x232ec
movq -0x60(%rbp), %rax
cmpl $0x61, 0x10(%rax)
jl 0x232e1
movq -0x60(%rbp), %rax
cmpl $0x66, 0x10(%rax)
jg 0x232e1
movq -0x60(%rbp), %rax
movl 0x10(%rax), %eax
subl $0x57, %eax
movl -0x54(%rbp), %ecx
shll %cl, %eax
addl -0x14(%rbp), %eax
movl %eax, -0x14(%rbp)
jmp 0x232ea
movl $0xffffffff, -0x4(%rbp) # imm = 0xFFFFFFFF
jmp 0x2334a
jmp 0x232ec
jmp 0x232ee
jmp 0x232f0
movq -0x48(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x48(%rbp)
jmp 0x23240
xorl %eax, %eax
xorl %ecx, %ecx
cmpl -0x14(%rbp), %ecx
movb %al, -0x61(%rbp)
jg 0x2331a
cmpl $0xffff, -0x14(%rbp)    # imm = 0xFFFF
setle %al
movb %al, -0x61(%rbp)
movb -0x61(%rbp), %al
testb $0x1, %al
jne 0x23323
jmp 0x23325
jmp 0x23344
leaq 0x5dfa9(%rip), %rdi     # 0x812d5
leaq 0x5b80e(%rip), %rsi     # 0x7eb41
movl $0x1c8d, %edx           # imm = 0x1C8D
leaq 0x5df28(%rip), %rcx     # 0x81267
callq 0x6350
movl -0x14(%rbp), %eax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nopl (%rax)