// File: Juve45[P]batstat/./include/nlohmann/json.hpp
// Function: nlohmann::json_abi_v3_11_3::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_3::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>, void>::json_value::destroy(nlohmann::json_abi_v3_11_3::detail::value_t)
void destroy(value_t t)
        {
            if (
                (t == value_t::object && object == nullptr) ||
                (t == value_t::array && array == nullptr) ||
                (t == value_t::string && string == nullptr) ||
                (t == value_t::binary && binary == nullptr)
            )
            {
                //not initialized (e.g. due to exception in the ctor)
                return;
            }
            if (t == value_t::array || t == value_t::object)
            {
                // flatten the current json_value to a heap-allocated stack
                std::vector<basic_json> stack;

                // move the top-level items to stack
                if (t == value_t::array)
                {
                    stack.reserve(array->size());
                    std::move(array->begin(), array->end(), std::back_inserter(stack));
                }
                else
                {
                    stack.reserve(object->size());
                    for (auto&& it : *object)
                    {
                        stack.push_back(std::move(it.second));
                    }
                }

                while (!stack.empty())
                {
                    // move the last item to local variable to be processed
                    basic_json current_item(std::move(stack.back()));
                    stack.pop_back();

                    // if current_item is array/object, move
                    // its children to the stack to be processed later
                    if (current_item.is_array())
                    {
                        std::move(current_item.m_data.m_value.array->begin(), current_item.m_data.m_value.array->end(), std::back_inserter(stack));

                        current_item.m_data.m_value.array->clear();
                    }
                    else if (current_item.is_object())
                    {
                        for (auto&& it : *current_item.m_data.m_value.object)
                        {
                            stack.push_back(std::move(it.second));
                        }

                        current_item.m_data.m_value.object->clear();
                    }

                    // it's now safe that current_item get destructed
                    // since it doesn't have any children
                }
            }

            switch (t)
            {
                case value_t::object:
                {
                    AllocatorType<object_t> alloc;
                    std::allocator_traits<decltype(alloc)>::destroy(alloc, object);
                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, object, 1);
                    break;
                }

                case value_t::array:
                {
                    AllocatorType<array_t> alloc;
                    std::allocator_traits<decltype(alloc)>::destroy(alloc, array);
                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, array, 1);
                    break;
                }

                case value_t::string:
                {
                    AllocatorType<string_t> alloc;
                    std::allocator_traits<decltype(alloc)>::destroy(alloc, string);
                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, string, 1);
                    break;
                }

                case value_t::binary:
                {
                    AllocatorType<binary_t> alloc;
                    std::allocator_traits<decltype(alloc)>::destroy(alloc, binary);
                    std::allocator_traits<decltype(alloc)>::deallocate(alloc, binary, 1);
                    break;
                }

                case value_t::null:
                case value_t::boolean:
                case value_t::number_integer:
                case value_t::number_unsigned:
                case value_t::number_float:
                case value_t::discarded:
                default:
                {
                    break;
                }
            }
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x120, %rsp            # imm = 0x120
movb %sil, %al
movq %rdi, -0x8(%rbp)
movb %al, -0x9(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xd8(%rbp)
cmpb $0x1, -0x9(%rbp)
jne 0x6b73
movq -0xd8(%rbp), %rax
cmpq $0x0, (%rax)
je 0x6bac
cmpb $0x2, -0x9(%rbp)
jne 0x6b86
movq -0xd8(%rbp), %rax
cmpq $0x0, (%rax)
je 0x6bac
cmpb $0x3, -0x9(%rbp)
jne 0x6b99
movq -0xd8(%rbp), %rax
cmpq $0x0, (%rax)
je 0x6bac
cmpb $0x8, -0x9(%rbp)
jne 0x6bb1
movq -0xd8(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x6bb1
jmp 0x70a5
cmpb $0x2, -0x9(%rbp)
je 0x6bc1
cmpb $0x1, -0x9(%rbp)
jne 0x6eae
leaq -0x28(%rbp), %rdi
callq 0x70c0
cmpb $0x2, -0x9(%rbp)
jne 0x6c72
movq -0xd8(%rbp), %rax
movq (%rax), %rdi
callq 0x71e0
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x70e0
jmp 0x6bf1
movq -0xd8(%rbp), %rax
movq (%rax), %rdi
callq 0x7270
movq %rax, %rcx
movq -0xd8(%rbp), %rax
movq %rcx, -0x40(%rbp)
movq (%rax), %rdi
callq 0x72a0
movq %rax, -0x48(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x72d0
movq %rax, -0xe0(%rbp)
jmp 0x6c2c
movq -0xe0(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x40(%rbp), %rdi
movq -0x48(%rbp), %rsi
movq -0x50(%rbp), %rdx
callq 0x7200
movq %rax, -0xe8(%rbp)
jmp 0x6c51
movq -0xe8(%rbp), %rax
movq %rax, -0x58(%rbp)
jmp 0x6cf9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
jmp 0x6ea0
movq -0xd8(%rbp), %rax
movq (%rax), %rdi
callq 0x7300
movq %rax, %rsi
leaq -0x28(%rbp), %rdi
callq 0x70e0
jmp 0x6c8f
movq -0xd8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
callq 0x7320
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rdi
callq 0x7350
movq %rax, -0x70(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x7380
testb $0x1, %al
jne 0x6cca
jmp 0x6cf7
leaq -0x68(%rbp), %rdi
callq 0x73b0
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rsi
addq $0x20, %rsi
leaq -0x28(%rbp), %rdi
callq 0x73e0
jmp 0x6cea
jmp 0x6cec
leaq -0x68(%rbp), %rdi
callq 0x7410
jmp 0x6cb7
jmp 0x6cf9
jmp 0x6cfb
leaq -0x28(%rbp), %rdi
callq 0x7440
xorb $-0x1, %al
testb $0x1, %al
jne 0x6d0f
jmp 0x6e95
leaq -0x28(%rbp), %rdi
callq 0x7480
movq %rax, %rsi
leaq -0x88(%rbp), %rdi
callq 0x74c0
leaq -0x28(%rbp), %rdi
callq 0x7530
leaq -0x88(%rbp), %rdi
callq 0x7560
testb $0x1, %al
jne 0x6d45
jmp 0x6de1
movq -0x80(%rbp), %rdi
callq 0x7270
movq %rax, -0x90(%rbp)
movq -0x80(%rbp), %rdi
callq 0x72a0
movq %rax, -0x98(%rbp)
leaq -0x28(%rbp), %rdi
callq 0x72d0
movq %rax, -0xf0(%rbp)
jmp 0x6d77
movq -0xf0(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq -0x90(%rbp), %rdi
movq -0x98(%rbp), %rsi
movq -0xa0(%rbp), %rdx
callq 0x7200
movq %rax, -0xf8(%rbp)
jmp 0x6da8
movq -0xf8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x80(%rbp), %rdi
callq 0x7580
jmp 0x6e84
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0x88(%rbp), %rdi
callq 0x6680
jmp 0x6ea0
leaq -0x88(%rbp), %rdi
callq 0x75a0
testb $0x1, %al
jne 0x6df6
jmp 0x6e82
movq -0x80(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rdi
callq 0x7320
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
callq 0x7350
movq %rax, -0xc0(%rbp)
leaq -0xb8(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x7380
testb $0x1, %al
jne 0x6e40
jmp 0x6e79
leaq -0xb8(%rbp), %rdi
callq 0x73b0
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rsi
addq $0x20, %rsi
leaq -0x28(%rbp), %rdi
callq 0x73e0
jmp 0x6e69
jmp 0x6e6b
leaq -0xb8(%rbp), %rdi
callq 0x7410
jmp 0x6e27
movq -0x80(%rbp), %rdi
callq 0x75c0
jmp 0x6e84
leaq -0x88(%rbp), %rdi
callq 0x6680
jmp 0x6cfb
leaq -0x28(%rbp), %rdi
callq 0x75e0
jmp 0x6eae
leaq -0x28(%rbp), %rdi
callq 0x75e0
jmp 0x70ae
movzbl -0x9(%rbp), %eax
movq %rax, -0x100(%rbp)
subq $0x9, %rax
ja 0x70a3
movq -0x100(%rbp), %rax
leaq 0x20157(%rip), %rcx     # 0x27028
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq -0xc9(%rbp), %rdi
movq %rdi, -0x108(%rbp)
callq 0x7640
movq -0xd8(%rbp), %rax
movq -0x108(%rbp), %rdi
movq (%rax), %rsi
callq 0x7660
movq -0xd8(%rbp), %rax
movq -0x108(%rbp), %rdi
movq (%rax), %rsi
movl $0x1, %edx
callq 0x7690
jmp 0x6f20
leaq -0xc9(%rbp), %rdi
callq 0x76c0
jmp 0x70a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xc9(%rbp), %rdi
callq 0x76c0
jmp 0x70ae
leaq -0xca(%rbp), %rdi
movq %rdi, -0x110(%rbp)
callq 0x76e0
movq -0xd8(%rbp), %rax
movq -0x110(%rbp), %rdi
movq (%rax), %rsi
callq 0x7700
movq -0xd8(%rbp), %rax
movq -0x110(%rbp), %rdi
movq (%rax), %rsi
movl $0x1, %edx
callq 0x7730
jmp 0x6f94
leaq -0xca(%rbp), %rdi
callq 0x7760
jmp 0x70a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xca(%rbp), %rdi
callq 0x7760
jmp 0x70ae
leaq -0xcb(%rbp), %rdi
movq %rdi, -0x118(%rbp)
callq 0x7780
movq -0xd8(%rbp), %rax
movq -0x118(%rbp), %rdi
movq (%rax), %rsi
callq 0x77a0
movq -0xd8(%rbp), %rax
movq -0x118(%rbp), %rdi
movq (%rax), %rsi
movl $0x1, %edx
callq 0x77d0
jmp 0x7008
leaq -0xcb(%rbp), %rdi
callq 0x7800
jmp 0x70a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xcb(%rbp), %rdi
callq 0x7800
jmp 0x70ae
leaq -0xcc(%rbp), %rdi
movq %rdi, -0x120(%rbp)
callq 0x7820
movq -0xd8(%rbp), %rax
movq -0x120(%rbp), %rdi
movq (%rax), %rsi
callq 0x7840
movq -0xd8(%rbp), %rax
movq -0x120(%rbp), %rdi
movq (%rax), %rsi
movl $0x1, %edx
callq 0x7870
jmp 0x7079
leaq -0xcc(%rbp), %rdi
callq 0x78a0
jmp 0x70a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x30(%rbp)
movl %eax, -0x34(%rbp)
leaq -0xcc(%rbp), %rdi
callq 0x78a0
jmp 0x70ae
jmp 0x70a3
jmp 0x70a5
addq $0x120, %rsp            # imm = 0x120
popq %rbp
retq
movq -0x30(%rbp), %rdi
callq 0x4630
nopw (%rax,%rax)