// File: /workspace/github_cpp_makefile_star2_O2/Falldog[P]dcinja/src/include/nlohmann/json.hpp
// Function: nlohmann::json_pointer<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, std::vector<unsigned char, std::allocator<unsigned char>>>>::contains(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, std::vector<unsigned char, std::allocator<unsigned char>>> const*) const
bool contains(const BasicJsonType* ptr) const
    {
        for (const auto& reference_token : reference_tokens)
        {
            switch (ptr->type())
            {
                case detail::value_t::object:
                {
                    if (!ptr->contains(reference_token))
                    {
                        // we did not find the key in the object
                        return false;
                    }

                    ptr = &ptr->operator[](reference_token);
                    break;
                }

                case detail::value_t::array:
                {
                    if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
                    {
                        // "-" always fails the range check
                        return false;
                    }
                    if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9")))
                    {
                        // invalid char
                        return false;
                    }
                    if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1))
                    {
                        if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9')))
                        {
                            // first char should be between '1' and '9'
                            return false;
                        }
                        for (std::size_t i = 1; i < reference_token.size(); i++)
                        {
                            if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9')))
                            {
                                // other char should be between '0' and '9'
                                return false;
                            }
                        }
                    }

                    const auto idx = array_index(reference_token);
                    if (idx >= ptr->size())
                    {
                        // index out of range
                        return false;
                    }

                    ptr = &ptr->operator[](idx);
                    break;
                }

                default:
                {
                    // we do not expect primitive values if there is still a
                    // reference token to process
                    return false;
                }
            }
        }

        // no reference token left means we found a primitive value
        return true;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rsi, %r13
movq (%rdi), %rbx
movq 0x8(%rdi), %r12
leaq 0x1d7db(%rip), %r14     # 0x46971
cmpq %r12, %rbx
sete %r15b
je 0x29284
movzbl (%r13), %eax
cmpl $0x2, %eax
je 0x291d6
cmpl $0x1, %eax
jne 0x29280
movq %r13, %rdi
movq %rbx, %rsi
callq 0x29296
testb %al, %al
je 0x29280
movq %r13, %rdi
movq %rbx, %rsi
callq 0x292bc
jmp 0x2924c
movq %rbx, %rdi
movq %r14, %rsi
callq 0xc160
testb %al, %al
jne 0x29280
movq 0x8(%rbx), %rcx
cmpq $0x1, %rcx
jne 0x2921d
leaq 0x221c6(%rip), %rdi     # 0x4b3c0
movq %rbx, %rsi
callq 0x293ba
testb %al, %al
je 0x29280
movq %rbx, %rdi
leaq 0x2203e(%rip), %rsi     # 0x4b24e
callq 0x293d0
testb %al, %al
je 0x29280
movq 0x8(%rbx), %rcx
cmpq $0x2, %rcx
jae 0x29258
movq %rbx, %rdi
callq 0x293de
movq %rax, %rbp
movq %r13, %rdi
callq 0x1f4ce
movq %rax, %rcx
movl %r15d, %eax
cmpq %rcx, %rbp
jae 0x29286
movq %r13, %rdi
movq %rbp, %rsi
callq 0x296c8
movq %rax, %r13
addq $0x20, %rbx
jmp 0x29196
movq (%rbx), %rdx
movb (%rdx), %al
addb $-0x3a, %al
cmpb $-0x9, %al
jb 0x29280
pushq $0x1
popq %rsi
cmpq %rsi, %rcx
je 0x29223
movb (%rdx,%rsi), %dil
addb $-0x3a, %dil
incq %rsi
xorl %eax, %eax
cmpb $-0xa, %dil
jae 0x29266
jmp 0x29286
xorl %eax, %eax
jmp 0x29286
movb $0x1, %al
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop