// File: /workspace/github_cpp_makefile_star2_O3/xelia-it[P]mustache/test/src/../../src/../third-party/json/single_include/nlohmann/json.hpp
// Function: std::pair<bool, nlohmann::json_abi_v3_11_2::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::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>, void>*> nlohmann::json_abi_v3_11_2::detail::json_sax_dom_callback_parser<nlohmann::json_abi_v3_11_2::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::json_abi_v3_11_2::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>, void>>::handle_value<double&>(double&, bool)
std::pair<bool, BasicJsonType*> handle_value(Value&& v, const bool skip_callback = false)
    {
        JSON_ASSERT(!keep_stack.empty());

        // do not handle this value if we know it would be added to a discarded
        // container
        if (!keep_stack.back())
        {
            return {false, nullptr};
        }

        // create value
        auto value = BasicJsonType(std::forward<Value>(v));

        // check callback
        const bool keep = skip_callback || callback(static_cast<int>(ref_stack.size()), parse_event_t::value, value);

        // do not handle this value if we just learnt it shall be discarded
        if (!keep)
        {
            return {false, nullptr};
        }

        if (ref_stack.empty())
        {
            root = std::move(value);
            return {true, &root};
        }

        // skip this value if we already decided to skip the parent
        // (https://github.com/nlohmann/json/issues/971#issuecomment-413678360)
        if (!ref_stack.back())
        {
            return {false, nullptr};
        }

        // we now only expect arrays and objects
        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());

        // array
        if (ref_stack.back()->is_array())
        {
            ref_stack.back()->m_value.array->emplace_back(std::move(value));
            return {true, &(ref_stack.back()->m_value.array->back())};
        }

        // object
        JSON_ASSERT(ref_stack.back()->is_object());
        // check if we should store an element for the current key
        JSON_ASSERT(!key_keep_stack.empty());
        const bool store_element = key_keep_stack.back();
        key_keep_stack.pop_back();

        if (!store_element)
        {
            return {false, nullptr};
        }

        JSON_ASSERT(object_element);
        *object_element = std::move(value);
        return {true, object_element};
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x40, %rsp
movl %edx, %r14d
movq %rdi, %rbx
movq 0x30(%rdi), %rax
movl 0x38(%rdi), %ecx
cmpq %rax, 0x20(%rdi)
sete %dl
testl %ecx, %ecx
sete %dil
andb %dl, %dil
cmpb $0x1, %dil
je 0x6beb5
movl %ecx, %ecx
movabsq $-0x8000000000000000, %r12 # imm = 0x8000000000000000
leaq -0x1(%rcx), %rdx
addq $0x3e, %rcx
testq %rdx, %rdx
cmovnsq %rdx, %rcx
sarq $0x6, %rcx
leaq (%rax,%rcx,8), %rax
leaq 0x3f(%r12), %rcx
andq %rdx, %rcx
xorl %edi, %edi
cmpq %r12, %rcx
setbe %dil
movq -0x8(%rax,%rdi,8), %rax
btq %rdx, %rax
jae 0x6bd5f
leaq -0x38(%rbp), %r15
movb $0x0, (%r15)
movq $0x0, 0x8(%r15)
movsd (%rsi), %xmm0
movq %r15, %rdi
callq 0x6bf4a
movq %r15, %rdi
movl $0x1, %esi
callq 0x65866
testb %r14b, %r14b
jne 0x6bd0d
movq 0x10(%rbx), %rax
subq 0x8(%rbx), %rax
shrq $0x3, %rax
movl %eax, -0x28(%rbp)
movb $0x5, -0x21(%rbp)
cmpq $0x0, 0x90(%rbx)
je 0x6bed4
leaq 0x80(%rbx), %rdi
leaq -0x28(%rbp), %rsi
leaq -0x21(%rbp), %rdx
leaq -0x38(%rbp), %rcx
callq *0x98(%rbx)
testb %al, %al
je 0x6be95
movq 0x10(%rbx), %rax
cmpq %rax, 0x8(%rbx)
je 0x6bd69
movq -0x8(%rax), %rax
testq %rax, %rax
je 0x6be95
movzbl (%rax), %ecx
cmpl $0x1, %ecx
je 0x6bdbd
cmpl $0x2, %ecx
jne 0x6bed9
movq 0x8(%rax), %rdi
leaq -0x38(%rbp), %rsi
callq 0x69da8
movq 0x10(%rbx), %rax
movq -0x8(%rax), %rax
movq 0x8(%rax), %rax
movq 0x8(%rax), %r14
addq $-0x10, %r14
jmp 0x6be91
xorl %ebx, %ebx
xorl %r14d, %r14d
jmp 0x6bea3
leaq -0x38(%rbp), %r14
movb (%r14), %al
leaq -0x58(%rbp), %r15
movb %al, (%r15)
movq 0x8(%r14), %rax
movq %rax, 0x8(%r15)
movq %r14, %rdi
xorl %esi, %esi
callq 0x65866
movb $0x0, (%r14)
movq $0x0, 0x8(%r14)
movq %r15, %rdi
movl $0x1, %esi
callq 0x65866
movq (%rbx), %rdi
movq %r15, %rsi
callq 0x67d20
movq %r15, %rdi
callq 0x6503c
movq (%rbx), %r14
jmp 0x6be91
movq 0x58(%rbx), %rax
movl 0x60(%rbx), %ecx
cmpq %rax, 0x48(%rbx)
sete %dl
testl %ecx, %ecx
sete %sil
andb %dl, %sil
cmpb $0x1, %sil
je 0x6bef8
movl %ecx, %edx
leaq -0x1(%rdx), %rcx
movq %rdx, %rsi
addq $0x3e, %rsi
testq %rcx, %rcx
cmovnsq %rcx, %rsi
sarq $0x6, %rsi
leaq (%rax,%rsi,8), %rdi
leaq 0x3f(%r12), %rsi
andq %rcx, %rsi
xorl %r8d, %r8d
cmpq %r12, %rsi
setbe %r8b
movl $0x1, %esi
shlq %cl, %rsi
andq -0x8(%rdi,%r8,8), %rsi
subl $0x1, %edx
movl %edx, 0x60(%rbx)
jae 0x6be30
movl $0x3f, 0x60(%rbx)
addq $-0x8, %rax
movq %rax, 0x58(%rbx)
testq %rsi, %rsi
je 0x6be95
cmpq $0x0, 0x70(%rbx)
je 0x6bf17
leaq -0x38(%rbp), %r14
movb (%r14), %al
leaq -0x48(%rbp), %r15
movb %al, (%r15)
movq 0x8(%r14), %rax
movq %rax, 0x8(%r15)
movq %r14, %rdi
xorl %esi, %esi
callq 0x65866
movb $0x0, (%r14)
movq $0x0, 0x8(%r14)
movq %r15, %rdi
movl $0x1, %esi
callq 0x65866
movq 0x70(%rbx), %rdi
movq %r15, %rsi
callq 0x67d20
movq %r15, %rdi
callq 0x6503c
movq 0x70(%rbx), %r14
movb $0x1, %bl
jmp 0x6be9a
xorl %ebx, %ebx
xorl %r14d, %r14d
leaq -0x38(%rbp), %rdi
callq 0x6503c
movl %ebx, %eax
movq %r14, %rdx
addq $0x40, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
leaq 0x15aa1(%rip), %rdi     # 0x8195d
leaq 0x141ec(%rip), %rsi     # 0x800af
leaq 0x1610c(%rip), %rcx     # 0x81fd6
movl $0x1be6, %edx           # imm = 0x1BE6
callq 0x1b320
callq 0x1b1b0
leaq 0x15b69(%rip), %rdi     # 0x81a49
leaq 0x141c8(%rip), %rsi     # 0x800af
leaq 0x160e8(%rip), %rcx     # 0x81fd6
movl $0x1c09, %edx           # imm = 0x1C09
callq 0x1b320
leaq 0x15b88(%rip), %rdi     # 0x81a87
leaq 0x141a9(%rip), %rsi     # 0x800af
leaq 0x160c9(%rip), %rcx     # 0x81fd6
movl $0x1c15, %edx           # imm = 0x1C15
callq 0x1b320
leaq 0x15b81(%rip), %rdi     # 0x81a9f
leaq 0x1418a(%rip), %rsi     # 0x800af
leaq 0x160aa(%rip), %rcx     # 0x81fd6
movl $0x1c1e, %edx           # imm = 0x1C1E
callq 0x1b320
movq %rax, %rbx
leaq -0x38(%rbp), %rdi
callq 0x6503c
movq %rbx, %rdi
callq 0x1b910