_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12is_discardedEv:
32970|  10.9k|    {
32971|  10.9k|        return m_data.m_type == value_t::discarded;
32972|  10.9k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4dumpEicbNS0_6detail15error_handler_tE:
32842|  64.2k|    {
32843|  64.2k|        string_t result;
32844|  64.2k|        detail::output_string_adapter<char, string_t> string_adapter(result);
32845|       |
32846|  64.2k|        if (indent >= 0)
  ------------------
  |  Branch (32846:13): [True: 0, False: 64.2k]
  ------------------
32847|      0|        {
32848|      0|            serializer s(string_adapter, indent_char,
32849|      0|                         true, ensure_ascii, static_cast<std::size_t>(indent), error_handler);
32850|      0|            s.dump(*this);
32851|      0|        }
32852|  64.2k|        else
32853|  64.2k|        {
32854|  64.2k|            serializer s(string_adapter, indent_char,
32855|  64.2k|                         false, ensure_ascii, 0, error_handler);
32856|  64.2k|            s.dump(*this);
32857|  64.2k|        }
32858|       |
32859|  64.2k|        return result;
32860|  64.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail21output_string_adapterIcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEC2ERS9_:
22821|  64.2k|        : str(s)
22822|  64.2k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail23output_adapter_protocolIcEC2Ev:
22716|  64.2k|    output_adapter_protocol() = default;
_ZN8nlohmann16json_abi_v3_12_06detail23output_adapter_protocolIcED2Ev:
22714|  64.2k|    virtual ~output_adapter_protocol() = default;
_ZN8nlohmann16json_abi_v3_12_06detail21output_string_adapterIcNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE16write_charactersEPKcm:
22830|  66.4k|    {
22831|  66.4k|        str.append(s, length);
22832|  66.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEC2ERNS1_23output_adapter_protocolIcEEcbbmNS1_15error_handler_tE:
28044|  64.2k|        : o(&s)
28045|  64.2k|        , indent_char(ichar)
28046|  64.2k|        , pretty_print(pretty_print_)
28047|  64.2k|        , ensure_ascii(ensure_ascii_)
28048|  64.2k|        , indent_step(indent_step_)
28049|  64.2k|        , error_handler(error_handler_)
28050|  64.2k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE4dumpERKSG_m:
28079|  64.2k|    {
28080|  64.2k|        dump_internal(val, current_indent);
28081|  64.2k|        flush();
28082|  64.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE13dump_internalERKSG_mm:
28105|  1.11M|    {
28106|  1.11M|        switch (val.m_data.m_type)
28107|  1.11M|        {
28108|  68.5k|            case value_t::object:
  ------------------
  |  Branch (28108:13): [True: 68.5k, False: 1.04M]
  ------------------
28109|  68.5k|            {
28110|  68.5k|                if (JSON_HEDLEY_UNLIKELY(depth >= recursion_depth_limit()))
  ------------------
  |  | 1667|  68.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 4.28k, False: 64.2k]
  |  |  ------------------
  ------------------
28111|  4.28k|                {
28112|  4.28k|                    dump_iteratively(val, current_indent);
28113|  4.28k|                    return;
28114|  4.28k|                }
28115|       |
28116|  64.2k|                if (val.m_data.m_value.object->empty())
  ------------------
  |  Branch (28116:21): [True: 9.70k, False: 54.5k]
  ------------------
28117|  9.70k|                {
28118|  9.70k|                    put_literal("{}");
28119|  9.70k|                    return;
28120|  9.70k|                }
28121|       |
28122|  54.5k|                if (pretty_print)
  ------------------
  |  Branch (28122:21): [True: 0, False: 54.5k]
  ------------------
28123|      0|                {
28124|      0|                    put_literal("{\n");
28125|       |
28126|       |                    // variable to hold indentation for recursive calls
28127|      0|                    const auto new_indent = next_indent(current_indent, indent_step);
28128|       |
28129|       |                    // first n-1 elements
28130|      0|                    auto i = val.m_data.m_value.object->cbegin();
28131|      0|                    for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
  ------------------
  |  Branch (28131:47): [True: 0, False: 0]
  ------------------
28132|      0|                    {
28133|      0|                        put_indent(new_indent);
28134|      0|                        put_char('"');
28135|      0|                        dump_escaped(i->first);
28136|      0|                        put_literal("\": ");
28137|      0|                        dump_internal(i->second, new_indent, depth + 1);
28138|      0|                        put_literal(",\n");
28139|      0|                    }
28140|       |
28141|       |                    // last element
28142|      0|                    JSON_ASSERT(i != val.m_data.m_value.object->cend());
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28142:21): [True: 0, False: 0]
  ------------------
28143|      0|                    JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28143:21): [True: 0, False: 0]
  ------------------
28144|      0|                    put_indent(new_indent);
28145|      0|                    put_char('"');
28146|      0|                    dump_escaped(i->first);
28147|      0|                    put_literal("\": ");
28148|      0|                    dump_internal(i->second, new_indent, depth + 1);
28149|       |
28150|      0|                    put_char('\n');
28151|      0|                    put_indent(current_indent);
28152|      0|                    put_char('}');
28153|      0|                }
28154|  54.5k|                else
28155|  54.5k|                {
28156|  54.5k|                    put_char('{');
28157|       |
28158|       |                    // first n-1 elements
28159|  54.5k|                    auto i = val.m_data.m_value.object->cbegin();
28160|   153k|                    for (std::size_t cnt = 0; cnt < val.m_data.m_value.object->size() - 1; ++cnt, ++i)
  ------------------
  |  Branch (28160:47): [True: 99.0k, False: 54.5k]
  ------------------
28161|  99.0k|                    {
28162|  99.0k|                        put_char('"');
28163|  99.0k|                        dump_escaped(i->first);
28164|  99.0k|                        put_literal("\":");
28165|  99.0k|                        dump_internal(i->second, current_indent, depth + 1);
28166|  99.0k|                        put_char(',');
28167|  99.0k|                    }
28168|       |
28169|       |                    // last element
28170|  54.5k|                    JSON_ASSERT(i != val.m_data.m_value.object->cend());
  ------------------
  |  | 2591|  54.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28170:21): [True: 54.5k, False: 69]
  ------------------
28171|  54.5k|                    JSON_ASSERT(std::next(i) == val.m_data.m_value.object->cend());
  ------------------
  |  | 2591|  54.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28171:21): [True: 54.5k, False: 0]
  ------------------
28172|  54.5k|                    put_char('"');
28173|  54.5k|                    dump_escaped(i->first);
28174|  54.5k|                    put_literal("\":");
28175|  54.5k|                    dump_internal(i->second, current_indent, depth + 1);
28176|       |
28177|  54.5k|                    put_char('}');
28178|  54.5k|                }
28179|       |
28180|  54.5k|                return;
28181|  54.5k|            }
28182|       |
28183|   400k|            case value_t::array:
  ------------------
  |  Branch (28183:13): [True: 400k, False: 717k]
  ------------------
28184|   400k|            {
28185|   400k|                if (JSON_HEDLEY_UNLIKELY(depth >= recursion_depth_limit()))
  ------------------
  |  | 1667|   400k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 2.77k, False: 397k]
  |  |  ------------------
  ------------------
28186|  2.77k|                {
28187|  2.77k|                    dump_iteratively(val, current_indent);
28188|  2.77k|                    return;
28189|  2.77k|                }
28190|       |
28191|   397k|                if (val.m_data.m_value.array->empty())
  ------------------
  |  Branch (28191:21): [True: 10.2k, False: 387k]
  ------------------
28192|  10.2k|                {
28193|  10.2k|                    put_literal("[]");
28194|  10.2k|                    return;
28195|  10.2k|                }
28196|       |
28197|   387k|                if (pretty_print)
  ------------------
  |  Branch (28197:21): [True: 0, False: 387k]
  ------------------
28198|      0|                {
28199|      0|                    put_literal("[\n");
28200|       |
28201|       |                    // variable to hold indentation for recursive calls
28202|      0|                    const auto new_indent = next_indent(current_indent, indent_step);
28203|       |
28204|       |                    // first n-1 elements
28205|      0|                    for (auto i = val.m_data.m_value.array->cbegin();
28206|      0|                            i != val.m_data.m_value.array->cend() - 1; ++i)
  ------------------
  |  Branch (28206:29): [True: 0, False: 0]
  ------------------
28207|      0|                    {
28208|      0|                        put_indent(new_indent);
28209|      0|                        dump_internal(*i, new_indent, depth + 1);
28210|      0|                        put_literal(",\n");
28211|      0|                    }
28212|       |
28213|       |                    // last element
28214|      0|                    JSON_ASSERT(!val.m_data.m_value.array->empty());
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28214:21): [True: 0, False: 0]
  ------------------
28215|      0|                    put_indent(new_indent);
28216|      0|                    dump_internal(val.m_data.m_value.array->back(), new_indent, depth + 1);
28217|       |
28218|      0|                    put_char('\n');
28219|      0|                    put_indent(current_indent);
28220|      0|                    put_char(']');
28221|      0|                }
28222|   387k|                else
28223|   387k|                {
28224|   387k|                    put_char('[');
28225|       |
28226|       |                    // first n-1 elements
28227|   387k|                    for (auto i = val.m_data.m_value.array->cbegin();
28228|   901k|                            i != val.m_data.m_value.array->cend() - 1; ++i)
  ------------------
  |  Branch (28228:29): [True: 513k, False: 387k]
  ------------------
28229|   513k|                    {
28230|   513k|                        dump_internal(*i, current_indent, depth + 1);
28231|   513k|                        put_char(',');
28232|   513k|                    }
28233|       |
28234|       |                    // last element
28235|   387k|                    JSON_ASSERT(!val.m_data.m_value.array->empty());
  ------------------
  |  | 2591|   387k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28235:21): [True: 387k, False: 310]
  ------------------
28236|   387k|                    dump_internal(val.m_data.m_value.array->back(), current_indent, depth + 1);
28237|       |
28238|   387k|                    put_char(']');
28239|   387k|                }
28240|       |
28241|   387k|                return;
28242|   387k|            }
28243|       |
28244|   387k|            case value_t::string:
  ------------------
  |  Branch (28244:13): [True: 85.3k, False: 1.03M]
  ------------------
28245|  92.1k|            case value_t::binary:
  ------------------
  |  Branch (28245:13): [True: 6.81k, False: 1.11M]
  ------------------
28246|   193k|            case value_t::boolean:
  ------------------
  |  Branch (28246:13): [True: 101k, False: 1.01M]
  ------------------
28247|   290k|            case value_t::number_integer:
  ------------------
  |  Branch (28247:13): [True: 96.9k, False: 1.02M]
  ------------------
28248|   433k|            case value_t::number_unsigned:
  ------------------
  |  Branch (28248:13): [True: 142k, False: 975k]
  ------------------
28249|   586k|            case value_t::number_float:
  ------------------
  |  Branch (28249:13): [True: 153k, False: 965k]
  ------------------
28250|   586k|            case value_t::discarded:
  ------------------
  |  Branch (28250:13): [True: 0, False: 1.11M]
  ------------------
28251|   649k|            case value_t::null:
  ------------------
  |  Branch (28251:13): [True: 63.1k, False: 1.05M]
  ------------------
28252|   649k|            default:
  ------------------
  |  Branch (28252:13): [True: 0, False: 1.11M]
  ------------------
28253|   649k|                dump_scalar(val, current_indent);
28254|   649k|                return;
28255|  1.11M|        }
28256|  1.11M|    }
_ZN8nlohmann16json_abi_v3_12_06detail21recursion_depth_limitEv:
 8044|  1.65M|{
 8045|  1.65M|    return 128;
 8046|  1.65M|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE16dump_iterativelyERKSG_m:
28270|  7.06k|    {
28271|       |        // Scalars, empty containers and binary values are written by dump_value
28272|       |        // alone, so nothing is allocated for them: only a container with
28273|       |        // elements is ever pushed.
28274|  7.06k|        std::vector<dump_frame> stack;
28275|       |
28276|  7.06k|        dump_value(val, current_indent, stack);
28277|       |
28278|  42.6k|        while (!stack.empty())
  ------------------
  |  Branch (28278:16): [True: 35.5k, False: 7.06k]
  ------------------
28279|  35.5k|        {
28280|  35.5k|            dump_frame& frame = stack.back();
28281|       |
28282|  35.5k|            if (frame.value->m_data.m_type == value_t::object)
  ------------------
  |  Branch (28282:17): [True: 9.43k, False: 26.1k]
  ------------------
28283|  9.43k|            {
28284|  9.43k|                const auto* object = frame.value->m_data.m_value.object;
28285|       |
28286|  9.43k|                if (frame.object_it == object->cend())
  ------------------
  |  Branch (28286:21): [True: 3.22k, False: 6.20k]
  ------------------
28287|  3.22k|                {
28288|  3.22k|                    if (pretty_print)
  ------------------
  |  Branch (28288:25): [True: 0, False: 3.22k]
  ------------------
28289|      0|                    {
28290|      0|                        put_char('\n');
28291|      0|                        put_indent(frame.current_indent);
28292|      0|                    }
28293|       |
28294|  3.22k|                    put_char('}');
28295|  3.22k|                    stack.pop_back();
28296|  3.22k|                    continue;
28297|  3.22k|                }
28298|       |
28299|       |                // the separator goes in front of every element but the first,
28300|       |                // which puts exactly one between each pair and none at the end
28301|  6.20k|                if (frame.object_it != object->cbegin())
  ------------------
  |  Branch (28301:21): [True: 2.94k, False: 3.26k]
  ------------------
28302|  2.94k|                {
28303|  2.94k|                    if (pretty_print)
  ------------------
  |  Branch (28303:25): [True: 0, False: 2.94k]
  ------------------
28304|      0|                    {
28305|      0|                        put_literal(",\n");
28306|      0|                    }
28307|  2.94k|                    else
28308|  2.94k|                    {
28309|  2.94k|                        put_char(',');
28310|  2.94k|                    }
28311|  2.94k|                }
28312|       |
28313|  6.20k|                if (pretty_print)
  ------------------
  |  Branch (28313:21): [True: 0, False: 6.20k]
  ------------------
28314|      0|                {
28315|      0|                    put_indent(frame.child_indent);
28316|      0|                }
28317|       |
28318|  6.20k|                put_char('"');
28319|  6.20k|                dump_escaped(frame.object_it->first);
28320|       |
28321|  6.20k|                if (pretty_print)
  ------------------
  |  Branch (28321:21): [True: 0, False: 6.20k]
  ------------------
28322|      0|                {
28323|      0|                    put_literal("\": ");
28324|      0|                }
28325|  6.20k|                else
28326|  6.20k|                {
28327|  6.20k|                    put_literal("\":");
28328|  6.20k|                }
28329|       |
28330|  6.20k|                const BasicJsonType& element = frame.object_it->second;
28331|  6.20k|                ++frame.object_it;
28332|       |
28333|       |                // read everything needed from the frame before this: entering a
28334|       |                // container pushes another one and can move them all
28335|  6.20k|                const std::size_t element_indent = frame.child_indent;
28336|  6.20k|                dump_value(element, element_indent, stack);
28337|  6.20k|            }
28338|  26.1k|            else
28339|  26.1k|            {
28340|  26.1k|                const auto* array = frame.value->m_data.m_value.array;
28341|       |
28342|  26.1k|                if (frame.array_it == array->cend())
  ------------------
  |  Branch (28342:21): [True: 8.52k, False: 17.5k]
  ------------------
28343|  8.52k|                {
28344|  8.52k|                    if (pretty_print)
  ------------------
  |  Branch (28344:25): [True: 0, False: 8.52k]
  ------------------
28345|      0|                    {
28346|      0|                        put_char('\n');
28347|      0|                        put_indent(frame.current_indent);
28348|      0|                    }
28349|       |
28350|  8.52k|                    put_char(']');
28351|  8.52k|                    stack.pop_back();
28352|  8.52k|                    continue;
28353|  8.52k|                }
28354|       |
28355|  17.5k|                if (frame.array_it != array->cbegin())
  ------------------
  |  Branch (28355:21): [True: 8.98k, False: 8.59k]
  ------------------
28356|  8.98k|                {
28357|  8.98k|                    if (pretty_print)
  ------------------
  |  Branch (28357:25): [True: 0, False: 8.98k]
  ------------------
28358|      0|                    {
28359|      0|                        put_literal(",\n");
28360|      0|                    }
28361|  8.98k|                    else
28362|  8.98k|                    {
28363|  8.98k|                        put_char(',');
28364|  8.98k|                    }
28365|  8.98k|                }
28366|       |
28367|  17.5k|                if (pretty_print)
  ------------------
  |  Branch (28367:21): [True: 0, False: 17.5k]
  ------------------
28368|      0|                {
28369|      0|                    put_indent(frame.child_indent);
28370|      0|                }
28371|       |
28372|  17.5k|                const BasicJsonType& element = *frame.array_it;
28373|  17.5k|                ++frame.array_it;
28374|       |
28375|       |                // see above
28376|  17.5k|                const std::size_t element_indent = frame.child_indent;
28377|  17.5k|                dump_value(element, element_indent, stack);
28378|  17.5k|            }
28379|  35.5k|        }
28380|  7.06k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10dump_valueERKSG_mRNS6_INSH_10dump_frameENSA_ISK_EEEE:
28418|  30.8k|    {
28419|  30.8k|        switch (val.m_data.m_type)
28420|  30.8k|        {
28421|  5.85k|            case value_t::object:
  ------------------
  |  Branch (28421:13): [True: 5.85k, False: 24.9k]
  ------------------
28422|  5.85k|            {
28423|  5.85k|                if (val.m_data.m_value.object->empty())
  ------------------
  |  Branch (28423:21): [True: 2.58k, False: 3.26k]
  ------------------
28424|  2.58k|                {
28425|  2.58k|                    put_literal("{}");
28426|  2.58k|                    return;
28427|  2.58k|                }
28428|       |
28429|  3.26k|                std::size_t child_indent = current_indent;
28430|       |
28431|  3.26k|                if (pretty_print)
  ------------------
  |  Branch (28431:21): [True: 0, False: 3.26k]
  ------------------
28432|      0|                {
28433|      0|                    put_literal("{\n");
28434|      0|                    child_indent = next_indent(current_indent, indent_step);
28435|      0|                }
28436|  3.26k|                else
28437|  3.26k|                {
28438|  3.26k|                    put_char('{');
28439|  3.26k|                }
28440|       |
28441|  3.26k|                stack.emplace_back(&val, current_indent, child_indent);
28442|  3.26k|                stack.back().object_it = val.m_data.m_value.object->cbegin();
28443|  3.26k|                return;
28444|  5.85k|            }
28445|       |
28446|  10.1k|            case value_t::array:
  ------------------
  |  Branch (28446:13): [True: 10.1k, False: 20.6k]
  ------------------
28447|  10.1k|            {
28448|  10.1k|                if (val.m_data.m_value.array->empty())
  ------------------
  |  Branch (28448:21): [True: 1.54k, False: 8.59k]
  ------------------
28449|  1.54k|                {
28450|  1.54k|                    put_literal("[]");
28451|  1.54k|                    return;
28452|  1.54k|                }
28453|       |
28454|  8.59k|                std::size_t child_indent = current_indent;
28455|       |
28456|  8.59k|                if (pretty_print)
  ------------------
  |  Branch (28456:21): [True: 0, False: 8.59k]
  ------------------
28457|      0|                {
28458|      0|                    put_literal("[\n");
28459|      0|                    child_indent = next_indent(current_indent, indent_step);
28460|      0|                }
28461|  8.59k|                else
28462|  8.59k|                {
28463|  8.59k|                    put_char('[');
28464|  8.59k|                }
28465|       |
28466|  8.59k|                stack.emplace_back(&val, current_indent, child_indent);
28467|  8.59k|                stack.back().array_it = val.m_data.m_value.array->cbegin();
28468|  8.59k|                return;
28469|  10.1k|            }
28470|       |
28471|    811|            case value_t::string:
  ------------------
  |  Branch (28471:13): [True: 811, False: 30.0k]
  ------------------
28472|    901|            case value_t::binary:
  ------------------
  |  Branch (28472:13): [True: 90, False: 30.7k]
  ------------------
28473|  5.43k|            case value_t::boolean:
  ------------------
  |  Branch (28473:13): [True: 4.53k, False: 26.2k]
  ------------------
28474|  6.68k|            case value_t::number_integer:
  ------------------
  |  Branch (28474:13): [True: 1.25k, False: 29.5k]
  ------------------
28475|  8.54k|            case value_t::number_unsigned:
  ------------------
  |  Branch (28475:13): [True: 1.85k, False: 28.9k]
  ------------------
28476|  12.9k|            case value_t::number_float:
  ------------------
  |  Branch (28476:13): [True: 4.42k, False: 26.3k]
  ------------------
28477|  12.9k|            case value_t::discarded:
  ------------------
  |  Branch (28477:13): [True: 0, False: 30.8k]
  ------------------
28478|  14.8k|            case value_t::null:
  ------------------
  |  Branch (28478:13): [True: 1.85k, False: 28.9k]
  ------------------
28479|  14.8k|            default:
  ------------------
  |  Branch (28479:13): [True: 0, False: 30.8k]
  ------------------
28480|  14.8k|                dump_scalar(val, current_indent);
28481|  14.8k|                return;
28482|  30.8k|        }
28483|  30.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10dump_frameC2EPKSG_mm:
28388|  11.8k|            : value(value_)
28389|  11.8k|            , current_indent(current_indent_)
28390|  11.8k|            , child_indent(child_indent_)
28391|  11.8k|        {}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm3EEEvRAT__Kc:
29090|   183k|    {
29091|   183k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
29092|       |        // the array bound counts the terminating NUL, which is not written
29093|   183k|        constexpr std::size_t length = N - 1;
29094|   183k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
29095|       |
29096|   183k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1667|   183k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 196, False: 183k]
  |  |  ------------------
  ------------------
29097|    196|        {
29098|    196|            flush();
29099|    196|        }
29100|   183k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
29101|   183k|        write_buffer_pos += length;
29102|   183k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE8put_charEc:
29019|  1.88M|    {
29020|  1.88M|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos == write_buffer.size()))
  ------------------
  |  | 1667|  1.88M|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 621, False: 1.88M]
  |  |  ------------------
  ------------------
29021|    621|        {
29022|    621|            flush();
29023|    621|        }
29024|  1.88M|        write_buffer[write_buffer_pos++] = c;
29025|  1.88M|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12dump_escapedERKSC_:
28657|   245k|    {
28658|       |        // dispatch once here rather than test the flag inside the loop: it does
28659|       |        // not change while a string is written, and folding it lets each of the
28660|       |        // two scanners be inlined into a loop of its own
28661|   245k|        if (ensure_ascii)
  ------------------
  |  Branch (28661:13): [True: 0, False: 245k]
  ------------------
28662|      0|        {
28663|      0|            dump_escaped_impl<true>(s);
28664|      0|        }
28665|   245k|        else
28666|   245k|        {
28667|   245k|            dump_escaped_impl<false>(s);
28668|   245k|        }
28669|   245k|    }
_ZN8nlohmann16json_abi_v3_12_06detail16read_eight_bytesEPKh:
 9376|   230k|{
 9377|   230k|#if defined(_MSC_VER) || defined(__x86_64__) || defined(__i386__) || (defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
 9378|       |    // the byte order already matches (all MSVC targets are little-endian)
 9379|   230k|    std::uint64_t result = 0;
 9380|   230k|    std::memcpy(&result, b, sizeof(result));
 9381|   230k|    return result;
 9382|       |#else
 9383|       |    return static_cast<std::uint64_t>(b[0]) | (static_cast<std::uint64_t>(b[1]) << 8u)
 9384|       |           | (static_cast<std::uint64_t>(b[2]) << 16u) | (static_cast<std::uint64_t>(b[3]) << 24u)
 9385|       |           | (static_cast<std::uint64_t>(b[4]) << 32u) | (static_cast<std::uint64_t>(b[5]) << 40u)
 9386|       |           | (static_cast<std::uint64_t>(b[6]) << 48u) | (static_cast<std::uint64_t>(b[7]) << 56u);
 9387|       |#endif
 9388|   230k|}
_ZN8nlohmann16json_abi_v3_12_06detail20count_trailing_zerosEm:
 9319|   114k|{
 9320|   114k|#if defined(__GNUC__) || defined(__clang__)
 9321|   114k|    return __builtin_ctzll(x);
 9322|       |#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64))
 9323|       |    unsigned long index = 0; // NOLINT(runtime/int): the type _BitScan*64 takes
 9324|       |    _BitScanForward64(&index, x);
 9325|       |    return static_cast<int>(index);
 9326|       |#else
 9327|       |    int n = 0;
 9328|       |    for (int shift = 32; shift != 0; shift >>= 1)
 9329|       |    {
 9330|       |        if ((x << (64 - shift)) == 0)
 9331|       |        {
 9332|       |            n += shift;
 9333|       |            x >>= shift;
 9334|       |        }
 9335|       |    }
 9336|       |    return n;
 9337|       |#endif
 9338|   114k|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10put_bufferILm512EEEvRKNS4_5arrayIcXT_EEEm:
29141|  17.0k|    {
29142|  17.0k|        put_string(buffer, 0, length);
29143|  17.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10put_stringINS4_5arrayIcLm512EEEEEvRKT_mm:
29115|  17.0k|    {
29116|  17.0k|        JSON_ASSERT(start <= end);
  ------------------
  |  | 2591|  17.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29116:9): [True: 17.0k, False: 0]
  ------------------
29117|  17.0k|        JSON_ASSERT(end <= str.size());
  ------------------
  |  | 2591|  17.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29117:9): [True: 17.0k, False: 0]
  ------------------
29118|       |
29119|  17.0k|        const char* const s = str.data() + start;
29120|  17.0k|        const std::size_t length = end - start;
29121|       |
29122|  17.0k|        if (JSON_HEDLEY_UNLIKELY(length >= write_buffer.size()))
  ------------------
  |  | 1667|  17.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 17.0k]
  |  |  ------------------
  ------------------
29123|      0|        {
29124|      0|            flush();
29125|      0|            o->write_characters(s, length);
29126|      0|            return;
29127|      0|        }
29128|  17.0k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1667|  17.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 12, False: 17.0k]
  |  |  ------------------
  ------------------
29129|     12|        {
29130|     12|            flush();
29131|     12|        }
29132|  17.0k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
29133|  17.0k|        write_buffer_pos += length;
29134|  17.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10put_stringISC_EEvRKT_mm:
29115|   211k|    {
29116|   211k|        JSON_ASSERT(start <= end);
  ------------------
  |  | 2591|   211k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29116:9): [True: 211k, False: 0]
  ------------------
29117|   211k|        JSON_ASSERT(end <= str.size());
  ------------------
  |  | 2591|   211k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29117:9): [True: 211k, False: 0]
  ------------------
29118|       |
29119|   211k|        const char* const s = str.data() + start;
29120|   211k|        const std::size_t length = end - start;
29121|       |
29122|   211k|        if (JSON_HEDLEY_UNLIKELY(length >= write_buffer.size()))
  ------------------
  |  | 1667|   211k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 211k]
  |  |  ------------------
  ------------------
29123|      0|        {
29124|      0|            flush();
29125|      0|            o->write_characters(s, length);
29126|      0|            return;
29127|      0|        }
29128|   211k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1667|   211k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 63, False: 211k]
  |  |  ------------------
  ------------------
29129|     63|        {
29130|     63|            flush();
29131|     63|        }
29132|   211k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
29133|   211k|        write_buffer_pos += length;
29134|   211k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE13ascii_escapesEv:
29208|   102k|    {
29209|   102k|        static const std::array<std::array<char, 8>, 0x60> escapes =
29210|   102k|        {
29211|   102k|            {
29212|   102k|                {{'\\', 'u', '0', '0', '0', '0', 0, 6}}, // 0x00
29213|   102k|                {{'\\', 'u', '0', '0', '0', '1', 0, 6}}, // 0x01
29214|   102k|                {{'\\', 'u', '0', '0', '0', '2', 0, 6}}, // 0x02
29215|   102k|                {{'\\', 'u', '0', '0', '0', '3', 0, 6}}, // 0x03
29216|   102k|                {{'\\', 'u', '0', '0', '0', '4', 0, 6}}, // 0x04
29217|   102k|                {{'\\', 'u', '0', '0', '0', '5', 0, 6}}, // 0x05
29218|   102k|                {{'\\', 'u', '0', '0', '0', '6', 0, 6}}, // 0x06
29219|   102k|                {{'\\', 'u', '0', '0', '0', '7', 0, 6}}, // 0x07
29220|   102k|                {{'\\', 'b', 0, 0, 0, 0, 0, 2}}, // 0x08
29221|   102k|                {{'\\', 't', 0, 0, 0, 0, 0, 2}}, // 0x09
29222|   102k|                {{'\\', 'n', 0, 0, 0, 0, 0, 2}}, // 0x0A
29223|   102k|                {{'\\', 'u', '0', '0', '0', 'b', 0, 6}}, // 0x0B
29224|   102k|                {{'\\', 'f', 0, 0, 0, 0, 0, 2}}, // 0x0C
29225|   102k|                {{'\\', 'r', 0, 0, 0, 0, 0, 2}}, // 0x0D
29226|   102k|                {{'\\', 'u', '0', '0', '0', 'e', 0, 6}}, // 0x0E
29227|   102k|                {{'\\', 'u', '0', '0', '0', 'f', 0, 6}}, // 0x0F
29228|   102k|                {{'\\', 'u', '0', '0', '1', '0', 0, 6}}, // 0x10
29229|   102k|                {{'\\', 'u', '0', '0', '1', '1', 0, 6}}, // 0x11
29230|   102k|                {{'\\', 'u', '0', '0', '1', '2', 0, 6}}, // 0x12
29231|   102k|                {{'\\', 'u', '0', '0', '1', '3', 0, 6}}, // 0x13
29232|   102k|                {{'\\', 'u', '0', '0', '1', '4', 0, 6}}, // 0x14
29233|   102k|                {{'\\', 'u', '0', '0', '1', '5', 0, 6}}, // 0x15
29234|   102k|                {{'\\', 'u', '0', '0', '1', '6', 0, 6}}, // 0x16
29235|   102k|                {{'\\', 'u', '0', '0', '1', '7', 0, 6}}, // 0x17
29236|   102k|                {{'\\', 'u', '0', '0', '1', '8', 0, 6}}, // 0x18
29237|   102k|                {{'\\', 'u', '0', '0', '1', '9', 0, 6}}, // 0x19
29238|   102k|                {{'\\', 'u', '0', '0', '1', 'a', 0, 6}}, // 0x1A
29239|   102k|                {{'\\', 'u', '0', '0', '1', 'b', 0, 6}}, // 0x1B
29240|   102k|                {{'\\', 'u', '0', '0', '1', 'c', 0, 6}}, // 0x1C
29241|   102k|                {{'\\', 'u', '0', '0', '1', 'd', 0, 6}}, // 0x1D
29242|   102k|                {{'\\', 'u', '0', '0', '1', 'e', 0, 6}}, // 0x1E
29243|   102k|                {{'\\', 'u', '0', '0', '1', 'f', 0, 6}}, // 0x1F
29244|   102k|                {{' ', 0, 0, 0, 0, 0, 0, 1}}, // 0x20
29245|   102k|                {{'!', 0, 0, 0, 0, 0, 0, 1}}, // 0x21
29246|   102k|                {{'\\', '"', 0, 0, 0, 0, 0, 2}}, // 0x22
29247|   102k|                {{'#', 0, 0, 0, 0, 0, 0, 1}}, // 0x23
29248|   102k|                {{'$', 0, 0, 0, 0, 0, 0, 1}}, // 0x24
29249|   102k|                {{'%', 0, 0, 0, 0, 0, 0, 1}}, // 0x25
29250|   102k|                {{'&', 0, 0, 0, 0, 0, 0, 1}}, // 0x26
29251|   102k|                {{'\'', 0, 0, 0, 0, 0, 0, 1}}, // 0x27
29252|   102k|                {{'(', 0, 0, 0, 0, 0, 0, 1}}, // 0x28
29253|   102k|                {{')', 0, 0, 0, 0, 0, 0, 1}}, // 0x29
29254|   102k|                {{'*', 0, 0, 0, 0, 0, 0, 1}}, // 0x2A
29255|   102k|                {{'+', 0, 0, 0, 0, 0, 0, 1}}, // 0x2B
29256|   102k|                {{',', 0, 0, 0, 0, 0, 0, 1}}, // 0x2C
29257|   102k|                {{'-', 0, 0, 0, 0, 0, 0, 1}}, // 0x2D
29258|   102k|                {{'.', 0, 0, 0, 0, 0, 0, 1}}, // 0x2E
29259|   102k|                {{'/', 0, 0, 0, 0, 0, 0, 1}}, // 0x2F
29260|   102k|                {{'0', 0, 0, 0, 0, 0, 0, 1}}, // 0x30
29261|   102k|                {{'1', 0, 0, 0, 0, 0, 0, 1}}, // 0x31
29262|   102k|                {{'2', 0, 0, 0, 0, 0, 0, 1}}, // 0x32
29263|   102k|                {{'3', 0, 0, 0, 0, 0, 0, 1}}, // 0x33
29264|   102k|                {{'4', 0, 0, 0, 0, 0, 0, 1}}, // 0x34
29265|   102k|                {{'5', 0, 0, 0, 0, 0, 0, 1}}, // 0x35
29266|   102k|                {{'6', 0, 0, 0, 0, 0, 0, 1}}, // 0x36
29267|   102k|                {{'7', 0, 0, 0, 0, 0, 0, 1}}, // 0x37
29268|   102k|                {{'8', 0, 0, 0, 0, 0, 0, 1}}, // 0x38
29269|   102k|                {{'9', 0, 0, 0, 0, 0, 0, 1}}, // 0x39
29270|   102k|                {{':', 0, 0, 0, 0, 0, 0, 1}}, // 0x3A
29271|   102k|                {{';', 0, 0, 0, 0, 0, 0, 1}}, // 0x3B
29272|   102k|                {{'<', 0, 0, 0, 0, 0, 0, 1}}, // 0x3C
29273|   102k|                {{'=', 0, 0, 0, 0, 0, 0, 1}}, // 0x3D
29274|   102k|                {{'>', 0, 0, 0, 0, 0, 0, 1}}, // 0x3E
29275|   102k|                {{'?', 0, 0, 0, 0, 0, 0, 1}}, // 0x3F
29276|   102k|                {{'@', 0, 0, 0, 0, 0, 0, 1}}, // 0x40
29277|   102k|                {{'A', 0, 0, 0, 0, 0, 0, 1}}, // 0x41
29278|   102k|                {{'B', 0, 0, 0, 0, 0, 0, 1}}, // 0x42
29279|   102k|                {{'C', 0, 0, 0, 0, 0, 0, 1}}, // 0x43
29280|   102k|                {{'D', 0, 0, 0, 0, 0, 0, 1}}, // 0x44
29281|   102k|                {{'E', 0, 0, 0, 0, 0, 0, 1}}, // 0x45
29282|   102k|                {{'F', 0, 0, 0, 0, 0, 0, 1}}, // 0x46
29283|   102k|                {{'G', 0, 0, 0, 0, 0, 0, 1}}, // 0x47
29284|   102k|                {{'H', 0, 0, 0, 0, 0, 0, 1}}, // 0x48
29285|   102k|                {{'I', 0, 0, 0, 0, 0, 0, 1}}, // 0x49
29286|   102k|                {{'J', 0, 0, 0, 0, 0, 0, 1}}, // 0x4A
29287|   102k|                {{'K', 0, 0, 0, 0, 0, 0, 1}}, // 0x4B
29288|   102k|                {{'L', 0, 0, 0, 0, 0, 0, 1}}, // 0x4C
29289|   102k|                {{'M', 0, 0, 0, 0, 0, 0, 1}}, // 0x4D
29290|   102k|                {{'N', 0, 0, 0, 0, 0, 0, 1}}, // 0x4E
29291|   102k|                {{'O', 0, 0, 0, 0, 0, 0, 1}}, // 0x4F
29292|   102k|                {{'P', 0, 0, 0, 0, 0, 0, 1}}, // 0x50
29293|   102k|                {{'Q', 0, 0, 0, 0, 0, 0, 1}}, // 0x51
29294|   102k|                {{'R', 0, 0, 0, 0, 0, 0, 1}}, // 0x52
29295|   102k|                {{'S', 0, 0, 0, 0, 0, 0, 1}}, // 0x53
29296|   102k|                {{'T', 0, 0, 0, 0, 0, 0, 1}}, // 0x54
29297|   102k|                {{'U', 0, 0, 0, 0, 0, 0, 1}}, // 0x55
29298|   102k|                {{'V', 0, 0, 0, 0, 0, 0, 1}}, // 0x56
29299|   102k|                {{'W', 0, 0, 0, 0, 0, 0, 1}}, // 0x57
29300|   102k|                {{'X', 0, 0, 0, 0, 0, 0, 1}}, // 0x58
29301|   102k|                {{'Y', 0, 0, 0, 0, 0, 0, 1}}, // 0x59
29302|   102k|                {{'Z', 0, 0, 0, 0, 0, 0, 1}}, // 0x5A
29303|   102k|                {{'[', 0, 0, 0, 0, 0, 0, 1}}, // 0x5B
29304|   102k|                {{'\\', '\\', 0, 0, 0, 0, 0, 2}}, // 0x5C
29305|   102k|                {{']', 0, 0, 0, 0, 0, 0, 1}}, // 0x5D
29306|   102k|                {{'^', 0, 0, 0, 0, 0, 0, 1}}, // 0x5E
29307|   102k|                {{'_', 0, 0, 0, 0, 0, 0, 1}}, // 0x5F
29308|   102k|            }
29309|   102k|        };
29310|   102k|        return escapes;
29311|   102k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6decodeERhRjh:
 6798|   108k|{
 6799|   108k|    static const std::array<std::uint8_t, 400> utf8d =
 6800|   108k|    {
 6801|   108k|        {
 6802|   108k|            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 00..1F
 6803|   108k|            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 20..3F
 6804|   108k|            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 40..5F
 6805|   108k|            0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 60..7F
 6806|   108k|            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, // 80..9F
 6807|   108k|            7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, // A0..BF
 6808|   108k|            8, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // C0..DF
 6809|   108k|            0xA, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x3, 0x4, 0x3, 0x3, // E0..EF
 6810|   108k|            0xB, 0x6, 0x6, 0x6, 0x5, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, 0x8, // F0..FF
 6811|   108k|            0x0, 0x1, 0x2, 0x3, 0x5, 0x8, 0x7, 0x1, 0x1, 0x1, 0x4, 0x6, 0x1, 0x1, 0x1, 0x1, // s0..s0
 6812|   108k|            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, // s1..s2
 6813|   108k|            1, 2, 1, 1, 1, 1, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, // s3..s4
 6814|   108k|            1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, // s5..s6
 6815|   108k|            1, 3, 1, 1, 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 // s7..s8
 6816|   108k|        }
 6817|   108k|    };
 6818|       |
 6819|   108k|    JSON_ASSERT(static_cast<std::size_t>(byte) < utf8d.size());
  ------------------
  |  | 2591|   108k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (6819:5): [True: 108k, False: 0]
  ------------------
 6820|   108k|    const std::uint8_t type = utf8d[byte];
 6821|       |
 6822|   108k|    codep = (state != UTF8_ACCEPT)
  ------------------
  |  Branch (6822:13): [True: 45.8k, False: 62.7k]
  ------------------
 6823|   108k|            ? (byte & 0x3fu) | (codep << 6u)
 6824|   108k|            : (0xFFu >> type) & (byte);
 6825|       |
 6826|   108k|    const std::size_t index = 256u + (static_cast<std::size_t>(state) * 16u) + static_cast<std::size_t>(type);
 6827|   108k|    JSON_ASSERT(index < utf8d.size());
  ------------------
  |  | 2591|   108k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (6827:5): [True: 108k, False: 0]
  ------------------
 6828|   108k|    state = utf8d[index];
 6829|   108k|    return state;
 6830|   108k|}
_ZN8nlohmann16json_abi_v3_12_06detail10type_error6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_NS1_12exception_idERKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5649|    865|    {
 5650|    865|        return create(static_cast<int>(id_), what_arg, context);
 5651|    865|    }
_ZN8nlohmann16json_abi_v3_12_06detail10type_error6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_iRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5642|    865|    {
 5643|    865|        const std::string w = concat(exception::name("type_error", id_), exception::diagnostics(context), what_arg);
 5644|    865|        return {id_, w.c_str()};
 5645|    865|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJS9_S9_RKS9_EEET_DpOT0_:
 5318|  2.97k|{
 5319|  2.97k|    OutStringType str;
 5320|  2.97k|    str.reserve(concat_length(args...));
 5321|  2.97k|    concat_into(str, std::forward<Args>(args)...);
 5322|  2.97k|    return str;
 5323|  2.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJS9_S9_EEEmRKT_DpRKT0_:
 5228|  2.97k|{
 5229|  2.97k|    return str.size() + concat_length(rest...);
 5230|  2.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJS9_EEEmRKT_DpRKT0_:
 5228|  32.0k|{
 5229|  32.0k|    return str.size() + concat_length(rest...);
 5230|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJEEEmRKT_DpRKT0_:
 5228|   107k|{
 5229|   107k|    return str.size() + concat_length(rest...);
 5230|   107k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthEv:
 5204|   139k|{
 5205|   139k|    return 0;
 5206|   139k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JS9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSD_OSE_DpOT1_:
 5281|  2.97k|{
 5282|  2.97k|    out.append(std::forward<Arg>(arg));
 5283|  2.97k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  2.97k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSD_OSE_DpOT1_:
 5281|  32.0k|{
 5282|  32.0k|    out.append(std::forward<Arg>(arg));
 5283|  32.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSD_OSE_DpOT1_:
 5281|  61.5k|{
 5282|  61.5k|    out.append(std::forward<Arg>(arg));
 5283|  61.5k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  61.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEvRT_:
 5234|   139k|{}
_ZN8nlohmann16json_abi_v3_12_06detail9exception4nameERKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEi:
 5446|  32.0k|    {
 5447|  32.0k|        return concat("[json.exception.", ename, '.', std::to_string(id_), "] ");
 5448|  32.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA17_KcRKS9_cS9_RA3_SA_EEET_DpOT0_:
 5318|  32.0k|{
 5319|  32.0k|    OutStringType str;
 5320|  32.0k|    str.reserve(concat_length(args...));
 5321|  32.0k|    concat_into(str, std::forward<Args>(args)...);
 5322|  32.0k|    return str;
 5323|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcS9_A3_cEEEmPKcDpRKT_:
 5222|  32.0k|{
 5223|  32.0k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJcS9_A3_cEEEmRKT_DpRKT0_:
 5228|  32.0k|{
 5229|  32.0k|    return str.size() + concat_length(rest...);
 5230|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA3_cEEEmcDpRKT_:
 5216|  32.0k|{
 5217|  32.0k|    return 1 + concat_length(rest...);
 5218|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA3_cEEEmRKT_DpRKT0_:
 5228|  32.0k|{
 5229|  32.0k|    return str.size() + concat_length(rest...);
 5230|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJEEEmPKcDpRKT_:
 5222|  32.1k|{
 5223|  32.1k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  32.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA17_KcJRKS9_cS9_RA3_SA_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5281|  32.0k|{
 5282|  32.0k|    out.append(std::forward<Arg>(arg));
 5283|  32.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JcS9_RA3_KcETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|  32.0k|{
 5282|  32.0k|    out.append(std::forward<Arg>(arg));
 5283|  32.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcJS9_RA3_KcETnNS3_9enable_ifIXaantsr24detect_string_can_appendIT_T0_EE5valuesr27detect_string_can_append_opISE_SF_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5290|  32.0k|{
 5291|  32.0k|    out += std::forward<Arg>(arg);
 5292|  32.0k|    concat_into(out, std::forward<Args>(rest)...);
 5293|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA3_KcETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|  32.0k|{
 5282|  32.0k|    out.append(std::forward<Arg>(arg));
 5283|  32.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA3_KcJETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|  32.0k|{
 5282|  32.0k|    out.append(std::forward<Arg>(arg));
 5283|  32.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  32.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail9exception11diagnosticsEDn:
 5451|  30.6k|    {
 5452|  30.6k|        return "";
 5453|  30.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10type_errorC2EiPKc:
 5655|    865|    type_error(int id_, const char* what_arg) : exception(id_, what_arg) {}
_ZN8nlohmann16json_abi_v3_12_06detail9exceptionC2EiPKc:
 5443|  32.0k|    exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} // NOLINT(bugprone-throw-keyword-missing)
_ZNK8nlohmann16json_abi_v3_12_06detail9exception4whatEv:
 5434|  20.7k|    {
 5435|  20.7k|        return m.what();
 5436|  20.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA29_KcS9_RA5_SA_S9_EEET_DpOT0_:
 5318|    778|{
 5319|    778|    OutStringType str;
 5320|    778|    str.reserve(concat_length(args...));
 5321|    778|    concat_into(str, std::forward<Args>(args)...);
 5322|    778|    return str;
 5323|    778|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA5_cS9_EEEmPKcDpRKT_:
 5222|    778|{
 5223|    778|    return ::strlen(cstr) + concat_length(rest...);
 5224|    778|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA5_cS9_EEEmRKT_DpRKT0_:
 5228|    778|{
 5229|    778|    return str.size() + concat_length(rest...);
 5230|    778|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEEmPKcDpRKT_:
 5222|  75.4k|{
 5223|  75.4k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  75.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA29_KcJS9_RA5_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|    778|{
 5282|    778|    out.append(std::forward<Arg>(arg));
 5283|    778|    concat_into(out, std::forward<Args>(rest)...);
 5284|    778|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA5_KcS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|    778|{
 5282|    778|    out.append(std::forward<Arg>(arg));
 5283|    778|    concat_into(out, std::forward<Args>(rest)...);
 5284|    778|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA5_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|  1.88k|{
 5282|  1.88k|    out.append(std::forward<Arg>(arg));
 5283|  1.88k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  1.88k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSB_OSC_DpOT1_:
 5281|  45.9k|{
 5282|  45.9k|    out.append(std::forward<Arg>(arg));
 5283|  45.9k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  45.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail8hex_byteEh:
 6692|  11.5k|{
 6693|  11.5k|    std::string result = "00";
 6694|  11.5k|    constexpr const char* nibble_to_hex = "0123456789ABCDEF";
 6695|  11.5k|    result[0] = nibble_to_hex[byte / 16];
 6696|  11.5k|    result[1] = nibble_to_hex[byte % 16];
 6697|  11.5k|    return result;
 6698|  11.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA39_KcS9_EEET_DpOT0_:
 5318|     87|{
 5319|     87|    OutStringType str;
 5320|     87|    str.reserve(concat_length(args...));
 5321|     87|    concat_into(str, std::forward<Args>(args)...);
 5322|     87|    return str;
 5323|     87|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA39_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|     87|{
 5282|     87|    out.append(std::forward<Arg>(arg));
 5283|     87|    concat_into(out, std::forward<Args>(rest)...);
 5284|     87|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE17dump_escaped_implILb0EEEvRKSC_:
28684|   245k|    {
28685|   245k|        std::uint32_t codepoint{};
28686|   245k|        std::uint8_t state = UTF8_ACCEPT;
28687|   245k|        std::size_t bytes = 0;  // number of bytes written to string_buffer
28688|       |
28689|       |        // number of bytes written at the point of the last valid byte
28690|   245k|        std::size_t bytes_after_last_accept = 0;
28691|   245k|        std::size_t undumped_chars = 0;
28692|       |
28693|   456k|        for (std::size_t i = 0; i < s.size(); ++i)
  ------------------
  |  Branch (28693:33): [True: 395k, False: 60.4k]
  ------------------
28694|   395k|        {
28695|       |            // Fast path: at a character boundary (state == UTF8_ACCEPT),
28696|       |            // bulk-copy the longest run of bytes that need no escaping using a
28697|       |            // SWAR scanner shared with the lexer's contiguous path. The scanner
28698|       |            // stops exactly at the first byte dump_escaped would handle
28699|       |            // individually, so that byte is left to the byte-at-a-time path
28700|       |            // below, keeping escaping output and error diagnostics unchanged.
28701|       |            //
28702|       |            // - EnsureAscii == false: string_bulk_run() copies ordinary bytes
28703|       |            //   and complete well-formed UTF-8, stopping at a quote, backslash,
28704|       |            //   control character (< 0x20), or ill-formed/truncated sequence.
28705|       |            // - EnsureAscii == true: only printable ASCII may be copied
28706|       |            //   verbatim; find_ascii_copyable_run() additionally stops at 0x7F
28707|       |            //   and every non-ASCII byte (>= 0x80), which must be \u-escaped.
28708|   395k|            if (state == UTF8_ACCEPT)
  ------------------
  |  Branch (28708:17): [True: 350k, False: 45.8k]
  ------------------
28709|   350k|            {
28710|   350k|                const auto* const data = reinterpret_cast<const unsigned char*>(s.data());
28711|       |                // A run can only be non-empty when the very first byte is one
28712|       |                // the scanner may copy, so test that single byte before paying
28713|       |                // for the scan. Without it, text whose characters all have to be
28714|       |                // escaped - CJK under ensure_ascii, where every byte is >= 0x80 -
28715|       |                // runs the scanner once per character only to be told zero.
28716|   350k|                std::size_t run = 0;
28717|   350k|                if (!EnsureAscii)
  ------------------
  |  Branch (28717:21): [True: 350k, Folded]
  ------------------
28718|   350k|                {
28719|   350k|                    run = string_bulk_run(data + i, s.size() - i);
28720|   350k|                }
28721|      0|                else if (is_ascii_copyable(data[i]))
  ------------------
  |  Branch (28721:26): [True: 0, False: 0]
  ------------------
28722|      0|                {
28723|      0|                    run = find_ascii_copyable_run(data + i, s.size() - i);
28724|      0|                }
28725|   350k|                if (run != 0)
  ------------------
  |  Branch (28725:21): [True: 211k, False: 138k]
  ------------------
28726|   211k|                {
28727|       |                    // emit any bytes still pending in string_buffer first to
28728|       |                    // preserve output order, then write the run directly
28729|   211k|                    if (bytes != 0)
  ------------------
  |  Branch (28729:25): [True: 7.92k, False: 203k]
  ------------------
28730|  7.92k|                    {
28731|  7.92k|                        put_buffer(string_buffer, bytes);
28732|  7.92k|                        bytes = 0;
28733|  7.92k|                    }
28734|   211k|                    put_string(s, i, i + run);
28735|   211k|                    bytes_after_last_accept = 0;
28736|   211k|                    undumped_chars = 0;
28737|   211k|                    i += run;
28738|   211k|                    if (i >= s.size())
  ------------------
  |  Branch (28738:25): [True: 184k, False: 26.8k]
  ------------------
28739|   184k|                    {
28740|   184k|                        break;
28741|   184k|                    }
28742|   211k|                }
28743|       |
28744|       |                // A byte below 0x60 is a complete code point and needs no
28745|       |                // UTF-8 decoding. The scanner stops only at a control
28746|       |                // character, a quote, or a backslash in that range, so look up
28747|       |                // its escape sequence and write all 8 bytes of the table entry
28748|       |                // straight into the write buffer; only the length stored in the
28749|       |                // last byte of the entry is kept.
28750|   165k|                if (data[i] < 0x60)
  ------------------
  |  Branch (28750:21): [True: 102k, False: 62.7k]
  ------------------
28751|   102k|                {
28752|       |                    // emit any bytes still pending in string_buffer first to
28753|       |                    // preserve output order
28754|   102k|                    if (bytes != 0)
  ------------------
  |  Branch (28754:25): [True: 4.81k, False: 97.8k]
  ------------------
28755|  4.81k|                    {
28756|  4.81k|                        put_buffer(string_buffer, bytes);
28757|  4.81k|                        bytes = 0;
28758|  4.81k|                    }
28759|   102k|                    const auto& escape = ascii_escapes()[data[i]];
28760|   102k|                    if (JSON_HEDLEY_UNLIKELY(write_buffer.size() - write_buffer_pos < escape.size()))
  ------------------
  |  | 1667|   102k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 116, False: 102k]
  |  |  ------------------
  ------------------
28761|    116|                    {
28762|    116|                        flush();
28763|    116|                    }
28764|   102k|                    std::memcpy(write_buffer.data() + write_buffer_pos, escape.data(), escape.size());
28765|   102k|                    write_buffer_pos += static_cast<std::size_t>(escape[7]);
28766|   102k|                    bytes_after_last_accept = 0;
28767|   102k|                    undumped_chars = 0;
28768|   102k|                    continue;
28769|   102k|                }
28770|   165k|            }
28771|       |
28772|   108k|            const auto byte = static_cast<std::uint8_t>(s[i]);
28773|       |
28774|   108k|            switch (decode(state, codepoint, byte))
28775|   108k|            {
28776|      0|                case UTF8_ACCEPT:  // decode found a new code point
  ------------------
  |  Branch (28776:17): [True: 0, False: 108k]
  ------------------
28777|      0|                {
28778|       |                    // the code point is at least 0x60 (smaller ones are handled
28779|       |                    // above) and is not printable ASCII (which the scanner
28780|       |                    // copies): it is DEL (0x7F) under EnsureAscii or a non-ASCII
28781|       |                    // character
28782|      0|                    if (EnsureAscii)
  ------------------
  |  Branch (28782:25): [Folded, False: 0]
  ------------------
28783|      0|                    {
28784|      0|                        JSON_ASSERT(codepoint >= 0x7F);
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28784:25): [True: 0, False: 0]
  ------------------
28785|      0|                        if (error_handler == error_handler_t::keep)
  ------------------
  |  Branch (28785:29): [True: 0, False: 0]
  ------------------
28786|      0|                        {
28787|       |                            // this character was buffered as raw bytes below
28788|       |                            // in case it turned out to be part of an
28789|       |                            // ill-formed sequence (which is kept as is); now
28790|       |                            // that it decoded to a well-formed code point,
28791|       |                            // undo that and \u-escape it like any other
28792|       |                            // character instead
28793|      0|                            bytes = bytes_after_last_accept;
28794|      0|                        }
28795|      0|                        if (codepoint <= 0xFFFF)
  ------------------
  |  Branch (28795:29): [True: 0, False: 0]
  ------------------
28796|      0|                        {
28797|      0|                            write_u_escape(bytes, static_cast<std::uint16_t>(codepoint));
28798|      0|                        }
28799|      0|                        else
28800|      0|                        {
28801|      0|                            write_u_escape(bytes, static_cast<std::uint16_t>(0xD7C0u + (codepoint >> 10u)));
28802|      0|                            write_u_escape(bytes, static_cast<std::uint16_t>(0xDC00u + (codepoint & 0x3FFu)));
28803|      0|                        }
28804|      0|                    }
28805|      0|                    else
28806|      0|                    {
28807|       |                        // copy byte to buffer (all previous bytes of the
28808|       |                        // sequence have been copied in the default case below)
28809|      0|                        string_buffer[bytes++] = s[i];
28810|      0|                    }
28811|       |
28812|       |                    // write buffer and reset index; there must be 13 bytes
28813|       |                    // left, as this is the maximal number of bytes to be
28814|       |                    // written ("\uxxxx\uxxxx\0") for one code point
28815|      0|                    if (string_buffer.size() - bytes < 13)
  ------------------
  |  Branch (28815:25): [True: 0, False: 0]
  ------------------
28816|      0|                    {
28817|      0|                        put_buffer(string_buffer, bytes);
28818|      0|                        bytes = 0;
28819|      0|                    }
28820|       |
28821|       |                    // remember the byte position of this accept
28822|      0|                    bytes_after_last_accept = bytes;
28823|      0|                    undumped_chars = 0;
28824|      0|                    break;
28825|      0|                }
28826|       |
28827|  60.2k|                case UTF8_REJECT:  // decode found invalid UTF-8 byte
  ------------------
  |  Branch (28827:17): [True: 60.2k, False: 48.3k]
  ------------------
28828|  60.2k|                {
28829|  60.2k|                    switch (error_handler)
28830|  60.2k|                    {
28831|    778|                        case error_handler_t::strict:
  ------------------
  |  Branch (28831:25): [True: 778, False: 59.4k]
  ------------------
28832|    778|                        {
28833|    778|                            JSON_THROW(type_error::create(exception_id::invalid_utf8, concat("invalid UTF-8 byte at index ", std::to_string(i), ": 0x", detail::hex_byte(byte)), nullptr));
  ------------------
  |  | 2556|    778|    #define JSON_THROW(exception) throw exception
  ------------------
28834|      0|                        }
28835|       |
28836|      0|                        case error_handler_t::ignore:
  ------------------
  |  Branch (28836:25): [True: 0, False: 60.2k]
  ------------------
28837|      0|                        case error_handler_t::replace:
  ------------------
  |  Branch (28837:25): [True: 0, False: 60.2k]
  ------------------
28838|      0|                        {
28839|       |                            // in case we saw this character the first time, we
28840|       |                            // would like to read it again, because the byte
28841|       |                            // may be OK for itself, but just not OK for the
28842|       |                            // previous sequence
28843|      0|                            if (undumped_chars > 0)
  ------------------
  |  Branch (28843:33): [True: 0, False: 0]
  ------------------
28844|      0|                            {
28845|      0|                                --i;
28846|      0|                            }
28847|       |
28848|       |                            // reset length buffer to the last accepted index;
28849|       |                            // thus removing/ignoring the invalid characters
28850|      0|                            bytes = bytes_after_last_accept;
28851|       |
28852|      0|                            if (error_handler == error_handler_t::replace)
  ------------------
  |  Branch (28852:33): [True: 0, False: 0]
  ------------------
28853|      0|                            {
28854|       |                                // add a replacement character
28855|      0|                                if (EnsureAscii)
  ------------------
  |  Branch (28855:37): [Folded, False: 0]
  ------------------
28856|      0|                                {
28857|      0|                                    string_buffer[bytes++] = '\\';
28858|      0|                                    string_buffer[bytes++] = 'u';
28859|      0|                                    string_buffer[bytes++] = 'f';
28860|      0|                                    string_buffer[bytes++] = 'f';
28861|      0|                                    string_buffer[bytes++] = 'f';
28862|      0|                                    string_buffer[bytes++] = 'd';
28863|      0|                                }
28864|      0|                                else
28865|      0|                                {
28866|      0|                                    string_buffer[bytes++] = '\xEF';
28867|      0|                                    string_buffer[bytes++] = '\xBF';
28868|      0|                                    string_buffer[bytes++] = '\xBD';
28869|      0|                                }
28870|       |
28871|       |                                // write buffer and reset index; there must be 13 bytes
28872|       |                                // left, as this is the maximal number of bytes to be
28873|       |                                // written ("\uxxxx\uxxxx\0") for one code point
28874|      0|                                if (string_buffer.size() - bytes < 13)
  ------------------
  |  Branch (28874:37): [True: 0, False: 0]
  ------------------
28875|      0|                                {
28876|      0|                                    put_buffer(string_buffer, bytes);
28877|      0|                                    bytes = 0;
28878|      0|                                }
28879|       |
28880|      0|                                bytes_after_last_accept = bytes;
28881|      0|                            }
28882|       |
28883|      0|                            undumped_chars = 0;
28884|       |
28885|       |                            // continue processing the string
28886|      0|                            state = UTF8_ACCEPT;
28887|      0|                            break;
28888|      0|                        }
28889|       |
28890|  59.4k|                        case error_handler_t::keep:
  ------------------
  |  Branch (28890:25): [True: 59.4k, False: 778]
  ------------------
28891|  59.4k|                        {
28892|       |                            // the bytes of this (now abandoned) ill-formed
28893|       |                            // sequence seen so far are already buffered below
28894|       |                            // and are kept unchanged in the output
28895|  59.4k|                            if (undumped_chars > 0)
  ------------------
  |  Branch (28895:33): [True: 39.5k, False: 19.8k]
  ------------------
28896|  39.5k|                            {
28897|       |                                // the byte that ended the sequence may be OK
28898|       |                                // for itself (e.g., a quote that must still be
28899|       |                                // escaped, or the lead byte of a well-formed
28900|       |                                // code point), so read it again
28901|  39.5k|                                --i;
28902|  39.5k|                            }
28903|  19.8k|                            else
28904|  19.8k|                            {
28905|       |                                // a byte that cannot start a sequence (e.g.,
28906|       |                                // 0xFF or a stray continuation byte) is kept
28907|       |                                // as well
28908|  19.8k|                                string_buffer[bytes++] = s[i];
28909|  19.8k|                            }
28910|       |
28911|       |                            // write buffer and reset index; there must be 13 bytes
28912|       |                            // left, as this is the maximal number of bytes to be
28913|       |                            // written ("\uxxxx\uxxxx\0") for one code point
28914|  59.4k|                            if (string_buffer.size() - bytes < 13)
  ------------------
  |  Branch (28914:33): [True: 0, False: 59.4k]
  ------------------
28915|      0|                            {
28916|      0|                                put_buffer(string_buffer, bytes);
28917|      0|                                bytes = 0;
28918|      0|                            }
28919|       |
28920|  59.4k|                            bytes_after_last_accept = bytes;
28921|  59.4k|                            undumped_chars = 0;
28922|       |
28923|       |                            // continue processing the string
28924|  59.4k|                            state = UTF8_ACCEPT;
28925|  59.4k|                            break;
28926|      0|                        }
28927|       |
28928|      0|                        default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (28928:25): [True: 0, False: 60.2k]
  ------------------
28929|      0|                            JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28929:29): [Folded, False: 0]
  ------------------
28930|  60.2k|                    }
28931|  59.4k|                    break;
28932|  60.2k|                }
28933|       |
28934|  59.4k|                default:  // decode found yet incomplete multibyte code point
  ------------------
  |  Branch (28934:17): [True: 48.3k, False: 60.2k]
  ------------------
28935|  48.3k|                {
28936|  48.3k|                    if (!EnsureAscii || error_handler == error_handler_t::keep)
  ------------------
  |  Branch (28936:25): [True: 48.3k, Folded]
  |  Branch (28936:41): [True: 0, False: 0]
  ------------------
28937|  48.3k|                    {
28938|       |                        // code point will not be escaped (or will be kept as
28939|       |                        // is if it turns out to be ill-formed) - copy byte to
28940|       |                        // buffer; dropped again above if it decodes to a
28941|       |                        // well-formed code point that needs \u-escaping
28942|  48.3k|                        string_buffer[bytes++] = s[i];
28943|  48.3k|                    }
28944|  48.3k|                    ++undumped_chars;
28945|  48.3k|                    break;
28946|  60.2k|                }
28947|   108k|            }
28948|   108k|        }
28949|       |
28950|       |        // we finished processing the string
28951|   245k|        if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT))
  ------------------
  |  | 1666|   245k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 242k, False: 2.49k]
  |  |  ------------------
  ------------------
28952|   242k|        {
28953|       |            // write buffer
28954|   242k|            if (bytes > 0)
  ------------------
  |  Branch (28954:17): [True: 1.93k, False: 240k]
  ------------------
28955|  1.93k|            {
28956|  1.93k|                put_buffer(string_buffer, bytes);
28957|  1.93k|            }
28958|   242k|        }
28959|  2.49k|        else
28960|  2.49k|        {
28961|       |            // we finish reading, but do not accept: string was incomplete
28962|  2.49k|            switch (error_handler)
28963|  2.49k|            {
28964|     87|                case error_handler_t::strict:
  ------------------
  |  Branch (28964:17): [True: 87, False: 2.40k]
  ------------------
28965|     87|                {
28966|     87|                    JSON_THROW(type_error::create(exception_id::invalid_utf8, concat("incomplete UTF-8 string; last byte: 0x", detail::hex_byte(static_cast<std::uint8_t>(s[s.size() - 1]))), nullptr));
  ------------------
  |  | 2556|     87|    #define JSON_THROW(exception) throw exception
  ------------------
28967|      0|                }
28968|       |
28969|      0|                case error_handler_t::ignore:
  ------------------
  |  Branch (28969:17): [True: 0, False: 2.49k]
  ------------------
28970|      0|                {
28971|       |                    // write all accepted bytes
28972|      0|                    put_buffer(string_buffer, bytes_after_last_accept);
28973|      0|                    break;
28974|      0|                }
28975|       |
28976|      0|                case error_handler_t::replace:
  ------------------
  |  Branch (28976:17): [True: 0, False: 2.49k]
  ------------------
28977|      0|                {
28978|       |                    // write all accepted bytes
28979|      0|                    put_buffer(string_buffer, bytes_after_last_accept);
28980|       |                    // add a replacement character
28981|      0|                    if (EnsureAscii)
  ------------------
  |  Branch (28981:25): [Folded, False: 0]
  ------------------
28982|      0|                    {
28983|      0|                        put_literal("\\ufffd");
28984|      0|                    }
28985|      0|                    else
28986|      0|                    {
28987|      0|                        put_literal("\xEF\xBF\xBD");
28988|      0|                    }
28989|      0|                    break;
28990|      0|                }
28991|       |
28992|  2.40k|                case error_handler_t::keep:
  ------------------
  |  Branch (28992:17): [True: 2.40k, False: 87]
  ------------------
28993|  2.40k|                {
28994|       |                    // write the ill-formed trailing bytes as is; they were
28995|       |                    // buffered above regardless of EnsureAscii
28996|  2.40k|                    put_buffer(string_buffer, bytes);
28997|  2.40k|                    break;
28998|      0|                }
28999|       |
29000|      0|                default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (29000:17): [True: 0, False: 2.49k]
  ------------------
29001|       |                    JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29001:21): [Folded, False: 0]
  ------------------
29002|  2.49k|            }
29003|  2.49k|        }
29004|   245k|    }
_ZN8nlohmann16json_abi_v3_12_06detail15string_bulk_runEPKhm:
11148|   359k|{
11149|       |#if defined(JSON_USE_SIMDUTF) && defined(JSON_HAS_CPP_17)
11150|       |    const std::size_t run = find_string_delimiter(data, n);
11151|       |    if (run != 0 && simdutf::validate_utf8(reinterpret_cast<const char*>(data), run))
11152|       |    {
11153|       |        return run;
11154|       |    }
11155|       |#endif
11156|   359k|    return scalar_string_bulk_run(data, n);
11157|   359k|}
_ZN8nlohmann16json_abi_v3_12_06detail22scalar_string_bulk_runEPKhm:
11084|   359k|{
11085|   359k|    std::size_t pos = 0;
11086|   362k|    while (pos < n)
  ------------------
  |  Branch (11086:12): [True: 361k, False: 1.21k]
  ------------------
11087|   361k|    {
11088|   361k|        pos += find_string_special(data + pos, n - pos);
11089|   361k|        if (pos >= n || data[pos] < 0x80u)
  ------------------
  |  Branch (11089:13): [True: 183k, False: 177k]
  |  Branch (11089:25): [True: 110k, False: 67.6k]
  ------------------
11090|   293k|        {
11091|   293k|            break; // end of buffer, or a quote/escape/control byte
11092|   293k|        }
11093|       |        // a run of multi-byte sequences (e.g. CJK text) is validated sequence
11094|       |        // by sequence without searching for the next special byte in between
11095|  67.6k|        do
11096|  70.8k|        {
11097|  70.8k|            const std::size_t seq = validate_one_utf8(data + pos, n - pos);
11098|  70.8k|            if (seq == 0)
  ------------------
  |  Branch (11098:17): [True: 64.6k, False: 6.22k]
  ------------------
11099|  64.6k|            {
11100|  64.6k|                return pos; // ill-formed or truncated: let the byte path diagnose it
11101|  64.6k|            }
11102|  6.22k|            pos += seq;
11103|  6.22k|        }
11104|  67.6k|        while (pos < n && data[pos] >= 0x80u);
  ------------------
  |  Branch (11104:16): [True: 5.00k, False: 1.21k]
  |  Branch (11104:27): [True: 3.27k, False: 1.73k]
  ------------------
11105|  67.6k|    }
11106|   295k|    return pos;
11107|   359k|}
_ZN8nlohmann16json_abi_v3_12_06detail19find_string_specialEPKhm:
10910|   361k|{
10911|   361k|    std::size_t i = 0;
10912|   465k|    for (; i + 8 <= n; i += 8)
  ------------------
  |  Branch (10912:12): [True: 212k, False: 252k]
  ------------------
10913|   212k|    {
10914|   212k|        const std::uint64_t special = swar_string_special(read_eight_bytes(data + i));
10915|   212k|        if (special != 0)
  ------------------
  |  Branch (10915:13): [True: 109k, False: 103k]
  ------------------
10916|   109k|        {
10917|       |            // the lowest flagged byte is the first special one: the borrows of
10918|       |            // the subtractions can only flag bytes above a true hit
10919|   109k|            return i + (static_cast<std::size_t>(count_trailing_zeros(special)) / 8);
10920|   109k|        }
10921|   212k|    }
10922|   779k|    for (; i < n; ++i)
  ------------------
  |  Branch (10922:12): [True: 596k, False: 183k]
  ------------------
10923|   596k|    {
10924|   596k|        if (is_string_special(data[i]))
  ------------------
  |  Branch (10924:13): [True: 68.8k, False: 527k]
  ------------------
10925|  68.8k|        {
10926|  68.8k|            return i;
10927|  68.8k|        }
10928|   596k|    }
10929|   183k|    return n;
10930|   252k|}
_ZN8nlohmann16json_abi_v3_12_06detail19swar_string_specialEm:
10895|   212k|{
10896|   212k|    constexpr std::uint64_t ones = 0x0101010101010101ull;
10897|   212k|    constexpr std::uint64_t high = 0x8080808080808080ull;
10898|   212k|    const std::uint64_t q = v ^ 0x2222222222222222ull; // '"'  (0x22)
10899|   212k|    const std::uint64_t b = v ^ 0x5C5C5C5C5C5C5C5Cull; // '\\' (0x5C)
10900|   212k|    const std::uint64_t has_quote     = (q - ones) & ~q & high;
10901|   212k|    const std::uint64_t has_backslash = (b - ones) & ~b & high;
10902|   212k|    const std::uint64_t has_control   = (v - 0x2020202020202020ull) & ~v & high; // < 0x20
10903|   212k|    const std::uint64_t has_non_ascii = v & high;                                // >= 0x80
10904|   212k|    return has_quote | has_backslash | has_control | has_non_ascii;
10905|   212k|}
_ZN8nlohmann16json_abi_v3_12_06detail17is_string_specialEh:
10888|   596k|{
10889|   596k|    return c == '\"' || c == '\\' || c < 0x20u || c >= 0x80u;
  ------------------
  |  Branch (10889:12): [True: 778, False: 595k]
  |  Branch (10889:25): [True: 2.35k, False: 593k]
  |  Branch (10889:38): [True: 47.5k, False: 545k]
  |  Branch (10889:51): [True: 18.0k, False: 527k]
  ------------------
10890|   596k|}
_ZN8nlohmann16json_abi_v3_12_06detail17validate_one_utf8EPKhm:
10987|  70.8k|{
10988|  70.8k|    const unsigned char c0 = data[0];
10989|  70.8k|    if (c0 >= 0xC2 && c0 <= 0xDF)  // U+0080..U+07FF
  ------------------
  |  Branch (10989:9): [True: 61.6k, False: 9.26k]
  |  Branch (10989:23): [True: 11.7k, False: 49.9k]
  ------------------
10990|  11.7k|    {
10991|  11.7k|        if (avail >= 2 && data[1] >= 0x80 && data[1] <= 0xBF)
  ------------------
  |  Branch (10991:13): [True: 10.6k, False: 1.08k]
  |  Branch (10991:27): [True: 7.99k, False: 2.64k]
  |  Branch (10991:46): [True: 3.22k, False: 4.77k]
  ------------------
10992|  3.22k|        {
10993|  3.22k|            return 2;
10994|  3.22k|        }
10995|  11.7k|    }
10996|  59.1k|    else if (c0 == 0xE0)  // U+0800..U+0FFF
  ------------------
  |  Branch (10996:14): [True: 4.22k, False: 54.9k]
  ------------------
10997|  4.22k|    {
10998|  4.22k|        if (avail >= 3 && data[1] >= 0xA0 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF)
  ------------------
  |  Branch (10998:13): [True: 3.78k, False: 437]
  |  Branch (10998:27): [True: 2.89k, False: 890]
  |  Branch (10998:46): [True: 975, False: 1.91k]
  |  Branch (10998:65): [True: 425, False: 550]
  |  Branch (10998:84): [True: 301, False: 124]
  ------------------
10999|    301|        {
11000|    301|            return 3;
11001|    301|        }
11002|  4.22k|    }
11003|  54.9k|    else if ((c0 >= 0xE1 && c0 <= 0xEC) || c0 == 0xEE || c0 == 0xEF)  // U+1000..U+CFFF, U+E000..U+FFFF
  ------------------
  |  Branch (11003:15): [True: 45.6k, False: 9.26k]
  |  Branch (11003:29): [True: 6.46k, False: 39.2k]
  |  Branch (11003:44): [True: 2.68k, False: 45.8k]
  |  Branch (11003:58): [True: 2.23k, False: 43.5k]
  ------------------
11004|  11.3k|    {
11005|  11.3k|        if (avail >= 3 && data[1] >= 0x80 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF)
  ------------------
  |  Branch (11005:13): [True: 10.5k, False: 860]
  |  Branch (11005:27): [True: 9.10k, False: 1.41k]
  |  Branch (11005:46): [True: 1.39k, False: 7.70k]
  |  Branch (11005:65): [True: 1.13k, False: 269]
  |  Branch (11005:84): [True: 921, False: 209]
  ------------------
11006|    921|        {
11007|    921|            return 3;
11008|    921|        }
11009|  11.3k|    }
11010|  43.5k|    else if (c0 == 0xED)  // U+D000..U+D7FF (excludes surrogates)
  ------------------
  |  Branch (11010:14): [True: 9.11k, False: 34.4k]
  ------------------
11011|  9.11k|    {
11012|  9.11k|        if (avail >= 3 && data[1] >= 0x80 && data[1] <= 0x9F && data[2] >= 0x80 && data[2] <= 0xBF)
  ------------------
  |  Branch (11012:13): [True: 7.31k, False: 1.80k]
  |  Branch (11012:27): [True: 6.79k, False: 515]
  |  Branch (11012:46): [True: 1.34k, False: 5.45k]
  |  Branch (11012:65): [True: 1.23k, False: 116]
  |  Branch (11012:84): [True: 770, False: 461]
  ------------------
11013|    770|        {
11014|    770|            return 3;
11015|    770|        }
11016|  9.11k|    }
11017|  34.4k|    else if (c0 == 0xF0)  // U+10000..U+3FFFF
  ------------------
  |  Branch (11017:14): [True: 4.81k, False: 29.6k]
  ------------------
11018|  4.81k|    {
11019|  4.81k|        if (avail >= 4 && data[1] >= 0x90 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF && data[3] >= 0x80 && data[3] <= 0xBF)
  ------------------
  |  Branch (11019:13): [True: 4.38k, False: 433]
  |  Branch (11019:27): [True: 4.00k, False: 378]
  |  Branch (11019:46): [True: 1.56k, False: 2.44k]
  |  Branch (11019:65): [True: 1.27k, False: 291]
  |  Branch (11019:84): [True: 923, False: 350]
  |  Branch (11019:103): [True: 594, False: 329]
  |  Branch (11019:122): [True: 351, False: 243]
  ------------------
11020|    351|        {
11021|    351|            return 4;
11022|    351|        }
11023|  4.81k|    }
11024|  29.6k|    else if (c0 >= 0xF1 && c0 <= 0xF3)  // U+40000..U+FFFFF
  ------------------
  |  Branch (11024:14): [True: 20.3k, False: 9.26k]
  |  Branch (11024:28): [True: 3.87k, False: 16.5k]
  ------------------
11025|  3.87k|    {
11026|  3.87k|        if (avail >= 4 && data[1] >= 0x80 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF && data[3] >= 0x80 && data[3] <= 0xBF)
  ------------------
  |  Branch (11026:13): [True: 3.58k, False: 291]
  |  Branch (11026:27): [True: 3.16k, False: 420]
  |  Branch (11026:46): [True: 914, False: 2.24k]
  |  Branch (11026:65): [True: 789, False: 125]
  |  Branch (11026:84): [True: 582, False: 207]
  |  Branch (11026:103): [True: 398, False: 184]
  |  Branch (11026:122): [True: 224, False: 174]
  ------------------
11027|    224|        {
11028|    224|            return 4;
11029|    224|        }
11030|  3.87k|    }
11031|  25.7k|    else if (c0 == 0xF4)  // U+100000..U+10FFFF
  ------------------
  |  Branch (11031:14): [True: 5.30k, False: 20.4k]
  ------------------
11032|  5.30k|    {
11033|  5.30k|        if (avail >= 4 && data[1] >= 0x80 && data[1] <= 0x8F && data[2] >= 0x80 && data[2] <= 0xBF && data[3] >= 0x80 && data[3] <= 0xBF)
  ------------------
  |  Branch (11033:13): [True: 5.03k, False: 276]
  |  Branch (11033:27): [True: 4.68k, False: 343]
  |  Branch (11033:46): [True: 1.40k, False: 3.28k]
  |  Branch (11033:65): [True: 1.20k, False: 201]
  |  Branch (11033:84): [True: 1.09k, False: 110]
  |  Branch (11033:103): [True: 862, False: 228]
  |  Branch (11033:122): [True: 432, False: 430]
  ------------------
11034|    432|        {
11035|    432|            return 4;
11036|    432|        }
11037|  5.30k|    }
11038|  64.6k|    return 0; // invalid, incomplete, or must be diagnosed by the byte path
11039|  70.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11dump_scalarERKSG_m:
28497|   664k|    {
28498|   664k|        switch (val.m_data.m_type)
28499|   664k|        {
28500|  86.1k|            case value_t::string:
  ------------------
  |  Branch (28500:13): [True: 86.1k, False: 577k]
  ------------------
28501|  86.1k|            {
28502|  86.1k|                put_char('"');
28503|  86.1k|                dump_escaped(*val.m_data.m_value.string);
28504|  86.1k|                put_char('"');
28505|  86.1k|                return;
28506|      0|            }
28507|       |
28508|  6.90k|            case value_t::binary:
  ------------------
  |  Branch (28508:13): [True: 6.90k, False: 657k]
  ------------------
28509|  6.90k|            {
28510|  6.90k|                if (pretty_print)
  ------------------
  |  Branch (28510:21): [True: 0, False: 6.90k]
  ------------------
28511|      0|                {
28512|      0|                    put_literal("{\n");
28513|       |
28514|       |                    // variable to hold indentation for the bytes
28515|      0|                    const auto new_indent = next_indent(current_indent, indent_step);
28516|       |
28517|      0|                    put_indent(new_indent);
28518|       |
28519|      0|                    put_literal("\"bytes\": [");
28520|       |
28521|      0|                    if (!val.m_data.m_value.binary->empty())
  ------------------
  |  Branch (28521:25): [True: 0, False: 0]
  ------------------
28522|      0|                    {
28523|      0|                        for (auto i = val.m_data.m_value.binary->cbegin();
28524|      0|                                i != val.m_data.m_value.binary->cend() - 1; ++i)
  ------------------
  |  Branch (28524:33): [True: 0, False: 0]
  ------------------
28525|      0|                        {
28526|      0|                            dump_byte(*i);
28527|      0|                            put_literal(", ");
28528|      0|                        }
28529|      0|                        dump_byte(val.m_data.m_value.binary->back());
28530|      0|                    }
28531|       |
28532|      0|                    put_literal("],\n");
28533|      0|                    put_indent(new_indent);
28534|       |
28535|      0|                    put_literal("\"subtype\": ");
28536|      0|                    if (val.m_data.m_value.binary->has_subtype())
  ------------------
  |  Branch (28536:25): [True: 0, False: 0]
  ------------------
28537|      0|                    {
28538|      0|                        dump_integer(val.m_data.m_value.binary->subtype());
28539|      0|                    }
28540|      0|                    else
28541|      0|                    {
28542|      0|                        put_literal("null");
28543|      0|                    }
28544|      0|                    put_char('\n');
28545|      0|                    put_indent(current_indent);
28546|      0|                    put_char('}');
28547|      0|                }
28548|  6.90k|                else
28549|  6.90k|                {
28550|  6.90k|                    put_literal("{\"bytes\":[");
28551|       |
28552|  6.90k|                    if (!val.m_data.m_value.binary->empty())
  ------------------
  |  Branch (28552:25): [True: 4.42k, False: 2.48k]
  ------------------
28553|  4.42k|                    {
28554|  4.42k|                        for (auto i = val.m_data.m_value.binary->cbegin();
28555|  31.2k|                                i != val.m_data.m_value.binary->cend() - 1; ++i)
  ------------------
  |  Branch (28555:33): [True: 26.8k, False: 4.42k]
  ------------------
28556|  26.8k|                        {
28557|  26.8k|                            dump_byte(*i);
28558|  26.8k|                            put_char(',');
28559|  26.8k|                        }
28560|  4.42k|                        dump_byte(val.m_data.m_value.binary->back());
28561|  4.42k|                    }
28562|       |
28563|  6.90k|                    put_literal("],\"subtype\":");
28564|  6.90k|                    if (val.m_data.m_value.binary->has_subtype())
  ------------------
  |  Branch (28564:25): [True: 0, False: 6.90k]
  ------------------
28565|      0|                    {
28566|      0|                        dump_integer(val.m_data.m_value.binary->subtype());
28567|      0|                        put_char('}');
28568|      0|                    }
28569|  6.90k|                    else
28570|  6.90k|                    {
28571|  6.90k|                        put_literal("null}");
28572|  6.90k|                    }
28573|  6.90k|                }
28574|  6.90k|                return;
28575|      0|            }
28576|       |
28577|   105k|            case value_t::boolean:
  ------------------
  |  Branch (28577:13): [True: 105k, False: 558k]
  ------------------
28578|   105k|            {
28579|   105k|                if (val.m_data.m_value.boolean)
  ------------------
  |  Branch (28579:21): [True: 46.0k, False: 59.7k]
  ------------------
28580|  46.0k|                {
28581|  46.0k|                    put_literal("true");
28582|  46.0k|                }
28583|  59.7k|                else
28584|  59.7k|                {
28585|  59.7k|                    put_literal("false");
28586|  59.7k|                }
28587|   105k|                return;
28588|      0|            }
28589|       |
28590|  98.2k|            case value_t::number_integer:
  ------------------
  |  Branch (28590:13): [True: 98.2k, False: 565k]
  ------------------
28591|  98.2k|            {
28592|  98.2k|                dump_integer(val.m_data.m_value.number_integer);
28593|  98.2k|                return;
28594|      0|            }
28595|       |
28596|   144k|            case value_t::number_unsigned:
  ------------------
  |  Branch (28596:13): [True: 144k, False: 519k]
  ------------------
28597|   144k|            {
28598|   144k|                dump_integer(val.m_data.m_value.number_unsigned);
28599|   144k|                return;
28600|      0|            }
28601|       |
28602|   157k|            case value_t::number_float:
  ------------------
  |  Branch (28602:13): [True: 157k, False: 506k]
  ------------------
28603|   157k|            {
28604|   157k|                dump_float(val.m_data.m_value.number_float);
28605|   157k|                return;
28606|      0|            }
28607|       |
28608|      0|            case value_t::discarded:
  ------------------
  |  Branch (28608:13): [True: 0, False: 664k]
  ------------------
28609|      0|            {
28610|      0|                put_literal("<discarded>");
28611|      0|                return;
28612|      0|            }
28613|       |
28614|  64.9k|            case value_t::null:
  ------------------
  |  Branch (28614:13): [True: 64.9k, False: 599k]
  ------------------
28615|  64.9k|            {
28616|  64.9k|                put_literal("null");
28617|  64.9k|                return;
28618|      0|            }
28619|       |
28620|      0|            case value_t::object: // LCOV_EXCL_LINE
  ------------------
  |  Branch (28620:13): [True: 0, False: 664k]
  ------------------
28621|      0|            case value_t::array:  // LCOV_EXCL_LINE
  ------------------
  |  Branch (28621:13): [True: 0, False: 664k]
  ------------------
28622|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (28622:13): [True: 0, False: 664k]
  ------------------
28623|       |                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (28623:17): [Folded, False: 0]
  ------------------
28624|   664k|        }
28625|   664k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm11EEEvRAT__Kc:
29090|  6.90k|    {
29091|  6.90k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
29092|       |        // the array bound counts the terminating NUL, which is not written
29093|  6.90k|        constexpr std::size_t length = N - 1;
29094|  6.90k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
29095|       |
29096|  6.90k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1667|  6.90k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 72, False: 6.83k]
  |  |  ------------------
  ------------------
29097|     72|        {
29098|     72|            flush();
29099|     72|        }
29100|  6.90k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
29101|  6.90k|        write_buffer_pos += length;
29102|  6.90k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE9dump_byteIhEEvT_:
29380|  31.2k|    {
29381|  31.2k|        dump_byte(value, std::integral_constant < bool,
29382|  31.2k|                  std::is_unsigned<ByteType>::value && sizeof(ByteType) == 1
29383|  31.2k|                  && !std::is_same<ByteType, bool>::value > {});
29384|  31.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE9dump_byteIhEEvT_NS4_17integral_constantIbLb1EEE:
29394|  31.2k|    {
29395|  31.2k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + 3 > write_buffer.size()))
  ------------------
  |  | 1667|  31.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 60, False: 31.1k]
  |  |  ------------------
  ------------------
29396|     60|        {
29397|     60|            flush();
29398|     60|        }
29399|       |
29400|  31.2k|        const auto byte = static_cast<unsigned>(value);
29401|       |        // Accumulate the offset in a local and store it back once. Writing
29402|       |        // through write_buffer[] is a char write, which may alias any object,
29403|       |        // so with the member updated in place the compiler has to reload and
29404|       |        // store it around every digit - measured 2.4x slower on a dump of a
29405|       |        // multi-megabyte binary value.
29406|  31.2k|        std::size_t pos = write_buffer_pos;
29407|       |
29408|  31.2k|        if (byte >= 100)
  ------------------
  |  Branch (29408:13): [True: 13.9k, False: 17.3k]
  ------------------
29409|  13.9k|        {
29410|  13.9k|            write_buffer[pos++] = static_cast<char>('0' + (byte / 100));
29411|  13.9k|            write_buffer[pos++] = static_cast<char>('0' + ((byte / 10) % 10));
29412|  13.9k|        }
29413|  17.3k|        else if (byte >= 10)
  ------------------
  |  Branch (29413:18): [True: 12.5k, False: 4.77k]
  ------------------
29414|  12.5k|        {
29415|  12.5k|            write_buffer[pos++] = static_cast<char>('0' + (byte / 10));
29416|  12.5k|        }
29417|       |
29418|  31.2k|        write_buffer[pos++] = static_cast<char>('0' + (byte % 10));
29419|       |
29420|  31.2k|        write_buffer_pos = pos;
29421|  31.2k|    }
_ZNK8nlohmann16json_abi_v3_12_027byte_container_with_subtypeINSt3__16vectorIhNS2_9allocatorIhEEEEE11has_subtypeEv:
 7962|  6.90k|    {
 7963|  6.90k|        return m_has_subtype;
 7964|  6.90k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12dump_integerImTnNS4_9enable_ifIXoooosr3std11is_integralIT_EE5valuesr3std7is_sameISK_mEE5valuesr3std7is_sameISK_lEE5valueEiE4typeELi0EEEvSK_:
29439|   144k|    {
29440|   144k|        static constexpr std::array<std::array<char, 2>, 100> digits_to_99
29441|   144k|        {
29442|   144k|            {
29443|   144k|                {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},
29444|   144k|                {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},
29445|   144k|                {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},
29446|   144k|                {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},
29447|   144k|                {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},
29448|   144k|                {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},
29449|   144k|                {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},
29450|   144k|                {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},
29451|   144k|                {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},
29452|   144k|                {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},
29453|   144k|            }
29454|   144k|        };
29455|       |
29456|       |        // special case for "0"
29457|   144k|        if (x == 0)
  ------------------
  |  Branch (29457:13): [True: 3.02k, False: 141k]
  ------------------
29458|  3.02k|        {
29459|  3.02k|            put_char('0');
29460|  3.02k|            return;
29461|  3.02k|        }
29462|       |
29463|       |        // use a pointer to fill the buffer (room for as much as number_buffer holds)
29464|   141k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + number_buffer.size() > write_buffer.size()))
  ------------------
  |  | 1667|   141k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 688, False: 140k]
  |  |  ------------------
  ------------------
29465|    688|        {
29466|    688|            flush();
29467|    688|        }
29468|   141k|        auto* buffer_ptr = write_buffer.data() + write_buffer_pos;
29469|       |
29470|   141k|        number_magnitude_t abs_value;
29471|       |
29472|       |        // one byte for the minus sign
29473|   141k|        unsigned int n_chars = 0;
29474|       |
29475|   141k|        if (is_negative_number(x))
  ------------------
  |  Branch (29475:13): [True: 0, False: 141k]
  ------------------
29476|      0|        {
29477|      0|            *buffer_ptr = '-';
29478|      0|            abs_value = remove_sign(static_cast<number_integer_t>(x));
29479|      0|            n_chars = 1;
29480|      0|        }
29481|   141k|        else
29482|   141k|        {
29483|   141k|            abs_value = static_cast<number_magnitude_t>(x);
29484|   141k|        }
29485|       |
29486|       |        // up to 16 digits: eight at a time (as the digits of floats), written
29487|       |        // without leading zeros
29488|   141k|        if (abs_value < 10000000000000000u)
  ------------------
  |  Branch (29488:13): [True: 125k, False: 16.0k]
  ------------------
29489|   125k|        {
29490|   125k|            const std::uint64_t value = abs_value;
29491|   125k|            const std::uint64_t upper = value / 100000000u;
29492|   125k|            const std::uint64_t first = dtoa_impl::eight_digit_bytes(upper != 0 ? upper : value);
  ------------------
  |  Branch (29492:70): [True: 9.74k, False: 115k]
  ------------------
29493|   125k|            const auto leading = static_cast<unsigned>(count_leading_zeros(first) / 8); // (first is not 0)
29494|   125k|            char* const p = buffer_ptr + n_chars;
29495|   125k|            dtoa_impl::store_msb_first(p, (first << (8 * leading)) + 0x3030303030303030u);
29496|   125k|            n_chars += 8 - leading;
29497|   125k|            if (upper != 0)
  ------------------
  |  Branch (29497:17): [True: 9.74k, False: 115k]
  ------------------
29498|  9.74k|            {
29499|  9.74k|                dtoa_impl::store_msb_first(p + 8 - leading, dtoa_impl::eight_digit_bytes(value - (upper * 100000000u)) + 0x3030303030303030u);
29500|  9.74k|                n_chars += 8;
29501|  9.74k|            }
29502|   125k|            write_buffer_pos += n_chars;
29503|   125k|            return;
29504|   125k|        }
29505|       |
29506|  16.0k|        n_chars += count_digits(abs_value);
29507|       |
29508|       |        // spare 1 byte for '\0'
29509|  16.0k|        JSON_ASSERT(n_chars < number_buffer.size() - 1);
  ------------------
  |  | 2591|  16.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29509:9): [True: 16.0k, False: 0]
  ------------------
29510|       |
29511|       |        // jump to the end to generate the string from backward,
29512|       |        // so we later avoid reversing the result
29513|  16.0k|        buffer_ptr += n_chars;
29514|       |
29515|       |        // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu
29516|       |        // See: https://www.youtube.com/watch?v=o4-CwDo2zpg
29517|   157k|        while (abs_value >= 100)
  ------------------
  |  Branch (29517:16): [True: 141k, False: 16.0k]
  ------------------
29518|   141k|        {
29519|   141k|            const auto digits_index = static_cast<unsigned>((abs_value % 100));
29520|   141k|            abs_value /= 100;
29521|   141k|            *(--buffer_ptr) = digits_to_99[digits_index][1];
29522|   141k|            *(--buffer_ptr) = digits_to_99[digits_index][0];
29523|   141k|        }
29524|       |
29525|  16.0k|        if (abs_value >= 10)
  ------------------
  |  Branch (29525:13): [True: 10.3k, False: 5.66k]
  ------------------
29526|  10.3k|        {
29527|  10.3k|            const auto digits_index = static_cast<unsigned>(abs_value);
29528|  10.3k|            *(--buffer_ptr) = digits_to_99[digits_index][1];
29529|  10.3k|            *(--buffer_ptr) = digits_to_99[digits_index][0];
29530|  10.3k|        }
29531|  5.66k|        else
29532|  5.66k|        {
29533|  5.66k|            *(--buffer_ptr) = static_cast<char>('0' + abs_value);
29534|  5.66k|        }
29535|       |
29536|  16.0k|        write_buffer_pos += n_chars;
29537|  16.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE18is_negative_numberImTnNS4_9enable_ifIXsr3std11is_unsignedIT_EE5valueEiE4typeELi0EEEbSK_:
29361|   141k|    {
29362|   141k|        return false;
29363|   141k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11remove_signEl:
29661|  19.7k|    {
29662|  19.7k|        JSON_ASSERT(x < 0);
  ------------------
  |  | 2591|  19.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29662:9): [True: 19.7k, False: 0]
  ------------------
29663|  19.7k|        return static_cast<number_magnitude_t>(-(x + 1)) + 1;
29664|  19.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl17eight_digit_bytesEm:
27559|   237k|{
27560|   237k|    const std::uint64_t abcd_efgh = abcdefgh + (((std::uint64_t{1} << 32u) - 10000u) * ((abcdefgh * (((std::uint64_t{1} << 40u) / 10000u) + 1u)) >> 40u));
27561|   237k|    const std::uint64_t ab_cd_ef_gh = abcd_efgh + (((std::uint64_t{1} << 16u) - 100u) * (((abcd_efgh * (((std::uint64_t{1} << 19u) / 100u) + 1u)) >> 19u) & 0x7F0000007Fu));
27562|   237k|    return ab_cd_ef_gh + (((std::uint64_t{1} << 8u) - 10u) * (((ab_cd_ef_gh * (((std::uint64_t{1} << 10u) / 10u) + 1u)) >> 10u) & 0x000F000F000F000Fu));
27563|   237k|}
_ZN8nlohmann16json_abi_v3_12_06detail19count_leading_zerosEm:
 9296|   367k|{
 9297|   367k|#if defined(__GNUC__) || defined(__clang__)
 9298|   367k|    return __builtin_clzll(x);
 9299|       |#elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64))
 9300|       |    unsigned long index = 0; // NOLINT(runtime/int): the type _BitScan*64 takes
 9301|       |    _BitScanReverse64(&index, x);
 9302|       |    return 63 - static_cast<int>(index);
 9303|       |#else
 9304|       |    int n = 0;
 9305|       |    for (int shift = 32; shift != 0; shift >>= 1)
 9306|       |    {
 9307|       |        if ((x >> (64 - shift)) == 0)
 9308|       |        {
 9309|       |            n += shift;
 9310|       |            x <<= shift;
 9311|       |        }
 9312|       |    }
 9313|       |    return n;
 9314|       |#endif
 9315|   367k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl15store_msb_firstEPcm:
27569|   240k|{
27570|   240k|#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
27571|   240k|    v = __builtin_bswap64(v);
27572|   240k|    std::memcpy(p, &v, sizeof(v));
27573|       |#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
27574|       |    std::memcpy(p, &v, sizeof(v));
27575|       |#elif defined(_MSC_VER) // (little-endian on all its targets)
27576|       |    v = _byteswap_uint64(v);
27577|       |    std::memcpy(p, &v, sizeof(v));
27578|       |#else
27579|       |    for (unsigned i = 0; i < 8; ++i)
27580|       |    {
27581|       |        p[i] = static_cast<char>(v >> (56u - (8u * i)));
27582|       |    }
27583|       |#endif
27584|   240k|}
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12count_digitsEm:
29173|  26.3k|    {
29174|  26.3k|        unsigned int n_digits = 1;
29175|  26.3k|        for (;;)
29176|   131k|        {
29177|   131k|            if (x < 10)
  ------------------
  |  Branch (29177:17): [True: 2.31k, False: 129k]
  ------------------
29178|  2.31k|            {
29179|  2.31k|                return n_digits;
29180|  2.31k|            }
29181|   129k|            if (x < 100)
  ------------------
  |  Branch (29181:17): [True: 2.82k, False: 126k]
  ------------------
29182|  2.82k|            {
29183|  2.82k|                return n_digits + 1;
29184|  2.82k|            }
29185|   126k|            if (x < 1000)
  ------------------
  |  Branch (29185:17): [True: 11.9k, False: 114k]
  ------------------
29186|  11.9k|            {
29187|  11.9k|                return n_digits + 2;
29188|  11.9k|            }
29189|   114k|            if (x < 10000)
  ------------------
  |  Branch (29189:17): [True: 9.27k, False: 105k]
  ------------------
29190|  9.27k|            {
29191|  9.27k|                return n_digits + 3;
29192|  9.27k|            }
29193|   105k|            x = x / 10000u;
29194|   105k|            n_digits += 4;
29195|   105k|        }
29196|  26.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm5EEEvRAT__Kc:
29090|   119k|    {
29091|   119k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
29092|       |        // the array bound counts the terminating NUL, which is not written
29093|   119k|        constexpr std::size_t length = N - 1;
29094|   119k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
29095|       |
29096|   119k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1667|   119k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 211, False: 119k]
  |  |  ------------------
  ------------------
29097|    211|        {
29098|    211|            flush();
29099|    211|        }
29100|   119k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
29101|   119k|        write_buffer_pos += length;
29102|   119k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm13EEEvRAT__Kc:
29090|  6.90k|    {
29091|  6.90k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
29092|       |        // the array bound counts the terminating NUL, which is not written
29093|  6.90k|        constexpr std::size_t length = N - 1;
29094|  6.90k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
29095|       |
29096|  6.90k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1667|  6.90k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 48, False: 6.85k]
  |  |  ------------------
  ------------------
29097|     48|        {
29098|     48|            flush();
29099|     48|        }
29100|  6.90k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
29101|  6.90k|        write_buffer_pos += length;
29102|  6.90k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE11put_literalILm6EEEvRAT__Kc:
29090|  66.6k|    {
29091|  66.6k|        static_assert(N >= 2, "put_literal expects a non-empty string literal");
29092|       |        // the array bound counts the terminating NUL, which is not written
29093|  66.6k|        constexpr std::size_t length = N - 1;
29094|  66.6k|        static_assert(length < write_buffer_size, "string literal must fit into the write buffer");
29095|       |
29096|  66.6k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + length > write_buffer.size()))
  ------------------
  |  | 1667|  66.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 150, False: 66.5k]
  |  |  ------------------
  ------------------
29097|    150|        {
29098|    150|            flush();
29099|    150|        }
29100|  66.6k|        std::memcpy(write_buffer.data() + write_buffer_pos, s, length);
29101|  66.6k|        write_buffer_pos += length;
29102|  66.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE12dump_integerIlTnNS4_9enable_ifIXoooosr3std11is_integralIT_EE5valuesr3std7is_sameISK_mEE5valuesr3std7is_sameISK_lEE5valueEiE4typeELi0EEEvSK_:
29439|  98.2k|    {
29440|  98.2k|        static constexpr std::array<std::array<char, 2>, 100> digits_to_99
29441|  98.2k|        {
29442|  98.2k|            {
29443|  98.2k|                {{'0', '0'}}, {{'0', '1'}}, {{'0', '2'}}, {{'0', '3'}}, {{'0', '4'}}, {{'0', '5'}}, {{'0', '6'}}, {{'0', '7'}}, {{'0', '8'}}, {{'0', '9'}},
29444|  98.2k|                {{'1', '0'}}, {{'1', '1'}}, {{'1', '2'}}, {{'1', '3'}}, {{'1', '4'}}, {{'1', '5'}}, {{'1', '6'}}, {{'1', '7'}}, {{'1', '8'}}, {{'1', '9'}},
29445|  98.2k|                {{'2', '0'}}, {{'2', '1'}}, {{'2', '2'}}, {{'2', '3'}}, {{'2', '4'}}, {{'2', '5'}}, {{'2', '6'}}, {{'2', '7'}}, {{'2', '8'}}, {{'2', '9'}},
29446|  98.2k|                {{'3', '0'}}, {{'3', '1'}}, {{'3', '2'}}, {{'3', '3'}}, {{'3', '4'}}, {{'3', '5'}}, {{'3', '6'}}, {{'3', '7'}}, {{'3', '8'}}, {{'3', '9'}},
29447|  98.2k|                {{'4', '0'}}, {{'4', '1'}}, {{'4', '2'}}, {{'4', '3'}}, {{'4', '4'}}, {{'4', '5'}}, {{'4', '6'}}, {{'4', '7'}}, {{'4', '8'}}, {{'4', '9'}},
29448|  98.2k|                {{'5', '0'}}, {{'5', '1'}}, {{'5', '2'}}, {{'5', '3'}}, {{'5', '4'}}, {{'5', '5'}}, {{'5', '6'}}, {{'5', '7'}}, {{'5', '8'}}, {{'5', '9'}},
29449|  98.2k|                {{'6', '0'}}, {{'6', '1'}}, {{'6', '2'}}, {{'6', '3'}}, {{'6', '4'}}, {{'6', '5'}}, {{'6', '6'}}, {{'6', '7'}}, {{'6', '8'}}, {{'6', '9'}},
29450|  98.2k|                {{'7', '0'}}, {{'7', '1'}}, {{'7', '2'}}, {{'7', '3'}}, {{'7', '4'}}, {{'7', '5'}}, {{'7', '6'}}, {{'7', '7'}}, {{'7', '8'}}, {{'7', '9'}},
29451|  98.2k|                {{'8', '0'}}, {{'8', '1'}}, {{'8', '2'}}, {{'8', '3'}}, {{'8', '4'}}, {{'8', '5'}}, {{'8', '6'}}, {{'8', '7'}}, {{'8', '8'}}, {{'8', '9'}},
29452|  98.2k|                {{'9', '0'}}, {{'9', '1'}}, {{'9', '2'}}, {{'9', '3'}}, {{'9', '4'}}, {{'9', '5'}}, {{'9', '6'}}, {{'9', '7'}}, {{'9', '8'}}, {{'9', '9'}},
29453|  98.2k|            }
29454|  98.2k|        };
29455|       |
29456|       |        // special case for "0"
29457|  98.2k|        if (x == 0)
  ------------------
  |  Branch (29457:13): [True: 4.00k, False: 94.2k]
  ------------------
29458|  4.00k|        {
29459|  4.00k|            put_char('0');
29460|  4.00k|            return;
29461|  4.00k|        }
29462|       |
29463|       |        // use a pointer to fill the buffer (room for as much as number_buffer holds)
29464|  94.2k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + number_buffer.size() > write_buffer.size()))
  ------------------
  |  | 1667|  94.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 243, False: 93.9k]
  |  |  ------------------
  ------------------
29465|    243|        {
29466|    243|            flush();
29467|    243|        }
29468|  94.2k|        auto* buffer_ptr = write_buffer.data() + write_buffer_pos;
29469|       |
29470|  94.2k|        number_magnitude_t abs_value;
29471|       |
29472|       |        // one byte for the minus sign
29473|  94.2k|        unsigned int n_chars = 0;
29474|       |
29475|  94.2k|        if (is_negative_number(x))
  ------------------
  |  Branch (29475:13): [True: 19.7k, False: 74.4k]
  ------------------
29476|  19.7k|        {
29477|  19.7k|            *buffer_ptr = '-';
29478|  19.7k|            abs_value = remove_sign(static_cast<number_integer_t>(x));
29479|  19.7k|            n_chars = 1;
29480|  19.7k|        }
29481|  74.4k|        else
29482|  74.4k|        {
29483|  74.4k|            abs_value = static_cast<number_magnitude_t>(x);
29484|  74.4k|        }
29485|       |
29486|       |        // up to 16 digits: eight at a time (as the digits of floats), written
29487|       |        // without leading zeros
29488|  94.2k|        if (abs_value < 10000000000000000u)
  ------------------
  |  Branch (29488:13): [True: 83.8k, False: 10.3k]
  ------------------
29489|  83.8k|        {
29490|  83.8k|            const std::uint64_t value = abs_value;
29491|  83.8k|            const std::uint64_t upper = value / 100000000u;
29492|  83.8k|            const std::uint64_t first = dtoa_impl::eight_digit_bytes(upper != 0 ? upper : value);
  ------------------
  |  Branch (29492:70): [True: 13.3k, False: 70.5k]
  ------------------
29493|  83.8k|            const auto leading = static_cast<unsigned>(count_leading_zeros(first) / 8); // (first is not 0)
29494|  83.8k|            char* const p = buffer_ptr + n_chars;
29495|  83.8k|            dtoa_impl::store_msb_first(p, (first << (8 * leading)) + 0x3030303030303030u);
29496|  83.8k|            n_chars += 8 - leading;
29497|  83.8k|            if (upper != 0)
  ------------------
  |  Branch (29497:17): [True: 13.3k, False: 70.5k]
  ------------------
29498|  13.3k|            {
29499|  13.3k|                dtoa_impl::store_msb_first(p + 8 - leading, dtoa_impl::eight_digit_bytes(value - (upper * 100000000u)) + 0x3030303030303030u);
29500|  13.3k|                n_chars += 8;
29501|  13.3k|            }
29502|  83.8k|            write_buffer_pos += n_chars;
29503|  83.8k|            return;
29504|  83.8k|        }
29505|       |
29506|  10.3k|        n_chars += count_digits(abs_value);
29507|       |
29508|       |        // spare 1 byte for '\0'
29509|  10.3k|        JSON_ASSERT(n_chars < number_buffer.size() - 1);
  ------------------
  |  | 2591|  10.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (29509:9): [True: 10.3k, False: 0]
  ------------------
29510|       |
29511|       |        // jump to the end to generate the string from backward,
29512|       |        // so we later avoid reversing the result
29513|  10.3k|        buffer_ptr += n_chars;
29514|       |
29515|       |        // Fast int2ascii implementation inspired by "Fastware" talk by Andrei Alexandrescu
29516|       |        // See: https://www.youtube.com/watch?v=o4-CwDo2zpg
29517|   100k|        while (abs_value >= 100)
  ------------------
  |  Branch (29517:16): [True: 90.3k, False: 10.3k]
  ------------------
29518|  90.3k|        {
29519|  90.3k|            const auto digits_index = static_cast<unsigned>((abs_value % 100));
29520|  90.3k|            abs_value /= 100;
29521|  90.3k|            *(--buffer_ptr) = digits_to_99[digits_index][1];
29522|  90.3k|            *(--buffer_ptr) = digits_to_99[digits_index][0];
29523|  90.3k|        }
29524|       |
29525|  10.3k|        if (abs_value >= 10)
  ------------------
  |  Branch (29525:13): [True: 1.75k, False: 8.61k]
  ------------------
29526|  1.75k|        {
29527|  1.75k|            const auto digits_index = static_cast<unsigned>(abs_value);
29528|  1.75k|            *(--buffer_ptr) = digits_to_99[digits_index][1];
29529|  1.75k|            *(--buffer_ptr) = digits_to_99[digits_index][0];
29530|  1.75k|        }
29531|  8.61k|        else
29532|  8.61k|        {
29533|  8.61k|            *(--buffer_ptr) = static_cast<char>('0' + abs_value);
29534|  8.61k|        }
29535|       |
29536|  10.3k|        write_buffer_pos += n_chars;
29537|  10.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE18is_negative_numberIlTnNS4_9enable_ifIXsr9is_signedIT_EE5valueEiE4typeELi0EEEbSK_:
29355|  94.2k|    {
29356|  94.2k|        return x < 0;
29357|  94.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10dump_floatEd:
29547|   157k|    {
29548|       |        // NaN / inf
29549|   157k|        if (!std::isfinite(x))
  ------------------
  |  Branch (29549:13): [True: 8.58k, False: 149k]
  ------------------
29550|  8.58k|        {
29551|  8.58k|            put_literal("null");
29552|  8.58k|            return;
29553|  8.58k|        }
29554|       |
29555|       |        // If number_float_t is an IEEE-754 single or double precision number,
29556|       |        // use the Grisu2 algorithm to produce short numbers which are
29557|       |        // guaranteed to round-trip, using strtof and strtod, resp.
29558|       |        //
29559|       |        // NB: The test below works if <long double> == <double>.
29560|   149k|        static constexpr bool is_ieee_single_or_double
29561|   149k|            = (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 24 && std::numeric_limits<number_float_t>::max_exponent == 128) ||
  ------------------
  |  Branch (29561:16): [True: 0, Folded]
  |  Branch (29561:66): [Folded, False: 0]
  |  Branch (29561:119): [Folded, False: 0]
  ------------------
29562|      0|              (std::numeric_limits<number_float_t>::is_iec559 && std::numeric_limits<number_float_t>::digits == 53 && std::numeric_limits<number_float_t>::max_exponent == 1024);
  ------------------
  |  Branch (29562:16): [True: 0, Folded]
  |  Branch (29562:66): [True: 0, Folded]
  |  Branch (29562:119): [True: 0, Folded]
  ------------------
29563|       |
29564|   149k|        dump_float(x, std::integral_constant<bool, is_ieee_single_or_double>());
29565|   149k|    }
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE10dump_floatEdNS4_17integral_constantIbLb1EEE:
29568|   149k|    {
29569|       |        // directly into the write buffer: copying the text from number_buffer
29570|       |        // right after to_chars() wrote it waits until its stores are done
29571|   149k|        if (JSON_HEDLEY_UNLIKELY(write_buffer_pos + number_buffer.size() > write_buffer.size()))
  ------------------
  |  | 1667|   149k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 543, False: 148k]
  |  |  ------------------
  ------------------
29572|    543|        {
29573|    543|            flush();
29574|    543|        }
29575|   149k|        auto* begin = write_buffer.data() + write_buffer_pos;
29576|   149k|        auto* end = ::nlohmann::detail::to_chars(begin, begin + number_buffer.size(), x);
29577|   149k|        write_buffer_pos += static_cast<std::size_t>(end - begin);
29578|   149k|    }
_ZN8nlohmann16json_abi_v3_12_06detail8to_charsIdEEPcS3_PKcT_:
27946|   149k|{
27947|   149k|    JSON_ASSERT(std::isfinite(value));
  ------------------
  |  | 2591|   149k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (27947:5): [True: 149k, False: 0]
  ------------------
27948|       |
27949|       |    // Use signbit(value) instead of (value < 0) since signbit works for -0.
27950|   149k|    if (std::signbit(value))
  ------------------
  |  Branch (27950:9): [True: 29.3k, False: 119k]
  ------------------
27951|  29.3k|    {
27952|  29.3k|        value = -value;
27953|  29.3k|        *first++ = '-';
27954|  29.3k|    }
27955|       |
27956|   149k|#ifdef __GNUC__
27957|   149k|    JSON_HEDLEY_DIAGNOSTIC_PUSH
27958|   149k|    JSON_HEDLEY_PRAGMA(GCC diagnostic ignored "-Wfloat-equal")
27959|   149k|#endif
27960|   149k|    if (value == 0) // +-0
  ------------------
  |  Branch (27960:9): [True: 6.16k, False: 142k]
  ------------------
27961|  6.16k|    {
27962|  6.16k|        *first++ = '0';
27963|       |        // Make it look like a floating-point number (#362, #378)
27964|  6.16k|        *first++ = '.';
27965|  6.16k|        *first++ = '0';
27966|  6.16k|        return first;
27967|  6.16k|    }
27968|   142k|#ifdef __GNUC__
27969|   142k|    JSON_HEDLEY_DIAGNOSTIC_POP
27970|   142k|#endif
27971|       |
27972|   142k|    return dtoa_impl::write_positive(first, last, value);
27973|   149k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl14write_positiveIdEEPcS4_PKcT_:
27926|   142k|{
27927|   142k|    return write_positive(first, last, value, is_binary64<FloatType> {});
27928|   142k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl14write_positiveIdEEPcS4_PKcT_NSt3__117integral_constantIbLb1EEE:
27908|   142k|{
27909|   142k|    return write_positive_zmij(first, last, value);
27910|   142k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl19write_positive_zmijIdEEPcS4_PKcT_:
27885|   142k|{
27886|   142k|    static_assert(is_binary64<FloatType>::value,
27887|   142k|                  "internal error: the conversion of Zmij needs IEEE 754 binary64 numbers");
27888|   142k|    std::uint64_t bits = 0;
27889|   142k|    std::memcpy(&bits, &value, sizeof(bits));
27890|   142k|    const zmij::shortest_decimal d = zmij::to_shortest(bits);
27891|   142k|    if (JSON_HEDLEY_LIKELY(last - first >= 41))
  ------------------
  |  | 1666|   142k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 142k, False: 0]
  |  |  ------------------
  ------------------
27892|   142k|    {
27893|   142k|        return write_shortest(first, d);
27894|   142k|    }
27895|      0|    std::array<char, 64> buf; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
27896|      0|    const auto len = static_cast<std::size_t>(write_shortest(buf.data(), d) - buf.data());
27897|      0|    JSON_ASSERT(last - first >= static_cast<std::ptrdiff_t>(len));
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (27897:5): [True: 0, False: 0]
  ------------------
27898|      0|    std::memcpy(first, buf.data(), len);
27899|      0|    return first + len;
27900|      0|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij11to_shortestEm:
26468|   142k|{
26469|   142k|    constexpr int extra_shift = 9;
26470|   142k|    const auto raw_exp = static_cast<int>((bits >> 52u) & 0x7FFu);
26471|   142k|    std::uint64_t bin_sig = bits & ((std::uint64_t{1} << 52u) - 1);
26472|       |    // a power of two has a narrower interval below (except the smallest normal)
26473|   142k|    const bool regular = bin_sig != 0 || raw_exp <= 1;
  ------------------
  |  Branch (26473:26): [True: 136k, False: 6.01k]
  |  Branch (26473:42): [True: 0, False: 6.01k]
  ------------------
26474|   142k|    const int bin_exp = (raw_exp == 0 ? 1 : raw_exp) - 1075;
  ------------------
  |  Branch (26474:26): [True: 3.27k, False: 139k]
  ------------------
26475|   142k|    if (raw_exp != 0)
  ------------------
  |  Branch (26475:9): [True: 139k, False: 3.27k]
  ------------------
26476|   139k|    {
26477|   139k|        bin_sig |= std::uint64_t{1} << 52u;
26478|   139k|    }
26479|       |    // floor(log10(2^bin_exp)), or floor(log10(3/4 * 2^bin_exp)) for the irregular case
26480|   142k|    const int dec_exp = ((bin_exp * 315653) - (regular ? 0 : 131072)) >> 20;
  ------------------
  |  Branch (26480:48): [True: 136k, False: 6.01k]
  ------------------
26481|       |    // scaled by 10^(-dec_exp - 1): the integral part is the shorter candidate
26482|   142k|    const int shift = bin_exp + ((-(dec_exp + 1) * 217707) >> 16) + 1 + extra_shift;
26483|   142k|    const uint128_parts p10 = pow10(-dec_exp - 1);
26484|   142k|    const uint128_parts p = umul192_hi128(p10.high, p10.low, bin_sig << static_cast<unsigned>(shift));
26485|   142k|    std::uint64_t integral = p.high >> static_cast<unsigned>(extra_shift);
26486|       |    // (no casts in the shifts: MSVC 2015 warns C4554 on them despite the parentheses)
26487|   142k|    constexpr auto fractional_low_shift = static_cast<unsigned>(extra_shift);
26488|   142k|    constexpr unsigned fractional_high_shift = 64u - fractional_low_shift;
26489|   142k|    const std::uint64_t fractional = (p.high << fractional_high_shift) | (p.low >> fractional_low_shift);
26490|   142k|    std::uint64_t digit = 0;
26491|   142k|    bool round_up = false;
26492|   142k|    bool round_down = false;
26493|   142k|    if (JSON_HEDLEY_LIKELY(regular))
  ------------------
  |  | 1666|   142k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 136k, False: 6.01k]
  |  |  ------------------
  ------------------
26494|   136k|    {
26495|   136k|        const std::uint64_t half_ulp = (p10.high >> static_cast<unsigned>(extra_shift + 1 - shift)) + (1 - (bin_sig & 1u));
26496|   136k|        round_up = fractional + half_ulp < fractional;
26497|   136k|        round_down = half_ulp > fractional;
26498|       |        // the last digit of the longer candidate, rounded to nearest
26499|   136k|        digit = umul128_add_hi64(fractional, 10, (std::uint64_t{1} << 63u) + 6);
26500|   136k|        if (fractional == (std::uint64_t{1} << 62u))
  ------------------
  |  Branch (26500:13): [True: 4.16k, False: 132k]
  ------------------
26501|  4.16k|        {
26502|  4.16k|            digit = 2; // 2.5 rounds to 2
26503|  4.16k|        }
26504|   136k|    }
26505|  6.01k|    else
26506|  6.01k|    {
26507|  6.01k|        const std::uint64_t half_ulp = p10.high >> static_cast<unsigned>(extra_shift + 1 - shift);
26508|  6.01k|        round_up = half_ulp > ~std::uint64_t{0} - fractional;
26509|  6.01k|        round_down = (half_ulp >> 1u) > fractional;
26510|  6.01k|        digit = umul128_add_hi64(fractional, 10, (std::uint64_t{1} << 63u) - 1);
26511|  6.01k|        const std::uint64_t lowest = umul128_add_hi64(fractional - (half_ulp >> 1u), 10, ~std::uint64_t{0});
26512|  6.01k|        digit = digit < lowest ? lowest : digit;
  ------------------
  |  Branch (26512:17): [True: 3.65k, False: 2.36k]
  ------------------
26513|  6.01k|    }
26514|   142k|    integral += round_up ? 1u : 0u;
  ------------------
  |  Branch (26514:17): [True: 10.1k, False: 132k]
  ------------------
26515|       |    // if the shorter candidate is outside the rounding interval: one digit more
26516|   142k|    return shortest_decimal{integral, dec_exp, static_cast<unsigned char>(digit), !round_up && !round_down};
  ------------------
  |  Branch (26516:83): [True: 132k, False: 10.1k]
  |  Branch (26516:96): [True: 57.6k, False: 75.0k]
  ------------------
26517|   142k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij5pow10Ei:
26422|   142k|{
26423|   142k|    if (k > pow5_128_largest_power)
  ------------------
  |  Branch (26423:9): [True: 4.38k, False: 138k]
  ------------------
26424|  4.38k|    {
26425|  4.38k|        return compute_pow10(k); // (only for the smallest doubles)
26426|  4.38k|    }
26427|   138k|    const auto i = 2 * static_cast<std::size_t>(k - pow5_128_smallest_power);
26428|   138k|    uint128_parts r{pow5_128()[i + 1], pow5_128()[i]};
26429|   138k|    const std::uint64_t adjust = static_cast<unsigned>(k + 27) < 27u ? 1u : 0u;
  ------------------
  |  Branch (26429:34): [True: 7.37k, False: 131k]
  ------------------
26430|   138k|    r.high -= r.low < adjust ? 1u : 0u;
  ------------------
  |  Branch (26430:15): [True: 0, False: 138k]
  ------------------
26431|   138k|    r.low -= adjust;
26432|   138k|    return r;
26433|   142k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij13compute_pow10Ei:
26392|  4.38k|{
26393|  4.38k|    const auto i = static_cast<unsigned>(k + 307);
26394|  4.38k|    const std::uint64_t m = pow10_minor()[(i + 24) % 28];
26395|  4.38k|    const std::size_t j = 2 * static_cast<std::size_t>((i + 24) / 28);
26396|  4.38k|    const std::uint64_t h_hi = pow10_major()[j];
26397|  4.38k|    const std::uint64_t h_lo = pow10_major()[j + 1];
26398|  4.38k|    const std::uint64_t h1 = full_multiplication(h_lo, m).high;
26399|  4.38k|    const std::uint64_t c0 = h_lo * m;
26400|  4.38k|    const std::uint64_t c1 = h1 + (h_hi * m);
26401|  4.38k|    const std::uint64_t c2 = (c1 < h1 ? 1u : 0u) + full_multiplication(h_hi, m).high;
  ------------------
  |  Branch (26401:31): [True: 468, False: 3.91k]
  ------------------
26402|  4.38k|    uint128_parts r{};
26403|  4.38k|    if ((c2 >> 63u) != 0)
  ------------------
  |  Branch (26403:9): [True: 1.01k, False: 3.37k]
  ------------------
26404|  1.01k|    {
26405|  1.01k|        r.high = c2;
26406|  1.01k|        r.low = c1;
26407|  1.01k|    }
26408|  3.37k|    else
26409|  3.37k|    {
26410|  3.37k|        r.high = (c2 << 1u) | (c1 >> 63u);
26411|  3.37k|        r.low = (c1 << 1u) | (c0 >> 63u);
26412|  3.37k|    }
26413|  4.38k|    r.low -= (pow10_fixups()[i >> 5u] >> (i & 31u)) & 1u;
26414|  4.38k|    return r;
26415|  4.38k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij11pow10_minorEv:
26340|  4.38k|{
26341|  4.38k|    static const std::array<std::uint64_t, 28> table =
26342|  4.38k|    {
26343|  4.38k|        {
26344|  4.38k|            0x8000000000000000u, 0xa000000000000000u, 0xc800000000000000u, 0xfa00000000000000u, 0x9c40000000000000u,
26345|  4.38k|            0xc350000000000000u, 0xf424000000000000u, 0x9896800000000000u, 0xbebc200000000000u, 0xee6b280000000000u,
26346|  4.38k|            0x9502f90000000000u, 0xba43b74000000000u, 0xe8d4a51000000000u, 0x9184e72a00000000u, 0xb5e620f480000000u,
26347|  4.38k|            0xe35fa931a0000000u, 0x8e1bc9bf04000000u, 0xb1a2bc2ec5000000u, 0xde0b6b3a76400000u, 0x8ac7230489e80000u,
26348|  4.38k|            0xad78ebc5ac620000u, 0xd8d726b7177a8000u, 0x878678326eac9000u, 0xa968163f0a57b400u, 0xd3c21bcecceda100u,
26349|  4.38k|            0x84595161401484a0u, 0xa56fa5b99019a5c8u, 0xcecb8f27f4200f3au
26350|  4.38k|        }
26351|  4.38k|    };
26352|  4.38k|    return table;
26353|  4.38k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij11pow10_majorEv:
26357|  8.77k|{
26358|  8.77k|    static const std::array<std::uint64_t, 50> table =
26359|  8.77k|    {
26360|  8.77k|        {
26361|  8.77k|            0xaddcb9e83c6b1793u, 0xdf4abe242a1bbf3eu, 0xaf8e5410288e1b6fu, 0x07ecf0ae5ee44ddau, 0xb1442798f49ffb4au, 0x99cd11cfdf41779du,
26362|  8.77k|            0xb2fe3f0b8599ef07u, 0x861fa7e6dcb4aa15u, 0xb4bca50b065abe63u, 0x0fed077a756b53aau, 0xb67f6455292cbf08u, 0x1a3bc84c17b1d543u,
26363|  8.77k|            0xb84687c269ef3bfbu, 0x3d5d514f40eea742u, 0xba121a4650e4ddebu, 0x92f34d62616ce413u, 0xbbe226efb628afeau, 0x890489f70a55368cu,
26364|  8.77k|            0xbdb6b8e905cb600fu, 0x5400e987bbc1c921u, 0xbf8fdb78849a5f96u, 0xde98520472bdd034u, 0xc16d9a0095928a27u, 0x75b7053c0f178294u,
26365|  8.77k|            0xc350000000000000u, 0x0000000000000000u, 0xc5371912364ce305u, 0x6c28000000000000u, 0xc722f0ef9d80aad6u, 0x424d3ad2b7b97ef6u,
26366|  8.77k|            0xc913936dd571c84cu, 0x03bc3a19cd1e38eau, 0xcb090c8001ab551cu, 0x5cadf5bfd3072cc6u, 0xcd036837130890a1u, 0x36dba887c37a8c10u,
26367|  8.77k|            0xcf02b2c21207ef2eu, 0x94f967e45e03f4bcu, 0xd106f86e69d785c7u, 0xe13336d701beba52u, 0xd31045a8341ca07cu, 0x1ede48111209a051u,
26368|  8.77k|            0xd51ea6fa85785631u, 0x552a74227f3ea566u, 0xd732290fbacaf133u, 0xa97c177947ad4096u, 0xd94ad8b1c7380874u, 0x18375281ae7822bdu,
26369|  8.77k|            0xdb68c2ca82ed2a05u, 0xa67398db9f6820e1u
26370|  8.77k|        }
26371|  8.77k|    };
26372|  8.77k|    return table;
26373|  8.77k|}
_ZN8nlohmann16json_abi_v3_12_06detail19full_multiplicationEmm:
 9348|   461k|{
 9349|   461k|#if defined(__SIZEOF_INT128__)
 9350|   461k|    __extension__ using uint128 = unsigned __int128;
 9351|   461k|    const uint128 r = static_cast<uint128>(a) * b;
 9352|   461k|    return {static_cast<std::uint64_t>(r), static_cast<std::uint64_t>(r >> 64u)};
 9353|       |#elif defined(_MSC_VER) && defined(_M_X64)
 9354|       |    std::uint64_t high = 0;
 9355|       |    const std::uint64_t low = _umul128(a, b, &high);
 9356|       |    return {low, high};
 9357|       |#elif defined(_MSC_VER) && defined(_M_ARM64)
 9358|       |    return {a * b, __umulh(a, b)};
 9359|       |#else
 9360|       |    const std::uint64_t a_lo = a & 0xFFFFFFFFu;
 9361|       |    const std::uint64_t a_hi = a >> 32u;
 9362|       |    const std::uint64_t b_lo = b & 0xFFFFFFFFu;
 9363|       |    const std::uint64_t b_hi = b >> 32u;
 9364|       |    const std::uint64_t lo_lo = a_lo * b_lo;
 9365|       |    const std::uint64_t hi_lo = a_hi * b_lo;
 9366|       |    const std::uint64_t lo_hi = a_lo * b_hi;
 9367|       |    const std::uint64_t hi_hi = a_hi * b_hi;
 9368|       |    const std::uint64_t cross = (lo_lo >> 32u) + (hi_lo & 0xFFFFFFFFu) + lo_hi;
 9369|       |    return {(cross << 32u) | (lo_lo & 0xFFFFFFFFu), (hi_lo >> 32u) + (cross >> 32u) + hi_hi};
 9370|       |#endif
 9371|   461k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij12pow10_fixupsEv:
26377|  4.38k|{
26378|  4.38k|    static const std::array<std::uint32_t, 21> table =
26379|  4.38k|    {
26380|  4.38k|        {
26381|  4.38k|            0x8d8fc810u, 0x06100293u, 0x19000000u, 0x00100000u, 0x00000908u, 0x00000000u, 0x04e00300u, 0x3807e0b2u, 0x3d83d793u, 0x0006f5ccu,
26382|  4.38k|            0x00000000u, 0xffff0000u, 0x8076337du, 0x4ff45ba0u, 0x09405033u, 0x034376d9u, 0x09000000u, 0x4e100501u, 0x076d14dcu, 0xf964f45eu,
26383|  4.38k|            0x0000003du
26384|  4.38k|        }
26385|  4.38k|    };
26386|  4.38k|    return table;
26387|  4.38k|}
_ZN8nlohmann16json_abi_v3_12_06detail8pow5_128Ev:
 9468|   294k|{
 9469|   294k|    static const std::array<std::uint64_t, 1302> table =
 9470|   294k|    {
 9471|   294k|        {
 9472|   294k|            0xeef453d6923bd65au, 0x113faa2906a13b3fu, 0x9558b4661b6565f8u, 0x4ac7ca59a424c507u,
 9473|   294k|            0xbaaee17fa23ebf76u, 0x5d79bcf00d2df649u, 0xe95a99df8ace6f53u, 0xf4d82c2c107973dcu,
 9474|   294k|            0x91d8a02bb6c10594u, 0x79071b9b8a4be869u, 0xb64ec836a47146f9u, 0x9748e2826cdee284u,
 9475|   294k|            0xe3e27a444d8d98b7u, 0xfd1b1b2308169b25u, 0x8e6d8c6ab0787f72u, 0xfe30f0f5e50e20f7u,
 9476|   294k|            0xb208ef855c969f4fu, 0xbdbd2d335e51a935u, 0xde8b2b66b3bc4723u, 0xad2c788035e61382u,
 9477|   294k|            0x8b16fb203055ac76u, 0x4c3bcb5021afcc31u, 0xaddcb9e83c6b1793u, 0xdf4abe242a1bbf3du,
 9478|   294k|            0xd953e8624b85dd78u, 0xd71d6dad34a2af0du, 0x87d4713d6f33aa6bu, 0x8672648c40e5ad68u,
 9479|   294k|            0xa9c98d8ccb009506u, 0x680efdaf511f18c2u, 0xd43bf0effdc0ba48u, 0x0212bd1b2566def2u,
 9480|   294k|            0x84a57695fe98746du, 0x014bb630f7604b57u, 0xa5ced43b7e3e9188u, 0x419ea3bd35385e2du,
 9481|   294k|            0xcf42894a5dce35eau, 0x52064cac828675b9u, 0x818995ce7aa0e1b2u, 0x7343efebd1940993u,
 9482|   294k|            0xa1ebfb4219491a1fu, 0x1014ebe6c5f90bf8u, 0xca66fa129f9b60a6u, 0xd41a26e077774ef6u,
 9483|   294k|            0xfd00b897478238d0u, 0x8920b098955522b4u, 0x9e20735e8cb16382u, 0x55b46e5f5d5535b0u,
 9484|   294k|            0xc5a890362fddbc62u, 0xeb2189f734aa831du, 0xf712b443bbd52b7bu, 0xa5e9ec7501d523e4u,
 9485|   294k|            0x9a6bb0aa55653b2du, 0x47b233c92125366eu, 0xc1069cd4eabe89f8u, 0x999ec0bb696e840au,
 9486|   294k|            0xf148440a256e2c76u, 0xc00670ea43ca250du, 0x96cd2a865764dbcau, 0x380406926a5e5728u,
 9487|   294k|            0xbc807527ed3e12bcu, 0xc605083704f5ecf2u, 0xeba09271e88d976bu, 0xf7864a44c633682eu,
 9488|   294k|            0x93445b8731587ea3u, 0x7ab3ee6afbe0211du, 0xb8157268fdae9e4cu, 0x5960ea05bad82964u,
 9489|   294k|            0xe61acf033d1a45dfu, 0x6fb92487298e33bdu, 0x8fd0c16206306babu, 0xa5d3b6d479f8e056u,
 9490|   294k|            0xb3c4f1ba87bc8696u, 0x8f48a4899877186cu, 0xe0b62e2929aba83cu, 0x331acdabfe94de87u,
 9491|   294k|            0x8c71dcd9ba0b4925u, 0x9ff0c08b7f1d0b14u, 0xaf8e5410288e1b6fu, 0x07ecf0ae5ee44dd9u,
 9492|   294k|            0xdb71e91432b1a24au, 0xc9e82cd9f69d6150u, 0x892731ac9faf056eu, 0xbe311c083a225cd2u,
 9493|   294k|            0xab70fe17c79ac6cau, 0x6dbd630a48aaf406u, 0xd64d3d9db981787du, 0x092cbbccdad5b108u,
 9494|   294k|            0x85f0468293f0eb4eu, 0x25bbf56008c58ea5u, 0xa76c582338ed2621u, 0xaf2af2b80af6f24eu,
 9495|   294k|            0xd1476e2c07286faau, 0x1af5af660db4aee1u, 0x82cca4db847945cau, 0x50d98d9fc890ed4du,
 9496|   294k|            0xa37fce126597973cu, 0xe50ff107bab528a0u, 0xcc5fc196fefd7d0cu, 0x1e53ed49a96272c8u,
 9497|   294k|            0xff77b1fcbebcdc4fu, 0x25e8e89c13bb0f7au, 0x9faacf3df73609b1u, 0x77b191618c54e9acu,
 9498|   294k|            0xc795830d75038c1du, 0xd59df5b9ef6a2417u, 0xf97ae3d0d2446f25u, 0x4b0573286b44ad1du,
 9499|   294k|            0x9becce62836ac577u, 0x4ee367f9430aec32u, 0xc2e801fb244576d5u, 0x229c41f793cda73fu,
 9500|   294k|            0xf3a20279ed56d48au, 0x6b43527578c1110fu, 0x9845418c345644d6u, 0x830a13896b78aaa9u,
 9501|   294k|            0xbe5691ef416bd60cu, 0x23cc986bc656d553u, 0xedec366b11c6cb8fu, 0x2cbfbe86b7ec8aa8u,
 9502|   294k|            0x94b3a202eb1c3f39u, 0x7bf7d71432f3d6a9u, 0xb9e08a83a5e34f07u, 0xdaf5ccd93fb0cc53u,
 9503|   294k|            0xe858ad248f5c22c9u, 0xd1b3400f8f9cff68u, 0x91376c36d99995beu, 0x23100809b9c21fa1u,
 9504|   294k|            0xb58547448ffffb2du, 0xabd40a0c2832a78au, 0xe2e69915b3fff9f9u, 0x16c90c8f323f516cu,
 9505|   294k|            0x8dd01fad907ffc3bu, 0xae3da7d97f6792e3u, 0xb1442798f49ffb4au, 0x99cd11cfdf41779cu,
 9506|   294k|            0xdd95317f31c7fa1du, 0x40405643d711d583u, 0x8a7d3eef7f1cfc52u, 0x482835ea666b2572u,
 9507|   294k|            0xad1c8eab5ee43b66u, 0xda3243650005eecfu, 0xd863b256369d4a40u, 0x90bed43e40076a82u,
 9508|   294k|            0x873e4f75e2224e68u, 0x5a7744a6e804a291u, 0xa90de3535aaae202u, 0x711515d0a205cb36u,
 9509|   294k|            0xd3515c2831559a83u, 0x0d5a5b44ca873e03u, 0x8412d9991ed58091u, 0xe858790afe9486c2u,
 9510|   294k|            0xa5178fff668ae0b6u, 0x626e974dbe39a872u, 0xce5d73ff402d98e3u, 0xfb0a3d212dc8128fu,
 9511|   294k|            0x80fa687f881c7f8eu, 0x7ce66634bc9d0b99u, 0xa139029f6a239f72u, 0x1c1fffc1ebc44e80u,
 9512|   294k|            0xc987434744ac874eu, 0xa327ffb266b56220u, 0xfbe9141915d7a922u, 0x4bf1ff9f0062baa8u,
 9513|   294k|            0x9d71ac8fada6c9b5u, 0x6f773fc3603db4a9u, 0xc4ce17b399107c22u, 0xcb550fb4384d21d3u,
 9514|   294k|            0xf6019da07f549b2bu, 0x7e2a53a146606a48u, 0x99c102844f94e0fbu, 0x2eda7444cbfc426du,
 9515|   294k|            0xc0314325637a1939u, 0xfa911155fefb5308u, 0xf03d93eebc589f88u, 0x793555ab7eba27cau,
 9516|   294k|            0x96267c7535b763b5u, 0x4bc1558b2f3458deu, 0xbbb01b9283253ca2u, 0x9eb1aaedfb016f16u,
 9517|   294k|            0xea9c227723ee8bcbu, 0x465e15a979c1cadcu, 0x92a1958a7675175fu, 0x0bfacd89ec191ec9u,
 9518|   294k|            0xb749faed14125d36u, 0xcef980ec671f667bu, 0xe51c79a85916f484u, 0x82b7e12780e7401au,
 9519|   294k|            0x8f31cc0937ae58d2u, 0xd1b2ecb8b0908810u, 0xb2fe3f0b8599ef07u, 0x861fa7e6dcb4aa15u,
 9520|   294k|            0xdfbdcece67006ac9u, 0x67a791e093e1d49au, 0x8bd6a141006042bdu, 0xe0c8bb2c5c6d24e0u,
 9521|   294k|            0xaecc49914078536du, 0x58fae9f773886e18u, 0xda7f5bf590966848u, 0xaf39a475506a899eu,
 9522|   294k|            0x888f99797a5e012du, 0x6d8406c952429603u, 0xaab37fd7d8f58178u, 0xc8e5087ba6d33b83u,
 9523|   294k|            0xd5605fcdcf32e1d6u, 0xfb1e4a9a90880a64u, 0x855c3be0a17fcd26u, 0x5cf2eea09a55067fu,
 9524|   294k|            0xa6b34ad8c9dfc06fu, 0xf42faa48c0ea481eu, 0xd0601d8efc57b08bu, 0xf13b94daf124da26u,
 9525|   294k|            0x823c12795db6ce57u, 0x76c53d08d6b70858u, 0xa2cb1717b52481edu, 0x54768c4b0c64ca6eu,
 9526|   294k|            0xcb7ddcdda26da268u, 0xa9942f5dcf7dfd09u, 0xfe5d54150b090b02u, 0xd3f93b35435d7c4cu,
 9527|   294k|            0x9efa548d26e5a6e1u, 0xc47bc5014a1a6dafu, 0xc6b8e9b0709f109au, 0x359ab6419ca1091bu,
 9528|   294k|            0xf867241c8cc6d4c0u, 0xc30163d203c94b62u, 0x9b407691d7fc44f8u, 0x79e0de63425dcf1du,
 9529|   294k|            0xc21094364dfb5636u, 0x985915fc12f542e4u, 0xf294b943e17a2bc4u, 0x3e6f5b7b17b2939du,
 9530|   294k|            0x979cf3ca6cec5b5au, 0xa705992ceecf9c42u, 0xbd8430bd08277231u, 0x50c6ff782a838353u,
 9531|   294k|            0xece53cec4a314ebdu, 0xa4f8bf5635246428u, 0x940f4613ae5ed136u, 0x871b7795e136be99u,
 9532|   294k|            0xb913179899f68584u, 0x28e2557b59846e3fu, 0xe757dd7ec07426e5u, 0x331aeada2fe589cfu,
 9533|   294k|            0x9096ea6f3848984fu, 0x3ff0d2c85def7621u, 0xb4bca50b065abe63u, 0x0fed077a756b53a9u,
 9534|   294k|            0xe1ebce4dc7f16dfbu, 0xd3e8495912c62894u, 0x8d3360f09cf6e4bdu, 0x64712dd7abbbd95cu,
 9535|   294k|            0xb080392cc4349decu, 0xbd8d794d96aacfb3u, 0xdca04777f541c567u, 0xecf0d7a0fc5583a0u,
 9536|   294k|            0x89e42caaf9491b60u, 0xf41686c49db57244u, 0xac5d37d5b79b6239u, 0x311c2875c522ced5u,
 9537|   294k|            0xd77485cb25823ac7u, 0x7d633293366b828bu, 0x86a8d39ef77164bcu, 0xae5dff9c02033197u,
 9538|   294k|            0xa8530886b54dbdebu, 0xd9f57f830283fdfcu, 0xd267caa862a12d66u, 0xd072df63c324fd7bu,
 9539|   294k|            0x8380dea93da4bc60u, 0x4247cb9e59f71e6du, 0xa46116538d0deb78u, 0x52d9be85f074e608u,
 9540|   294k|            0xcd795be870516656u, 0x67902e276c921f8bu, 0x806bd9714632dff6u, 0x00ba1cd8a3db53b6u,
 9541|   294k|            0xa086cfcd97bf97f3u, 0x80e8a40eccd228a4u, 0xc8a883c0fdaf7df0u, 0x6122cd128006b2cdu,
 9542|   294k|            0xfad2a4b13d1b5d6cu, 0x796b805720085f81u, 0x9cc3a6eec6311a63u, 0xcbe3303674053bb0u,
 9543|   294k|            0xc3f490aa77bd60fcu, 0xbedbfc4411068a9cu, 0xf4f1b4d515acb93bu, 0xee92fb5515482d44u,
 9544|   294k|            0x991711052d8bf3c5u, 0x751bdd152d4d1c4au, 0xbf5cd54678eef0b6u, 0xd262d45a78a0635du,
 9545|   294k|            0xef340a98172aace4u, 0x86fb897116c87c34u, 0x9580869f0e7aac0eu, 0xd45d35e6ae3d4da0u,
 9546|   294k|            0xbae0a846d2195712u, 0x8974836059cca109u, 0xe998d258869facd7u, 0x2bd1a438703fc94bu,
 9547|   294k|            0x91ff83775423cc06u, 0x7b6306a34627ddcfu, 0xb67f6455292cbf08u, 0x1a3bc84c17b1d542u,
 9548|   294k|            0xe41f3d6a7377eecau, 0x20caba5f1d9e4a93u, 0x8e938662882af53eu, 0x547eb47b7282ee9cu,
 9549|   294k|            0xb23867fb2a35b28du, 0xe99e619a4f23aa43u, 0xdec681f9f4c31f31u, 0x6405fa00e2ec94d4u,
 9550|   294k|            0x8b3c113c38f9f37eu, 0xde83bc408dd3dd04u, 0xae0b158b4738705eu, 0x9624ab50b148d445u,
 9551|   294k|            0xd98ddaee19068c76u, 0x3badd624dd9b0957u, 0x87f8a8d4cfa417c9u, 0xe54ca5d70a80e5d6u,
 9552|   294k|            0xa9f6d30a038d1dbcu, 0x5e9fcf4ccd211f4cu, 0xd47487cc8470652bu, 0x7647c3200069671fu,
 9553|   294k|            0x84c8d4dfd2c63f3bu, 0x29ecd9f40041e073u, 0xa5fb0a17c777cf09u, 0xf468107100525890u,
 9554|   294k|            0xcf79cc9db955c2ccu, 0x7182148d4066eeb4u, 0x81ac1fe293d599bfu, 0xc6f14cd848405530u,
 9555|   294k|            0xa21727db38cb002fu, 0xb8ada00e5a506a7cu, 0xca9cf1d206fdc03bu, 0xa6d90811f0e4851cu,
 9556|   294k|            0xfd442e4688bd304au, 0x908f4a166d1da663u, 0x9e4a9cec15763e2eu, 0x9a598e4e043287feu,
 9557|   294k|            0xc5dd44271ad3cdbau, 0x40eff1e1853f29fdu, 0xf7549530e188c128u, 0xd12bee59e68ef47cu,
 9558|   294k|            0x9a94dd3e8cf578b9u, 0x82bb74f8301958ceu, 0xc13a148e3032d6e7u, 0xe36a52363c1faf01u,
 9559|   294k|            0xf18899b1bc3f8ca1u, 0xdc44e6c3cb279ac1u, 0x96f5600f15a7b7e5u, 0x29ab103a5ef8c0b9u,
 9560|   294k|            0xbcb2b812db11a5deu, 0x7415d448f6b6f0e7u, 0xebdf661791d60f56u, 0x111b495b3464ad21u,
 9561|   294k|            0x936b9fcebb25c995u, 0xcab10dd900beec34u, 0xb84687c269ef3bfbu, 0x3d5d514f40eea742u,
 9562|   294k|            0xe65829b3046b0afau, 0x0cb4a5a3112a5112u, 0x8ff71a0fe2c2e6dcu, 0x47f0e785eaba72abu,
 9563|   294k|            0xb3f4e093db73a093u, 0x59ed216765690f56u, 0xe0f218b8d25088b8u, 0x306869c13ec3532cu,
 9564|   294k|            0x8c974f7383725573u, 0x1e414218c73a13fbu, 0xafbd2350644eeacfu, 0xe5d1929ef90898fau,
 9565|   294k|            0xdbac6c247d62a583u, 0xdf45f746b74abf39u, 0x894bc396ce5da772u, 0x6b8bba8c328eb783u,
 9566|   294k|            0xab9eb47c81f5114fu, 0x066ea92f3f326564u, 0xd686619ba27255a2u, 0xc80a537b0efefebdu,
 9567|   294k|            0x8613fd0145877585u, 0xbd06742ce95f5f36u, 0xa798fc4196e952e7u, 0x2c48113823b73704u,
 9568|   294k|            0xd17f3b51fca3a7a0u, 0xf75a15862ca504c5u, 0x82ef85133de648c4u, 0x9a984d73dbe722fbu,
 9569|   294k|            0xa3ab66580d5fdaf5u, 0xc13e60d0d2e0ebbau, 0xcc963fee10b7d1b3u, 0x318df905079926a8u,
 9570|   294k|            0xffbbcfe994e5c61fu, 0xfdf17746497f7052u, 0x9fd561f1fd0f9bd3u, 0xfeb6ea8bedefa633u,
 9571|   294k|            0xc7caba6e7c5382c8u, 0xfe64a52ee96b8fc0u, 0xf9bd690a1b68637bu, 0x3dfdce7aa3c673b0u,
 9572|   294k|            0x9c1661a651213e2du, 0x06bea10ca65c084eu, 0xc31bfa0fe5698db8u, 0x486e494fcff30a62u,
 9573|   294k|            0xf3e2f893dec3f126u, 0x5a89dba3c3efccfau, 0x986ddb5c6b3a76b7u, 0xf89629465a75e01cu,
 9574|   294k|            0xbe89523386091465u, 0xf6bbb397f1135823u, 0xee2ba6c0678b597fu, 0x746aa07ded582e2cu,
 9575|   294k|            0x94db483840b717efu, 0xa8c2a44eb4571cdcu, 0xba121a4650e4ddebu, 0x92f34d62616ce413u,
 9576|   294k|            0xe896a0d7e51e1566u, 0x77b020baf9c81d17u, 0x915e2486ef32cd60u, 0x0ace1474dc1d122eu,
 9577|   294k|            0xb5b5ada8aaff80b8u, 0x0d819992132456bau, 0xe3231912d5bf60e6u, 0x10e1fff697ed6c69u,
 9578|   294k|            0x8df5efabc5979c8fu, 0xca8d3ffa1ef463c1u, 0xb1736b96b6fd83b3u, 0xbd308ff8a6b17cb2u,
 9579|   294k|            0xddd0467c64bce4a0u, 0xac7cb3f6d05ddbdeu, 0x8aa22c0dbef60ee4u, 0x6bcdf07a423aa96bu,
 9580|   294k|            0xad4ab7112eb3929du, 0x86c16c98d2c953c6u, 0xd89d64d57a607744u, 0xe871c7bf077ba8b7u,
 9581|   294k|            0x87625f056c7c4a8bu, 0x11471cd764ad4972u, 0xa93af6c6c79b5d2du, 0xd598e40d3dd89bcfu,
 9582|   294k|            0xd389b47879823479u, 0x4aff1d108d4ec2c3u, 0x843610cb4bf160cbu, 0xcedf722a585139bau,
 9583|   294k|            0xa54394fe1eedb8feu, 0xc2974eb4ee658828u, 0xce947a3da6a9273eu, 0x733d226229feea32u,
 9584|   294k|            0x811ccc668829b887u, 0x0806357d5a3f525fu, 0xa163ff802a3426a8u, 0xca07c2dcb0cf26f7u,
 9585|   294k|            0xc9bcff6034c13052u, 0xfc89b393dd02f0b5u, 0xfc2c3f3841f17c67u, 0xbbac2078d443ace2u,
 9586|   294k|            0x9d9ba7832936edc0u, 0xd54b944b84aa4c0du, 0xc5029163f384a931u, 0x0a9e795e65d4df11u,
 9587|   294k|            0xf64335bcf065d37du, 0x4d4617b5ff4a16d5u, 0x99ea0196163fa42eu, 0x504bced1bf8e4e45u,
 9588|   294k|            0xc06481fb9bcf8d39u, 0xe45ec2862f71e1d6u, 0xf07da27a82c37088u, 0x5d767327bb4e5a4cu,
 9589|   294k|            0x964e858c91ba2655u, 0x3a6a07f8d510f86fu, 0xbbe226efb628afeau, 0x890489f70a55368bu,
 9590|   294k|            0xeadab0aba3b2dbe5u, 0x2b45ac74ccea842eu, 0x92c8ae6b464fc96fu, 0x3b0b8bc90012929du,
 9591|   294k|            0xb77ada0617e3bbcbu, 0x09ce6ebb40173744u, 0xe55990879ddcaabdu, 0xcc420a6a101d0515u,
 9592|   294k|            0x8f57fa54c2a9eab6u, 0x9fa946824a12232du, 0xb32df8e9f3546564u, 0x47939822dc96abf9u,
 9593|   294k|            0xdff9772470297ebdu, 0x59787e2b93bc56f7u, 0x8bfbea76c619ef36u, 0x57eb4edb3c55b65au,
 9594|   294k|            0xaefae51477a06b03u, 0xede622920b6b23f1u, 0xdab99e59958885c4u, 0xe95fab368e45ecedu,
 9595|   294k|            0x88b402f7fd75539bu, 0x11dbcb0218ebb414u, 0xaae103b5fcd2a881u, 0xd652bdc29f26a119u,
 9596|   294k|            0xd59944a37c0752a2u, 0x4be76d3346f0495fu, 0x857fcae62d8493a5u, 0x6f70a4400c562ddbu,
 9597|   294k|            0xa6dfbd9fb8e5b88eu, 0xcb4ccd500f6bb952u, 0xd097ad07a71f26b2u, 0x7e2000a41346a7a7u,
 9598|   294k|            0x825ecc24c873782fu, 0x8ed400668c0c28c8u, 0xa2f67f2dfa90563bu, 0x728900802f0f32fau,
 9599|   294k|            0xcbb41ef979346bcau, 0x4f2b40a03ad2ffb9u, 0xfea126b7d78186bcu, 0xe2f610c84987bfa8u,
 9600|   294k|            0x9f24b832e6b0f436u, 0x0dd9ca7d2df4d7c9u, 0xc6ede63fa05d3143u, 0x91503d1c79720dbbu,
 9601|   294k|            0xf8a95fcf88747d94u, 0x75a44c6397ce912au, 0x9b69dbe1b548ce7cu, 0xc986afbe3ee11abau,
 9602|   294k|            0xc24452da229b021bu, 0xfbe85badce996168u, 0xf2d56790ab41c2a2u, 0xfae27299423fb9c3u,
 9603|   294k|            0x97c560ba6b0919a5u, 0xdccd879fc967d41au, 0xbdb6b8e905cb600fu, 0x5400e987bbc1c920u,
 9604|   294k|            0xed246723473e3813u, 0x290123e9aab23b68u, 0x9436c0760c86e30bu, 0xf9a0b6720aaf6521u,
 9605|   294k|            0xb94470938fa89bceu, 0xf808e40e8d5b3e69u, 0xe7958cb87392c2c2u, 0xb60b1d1230b20e04u,
 9606|   294k|            0x90bd77f3483bb9b9u, 0xb1c6f22b5e6f48c2u, 0xb4ecd5f01a4aa828u, 0x1e38aeb6360b1af3u,
 9607|   294k|            0xe2280b6c20dd5232u, 0x25c6da63c38de1b0u, 0x8d590723948a535fu, 0x579c487e5a38ad0eu,
 9608|   294k|            0xb0af48ec79ace837u, 0x2d835a9df0c6d851u, 0xdcdb1b2798182244u, 0xf8e431456cf88e65u,
 9609|   294k|            0x8a08f0f8bf0f156bu, 0x1b8e9ecb641b58ffu, 0xac8b2d36eed2dac5u, 0xe272467e3d222f3fu,
 9610|   294k|            0xd7adf884aa879177u, 0x5b0ed81dcc6abb0fu, 0x86ccbb52ea94baeau, 0x98e947129fc2b4e9u,
 9611|   294k|            0xa87fea27a539e9a5u, 0x3f2398d747b36224u, 0xd29fe4b18e88640eu, 0x8eec7f0d19a03aadu,
 9612|   294k|            0x83a3eeeef9153e89u, 0x1953cf68300424acu, 0xa48ceaaab75a8e2bu, 0x5fa8c3423c052dd7u,
 9613|   294k|            0xcdb02555653131b6u, 0x3792f412cb06794du, 0x808e17555f3ebf11u, 0xe2bbd88bbee40bd0u,
 9614|   294k|            0xa0b19d2ab70e6ed6u, 0x5b6aceaeae9d0ec4u, 0xc8de047564d20a8bu, 0xf245825a5a445275u,
 9615|   294k|            0xfb158592be068d2eu, 0xeed6e2f0f0d56712u, 0x9ced737bb6c4183du, 0x55464dd69685606bu,
 9616|   294k|            0xc428d05aa4751e4cu, 0xaa97e14c3c26b886u, 0xf53304714d9265dfu, 0xd53dd99f4b3066a8u,
 9617|   294k|            0x993fe2c6d07b7fabu, 0xe546a8038efe4029u, 0xbf8fdb78849a5f96u, 0xde98520472bdd033u,
 9618|   294k|            0xef73d256a5c0f77cu, 0x963e66858f6d4440u, 0x95a8637627989aadu, 0xdde7001379a44aa8u,
 9619|   294k|            0xbb127c53b17ec159u, 0x5560c018580d5d52u, 0xe9d71b689dde71afu, 0xaab8f01e6e10b4a6u,
 9620|   294k|            0x9226712162ab070du, 0xcab3961304ca70e8u, 0xb6b00d69bb55c8d1u, 0x3d607b97c5fd0d22u,
 9621|   294k|            0xe45c10c42a2b3b05u, 0x8cb89a7db77c506au, 0x8eb98a7a9a5b04e3u, 0x77f3608e92adb242u,
 9622|   294k|            0xb267ed1940f1c61cu, 0x55f038b237591ed3u, 0xdf01e85f912e37a3u, 0x6b6c46dec52f6688u,
 9623|   294k|            0x8b61313bbabce2c6u, 0x2323ac4b3b3da015u, 0xae397d8aa96c1b77u, 0xabec975e0a0d081au,
 9624|   294k|            0xd9c7dced53c72255u, 0x96e7bd358c904a21u, 0x881cea14545c7575u, 0x7e50d64177da2e54u,
 9625|   294k|            0xaa242499697392d2u, 0xdde50bd1d5d0b9e9u, 0xd4ad2dbfc3d07787u, 0x955e4ec64b44e864u,
 9626|   294k|            0x84ec3c97da624ab4u, 0xbd5af13bef0b113eu, 0xa6274bbdd0fadd61u, 0xecb1ad8aeacdd58eu,
 9627|   294k|            0xcfb11ead453994bau, 0x67de18eda5814af2u, 0x81ceb32c4b43fcf4u, 0x80eacf948770ced7u,
 9628|   294k|            0xa2425ff75e14fc31u, 0xa1258379a94d028du, 0xcad2f7f5359a3b3eu, 0x096ee45813a04330u,
 9629|   294k|            0xfd87b5f28300ca0du, 0x8bca9d6e188853fcu, 0x9e74d1b791e07e48u, 0x775ea264cf55347eu,
 9630|   294k|            0xc612062576589ddau, 0x95364afe032a819eu, 0xf79687aed3eec551u, 0x3a83ddbd83f52205u,
 9631|   294k|            0x9abe14cd44753b52u, 0xc4926a9672793543u, 0xc16d9a0095928a27u, 0x75b7053c0f178294u,
 9632|   294k|            0xf1c90080baf72cb1u, 0x5324c68b12dd6339u, 0x971da05074da7beeu, 0xd3f6fc16ebca5e04u,
 9633|   294k|            0xbce5086492111aeau, 0x88f4bb1ca6bcf585u, 0xec1e4a7db69561a5u, 0x2b31e9e3d06c32e6u,
 9634|   294k|            0x9392ee8e921d5d07u, 0x3aff322e62439fd0u, 0xb877aa3236a4b449u, 0x09befeb9fad487c3u,
 9635|   294k|            0xe69594bec44de15bu, 0x4c2ebe687989a9b4u, 0x901d7cf73ab0acd9u, 0x0f9d37014bf60a11u,
 9636|   294k|            0xb424dc35095cd80fu, 0x538484c19ef38c95u, 0xe12e13424bb40e13u, 0x2865a5f206b06fbau,
 9637|   294k|            0x8cbccc096f5088cbu, 0xf93f87b7442e45d4u, 0xafebff0bcb24aafeu, 0xf78f69a51539d749u,
 9638|   294k|            0xdbe6fecebdedd5beu, 0xb573440e5a884d1cu, 0x89705f4136b4a597u, 0x31680a88f8953031u,
 9639|   294k|            0xabcc77118461cefcu, 0xfdc20d2b36ba7c3eu, 0xd6bf94d5e57a42bcu, 0x3d32907604691b4du,
 9640|   294k|            0x8637bd05af6c69b5u, 0xa63f9a49c2c1b110u, 0xa7c5ac471b478423u, 0x0fcf80dc33721d54u,
 9641|   294k|            0xd1b71758e219652bu, 0xd3c36113404ea4a9u, 0x83126e978d4fdf3bu, 0x645a1cac083126eau,
 9642|   294k|            0xa3d70a3d70a3d70au, 0x3d70a3d70a3d70a4u, 0xccccccccccccccccu, 0xcccccccccccccccdu,
 9643|   294k|            0x8000000000000000u, 0x0000000000000000u, 0xa000000000000000u, 0x0000000000000000u,
 9644|   294k|            0xc800000000000000u, 0x0000000000000000u, 0xfa00000000000000u, 0x0000000000000000u,
 9645|   294k|            0x9c40000000000000u, 0x0000000000000000u, 0xc350000000000000u, 0x0000000000000000u,
 9646|   294k|            0xf424000000000000u, 0x0000000000000000u, 0x9896800000000000u, 0x0000000000000000u,
 9647|   294k|            0xbebc200000000000u, 0x0000000000000000u, 0xee6b280000000000u, 0x0000000000000000u,
 9648|   294k|            0x9502f90000000000u, 0x0000000000000000u, 0xba43b74000000000u, 0x0000000000000000u,
 9649|   294k|            0xe8d4a51000000000u, 0x0000000000000000u, 0x9184e72a00000000u, 0x0000000000000000u,
 9650|   294k|            0xb5e620f480000000u, 0x0000000000000000u, 0xe35fa931a0000000u, 0x0000000000000000u,
 9651|   294k|            0x8e1bc9bf04000000u, 0x0000000000000000u, 0xb1a2bc2ec5000000u, 0x0000000000000000u,
 9652|   294k|            0xde0b6b3a76400000u, 0x0000000000000000u, 0x8ac7230489e80000u, 0x0000000000000000u,
 9653|   294k|            0xad78ebc5ac620000u, 0x0000000000000000u, 0xd8d726b7177a8000u, 0x0000000000000000u,
 9654|   294k|            0x878678326eac9000u, 0x0000000000000000u, 0xa968163f0a57b400u, 0x0000000000000000u,
 9655|   294k|            0xd3c21bcecceda100u, 0x0000000000000000u, 0x84595161401484a0u, 0x0000000000000000u,
 9656|   294k|            0xa56fa5b99019a5c8u, 0x0000000000000000u, 0xcecb8f27f4200f3au, 0x0000000000000000u,
 9657|   294k|            0x813f3978f8940984u, 0x4000000000000000u, 0xa18f07d736b90be5u, 0x5000000000000000u,
 9658|   294k|            0xc9f2c9cd04674edeu, 0xa400000000000000u, 0xfc6f7c4045812296u, 0x4d00000000000000u,
 9659|   294k|            0x9dc5ada82b70b59du, 0xf020000000000000u, 0xc5371912364ce305u, 0x6c28000000000000u,
 9660|   294k|            0xf684df56c3e01bc6u, 0xc732000000000000u, 0x9a130b963a6c115cu, 0x3c7f400000000000u,
 9661|   294k|            0xc097ce7bc90715b3u, 0x4b9f100000000000u, 0xf0bdc21abb48db20u, 0x1e86d40000000000u,
 9662|   294k|            0x96769950b50d88f4u, 0x1314448000000000u, 0xbc143fa4e250eb31u, 0x17d955a000000000u,
 9663|   294k|            0xeb194f8e1ae525fdu, 0x5dcfab0800000000u, 0x92efd1b8d0cf37beu, 0x5aa1cae500000000u,
 9664|   294k|            0xb7abc627050305adu, 0xf14a3d9e40000000u, 0xe596b7b0c643c719u, 0x6d9ccd05d0000000u,
 9665|   294k|            0x8f7e32ce7bea5c6fu, 0xe4820023a2000000u, 0xb35dbf821ae4f38bu, 0xdda2802c8a800000u,
 9666|   294k|            0xe0352f62a19e306eu, 0xd50b2037ad200000u, 0x8c213d9da502de45u, 0x4526f422cc340000u,
 9667|   294k|            0xaf298d050e4395d6u, 0x9670b12b7f410000u, 0xdaf3f04651d47b4cu, 0x3c0cdd765f114000u,
 9668|   294k|            0x88d8762bf324cd0fu, 0xa5880a69fb6ac800u, 0xab0e93b6efee0053u, 0x8eea0d047a457a00u,
 9669|   294k|            0xd5d238a4abe98068u, 0x72a4904598d6d880u, 0x85a36366eb71f041u, 0x47a6da2b7f864750u,
 9670|   294k|            0xa70c3c40a64e6c51u, 0x999090b65f67d924u, 0xd0cf4b50cfe20765u, 0xfff4b4e3f741cf6du,
 9671|   294k|            0x82818f1281ed449fu, 0xbff8f10e7a8921a4u, 0xa321f2d7226895c7u, 0xaff72d52192b6a0du,
 9672|   294k|            0xcbea6f8ceb02bb39u, 0x9bf4f8a69f764490u, 0xfee50b7025c36a08u, 0x02f236d04753d5b4u,
 9673|   294k|            0x9f4f2726179a2245u, 0x01d762422c946590u, 0xc722f0ef9d80aad6u, 0x424d3ad2b7b97ef5u,
 9674|   294k|            0xf8ebad2b84e0d58bu, 0xd2e0898765a7deb2u, 0x9b934c3b330c8577u, 0x63cc55f49f88eb2fu,
 9675|   294k|            0xc2781f49ffcfa6d5u, 0x3cbf6b71c76b25fbu, 0xf316271c7fc3908au, 0x8bef464e3945ef7au,
 9676|   294k|            0x97edd871cfda3a56u, 0x97758bf0e3cbb5acu, 0xbde94e8e43d0c8ecu, 0x3d52eeed1cbea317u,
 9677|   294k|            0xed63a231d4c4fb27u, 0x4ca7aaa863ee4bddu, 0x945e455f24fb1cf8u, 0x8fe8caa93e74ef6au,
 9678|   294k|            0xb975d6b6ee39e436u, 0xb3e2fd538e122b44u, 0xe7d34c64a9c85d44u, 0x60dbbca87196b616u,
 9679|   294k|            0x90e40fbeea1d3a4au, 0xbc8955e946fe31cdu, 0xb51d13aea4a488ddu, 0x6babab6398bdbe41u,
 9680|   294k|            0xe264589a4dcdab14u, 0xc696963c7eed2dd1u, 0x8d7eb76070a08aecu, 0xfc1e1de5cf543ca2u,
 9681|   294k|            0xb0de65388cc8ada8u, 0x3b25a55f43294bcbu, 0xdd15fe86affad912u, 0x49ef0eb713f39ebeu,
 9682|   294k|            0x8a2dbf142dfcc7abu, 0x6e3569326c784337u, 0xacb92ed9397bf996u, 0x49c2c37f07965404u,
 9683|   294k|            0xd7e77a8f87daf7fbu, 0xdc33745ec97be906u, 0x86f0ac99b4e8dafdu, 0x69a028bb3ded71a3u,
 9684|   294k|            0xa8acd7c0222311bcu, 0xc40832ea0d68ce0cu, 0xd2d80db02aabd62bu, 0xf50a3fa490c30190u,
 9685|   294k|            0x83c7088e1aab65dbu, 0x792667c6da79e0fau, 0xa4b8cab1a1563f52u, 0x577001b891185938u,
 9686|   294k|            0xcde6fd5e09abcf26u, 0xed4c0226b55e6f86u, 0x80b05e5ac60b6178u, 0x544f8158315b05b4u,
 9687|   294k|            0xa0dc75f1778e39d6u, 0x696361ae3db1c721u, 0xc913936dd571c84cu, 0x03bc3a19cd1e38e9u,
 9688|   294k|            0xfb5878494ace3a5fu, 0x04ab48a04065c723u, 0x9d174b2dcec0e47bu, 0x62eb0d64283f9c76u,
 9689|   294k|            0xc45d1df942711d9au, 0x3ba5d0bd324f8394u, 0xf5746577930d6500u, 0xca8f44ec7ee36479u,
 9690|   294k|            0x9968bf6abbe85f20u, 0x7e998b13cf4e1ecbu, 0xbfc2ef456ae276e8u, 0x9e3fedd8c321a67eu,
 9691|   294k|            0xefb3ab16c59b14a2u, 0xc5cfe94ef3ea101eu, 0x95d04aee3b80ece5u, 0xbba1f1d158724a12u,
 9692|   294k|            0xbb445da9ca61281fu, 0x2a8a6e45ae8edc97u, 0xea1575143cf97226u, 0xf52d09d71a3293bdu,
 9693|   294k|            0x924d692ca61be758u, 0x593c2626705f9c56u, 0xb6e0c377cfa2e12eu, 0x6f8b2fb00c77836cu,
 9694|   294k|            0xe498f455c38b997au, 0x0b6dfb9c0f956447u, 0x8edf98b59a373fecu, 0x4724bd4189bd5eacu,
 9695|   294k|            0xb2977ee300c50fe7u, 0x58edec91ec2cb657u, 0xdf3d5e9bc0f653e1u, 0x2f2967b66737e3edu,
 9696|   294k|            0x8b865b215899f46cu, 0xbd79e0d20082ee74u, 0xae67f1e9aec07187u, 0xecd8590680a3aa11u,
 9697|   294k|            0xda01ee641a708de9u, 0xe80e6f4820cc9495u, 0x884134fe908658b2u, 0x3109058d147fdcddu,
 9698|   294k|            0xaa51823e34a7eedeu, 0xbd4b46f0599fd415u, 0xd4e5e2cdc1d1ea96u, 0x6c9e18ac7007c91au,
 9699|   294k|            0x850fadc09923329eu, 0x03e2cf6bc604ddb0u, 0xa6539930bf6bff45u, 0x84db8346b786151cu,
 9700|   294k|            0xcfe87f7cef46ff16u, 0xe612641865679a63u, 0x81f14fae158c5f6eu, 0x4fcb7e8f3f60c07eu,
 9701|   294k|            0xa26da3999aef7749u, 0xe3be5e330f38f09du, 0xcb090c8001ab551cu, 0x5cadf5bfd3072cc5u,
 9702|   294k|            0xfdcb4fa002162a63u, 0x73d9732fc7c8f7f6u, 0x9e9f11c4014dda7eu, 0x2867e7fddcdd9afau,
 9703|   294k|            0xc646d63501a1511du, 0xb281e1fd541501b8u, 0xf7d88bc24209a565u, 0x1f225a7ca91a4226u,
 9704|   294k|            0x9ae757596946075fu, 0x3375788de9b06958u, 0xc1a12d2fc3978937u, 0x0052d6b1641c83aeu,
 9705|   294k|            0xf209787bb47d6b84u, 0xc0678c5dbd23a49au, 0x9745eb4d50ce6332u, 0xf840b7ba963646e0u,
 9706|   294k|            0xbd176620a501fbffu, 0xb650e5a93bc3d898u, 0xec5d3fa8ce427affu, 0xa3e51f138ab4cebeu,
 9707|   294k|            0x93ba47c980e98cdfu, 0xc66f336c36b10137u, 0xb8a8d9bbe123f017u, 0xb80b0047445d4184u,
 9708|   294k|            0xe6d3102ad96cec1du, 0xa60dc059157491e5u, 0x9043ea1ac7e41392u, 0x87c89837ad68db2fu,
 9709|   294k|            0xb454e4a179dd1877u, 0x29babe4598c311fbu, 0xe16a1dc9d8545e94u, 0xf4296dd6fef3d67au,
 9710|   294k|            0x8ce2529e2734bb1du, 0x1899e4a65f58660cu, 0xb01ae745b101e9e4u, 0x5ec05dcff72e7f8fu,
 9711|   294k|            0xdc21a1171d42645du, 0x76707543f4fa1f73u, 0x899504ae72497ebau, 0x6a06494a791c53a8u,
 9712|   294k|            0xabfa45da0edbde69u, 0x0487db9d17636892u, 0xd6f8d7509292d603u, 0x45a9d2845d3c42b6u,
 9713|   294k|            0x865b86925b9bc5c2u, 0x0b8a2392ba45a9b2u, 0xa7f26836f282b732u, 0x8e6cac7768d7141eu,
 9714|   294k|            0xd1ef0244af2364ffu, 0x3207d795430cd926u, 0x8335616aed761f1fu, 0x7f44e6bd49e807b8u,
 9715|   294k|            0xa402b9c5a8d3a6e7u, 0x5f16206c9c6209a6u, 0xcd036837130890a1u, 0x36dba887c37a8c0fu,
 9716|   294k|            0x802221226be55a64u, 0xc2494954da2c9789u, 0xa02aa96b06deb0fdu, 0xf2db9baa10b7bd6cu,
 9717|   294k|            0xc83553c5c8965d3du, 0x6f92829494e5acc7u, 0xfa42a8b73abbf48cu, 0xcb772339ba1f17f9u,
 9718|   294k|            0x9c69a97284b578d7u, 0xff2a760414536efbu, 0xc38413cf25e2d70du, 0xfef5138519684abau,
 9719|   294k|            0xf46518c2ef5b8cd1u, 0x7eb258665fc25d69u, 0x98bf2f79d5993802u, 0xef2f773ffbd97a61u,
 9720|   294k|            0xbeeefb584aff8603u, 0xaafb550ffacfd8fau, 0xeeaaba2e5dbf6784u, 0x95ba2a53f983cf38u,
 9721|   294k|            0x952ab45cfa97a0b2u, 0xdd945a747bf26183u, 0xba756174393d88dfu, 0x94f971119aeef9e4u,
 9722|   294k|            0xe912b9d1478ceb17u, 0x7a37cd5601aab85du, 0x91abb422ccb812eeu, 0xac62e055c10ab33au,
 9723|   294k|            0xb616a12b7fe617aau, 0x577b986b314d6009u, 0xe39c49765fdf9d94u, 0xed5a7e85fda0b80bu,
 9724|   294k|            0x8e41ade9fbebc27du, 0x14588f13be847307u, 0xb1d219647ae6b31cu, 0x596eb2d8ae258fc8u,
 9725|   294k|            0xde469fbd99a05fe3u, 0x6fca5f8ed9aef3bbu, 0x8aec23d680043beeu, 0x25de7bb9480d5854u,
 9726|   294k|            0xada72ccc20054ae9u, 0xaf561aa79a10ae6au, 0xd910f7ff28069da4u, 0x1b2ba1518094da04u,
 9727|   294k|            0x87aa9aff79042286u, 0x90fb44d2f05d0842u, 0xa99541bf57452b28u, 0x353a1607ac744a53u,
 9728|   294k|            0xd3fa922f2d1675f2u, 0x42889b8997915ce8u, 0x847c9b5d7c2e09b7u, 0x69956135febada11u,
 9729|   294k|            0xa59bc234db398c25u, 0x43fab9837e699095u, 0xcf02b2c21207ef2eu, 0x94f967e45e03f4bbu,
 9730|   294k|            0x8161afb94b44f57du, 0x1d1be0eebac278f5u, 0xa1ba1ba79e1632dcu, 0x6462d92a69731732u,
 9731|   294k|            0xca28a291859bbf93u, 0x7d7b8f7503cfdcfeu, 0xfcb2cb35e702af78u, 0x5cda735244c3d43eu,
 9732|   294k|            0x9defbf01b061adabu, 0x3a0888136afa64a7u, 0xc56baec21c7a1916u, 0x088aaa1845b8fdd0u,
 9733|   294k|            0xf6c69a72a3989f5bu, 0x8aad549e57273d45u, 0x9a3c2087a63f6399u, 0x36ac54e2f678864bu,
 9734|   294k|            0xc0cb28a98fcf3c7fu, 0x84576a1bb416a7ddu, 0xf0fdf2d3f3c30b9fu, 0x656d44a2a11c51d5u,
 9735|   294k|            0x969eb7c47859e743u, 0x9f644ae5a4b1b325u, 0xbc4665b596706114u, 0x873d5d9f0dde1feeu,
 9736|   294k|            0xeb57ff22fc0c7959u, 0xa90cb506d155a7eau, 0x9316ff75dd87cbd8u, 0x09a7f12442d588f2u,
 9737|   294k|            0xb7dcbf5354e9beceu, 0x0c11ed6d538aeb2fu, 0xe5d3ef282a242e81u, 0x8f1668c8a86da5fau,
 9738|   294k|            0x8fa475791a569d10u, 0xf96e017d694487bcu, 0xb38d92d760ec4455u, 0x37c981dcc395a9acu,
 9739|   294k|            0xe070f78d3927556au, 0x85bbe253f47b1417u, 0x8c469ab843b89562u, 0x93956d7478ccec8eu,
 9740|   294k|            0xaf58416654a6babbu, 0x387ac8d1970027b2u, 0xdb2e51bfe9d0696au, 0x06997b05fcc0319eu,
 9741|   294k|            0x88fcf317f22241e2u, 0x441fece3bdf81f03u, 0xab3c2fddeeaad25au, 0xd527e81cad7626c3u,
 9742|   294k|            0xd60b3bd56a5586f1u, 0x8a71e223d8d3b074u, 0x85c7056562757456u, 0xf6872d5667844e49u,
 9743|   294k|            0xa738c6bebb12d16cu, 0xb428f8ac016561dbu, 0xd106f86e69d785c7u, 0xe13336d701beba52u,
 9744|   294k|            0x82a45b450226b39cu, 0xecc0024661173473u, 0xa34d721642b06084u, 0x27f002d7f95d0190u,
 9745|   294k|            0xcc20ce9bd35c78a5u, 0x31ec038df7b441f4u, 0xff290242c83396ceu, 0x7e67047175a15271u,
 9746|   294k|            0x9f79a169bd203e41u, 0x0f0062c6e984d386u, 0xc75809c42c684dd1u, 0x52c07b78a3e60868u,
 9747|   294k|            0xf92e0c3537826145u, 0xa7709a56ccdf8a82u, 0x9bbcc7a142b17ccbu, 0x88a66076400bb691u,
 9748|   294k|            0xc2abf989935ddbfeu, 0x6acff893d00ea435u, 0xf356f7ebf83552feu, 0x0583f6b8c4124d43u,
 9749|   294k|            0x98165af37b2153deu, 0xc3727a337a8b704au, 0xbe1bf1b059e9a8d6u, 0x744f18c0592e4c5cu,
 9750|   294k|            0xeda2ee1c7064130cu, 0x1162def06f79df73u, 0x9485d4d1c63e8be7u, 0x8addcb5645ac2ba8u,
 9751|   294k|            0xb9a74a0637ce2ee1u, 0x6d953e2bd7173692u, 0xe8111c87c5c1ba99u, 0xc8fa8db6ccdd0437u,
 9752|   294k|            0x910ab1d4db9914a0u, 0x1d9c9892400a22a2u, 0xb54d5e4a127f59c8u, 0x2503beb6d00cab4bu,
 9753|   294k|            0xe2a0b5dc971f303au, 0x2e44ae64840fd61du, 0x8da471a9de737e24u, 0x5ceaecfed289e5d2u,
 9754|   294k|            0xb10d8e1456105dadu, 0x7425a83e872c5f47u, 0xdd50f1996b947518u, 0xd12f124e28f77719u,
 9755|   294k|            0x8a5296ffe33cc92fu, 0x82bd6b70d99aaa6fu, 0xace73cbfdc0bfb7bu, 0x636cc64d1001550bu,
 9756|   294k|            0xd8210befd30efa5au, 0x3c47f7e05401aa4eu, 0x8714a775e3e95c78u, 0x65acfaec34810a71u,
 9757|   294k|            0xa8d9d1535ce3b396u, 0x7f1839a741a14d0du, 0xd31045a8341ca07cu, 0x1ede48111209a050u,
 9758|   294k|            0x83ea2b892091e44du, 0x934aed0aab460432u, 0xa4e4b66b68b65d60u, 0xf81da84d5617853fu,
 9759|   294k|            0xce1de40642e3f4b9u, 0x36251260ab9d668eu, 0x80d2ae83e9ce78f3u, 0xc1d72b7c6b426019u,
 9760|   294k|            0xa1075a24e4421730u, 0xb24cf65b8612f81fu, 0xc94930ae1d529cfcu, 0xdee033f26797b627u,
 9761|   294k|            0xfb9b7cd9a4a7443cu, 0x169840ef017da3b1u, 0x9d412e0806e88aa5u, 0x8e1f289560ee864eu,
 9762|   294k|            0xc491798a08a2ad4eu, 0xf1a6f2bab92a27e2u, 0xf5b5d7ec8acb58a2u, 0xae10af696774b1dbu,
 9763|   294k|            0x9991a6f3d6bf1765u, 0xacca6da1e0a8ef29u, 0xbff610b0cc6edd3fu, 0x17fd090a58d32af3u,
 9764|   294k|            0xeff394dcff8a948eu, 0xddfc4b4cef07f5b0u, 0x95f83d0a1fb69cd9u, 0x4abdaf101564f98eu,
 9765|   294k|            0xbb764c4ca7a4440fu, 0x9d6d1ad41abe37f1u, 0xea53df5fd18d5513u, 0x84c86189216dc5edu,
 9766|   294k|            0x92746b9be2f8552cu, 0x32fd3cf5b4e49bb4u, 0xb7118682dbb66a77u, 0x3fbc8c33221dc2a1u,
 9767|   294k|            0xe4d5e82392a40515u, 0x0fabaf3feaa5334au, 0x8f05b1163ba6832du, 0x29cb4d87f2a7400eu,
 9768|   294k|            0xb2c71d5bca9023f8u, 0x743e20e9ef511012u, 0xdf78e4b2bd342cf6u, 0x914da9246b255416u,
 9769|   294k|            0x8bab8eefb6409c1au, 0x1ad089b6c2f7548eu, 0xae9672aba3d0c320u, 0xa184ac2473b529b1u,
 9770|   294k|            0xda3c0f568cc4f3e8u, 0xc9e5d72d90a2741eu, 0x8865899617fb1871u, 0x7e2fa67c7a658892u,
 9771|   294k|            0xaa7eebfb9df9de8du, 0xddbb901b98feeab7u, 0xd51ea6fa85785631u, 0x552a74227f3ea565u,
 9772|   294k|            0x8533285c936b35deu, 0xd53a88958f87275fu, 0xa67ff273b8460356u, 0x8a892abaf368f137u,
 9773|   294k|            0xd01fef10a657842cu, 0x2d2b7569b0432d85u, 0x8213f56a67f6b29bu, 0x9c3b29620e29fc73u,
 9774|   294k|            0xa298f2c501f45f42u, 0x8349f3ba91b47b8fu, 0xcb3f2f7642717713u, 0x241c70a936219a73u,
 9775|   294k|            0xfe0efb53d30dd4d7u, 0xed238cd383aa0110u, 0x9ec95d1463e8a506u, 0xf4363804324a40aau,
 9776|   294k|            0xc67bb4597ce2ce48u, 0xb143c6053edcd0d5u, 0xf81aa16fdc1b81dau, 0xdd94b7868e94050au,
 9777|   294k|            0x9b10a4e5e9913128u, 0xca7cf2b4191c8326u, 0xc1d4ce1f63f57d72u, 0xfd1c2f611f63a3f0u,
 9778|   294k|            0xf24a01a73cf2dccfu, 0xbc633b39673c8cecu, 0x976e41088617ca01u, 0xd5be0503e085d813u,
 9779|   294k|            0xbd49d14aa79dbc82u, 0x4b2d8644d8a74e18u, 0xec9c459d51852ba2u, 0xddf8e7d60ed1219eu,
 9780|   294k|            0x93e1ab8252f33b45u, 0xcabb90e5c942b503u, 0xb8da1662e7b00a17u, 0x3d6a751f3b936243u,
 9781|   294k|            0xe7109bfba19c0c9du, 0x0cc512670a783ad4u, 0x906a617d450187e2u, 0x27fb2b80668b24c5u,
 9782|   294k|            0xb484f9dc9641e9dau, 0xb1f9f660802dedf6u, 0xe1a63853bbd26451u, 0x5e7873f8a0396973u,
 9783|   294k|            0x8d07e33455637eb2u, 0xdb0b487b6423e1e8u, 0xb049dc016abc5e5fu, 0x91ce1a9a3d2cda62u,
 9784|   294k|            0xdc5c5301c56b75f7u, 0x7641a140cc7810fbu, 0x89b9b3e11b6329bau, 0xa9e904c87fcb0a9du,
 9785|   294k|            0xac2820d9623bf429u, 0x546345fa9fbdcd44u, 0xd732290fbacaf133u, 0xa97c177947ad4095u,
 9786|   294k|            0x867f59a9d4bed6c0u, 0x49ed8eabcccc485du, 0xa81f301449ee8c70u, 0x5c68f256bfff5a74u,
 9787|   294k|            0xd226fc195c6a2f8cu, 0x73832eec6fff3111u, 0x83585d8fd9c25db7u, 0xc831fd53c5ff7eabu,
 9788|   294k|            0xa42e74f3d032f525u, 0xba3e7ca8b77f5e55u, 0xcd3a1230c43fb26fu, 0x28ce1bd2e55f35ebu,
 9789|   294k|            0x80444b5e7aa7cf85u, 0x7980d163cf5b81b3u, 0xa0555e361951c366u, 0xd7e105bcc332621fu,
 9790|   294k|            0xc86ab5c39fa63440u, 0x8dd9472bf3fefaa7u, 0xfa856334878fc150u, 0xb14f98f6f0feb951u,
 9791|   294k|            0x9c935e00d4b9d8d2u, 0x6ed1bf9a569f33d3u, 0xc3b8358109e84f07u, 0x0a862f80ec4700c8u,
 9792|   294k|            0xf4a642e14c6262c8u, 0xcd27bb612758c0fau, 0x98e7e9cccfbd7dbdu, 0x8038d51cb897789cu,
 9793|   294k|            0xbf21e44003acdd2cu, 0xe0470a63e6bd56c3u, 0xeeea5d5004981478u, 0x1858ccfce06cac74u,
 9794|   294k|            0x95527a5202df0ccbu, 0x0f37801e0c43ebc8u, 0xbaa718e68396cffdu, 0xd30560258f54e6bau,
 9795|   294k|            0xe950df20247c83fdu, 0x47c6b82ef32a2069u, 0x91d28b7416cdd27eu, 0x4cdc331d57fa5441u,
 9796|   294k|            0xb6472e511c81471du, 0xe0133fe4adf8e952u, 0xe3d8f9e563a198e5u, 0x58180fddd97723a6u,
 9797|   294k|            0x8e679c2f5e44ff8fu, 0x570f09eaa7ea7648u,
 9798|   294k|        }
 9799|   294k|    };
 9800|   294k|    return table;
 9801|   294k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij13umul192_hi128Emmm:
26437|   142k|{
26438|   142k|    const uint128_parts p = full_multiplication(x_hi, y);
26439|   142k|    uint128_parts r{};
26440|   142k|    r.low = p.low + full_multiplication(x_lo, y).high;
26441|   142k|    r.high = p.high + (r.low < p.low ? 1u : 0u);
  ------------------
  |  Branch (26441:24): [True: 672, False: 142k]
  ------------------
26442|   142k|    return r;
26443|   142k|}
_ZN8nlohmann16json_abi_v3_12_06detail4zmij16umul128_add_hi64Emmm:
26447|   148k|{
26448|   148k|    const uint128_parts p = full_multiplication(x, y);
26449|   148k|    return p.high + (p.low + c < p.low ? 1u : 0u);
  ------------------
  |  Branch (26449:22): [True: 40.7k, False: 108k]
  ------------------
26450|   148k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl14write_shortestEPcNS1_4zmij16shortest_decimalE:
27689|   142k|{
27690|   142k|    const std::uint64_t sig = d.integral;
27691|   142k|    if (JSON_HEDLEY_UNLIKELY(sig < 100000000000000u || sig >= 10000000000000000u))
  ------------------
  |  | 1667|   282k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 2.81k, False: 140k]
  |  |  |  Branch (1667:94): [True: 2.81k, False: 140k]
  |  |  |  Branch (1667:94): [True: 0, False: 140k]
  |  |  ------------------
  ------------------
27692|  2.81k|    {
27693|       |        // (subnormals)
27694|  2.81k|        return d.has_digit ? write_decimal(first, (sig * 10) + d.digit, d.exponent) : write_decimal(first, sig, d.exponent + 1);
  ------------------
  |  Branch (27694:16): [True: 1.53k, False: 1.28k]
  ------------------
27695|  2.81k|    }
27696|   140k|    const bool sixteen = sig >= 1000000000000000u; // (else 15 digits)
27697|   140k|    const int last = d.has_digit ? d.digit : 0;
  ------------------
  |  Branch (27697:22): [True: 56.1k, False: 83.8k]
  ------------------
27698|   140k|    const std::uint64_t upper = sig / 100000000u;
27699|   140k|#if JSON_DTOA_SSE2
27700|       |    // NOLINTBEGIN(portability-simd-intrinsics)
27701|       |    // the two halves in the 64-bit lanes, each as abcd * 2^32 + efgh, then as
27702|       |    // bytes (as eight_digit_bytes(), one lane each)
27703|   140k|    const __m128i x = _mm_set_epi64x(static_cast<long long>(sig - (upper * 100000000u)), static_cast<long long>(upper)); // NOLINT(runtime/int)
27704|   140k|    const __m128i abcd = _mm_srli_epi64(_mm_mul_epu32(x, _mm_set1_epi64x(109951163)), 40); // 2^40 / 10000 + 1
27705|   140k|    const __m128i abcd_efgh = _mm_add_epi64(x, _mm_mul_epu32(abcd, _mm_set1_epi64x(4294957296))); // 2^32 - 10000
27706|       |    // 32-bit lanes in the order of the text: abcd, efgh of both halves
27707|   140k|    const __m128i fours = _mm_shuffle_epi32(abcd_efgh, _MM_SHUFFLE(2, 3, 0, 1));
27708|   140k|    const __m128i ab = _mm_srli_epi16(_mm_mulhi_epu16(fours, _mm_set1_epi32(5243)), 3);
27709|   140k|    const __m128i ab_cd = _mm_or_si128(_mm_slli_epi32(_mm_sub_epi16(fours, _mm_mullo_epi16(ab, _mm_set1_epi32(100))), 16), ab);
27710|       |    // 16-bit lanes ab (< 100) -> bytes a, b: 256 * ab - 2559 * (ab / 10)
27711|   140k|    const __m128i bytes = _mm_sub_epi16(_mm_slli_epi16(ab_cd, 8), _mm_mullo_epi16(_mm_set1_epi16(2559), _mm_mulhi_epu16(ab_cd, _mm_set1_epi16(6554))));
27712|       |    // the last digit that is not 0 (sig is not 0)
27713|   140k|    const auto nonzero = static_cast<std::uint64_t>(_mm_movemask_epi8(_mm_cmpgt_epi8(bytes, _mm_setzero_si128())));
27714|   140k|    const int digits = 63 - count_leading_zeros(nonzero) + (sixteen ? 1 : 0); // without trailing zeros
  ------------------
  |  Branch (27714:61): [True: 92.2k, False: 47.7k]
  ------------------
27715|   140k|    const __m128i chars = _mm_add_epi8(bytes, _mm_set1_epi8('0'));
27716|       |    // the 16 characters from the first digit
27717|   140k|    const __m128i s = sixteen ? chars : _mm_or_si128(_mm_srli_si128(chars, 1), _mm_slli_si128(_mm_cvtsi32_si128('0' + last), 15));
  ------------------
  |  Branch (27717:23): [True: 92.2k, False: 47.7k]
  ------------------
27718|   140k|    const char s16 = static_cast<char>(sixteen ? '0' + last : '0'); // the 17th
  ------------------
  |  Branch (27718:40): [True: 92.2k, False: 47.7k]
  ------------------
27719|   140k|    const auto store_16 = [&s](char* p) noexcept
27720|   140k|    {
27721|   140k|        std::memcpy(p, &s, 16);
27722|   140k|    };
27723|   140k|    const char first_digit = static_cast<char>(_mm_cvtsi128_si32(s));
27724|       |    // NOLINTEND(portability-simd-intrinsics)
27725|       |#elif JSON_DTOA_NEON
27726|       |    // as with SSE2: the halves in 32-bit lanes, then abcd, efgh of both
27727|       |    const uint32x2_t halves = vcreate_u32(upper | ((sig - (upper * 100000000u)) << 32u));
27728|       |    const uint32x2_t abcd = vmovn_u64(vshrq_n_u64(vmull_n_u32(halves, static_cast<std::uint32_t>(((std::uint64_t{1} << 40u) / 10000u) + 1u)), 40));
27729|       |    const uint32x2_t efgh = vmls_n_u32(halves, abcd, 10000u);
27730|       |    const uint32x4_t fours = vcombine_u32(vzip1_u32(abcd, efgh), vzip2_u32(abcd, efgh));
27731|       |    const uint32x4_t ab = vshrq_n_u32(vmulq_n_u32(fours, 5243u), 19);
27732|       |    const uint16x8_t ab_cd = vreinterpretq_u16_u32(vorrq_u32(ab, vshlq_n_u32(vmlsq_n_u32(fours, ab, 100u), 16)));
27733|       |    const uint16x8_t tens = vshrq_n_u16(vmulq_n_u16(ab_cd, 103u), 10);
27734|       |    const uint8x16_t bytes = vreinterpretq_u8_u16(vorrq_u16(tens, vshlq_n_u16(vmlsq_n_u16(ab_cd, tens, 10u), 8)));
27735|       |    // the last digit that is not 0 (sig is not 0): a nibble per byte
27736|       |    const std::uint64_t nonzero = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(vtstq_u8(bytes, bytes)), 4)), 0);
27737|       |    const int digits = ((63 - count_leading_zeros(nonzero)) / 4) + (sixteen ? 1 : 0); // without trailing zeros
27738|       |    const uint8x16_t chars = vaddq_u8(bytes, vdupq_n_u8('0'));
27739|       |    // the 16 characters from the first digit
27740|       |    const uint8x16_t s = sixteen ? chars : vextq_u8(chars, vdupq_n_u8(static_cast<std::uint8_t>('0' + last)), 1);
27741|       |    const char s16 = static_cast<char>(sixteen ? '0' + last : '0'); // the 17th
27742|       |    const auto store_16 = [&s](char* p) noexcept
27743|       |    {
27744|       |        vst1q_u8(reinterpret_cast<std::uint8_t*>(p), s); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
27745|       |    };
27746|       |    const auto first_digit = static_cast<char>(vgetq_lane_u8(s, 0));
27747|       |#else
27748|       |    const std::uint64_t hi = eight_digit_bytes(upper);
27749|       |    const std::uint64_t lo = eight_digit_bytes(sig - (upper * 100000000u));
27750|       |    // trailing zero digits: zero bytes (sig is not 0)
27751|       |    const int zeros = lo != 0 ? count_trailing_zeros(lo) / 8 : 8 + (count_trailing_zeros(hi) / 8);
27752|       |    const int digits = 15 - zeros + (sixteen ? 1 : 0); // without trailing zeros
27753|       |    // the 16 characters from the first digit
27754|       |    const std::uint64_t s_hi = (sixteen ? hi : (hi << 8u) | (lo >> 56u)) + 0x3030303030303030u;
27755|       |    const std::uint64_t s_lo = (sixteen ? lo : (lo << 8u) | static_cast<std::uint64_t>(last)) + 0x3030303030303030u;
27756|       |    const char s16 = static_cast<char>(sixteen ? '0' + last : '0'); // the 17th
27757|       |    const auto store_16 = [s_hi, s_lo](char* p) noexcept
27758|       |    {
27759|       |        store_msb_first(p, s_hi);
27760|       |        store_msb_first(p + 8, s_lo);
27761|       |    };
27762|       |    const auto first_digit = static_cast<char>(s_hi >> 56u);
27763|       |#endif
27764|   140k|    const int len = d.has_digit ? 16 + (sixteen ? 1 : 0) : digits; // significant digits
  ------------------
  |  Branch (27764:21): [True: 56.1k, False: 83.8k]
  |  Branch (27764:41): [True: 24.2k, False: 31.9k]
  ------------------
27765|   140k|    const int n = 16 + (sixteen ? 1 : 0) + d.exponent;           // digits before the point
  ------------------
  |  Branch (27765:25): [True: 92.2k, False: 47.7k]
  ------------------
27766|       |
27767|   140k|    if (JSON_HEDLEY_LIKELY(n >= 1 && n <= 15))
  ------------------
  |  | 1666|   192k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 42.2k, False: 97.8k]
  |  |  |  Branch (1666:94): [True: 52.2k, False: 87.7k]
  |  |  |  Branch (1666:94): [True: 42.2k, False: 10.0k]
  |  |  ------------------
  ------------------
27768|  42.2k|    {
27769|       |        // "dig.its" and "digits[000].0": the digits after the point move by
27770|       |        // one byte ('0's follow the digits)
27771|  42.2k|#if JSON_DTOA_SSE2
27772|       |        // NOLINTBEGIN(portability-simd-intrinsics)
27773|       |        // (in the register: reading the digits back from memory right after
27774|       |        // storing them waits until the stores are done)
27775|  42.2k|        const __m128i at = _mm_set1_epi8(static_cast<char>(n));
27776|  42.2k|        const __m128i index = _mm_setr_epi8(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);
27777|  42.2k|        const __m128i before = _mm_cmpgt_epi8(at, index);
27778|  42.2k|        const __m128i after = _mm_cmpgt_epi8(index, at);
27779|  42.2k|        const __m128i text = _mm_or_si128(_mm_or_si128(_mm_and_si128(s, before), _mm_and_si128(_mm_slli_si128(s, 1), after)),
27780|  42.2k|                                          _mm_andnot_si128(_mm_or_si128(before, after), _mm_set1_epi8('.')));
27781|  42.2k|        std::memcpy(first, &text, 16);
27782|  42.2k|        first[16] = static_cast<char>(_mm_extract_epi16(s, 7) >> 8);
27783|  42.2k|        first[17] = s16;
27784|       |        // NOLINTEND(portability-simd-intrinsics)
27785|       |#elif JSON_DTOA_NEON
27786|       |        const uint8x16_t index = vcombine_u8(vcreate_u8(0x0706050403020100u), vcreate_u8(0x0F0E0D0C0B0A0908u));
27787|       |        const uint8x16_t at = vdupq_n_u8(static_cast<std::uint8_t>(n));
27788|       |        const uint8x16_t after_point = vbslq_u8(vcgtq_u8(index, at), vextq_u8(vdupq_n_u8(0), s, 15), vdupq_n_u8('.'));
27789|       |        vst1q_u8(reinterpret_cast<std::uint8_t*>(first), vbslq_u8(vcltq_u8(index, at), s, after_point)); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
27790|       |        first[16] = static_cast<char>(vgetq_lane_u8(s, 15));
27791|       |        first[17] = s16;
27792|       |#else
27793|       |        store_16(first);
27794|       |        first[16] = s16;
27795|       |        std::uint64_t after_point[2]; // NOLINT(cppcoreguidelines-avoid-c-arrays,hicpp-avoid-c-arrays,modernize-avoid-c-arrays,cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
27796|       |        std::memcpy(after_point, first + n, 16);
27797|       |        std::memcpy(first + n + 1, after_point, 16);
27798|       |        first[n] = '.';
27799|       |#endif
27800|  42.2k|        return first + (n >= len ? n + 2 : len + 1);
  ------------------
  |  Branch (27800:25): [True: 15.1k, False: 27.0k]
  ------------------
27801|  42.2k|    }
27802|  97.8k|    if (n <= 0 && n > -4)
  ------------------
  |  Branch (27802:9): [True: 87.7k, False: 10.0k]
  |  Branch (27802:19): [True: 35.7k, False: 52.0k]
  ------------------
27803|  35.7k|    {
27804|       |        // "0.[000]digits"
27805|  35.7k|        std::memset(first, '0', 8);
27806|  35.7k|        first[1] = '.';
27807|  35.7k|        store_16(first + 2 - n);
27808|  35.7k|        first[18 - n] = s16;
27809|  35.7k|        return first + 2 - n + len;
27810|  35.7k|    }
27811|       |    // d.igitse+XX, with at least two exponent digits (as append_exponent())
27812|  62.0k|    store_16(first + 1);
27813|  62.0k|    first[17] = s16;
27814|  62.0k|    first[0] = first_digit;
27815|  62.0k|    first[1] = '.';
27816|  62.0k|    char* const end = first + (len == 1 ? 1 : len + 1);
  ------------------
  |  Branch (27816:32): [True: 1.45k, False: 60.6k]
  ------------------
27817|  62.0k|    const int e = n - 1;
27818|  62.0k|    const auto ea = e < 0 ? 0u - static_cast<unsigned>(e) : static_cast<unsigned>(e); // (unsigned: no signed overflow to assume)
  ------------------
  |  Branch (27818:21): [True: 52.0k, False: 10.0k]
  ------------------
27819|  62.0k|    const bool three = ea >= 100;
27820|  62.0k|    end[0] = 'e';
27821|  62.0k|    end[1] = e < 0 ? '-' : '+';
  ------------------
  |  Branch (27821:14): [True: 52.0k, False: 10.0k]
  ------------------
27822|  62.0k|    end[2] = static_cast<char>('0' + (three ? ea / 100 : (ea / 10) % 10));
  ------------------
  |  Branch (27822:39): [True: 5.47k, False: 56.5k]
  ------------------
27823|  62.0k|    end[3] = static_cast<char>('0' + (three ? (ea / 10) % 10 : ea % 10));
  ------------------
  |  Branch (27823:39): [True: 5.47k, False: 56.5k]
  ------------------
27824|  62.0k|    end[4] = static_cast<char>('0' + (ea % 10));
27825|  62.0k|    return end + (three ? 5 : 4);
  ------------------
  |  Branch (27825:19): [True: 5.47k, False: 56.5k]
  ------------------
27826|  97.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl13write_decimalEPcmi:
27601|  2.81k|{
27602|  2.81k|    JSON_ASSERT(digits != 0 && digits < 100000000000000000u);
  ------------------
  |  | 2591|  2.81k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (27602:5): [True: 2.81k, False: 0]
  |  Branch (27602:5): [True: 2.81k, False: 0]
  |  Branch (27602:5): [True: 2.81k, False: 0]
  ------------------
27603|  2.81k|    const std::uint64_t upper = digits / 100000000u;
27604|  2.81k|    const std::uint64_t b0 = upper / 100000000u; // (one digit: it is its own byte)
27605|  2.81k|    const std::uint64_t b1 = eight_digit_bytes(upper % 100000000u);
27606|  2.81k|    const std::uint64_t b2 = eight_digit_bytes(digits % 100000000u);
27607|       |    // leading and trailing zero digits: zero bytes, counted without division
27608|  2.81k|    int leading = 16;
27609|  2.81k|    int zeros = 16;
27610|  2.81k|    if (b0 != 0)
  ------------------
  |  Branch (27610:9): [True: 0, False: 2.81k]
  ------------------
27611|      0|    {
27612|      0|        leading = count_leading_zeros(b0) / 8;
27613|      0|    }
27614|  2.81k|    else if (b1 != 0)
  ------------------
  |  Branch (27614:14): [True: 2.02k, False: 787]
  ------------------
27615|  2.02k|    {
27616|  2.02k|        leading = 8 + (count_leading_zeros(b1) / 8);
27617|  2.02k|    }
27618|    787|    else
27619|    787|    {
27620|    787|        leading += count_leading_zeros(b2) / 8;
27621|    787|    }
27622|  2.81k|    if (b2 != 0)
  ------------------
  |  Branch (27622:9): [True: 2.36k, False: 450]
  ------------------
27623|  2.36k|    {
27624|  2.36k|        zeros = count_trailing_zeros(b2) / 8;
27625|  2.36k|    }
27626|    450|    else if (b1 != 0)
  ------------------
  |  Branch (27626:14): [True: 450, False: 0]
  ------------------
27627|    450|    {
27628|    450|        zeros = 8 + (count_trailing_zeros(b1) / 8);
27629|    450|    }
27630|       |    // (else: 16, b0 is the one digit that is not 0)
27631|       |    // the digits as text at text + leading, then '0's, so that fixed-size
27632|       |    // moves need not check how many digits there are
27633|  2.81k|    std::array<char, 64> text; // NOLINT(cppcoreguidelines-pro-type-member-init,hicpp-member-init): written before read
27634|  2.81k|    store_msb_first(text.data(), b0 + 0x3030303030303030u);
27635|  2.81k|    store_msb_first(text.data() + 8, b1 + 0x3030303030303030u);
27636|  2.81k|    store_msb_first(text.data() + 16, b2 + 0x3030303030303030u);
27637|  2.81k|    std::memset(text.data() + 24, '0', 40);
27638|  2.81k|    const int k = 24 - leading - zeros; // significant digits
27639|  2.81k|    const int n = k + exp + zeros;      // position of the decimal point after the first digit
27640|  2.81k|    const char* const s0 = text.data() + leading;
27641|       |
27642|  2.81k|    if (-4 < n && n <= 15)
  ------------------
  |  Branch (27642:9): [True: 0, False: 2.81k]
  |  Branch (27642:19): [True: 0, False: 0]
  ------------------
27643|      0|    {
27644|       |        // "0.[000]digits" (n <= 0) is the digits after 1 - n leading '0's
27645|       |        // with the point after the first; "digits[000].0" (n >= k) and
27646|       |        // "dig.its" put the point after n characters
27647|      0|        const int pad = n <= 0 ? 1 - n : 0;
  ------------------
  |  Branch (27647:25): [True: 0, False: 0]
  ------------------
27648|      0|        const char* const s = s0 - pad;
27649|      0|        const int len = k + pad;
27650|      0|        const int point = n + pad;
27651|      0|        std::memcpy(first, s, 16);
27652|      0|        std::memcpy(first + point + 1, s + point, 24);
27653|      0|        first[point] = '.';
27654|      0|        return first + (point >= len ? point + 2 : len + 1);
  ------------------
  |  Branch (27654:25): [True: 0, False: 0]
  ------------------
27655|      0|    }
27656|       |
27657|       |    // d.igitse+XX, with at least two exponent digits (as append_exponent())
27658|  2.81k|    std::memcpy(first, s0, 16);
27659|  2.81k|    std::memcpy(first + 2, s0 + 1, 16);
27660|  2.81k|    first[1] = '.';
27661|  2.81k|    char* const end = first + (k == 1 ? 1 : k + 1);
  ------------------
  |  Branch (27661:32): [True: 648, False: 2.16k]
  ------------------
27662|  2.81k|    const int e = n - 1;
27663|  2.81k|    const auto ea = e < 0 ? 0u - static_cast<unsigned>(e) : static_cast<unsigned>(e); // (unsigned: no signed overflow to assume)
  ------------------
  |  Branch (27663:21): [True: 2.81k, False: 0]
  ------------------
27664|  2.81k|    const bool three = ea >= 100;
27665|  2.81k|    end[0] = 'e';
27666|  2.81k|    end[1] = e < 0 ? '-' : '+';
  ------------------
  |  Branch (27666:14): [True: 2.81k, False: 0]
  ------------------
27667|  2.81k|    end[2] = static_cast<char>('0' + (three ? ea / 100 : (ea / 10) % 10));
  ------------------
  |  Branch (27667:39): [True: 2.81k, False: 0]
  ------------------
27668|  2.81k|    end[3] = static_cast<char>('0' + (three ? (ea / 10) % 10 : ea % 10));
  ------------------
  |  Branch (27668:39): [True: 2.81k, False: 0]
  ------------------
27669|  2.81k|    end[4] = static_cast<char>('0' + (ea % 10));
27670|  2.81k|    return end + (three ? 5 : 4);
  ------------------
  |  Branch (27670:19): [True: 2.81k, False: 0]
  ------------------
27671|  2.81k|}
_ZZN8nlohmann16json_abi_v3_12_06detail9dtoa_impl14write_shortestEPcNS1_4zmij16shortest_decimalEENKUlS3_E_clES3_:
27720|  97.8k|    {
27721|  97.8k|        std::memcpy(p, &s, 16);
27722|  97.8k|    };
_ZN8nlohmann16json_abi_v3_12_06detail10serializerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE5flushEv:
29158|  66.4k|    {
29159|  66.4k|        o->write_characters(write_buffer.data(), write_buffer_pos);
29160|  66.4k|        write_buffer_pos = 0;
29161|  66.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail35binary_writer_default_error_handlerEv:
 6658|  32.5k|{
 6659|       |#if JSON_STRICT_BINARY_UTF8
 6660|       |    return error_handler_t::strict;
 6661|       |#else
 6662|  32.5k|    return error_handler_t::keep;
 6663|  32.5k|#endif
 6664|  32.5k|}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvED2Ev:
32820|  2.36M|    {
32821|  2.36M|        assert_invariant(false);
32822|  2.36M|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16assert_invariantEb:
31150|  6.51M|    {
31151|  6.51M|        JSON_ASSERT(m_data.m_type != value_t::object || m_data.m_value.object != nullptr);
  ------------------
  |  | 2591|  6.51M|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (31151:9): [True: 6.26M, False: 249k]
  |  Branch (31151:9): [True: 249k, False: 0]
  |  Branch (31151:9): [True: 6.51M, False: 0]
  ------------------
31152|  6.51M|        JSON_ASSERT(m_data.m_type != value_t::array || m_data.m_value.array != nullptr);
  ------------------
  |  | 2591|  6.51M|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (31152:9): [True: 5.60M, False: 907k]
  |  Branch (31152:9): [True: 907k, False: 0]
  |  Branch (31152:9): [True: 6.51M, False: 0]
  ------------------
31153|  6.51M|        JSON_ASSERT(m_data.m_type != value_t::string || m_data.m_value.string != nullptr);
  ------------------
  |  | 2591|  6.51M|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (31153:9): [True: 6.05M, False: 455k]
  |  Branch (31153:9): [True: 455k, False: 0]
  |  Branch (31153:9): [True: 6.51M, False: 0]
  ------------------
31154|  6.51M|        JSON_ASSERT(m_data.m_type != value_t::binary || m_data.m_value.binary != nullptr);
  ------------------
  |  | 2591|  6.51M|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (31154:9): [True: 6.45M, False: 56.6k]
  |  Branch (31154:9): [True: 56.6k, False: 0]
  |  Branch (31154:9): [True: 6.51M, False: 0]
  ------------------
31155|       |
31156|       |#if JSON_DIAGNOSTICS
31157|       |        JSON_TRY
31158|       |        {
31159|       |            JSON_ASSERT(!check_parents || !is_structured() || std::all_of(begin(), end(), [this](const basic_json & j)
31160|       |            {
31161|       |                return j.m_parent == this;
31162|       |            }));
31163|       |        }
31164|       |        JSON_CATCH(...) {} // LCOV_EXCL_LINE
31165|       |#endif
31166|  6.51M|        static_cast<void>(check_parents);
31167|  6.51M|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4dataD2Ev:
36341|  2.36M|        {
36342|  2.36M|            m_value.destroy(m_type);
36343|  2.36M|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value7destroyENS0_6detail7value_tE:
31094|  3.13M|        {
31095|  3.13M|            if (JSON_HEDLEY_UNLIKELY(detail::owns_memory(t)))
  ------------------
  |  | 1667|  3.13M|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 178k, False: 2.96M]
  |  |  ------------------
  ------------------
31096|   178k|            {
31097|   178k|                destroy_owned(t);
31098|   178k|            }
31099|  3.13M|        }
_ZN8nlohmann16json_abi_v3_12_06detail11owns_memoryENS1_7value_tE:
 3350|  3.13M|{
 3351|  3.13M|    switch (t)
 3352|  3.13M|    {
 3353|  13.5k|        case value_t::object:
  ------------------
  |  Branch (3353:9): [True: 13.5k, False: 3.12M]
  ------------------
 3354|  60.2k|        case value_t::array:
  ------------------
  |  Branch (3354:9): [True: 46.7k, False: 3.09M]
  ------------------
 3355|   168k|        case value_t::string:
  ------------------
  |  Branch (3355:9): [True: 107k, False: 3.03M]
  ------------------
 3356|   178k|        case value_t::binary:
  ------------------
  |  Branch (3356:9): [True: 10.5k, False: 3.12M]
  ------------------
 3357|   178k|            return true;
 3358|       |
 3359|  2.29M|        case value_t::null:
  ------------------
  |  Branch (3359:9): [True: 2.29M, False: 840k]
  ------------------
 3360|  2.44M|        case value_t::boolean:
  ------------------
  |  Branch (3360:9): [True: 146k, False: 2.99M]
  ------------------
 3361|  2.55M|        case value_t::number_integer:
  ------------------
  |  Branch (3361:9): [True: 112k, False: 3.02M]
  ------------------
 3362|  2.73M|        case value_t::number_unsigned:
  ------------------
  |  Branch (3362:9): [True: 179k, False: 2.95M]
  ------------------
 3363|  2.95M|        case value_t::number_float:
  ------------------
  |  Branch (3363:9): [True: 218k, False: 2.92M]
  ------------------
 3364|  2.96M|        case value_t::discarded:
  ------------------
  |  Branch (3364:9): [True: 5.19k, False: 3.13M]
  ------------------
 3365|  2.96M|        default:
  ------------------
  |  Branch (3365:9): [True: 0, False: 3.13M]
  ------------------
 3366|  2.96M|            return false;
 3367|  3.13M|    }
 3368|  3.13M|}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value13destroy_ownedENS0_6detail7value_tE:
31102|   178k|        {
31103|   178k|            switch (t)
31104|   178k|            {
31105|   107k|                case value_t::string:
  ------------------
  |  Branch (31105:17): [True: 107k, False: 70.8k]
  ------------------
31106|   107k|                    destroy_string();
31107|   107k|                    break;
31108|       |
31109|  10.5k|                case value_t::binary:
  ------------------
  |  Branch (31109:17): [True: 10.5k, False: 168k]
  ------------------
31110|  10.5k|                    destroy_binary();
31111|  10.5k|                    break;
31112|       |
31113|  13.5k|                case value_t::object:
  ------------------
  |  Branch (31113:17): [True: 13.5k, False: 165k]
  ------------------
31114|  60.2k|                case value_t::array:
  ------------------
  |  Branch (31114:17): [True: 46.7k, False: 131k]
  ------------------
31115|  60.2k|                    destroy_container(t);
31116|  60.2k|                    break;
31117|       |
31118|      0|                case value_t::null:
  ------------------
  |  Branch (31118:17): [True: 0, False: 178k]
  ------------------
31119|      0|                case value_t::boolean:
  ------------------
  |  Branch (31119:17): [True: 0, False: 178k]
  ------------------
31120|      0|                case value_t::number_integer:
  ------------------
  |  Branch (31120:17): [True: 0, False: 178k]
  ------------------
31121|      0|                case value_t::number_unsigned:
  ------------------
  |  Branch (31121:17): [True: 0, False: 178k]
  ------------------
31122|      0|                case value_t::number_float:
  ------------------
  |  Branch (31122:17): [True: 0, False: 178k]
  ------------------
31123|      0|                case value_t::discarded:
  ------------------
  |  Branch (31123:17): [True: 0, False: 178k]
  ------------------
31124|      0|                default:
  ------------------
  |  Branch (31124:17): [True: 0, False: 178k]
  ------------------
31125|      0|                    break;
31126|   178k|            }
31127|   178k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value14destroy_stringEv:
30920|   107k|        {
30921|   107k|            if (string == nullptr)
  ------------------
  |  Branch (30921:17): [True: 0, False: 107k]
  ------------------
30922|      0|            {
30923|       |                // not initialized (e.g., due to exception in the ctor)
30924|      0|                return;
30925|      0|            }
30926|   107k|            AllocatorType<string_t> alloc;
30927|   107k|            std::allocator_traits<decltype(alloc)>::destroy(alloc, string);
30928|   107k|            std::allocator_traits<decltype(alloc)>::deallocate(alloc, string, 1);
30929|   107k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value14destroy_binaryEv:
30932|  10.5k|        {
30933|  10.5k|            if (binary == nullptr)
  ------------------
  |  Branch (30933:17): [True: 0, False: 10.5k]
  ------------------
30934|      0|            {
30935|       |                // not initialized (e.g., due to exception in the ctor)
30936|      0|                return;
30937|      0|            }
30938|  10.5k|            AllocatorType<binary_t> alloc;
30939|  10.5k|            std::allocator_traits<decltype(alloc)>::destroy(alloc, binary);
30940|  10.5k|            std::allocator_traits<decltype(alloc)>::deallocate(alloc, binary, 1);
30941|  10.5k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value17destroy_containerENS0_6detail7value_tE:
30945|  60.2k|        {
30946|  60.2k|            if (
30947|  60.2k|                (t == value_t::object && object == nullptr) ||
  ------------------
  |  Branch (30947:18): [True: 13.5k, False: 46.7k]
  |  Branch (30947:42): [True: 0, False: 13.5k]
  ------------------
30948|  60.2k|                (t == value_t::array && array == nullptr)
  ------------------
  |  Branch (30948:18): [True: 46.7k, False: 13.5k]
  |  Branch (30948:41): [True: 0, False: 46.7k]
  ------------------
30949|  60.2k|            )
30950|      0|            {
30951|       |                // not initialized (e.g., due to exception in the ctor)
30952|      0|                return;
30953|      0|            }
30954|       |
30955|       |            // This json_value is not itself a basic_json, so the top-level
30956|       |            // container is first moved into a local stand-in ("cur"); a
30957|       |            // default-constructed basic_json has a null pointer in its
30958|       |            // m_value (see data::m_value's initializer), so swapping it
30959|       |            // with *this leaves this union's own pointer null, and it is
30960|       |            // never looked at or freed a second time.
30961|  60.2k|            basic_json cur;
30962|  60.2k|            cur.m_data.m_type = t;
30963|  60.2k|            using std::swap;
30964|  60.2k|            swap(cur.m_data.m_value, *this);
30965|       |
30966|  60.2k|            destroy_bounded(cur, 0);
30967|  60.2k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2EDn:
32392|   506k|    {
32393|   506k|        assert_invariant();
32394|   506k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4dataC2Ev:
36334|  1.28M|        data() noexcept = default;
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value15destroy_boundedERSE_m:
30974|   638k|        {
30975|   638k|            if (JSON_HEDLEY_UNLIKELY(depth >= detail::recursion_depth_limit()))
  ------------------
  |  | 1667|   638k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8.77k, False: 629k]
  |  |  ------------------
  ------------------
30976|  8.77k|            {
30977|  8.77k|                destroy_walk(v);
30978|  8.77k|                return;
30979|  8.77k|            }
30980|       |
30981|   629k|            if (v.m_data.m_type == value_t::array)
  ------------------
  |  Branch (30981:17): [True: 541k, False: 88.2k]
  ------------------
30982|   541k|            {
30983|   541k|                for (auto& child : *v.m_data.m_value.array)
  ------------------
  |  Branch (30983:34): [True: 1.20M, False: 541k]
  ------------------
30984|  1.20M|                {
30985|  1.20M|                    if (child.m_data.m_type == value_t::array || child.m_data.m_type == value_t::object)
  ------------------
  |  Branch (30985:25): [True: 430k, False: 773k]
  |  Branch (30985:66): [True: 73.6k, False: 700k]
  ------------------
30986|   503k|                    {
30987|   503k|                        destroy_bounded(child, depth + 1);
30988|   503k|                    }
30989|  1.20M|                }
30990|   541k|            }
30991|  88.2k|            else
30992|  88.2k|            {
30993|  88.2k|                for (auto& child : *v.m_data.m_value.object)
  ------------------
  |  Branch (30993:34): [True: 186k, False: 88.2k]
  ------------------
30994|   186k|                {
30995|   186k|                    if (child.second.m_data.m_type == value_t::array || child.second.m_data.m_type == value_t::object)
  ------------------
  |  Branch (30995:25): [True: 68.5k, False: 118k]
  |  Branch (30995:73): [True: 5.99k, False: 112k]
  ------------------
30996|  74.5k|                    {
30997|  74.5k|                        destroy_bounded(child.second, depth + 1);
30998|  74.5k|                    }
30999|   186k|                }
31000|  88.2k|            }
31001|       |
31002|       |            // only leaves and already destroyed (null) children remain
31003|   629k|            free_container(v);
31004|   629k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value12destroy_walkERSE_:
31031|  8.77k|        {
31032|  8.77k|            basic_json cur;
31033|  8.77k|            take(cur, top);
31034|       |
31035|  8.77k|            basic_json prev; // value_t::null: no parent
31036|       |
31037|       |            // true right after cur was entered: its children have not been
31038|       |            // looked at yet. If none of them has children of its own, cur is
31039|       |            // freed in one go instead of child by child; this is tried once
31040|       |            // per container, so the walk stays linear.
31041|  8.77k|            bool fresh = true;
31042|       |
31043|  54.6k|            while (true)
  ------------------
  |  Branch (31043:20): [True: 54.6k, Folded]
  ------------------
31044|  54.6k|            {
31045|  54.6k|                const bool fresh_now = fresh;
31046|  54.6k|                fresh = false;
31047|  54.6k|                if (has_no_children(cur) || (fresh_now && all_children_leaves(cur)))
  ------------------
  |  Branch (31047:21): [True: 20.3k, False: 34.2k]
  |  Branch (31047:46): [True: 24.3k, False: 9.91k]
  |  Branch (31047:59): [True: 7.73k, False: 16.5k]
  ------------------
31048|  28.0k|                {
31049|  28.0k|                    if (prev.m_data.m_type == value_t::null)
  ------------------
  |  Branch (31049:25): [True: 8.77k, False: 19.3k]
  ------------------
31050|  8.77k|                    {
31051|  8.77k|                        free_container(cur);
31052|  8.77k|                        return; // back at the top with nothing left to do
31053|  8.77k|                    }
31054|       |
31055|       |                    // ascend: detach the grandparent link from prev's
31056|       |                    // walk_child() slot, drop that (now null) slot, free cur
31057|       |                    // (it is empty), then move up one level
31058|  19.3k|                    basic_json gp;
31059|  19.3k|                    take(gp, walk_child(prev));
31060|  19.3k|                    pop_walk_child(prev);
31061|       |
31062|  19.3k|                    free_container(cur);
31063|       |
31064|  19.3k|                    take(cur, prev);
31065|  19.3k|                    take(prev, gp);
31066|  19.3k|                    continue;
31067|  28.0k|                }
31068|       |
31069|  26.5k|                basic_json& cur_child_ref = walk_child(cur);
31070|       |
31071|  26.5k|                if (has_no_children(cur_child_ref))
  ------------------
  |  Branch (31071:21): [True: 7.17k, False: 19.3k]
  ------------------
31072|  7.17k|                {
31073|       |                    // scalar, or already-empty array/object
31074|  7.17k|                    pop_walk_child(cur);
31075|  7.17k|                    continue;
31076|  7.17k|                }
31077|       |
31078|       |                // descend into the non-empty child, reversing the
31079|       |                // link: its slot takes over prev, and the child becomes
31080|       |                // the new cur
31081|  19.3k|                basic_json tmp;
31082|  19.3k|                take(tmp, cur_child_ref);
31083|  19.3k|                take(cur_child_ref, prev);
31084|  19.3k|                take(prev, cur);
31085|  19.3k|                take(cur, tmp);
31086|  19.3k|                fresh = true;
31087|  19.3k|            }
31088|  8.77k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value4takeERSE_SG_:
30789|   144k|        {
30790|   144k|            dst.m_data.m_type = src.m_data.m_type;
30791|   144k|            dst.m_data.m_value = src.m_data.m_value;
30792|   144k|            src.m_data.m_type = value_t::null;
30793|   144k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value15has_no_childrenERKSE_:
30797|  2.18M|        {
30798|  2.18M|            switch (v.m_data.m_type)
30799|  2.18M|            {
30800|   638k|                case value_t::array:
  ------------------
  |  Branch (30800:17): [True: 638k, False: 1.55M]
  ------------------
30801|   638k|                    return v.m_data.m_value.array->empty();
30802|   116k|                case value_t::object:
  ------------------
  |  Branch (30802:17): [True: 116k, False: 2.07M]
  ------------------
30803|   116k|                    return v.m_data.m_value.object->empty();
30804|   676k|                case value_t::null:
  ------------------
  |  Branch (30804:17): [True: 676k, False: 1.51M]
  ------------------
30805|   777k|                case value_t::string:
  ------------------
  |  Branch (30805:17): [True: 100k, False: 2.08M]
  ------------------
30806|   928k|                case value_t::boolean:
  ------------------
  |  Branch (30806:17): [True: 150k, False: 2.03M]
  ------------------
30807|  1.03M|                case value_t::number_integer:
  ------------------
  |  Branch (30807:17): [True: 108k, False: 2.07M]
  ------------------
30808|  1.21M|                case value_t::number_unsigned:
  ------------------
  |  Branch (30808:17): [True: 176k, False: 2.01M]
  ------------------
30809|  1.42M|                case value_t::number_float:
  ------------------
  |  Branch (30809:17): [True: 210k, False: 1.97M]
  ------------------
30810|  1.43M|                case value_t::binary:
  ------------------
  |  Branch (30810:17): [True: 9.88k, False: 2.17M]
  ------------------
30811|  1.43M|                case value_t::discarded:
  ------------------
  |  Branch (30811:17): [True: 0, False: 2.18M]
  ------------------
30812|  1.43M|                default:
  ------------------
  |  Branch (30812:17): [True: 0, False: 2.18M]
  ------------------
30813|  1.43M|                    return true;
30814|  2.18M|            }
30815|  2.18M|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value19all_children_leavesERKSE_:
30822|   623k|        {
30823|       |            // array_t only needs forward iterators (see custom_array_type)
30824|   623k|            if (v.m_data.m_type == value_t::array)
  ------------------
  |  Branch (30824:17): [True: 546k, False: 76.9k]
  ------------------
30825|   546k|            {
30826|   546k|                const auto& a = *v.m_data.m_value.array;
30827|   546k|                return std::all_of(a.begin(), a.end(), [](const basic_json & el)
30828|   546k|                {
30829|   546k|                    return has_no_children(el);
30830|   546k|                });
30831|   546k|            }
30832|  76.9k|            const auto& o = *v.m_data.m_value.object;
30833|  76.9k|            return std::all_of(o.begin(), o.end(), [](const typename object_t::value_type & el)
30834|  76.9k|            {
30835|  76.9k|                return has_no_children(el.second);
30836|  76.9k|            });
30837|   623k|        }
_ZZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value19all_children_leavesERKSE_ENKUlSH_E_clESH_:
30828|  1.24M|                {
30829|  1.24M|                    return has_no_children(el);
30830|  1.24M|                });
_ZZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value19all_children_leavesERKSE_ENKUlRKNS2_4pairIKSA_SE_EEE_clESM_:
30834|   200k|            {
30835|   200k|                return has_no_children(el.second);
30836|   200k|            });
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value10walk_childERSE_:
30868|  45.8k|        {
30869|  45.8k|            if (v.m_data.m_type == value_t::array)
  ------------------
  |  Branch (30869:17): [True: 37.2k, False: 8.54k]
  ------------------
30870|  37.2k|            {
30871|  37.2k|                return v.m_data.m_value.array->back();
30872|  37.2k|            }
30873|  8.54k|            JSON_ASSERT(v.m_data.m_type == value_t::object);
  ------------------
  |  | 2591|  8.54k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30873:13): [True: 8.54k, False: 0]
  ------------------
30874|  8.54k|            return walk_child_it(*v.m_data.m_value.object)->second;
30875|  8.54k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value13walk_child_itINS3_ISA_SE_NS2_4lessISA_EENS8_INS2_4pairIKSA_SE_EEEEEEEENT_8iteratorERSO_:
30860|  14.8k|        {
30861|  14.8k|            JSON_ASSERT(!o.empty());
  ------------------
  |  | 2591|  14.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30861:13): [True: 14.8k, False: 0]
  ------------------
30862|  14.8k|            return walk_child_it(o, typename std::iterator_traits<typename ObjectType_::iterator>::iterator_category());
30863|  14.8k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value13walk_child_itINS3_ISA_SE_NS2_4lessISA_EENS8_INS2_4pairIKSA_SE_EEEEEEEENT_8iteratorERSO_NS2_26bidirectional_iterator_tagE:
30848|  14.8k|        {
30849|  14.8k|            return std::prev(o.end());
30850|  14.8k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value14pop_walk_childERSE_:
30882|  26.5k|        {
30883|  26.5k|            if (v.m_data.m_type == value_t::array)
  ------------------
  |  Branch (30883:17): [True: 20.1k, False: 6.30k]
  ------------------
30884|  20.1k|            {
30885|  20.1k|                v.m_data.m_value.array->pop_back();
30886|  20.1k|            }
30887|  6.30k|            else
30888|  6.30k|            {
30889|  6.30k|                JSON_ASSERT(v.m_data.m_type == value_t::object);
  ------------------
  |  | 2591|  6.30k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30889:17): [True: 6.30k, False: 0]
  ------------------
30890|  6.30k|                v.m_data.m_value.object->erase(walk_child_it(*v.m_data.m_value.object));
30891|  6.30k|            }
30892|  26.5k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value14free_containerERSE_:
30900|   657k|        {
30901|   657k|            JSON_ASSERT(has_no_children(v) || all_children_leaves(v));
  ------------------
  |  | 2591|   657k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30901:13): [True: 58.8k, False: 599k]
  |  Branch (30901:13): [True: 599k, False: 0]
  |  Branch (30901:13): [True: 657k, False: 0]
  ------------------
30902|   657k|            if (v.m_data.m_type == value_t::array)
  ------------------
  |  Branch (30902:17): [True: 562k, False: 95.7k]
  ------------------
30903|   562k|            {
30904|   562k|                AllocatorType<array_t> alloc;
30905|   562k|                std::allocator_traits<decltype(alloc)>::destroy(alloc, v.m_data.m_value.array);
30906|   562k|                std::allocator_traits<decltype(alloc)>::deallocate(alloc, v.m_data.m_value.array, 1);
30907|   562k|            }
30908|  95.7k|            else
30909|  95.7k|            {
30910|  95.7k|                JSON_ASSERT(v.m_data.m_type == value_t::object);
  ------------------
  |  | 2591|  95.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30910:17): [True: 95.7k, False: 0]
  ------------------
30911|  95.7k|                AllocatorType<object_t> alloc;
30912|  95.7k|                std::allocator_traits<decltype(alloc)>::destroy(alloc, v.m_data.m_value.object);
30913|  95.7k|                std::allocator_traits<decltype(alloc)>::deallocate(alloc, v.m_data.m_value.object, 1);
30914|  95.7k|            }
30915|   657k|            v.m_data.m_type = value_t::null; // avoid a double free if v is later destructed
30916|   657k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataIRKSD_EESE_OT_bbNS0_6detail15error_handler_tE:
36742|  38.9k|    {
36743|  38.9k|        return from_binary_impl(detail::input_adapter(std::forward<InputType>(i)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
36744|  38.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16from_binary_implINS0_6detail22iterator_input_adapterIPKhSJ_EEEESE_T_NSG_14input_format_tEbbNSG_15error_handler_tENSG_18cbor_tag_handler_tE:
36385|  65.3k|    {
36386|  65.3k|        basic_json result;
36387|  65.3k|        detail::json_sax_dom_parser<basic_json, InputAdapterType> sdp(result, allow_exceptions);
36388|  65.3k|        binary_reader<InputAdapterType> reader(std::move(ia), format, error_handler);
36389|  65.3k|        if (!reader.sax_parse(&sdp, strict, tag_handler))
  ------------------
  |  Branch (36389:13): [True: 5.19k, False: 60.1k]
  ------------------
36390|  5.19k|        {
36391|  5.19k|            result = value_t::discarded;
36392|  5.19k|        }
36393|  65.3k|        return result;
36394|  65.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEEC2ERSG_bPNS1_5lexerISG_SK_EE:
13873|  65.3k|        : root(r), allow_exceptions(allow_exceptions_), m_lexer_ref(lexer_)
13874|  65.3k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEEC2EOSK_NS1_14input_format_tENS1_15error_handler_tE:
14944|  65.3k|        : ia(std::move(adapter)), input_format(format), error_handler(error_handler_)
14945|  65.3k|    {
14946|  65.3k|        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
14947|  65.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail11char_traitsIhE3eofEv:
 4299|   884k|    {
 4300|   884k|        return static_cast<int_type>(std::char_traits<char>::eof());
 4301|   884k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17little_endiannessEi:
14882|   130k|{
14883|   130k|    return *reinterpret_cast<char*>(&num) == 1;
14884|   130k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9sax_parseEPSM_bNS1_18cbor_tag_handler_tE:
14969|  65.3k|    {
14970|  65.3k|        sax = sax_;
14971|  65.3k|        container_stack.clear();
14972|  65.3k|        bon8_pushback_size = 0;
14973|  65.3k|        bool result = false;
14974|       |
14975|  65.3k|        switch (input_format)
14976|  65.3k|        {
14977|      0|            case input_format_t::bson:
  ------------------
  |  Branch (14977:13): [True: 0, False: 65.3k]
  ------------------
14978|      0|                result = parse_bson_internal();
14979|      0|                break;
14980|       |
14981|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (14981:13): [True: 0, False: 65.3k]
  ------------------
14982|      0|                result = parse_cbor_internal(tag_handler);
14983|      0|                break;
14984|       |
14985|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (14985:13): [True: 0, False: 65.3k]
  ------------------
14986|      0|                result = parse_msgpack_internal();
14987|      0|                break;
14988|       |
14989|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (14989:13): [True: 0, False: 65.3k]
  ------------------
14990|  65.3k|            case input_format_t::bjdata:
  ------------------
  |  Branch (14990:13): [True: 65.3k, False: 0]
  ------------------
14991|  65.3k|                result = parse_ubjson_internal();
14992|  65.3k|                break;
14993|       |
14994|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (14994:13): [True: 0, False: 65.3k]
  ------------------
14995|      0|                result = parse_bon8_internal();
14996|      0|                break;
14997|       |
14998|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (14998:13): [True: 0, False: 65.3k]
  ------------------
14999|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (14999:13): [True: 0, False: 65.3k]
  ------------------
15000|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (15000:17): [Folded, False: 0]
  ------------------
15001|  65.3k|        }
15002|       |
15003|       |        // strict mode: next byte must be EOF
15004|  55.0k|        if (result && strict)
  ------------------
  |  Branch (15004:13): [True: 49.9k, False: 5.12k]
  |  Branch (15004:23): [True: 49.9k, False: 0]
  ------------------
15005|  49.9k|        {
15006|  49.9k|            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
  ------------------
  |  Branch (15006:17): [True: 0, False: 49.9k]
  |  Branch (15006:59): [True: 49.9k, False: 0]
  ------------------
15007|  49.9k|            {
15008|  49.9k|                get_ignore_noop();
15009|  49.9k|            }
15010|      0|            else if (input_format == input_format_t::bon8)
  ------------------
  |  Branch (15010:22): [True: 0, False: 0]
  ------------------
15011|      0|            {
15012|       |                // a string that ends a container hands back the byte after it
15013|      0|                get_bon8();
15014|      0|            }
15015|      0|            else
15016|      0|            {
15017|      0|                get();
15018|      0|            }
15019|       |
15020|  49.9k|            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
  ------------------
  |  | 1667|  49.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 225, False: 49.7k]
  |  |  ------------------
  ------------------
15021|    225|            {
15022|    225|                return last_byte_error(exception_id::unexpected_end_of_input, "expected end of input", "value", "");
15023|    225|            }
15024|  49.9k|        }
15025|       |
15026|  54.8k|        return result;
15027|  55.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toIiEEbRT_PKc:
18667|  14.1k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  14.1k|        auto new_chars_read = ia.get_elements(&dest);
18671|  14.1k|        chars_read += new_chars_read;
18672|  14.1k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  14.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 153, False: 14.0k]
  |  |  ------------------
  ------------------
18673|    153|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|    153|            ++chars_read;
18676|    153|            static_cast<void>(report_eof(context));
18677|    153|            return false;
18678|    153|        }
18679|  14.0k|        return true;
18680|  14.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIiEEmPT_m:
 8644|  14.1k|    {
 8645|  14.1k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  14.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIiEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|  14.1k|    {
 8703|  14.1k|        const std::size_t wanted = count * sizeof(T);
 8704|  14.1k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|  14.1k|        const std::size_t copied = (std::min)(wanted, available);
 8706|  14.1k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|  14.1k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 14.0k, False: 99]
  |  |  ------------------
  ------------------
 8707|  14.0k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|  14.0k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|  14.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 14.0k, False: 0]
  ------------------
 8712|  14.0k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|  14.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 14.0k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|  14.0k|            std::memcpy(dest, &*current, copied);
 8716|  14.0k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|  14.0k|        }
 8718|  14.1k|        return copied;
 8719|  14.1k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E15remaining_countEv:
 8663|   774k|    {
 8664|       |#if JSON_HAS_RANGES && defined(__cpp_lib_concepts) && defined(JSON_HAS_CPP_20)
 8665|       |        // std::ranges::distance also supports sized sentinels of a different
 8666|       |        // type (e.g. std::counted_iterator + std::default_sentinel_t)
 8667|       |        return static_cast<std::size_t>(std::ranges::distance(current, end));
 8668|       |#else
 8669|   774k|        return static_cast<std::size_t>(std::distance(current, end));
 8670|   774k|#endif
 8671|   774k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10report_eofEPKc:
19058|  6.28k|    {
19059|  6.28k|        return sax->parse_error(chars_read, "<end of file>",
19060|  6.28k|                                parse_error::create(exception_id::unexpected_end_of_input, chars_read, exception_message("unexpected end of input", context), nullptr));
19061|  6.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE11parse_errorINS1_11parse_errorEEEbmRKSC_RKT_:
14004|  14.5k|    {
14005|  14.5k|        errored = true;
14006|  14.5k|        static_cast<void>(ex);
14007|  14.5k|        if (allow_exceptions)
  ------------------
  |  Branch (14007:13): [True: 9.69k, False: 4.84k]
  ------------------
14008|  9.69k|        {
14009|  9.69k|            JSON_THROW(ex);
  ------------------
  |  | 2556|  9.69k|    #define JSON_THROW(exception) throw exception
  ------------------
14010|  9.69k|        }
14011|  4.84k|        return false;
14012|  14.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail11parse_error6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_NS1_12exception_idEmRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5585|  29.0k|    {
 5586|  29.0k|        return create(static_cast<int>(id_), byte_, what_arg, context);
 5587|  29.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail11parse_error6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_imRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5570|  29.0k|    {
 5571|  29.0k|        const std::string w = concat(exception::name("parse_error", id_), "parse error",
 5572|  29.0k|                                     (byte_ != 0 ? (concat(" at byte ", std::to_string(byte_))) : ""),
  ------------------
  |  Branch (5572:39): [True: 29.0k, False: 0]
  ------------------
 5573|  29.0k|                                     ": ", exception::diagnostics(context), what_arg);
 5574|  29.0k|        return {id_, byte_, w.c_str()};
 5575|  29.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJS9_RA12_KcS9_RA3_SA_S9_RKS9_EEET_DpOT0_:
 5318|  29.0k|{
 5319|  29.0k|    OutStringType str;
 5320|  29.0k|    str.reserve(concat_length(args...));
 5321|  29.0k|    concat_into(str, std::forward<Args>(args)...);
 5322|  29.0k|    return str;
 5323|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA12_cS9_A3_cS9_S9_EEEmRKT_DpRKT0_:
 5228|  29.0k|{
 5229|  29.0k|    return str.size() + concat_length(rest...);
 5230|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA3_cS9_S9_EEEmPKcDpRKT_:
 5222|  29.0k|{
 5223|  29.0k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA3_cS9_S9_EEEmRKT_DpRKT0_:
 5228|  29.0k|{
 5229|  29.0k|    return str.size() + concat_length(rest...);
 5230|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_EEEmPKcDpRKT_:
 5222|  29.0k|{
 5223|  29.0k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA12_KcS9_RA3_SA_S9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5281|  29.0k|{
 5282|  29.0k|    out.append(std::forward<Arg>(arg));
 5283|  29.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA12_KcJS9_RA3_SA_S9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5281|  29.0k|{
 5282|  29.0k|    out.append(std::forward<Arg>(arg));
 5283|  29.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA3_KcS9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|  29.0k|{
 5282|  29.0k|    out.append(std::forward<Arg>(arg));
 5283|  29.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA3_KcJS9_RKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|  29.0k|{
 5282|  29.0k|    out.append(std::forward<Arg>(arg));
 5283|  29.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA10_KcS9_EEET_DpOT0_:
 5318|  29.0k|{
 5319|  29.0k|    OutStringType str;
 5320|  29.0k|    str.reserve(concat_length(args...));
 5321|  29.0k|    concat_into(str, std::forward<Args>(args)...);
 5322|  29.0k|    return str;
 5323|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA10_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|  29.0k|{
 5282|  29.0k|    out.append(std::forward<Arg>(arg));
 5283|  29.0k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  29.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail11parse_errorC2EimPKc:
 5602|  29.0k|        : exception(id_, what_arg), byte(byte_) {}
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE17exception_messageERKSC_SP_:
19163|  14.7k|    {
19164|  14.7k|        std::string error_msg = "syntax error while parsing ";
19165|       |
19166|  14.7k|        switch (input_format)
19167|  14.7k|        {
19168|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (19168:13): [True: 0, False: 14.7k]
  ------------------
19169|      0|                error_msg += "CBOR";
19170|      0|                break;
19171|       |
19172|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (19172:13): [True: 0, False: 14.7k]
  ------------------
19173|      0|                error_msg += "MessagePack";
19174|      0|                break;
19175|       |
19176|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (19176:13): [True: 0, False: 14.7k]
  ------------------
19177|      0|                error_msg += "UBJSON";
19178|      0|                break;
19179|       |
19180|      0|            case input_format_t::bson:
  ------------------
  |  Branch (19180:13): [True: 0, False: 14.7k]
  ------------------
19181|      0|                error_msg += "BSON";
19182|      0|                break;
19183|       |
19184|  14.7k|            case input_format_t::bjdata:
  ------------------
  |  Branch (19184:13): [True: 14.7k, False: 0]
  ------------------
19185|  14.7k|                error_msg += "BJData";
19186|  14.7k|                break;
19187|       |
19188|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (19188:13): [True: 0, False: 14.7k]
  ------------------
19189|      0|                error_msg += "BON8";
19190|      0|                break;
19191|       |
19192|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (19192:13): [True: 0, False: 14.7k]
  ------------------
19193|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (19193:13): [True: 0, False: 14.7k]
  ------------------
19194|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19194:17): [Folded, False: 0]
  ------------------
19195|  14.7k|        }
19196|       |
19197|  14.7k|        return concat(error_msg, ' ', context, ": ", detail);
19198|  14.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRS9_cRKS9_RA3_KcSC_EEET_DpOT0_:
 5318|  29.5k|{
 5319|  29.5k|    OutStringType str;
 5320|  29.5k|    str.reserve(concat_length(args...));
 5321|  29.5k|    concat_into(str, std::forward<Args>(args)...);
 5322|  29.5k|    return str;
 5323|  29.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJcS9_A3_cS9_EEEmRKT_DpRKT0_:
 5228|  29.5k|{
 5229|  29.5k|    return str.size() + concat_length(rest...);
 5230|  29.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA3_cS9_EEEmcDpRKT_:
 5216|  29.5k|{
 5217|  29.5k|    return 1 + concat_length(rest...);
 5218|  29.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA3_cS9_EEEmRKT_DpRKT0_:
 5228|  29.5k|{
 5229|  29.5k|    return str.size() + concat_length(rest...);
 5230|  29.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERS9_JcRKS9_RA3_KcSC_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSH_OSI_DpOT1_:
 5281|  29.5k|{
 5282|  29.5k|    out.append(std::forward<Arg>(arg));
 5283|  29.5k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  29.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcJRKS9_RA3_KcSB_ETnNS3_9enable_ifIXaantsr24detect_string_can_appendIT_T0_EE5valuesr27detect_string_can_append_opISG_SH_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5290|  29.5k|{
 5291|  29.5k|    out += std::forward<Arg>(arg);
 5292|  29.5k|    concat_into(out, std::forward<Args>(rest)...);
 5293|  29.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JRA3_KcSB_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|  29.5k|{
 5282|  29.5k|    out.append(std::forward<Arg>(arg));
 5283|  29.5k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  29.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA3_KcJRKS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|  29.5k|{
 5282|  29.5k|    out.append(std::forward<Arg>(arg));
 5283|  29.5k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  29.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE15enter_containerEbmm:
15082|   408k|    {
15083|   408k|        if (JSON_HEDLEY_UNLIKELY(is_object ? !sax->start_object(len) : !sax->start_array(len)))
  ------------------
  |  | 1667|   817k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 228, False: 408k]
  |  |  |  Branch (1667:94): [True: 50.7k, False: 358k]
  |  |  ------------------
  ------------------
15084|    228|        {
15085|    228|            return false;
15086|    228|        }
15087|       |
15088|   408k|        container_stack.emplace_back(len, is_object, type_marker);
15089|   408k|        return true;
15090|   408k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12start_objectEm:
13930|  65.8k|    {
13931|  65.8k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
13932|       |
13933|       |#if JSON_DIAGNOSTIC_POSITIONS
13934|       |        // Ensure this is after the call to handle_value to ensure correct start position.
13935|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
13936|       |#endif
13937|       |
13938|  65.8k|        return check_container_size(*this, len, "object", ref_stack.back());
13939|  65.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueINS1_7value_tEEEPSG_OT_:
14030|   453k|    {
14031|   453k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 38.0k, False: 415k]
  ------------------
14032|  38.0k|        {
14033|  38.0k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  38.0k|            return &root;
14040|  38.0k|        }
14041|       |
14042|   415k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|   415k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 359k, False: 55.8k]
  |  Branch (14042:9): [True: 55.8k, False: 0]
  |  Branch (14042:9): [True: 415k, False: 0]
  ------------------
14043|       |
14044|   415k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 359k, False: 55.8k]
  ------------------
14045|   359k|        {
14046|   359k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|   359k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|   359k|        }
14054|       |
14055|  55.8k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  55.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 55.8k, False: 0]
  ------------------
14056|  55.8k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  55.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 55.8k, False: 0]
  ------------------
14057|  55.8k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  55.8k|        return object_element;
14064|  55.8k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8is_arrayEv:
32946|  3.47M|    {
32947|  3.47M|        return m_data.m_type == value_t::array;
32948|  3.47M|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE9is_objectEv:
32938|   746k|    {
32939|   746k|        return m_data.m_type == value_t::object;
32940|   746k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2EOSE_:
32765|   419k|        : json_base_class_t(std::move(static_cast<json_base_class_t&>(other))),
32766|   419k|          m_data(std::move(other.m_data))
32767|       |#if JSON_DIAGNOSTIC_POSITIONS
32768|       |        , start_position(other.start_position)
32769|       |        , end_position(other.end_position)
32770|       |#endif
32771|   419k|    {
32772|       |        // check that the passed value is valid
32773|   419k|        other.assert_invariant(false);
32774|       |
32775|       |        // invalidate payload
32776|   419k|        other.m_data.m_type = value_t::null;
32777|   419k|        other.m_data.m_value = {};
32778|       |
32779|       |#if JSON_DIAGNOSTIC_POSITIONS
32780|       |        other.start_position = std::string::npos;
32781|       |        other.end_position = std::string::npos;
32782|       |#endif
32783|       |
32784|   419k|        set_parents();
32785|   419k|        assert_invariant();
32786|   419k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11set_parentsEv:
31170|  2.80M|    {
31171|       |#if JSON_DIAGNOSTICS
31172|       |        switch (m_data.m_type)
31173|       |        {
31174|       |            case value_t::array:
31175|       |            {
31176|       |                for (auto& element : *m_data.m_value.array)
31177|       |                {
31178|       |                    element.m_parent = this;
31179|       |                }
31180|       |                break;
31181|       |            }
31182|       |
31183|       |            case value_t::object:
31184|       |            {
31185|       |                for (auto& element : *m_data.m_value.object)
31186|       |                {
31187|       |                    element.second.m_parent = this;
31188|       |                }
31189|       |                break;
31190|       |            }
31191|       |
31192|       |            case value_t::null:
31193|       |            case value_t::string:
31194|       |            case value_t::boolean:
31195|       |            case value_t::number_integer:
31196|       |            case value_t::number_unsigned:
31197|       |            case value_t::number_float:
31198|       |            case value_t::binary:
31199|       |            case value_t::discarded:
31200|       |            default:
31201|       |                break;
31202|       |        }
31203|       |#endif
31204|  2.80M|    }
_ZN8nlohmann16json_abi_v3_12_06detail20check_container_sizeINS1_19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterIPKhSK_EEEESH_EEbRT_mPKcPT0_:
13724|   453k|{
13725|   453k|    if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref->max_size()))
  ------------------
  |  | 1667|   644k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 687, False: 452k]
  |  |  |  Branch (1667:94): [True: 191k, False: 262k]
  |  |  |  Branch (1667:94): [True: 687, False: 190k]
  |  |  ------------------
  ------------------
13726|    687|    {
13727|    687|        return container_too_large_error(sax, len, kind, ref);
13728|    687|    }
13729|   452k|    return true;
13730|   453k|}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8max_sizeEv:
34667|   215k|    {
34668|   215k|        switch (m_data.m_type)
34669|   215k|        {
34670|   175k|            case value_t::array:
  ------------------
  |  Branch (34670:13): [True: 175k, False: 40.1k]
  ------------------
34671|   175k|            {
34672|       |                // delegate call to array_t::max_size()
34673|   175k|                return m_data.m_value.array->max_size();
34674|      0|            }
34675|       |
34676|  40.1k|            case value_t::object:
  ------------------
  |  Branch (34676:13): [True: 40.1k, False: 175k]
  ------------------
34677|  40.1k|            {
34678|       |                // delegate call to object_t::max_size()
34679|  40.1k|                return m_data.m_value.object->max_size();
34680|      0|            }
34681|       |
34682|      0|            case value_t::null:
  ------------------
  |  Branch (34682:13): [True: 0, False: 215k]
  ------------------
34683|      0|            case value_t::string:
  ------------------
  |  Branch (34683:13): [True: 0, False: 215k]
  ------------------
34684|      0|            case value_t::boolean:
  ------------------
  |  Branch (34684:13): [True: 0, False: 215k]
  ------------------
34685|      0|            case value_t::number_integer:
  ------------------
  |  Branch (34685:13): [True: 0, False: 215k]
  ------------------
34686|      0|            case value_t::number_unsigned:
  ------------------
  |  Branch (34686:13): [True: 0, False: 215k]
  ------------------
34687|      0|            case value_t::number_float:
  ------------------
  |  Branch (34687:13): [True: 0, False: 215k]
  ------------------
34688|      0|            case value_t::binary:
  ------------------
  |  Branch (34688:13): [True: 0, False: 215k]
  ------------------
34689|      0|            case value_t::discarded:
  ------------------
  |  Branch (34689:13): [True: 0, False: 215k]
  ------------------
34690|      0|            default:
  ------------------
  |  Branch (34690:13): [True: 0, False: 215k]
  ------------------
34691|      0|            {
34692|       |                // all other types have max_size() == size()
34693|      0|                return size();
34694|      0|            }
34695|   215k|        }
34696|   215k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4sizeEv:
34627|  61.4k|    {
34628|  61.4k|        switch (m_data.m_type)
34629|  61.4k|        {
34630|      0|            case value_t::null:
  ------------------
  |  Branch (34630:13): [True: 0, False: 61.4k]
  ------------------
34631|      0|            {
34632|       |                // null values are empty
34633|      0|                return 0;
34634|      0|            }
34635|       |
34636|  59.0k|            case value_t::array:
  ------------------
  |  Branch (34636:13): [True: 59.0k, False: 2.47k]
  ------------------
34637|  59.0k|            {
34638|       |                // delegate call to array_t::size()
34639|  59.0k|                return m_data.m_value.array->size();
34640|      0|            }
34641|       |
34642|  2.47k|            case value_t::object:
  ------------------
  |  Branch (34642:13): [True: 2.47k, False: 59.0k]
  ------------------
34643|  2.47k|            {
34644|       |                // delegate call to object_t::size()
34645|  2.47k|                return m_data.m_value.object->size();
34646|      0|            }
34647|       |
34648|      0|            case value_t::string:
  ------------------
  |  Branch (34648:13): [True: 0, False: 61.4k]
  ------------------
34649|      0|            case value_t::boolean:
  ------------------
  |  Branch (34649:13): [True: 0, False: 61.4k]
  ------------------
34650|      0|            case value_t::number_integer:
  ------------------
  |  Branch (34650:13): [True: 0, False: 61.4k]
  ------------------
34651|      0|            case value_t::number_unsigned:
  ------------------
  |  Branch (34651:13): [True: 0, False: 61.4k]
  ------------------
34652|      0|            case value_t::number_float:
  ------------------
  |  Branch (34652:13): [True: 0, False: 61.4k]
  ------------------
34653|      0|            case value_t::binary:
  ------------------
  |  Branch (34653:13): [True: 0, False: 61.4k]
  ------------------
34654|      0|            case value_t::discarded:
  ------------------
  |  Branch (34654:13): [True: 0, False: 61.4k]
  ------------------
34655|      0|            default:
  ------------------
  |  Branch (34655:13): [True: 0, False: 61.4k]
  ------------------
34656|      0|            {
34657|       |                // all other types have size 1
34658|      0|                return 1;
34659|      0|            }
34660|  61.4k|        }
34661|  61.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail25container_too_large_errorINS1_19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterIPKhSK_EEEESH_EEbRT_mPKcPT0_:
13718|    687|{
13719|    687|    return sax.parse_error(0, "", out_of_range::create(exception_id::container_too_large, concat("excessive ", kind, " size: ", std::to_string(len)), ref));
13720|    687|}
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE11parse_errorINS1_12out_of_rangeEEEbmRKSC_RKT_:
14004|  1.05k|    {
14005|  1.05k|        errored = true;
14006|  1.05k|        static_cast<void>(ex);
14007|  1.05k|        if (allow_exceptions)
  ------------------
  |  Branch (14007:13): [True: 702, False: 351]
  ------------------
14008|    702|        {
14009|    702|            JSON_THROW(ex);
  ------------------
  |  | 2556|    702|    #define JSON_THROW(exception) throw exception
  ------------------
14010|    702|        }
14011|    351|        return false;
14012|  1.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_range6createIPNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEETnNS5_9enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_NS1_12exception_idERKSD_SK_:
 5672|  1.37k|    {
 5673|  1.37k|        return create(static_cast<int>(id_), what_arg, context);
 5674|  1.37k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_range6createIPNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEETnNS5_9enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_iRKSD_SK_:
 5665|  1.37k|    {
 5666|  1.37k|        const std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg);
 5667|  1.37k|        return {id_, w.c_str()};
 5668|  1.37k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9exception11diagnosticsINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEEEESD_PKT_:
 5457|  1.37k|    {
 5458|       |#if JSON_DIAGNOSTICS
 5459|       |        std::vector<std::string> tokens;
 5460|       |        for (const auto* current = leaf_element; current != nullptr && current->m_parent != nullptr; current = current->m_parent)
 5461|       |        {
 5462|       |            switch (current->m_parent->type())
 5463|       |            {
 5464|       |                case value_t::array:
 5465|       |                {
 5466|       |                    for (std::size_t i = 0; i < current->m_parent->m_data.m_value.array->size(); ++i)
 5467|       |                    {
 5468|       |                        if (&current->m_parent->m_data.m_value.array->operator[](i) == current)
 5469|       |                        {
 5470|       |                            tokens.emplace_back(std::to_string(i));
 5471|       |                            break;
 5472|       |                        }
 5473|       |                    }
 5474|       |                    break;
 5475|       |                }
 5476|       |
 5477|       |                case value_t::object:
 5478|       |                {
 5479|       |                    for (const auto& element : *current->m_parent->m_data.m_value.object)
 5480|       |                    {
 5481|       |                        if (&element.second == current)
 5482|       |                        {
 5483|       |                            // data() is null-terminated, so a key containing
 5484|       |                            // a null byte is cut short here rather than
 5485|       |                            // truncating the whole message at what()
 5486|       |                            tokens.emplace_back(element.first.data());
 5487|       |                            break;
 5488|       |                        }
 5489|       |                    }
 5490|       |                    break;
 5491|       |                }
 5492|       |
 5493|       |                case value_t::null: // LCOV_EXCL_LINE
 5494|       |                case value_t::string: // LCOV_EXCL_LINE
 5495|       |                case value_t::boolean: // LCOV_EXCL_LINE
 5496|       |                case value_t::number_integer: // LCOV_EXCL_LINE
 5497|       |                case value_t::number_unsigned: // LCOV_EXCL_LINE
 5498|       |                case value_t::number_float: // LCOV_EXCL_LINE
 5499|       |                case value_t::binary: // LCOV_EXCL_LINE
 5500|       |                case value_t::discarded: // LCOV_EXCL_LINE
 5501|       |                default:   // LCOV_EXCL_LINE
 5502|       |                    break; // LCOV_EXCL_LINE
 5503|       |            }
 5504|       |        }
 5505|       |
 5506|       |        if (tokens.empty())
 5507|       |        {
 5508|       |            return "";
 5509|       |        }
 5510|       |
 5511|       |        auto str = std::accumulate(tokens.rbegin(), tokens.rend(), std::string{},
 5512|       |                                   [](const std::string & a, const std::string & b)
 5513|       |        {
 5514|       |            return concat(a, '/', detail::escape(b));
 5515|       |        });
 5516|       |
 5517|       |        return concat('(', str, ") ", get_byte_positions(leaf_element));
 5518|       |#else
 5519|  1.37k|        return get_byte_positions(leaf_element);
 5520|  1.37k|#endif
 5521|  1.37k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9exception18get_byte_positionsINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEEEESD_PKT_:
 5539|  1.37k|    {
 5540|  1.37k|        static_cast<void>(leaf_element);
 5541|  1.37k|        return "";
 5542|  1.37k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_rangeC2EiPKc:
 5678|  2.10k|    out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {}
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA11_KcRPSA_RA8_SA_S9_EEET_DpOT0_:
 5318|  1.37k|{
 5319|  1.37k|    OutStringType str;
 5320|  1.37k|    str.reserve(concat_length(args...));
 5321|  1.37k|    concat_into(str, std::forward<Args>(args)...);
 5322|  1.37k|    return str;
 5323|  1.37k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJPKcA8_cNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEEmS4_DpRKT_:
 5222|  1.37k|{
 5223|  1.37k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  1.37k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJA8_cNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEmPKcDpRKT_:
 5222|  1.37k|{
 5223|  1.37k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  1.37k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA11_KcJRPSA_RA8_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5281|  1.37k|{
 5282|  1.37k|    out.append(std::forward<Arg>(arg));
 5283|  1.37k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  1.37k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERPKcJRA8_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|  1.37k|{
 5282|  1.37k|    out.append(std::forward<Arg>(arg));
 5283|  1.37k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  1.37k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA8_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|  1.37k|{
 5282|  1.37k|    out.append(std::forward<Arg>(arg));
 5283|  1.37k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  1.37k|}
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE11start_arrayEm:
13966|   387k|    {
13967|   387k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
13968|       |
13969|       |#if JSON_DIAGNOSTIC_POSITIONS
13970|       |        // Ensure this is after the call to handle_value to ensure correct start position.
13971|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
13972|       |#endif
13973|       |
13974|   387k|        if (JSON_HEDLEY_UNLIKELY(!check_container_size(*this, len, "array", ref_stack.back())))
  ------------------
  |  | 1667|   387k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 128, False: 387k]
  |  |  ------------------
  ------------------
13975|    128|        {
13976|    128|            return false;
13977|    128|        }
13978|       |
13979|   387k|        if (len != detail::unknown_size())
  ------------------
  |  Branch (13979:13): [True: 157k, False: 229k]
  ------------------
13980|   157k|        {
13981|   157k|            reserve_array(*ref_stack.back()->m_data.m_value.array, len, priority_tag<1> {});
13982|   157k|        }
13983|       |
13984|   387k|        return true;
13985|   387k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13reserve_arrayINSt3__16vectorINS0_10basic_jsonINS3_3mapES4_NS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS4_IhNSA_IhEEEEvEENSA_ISG_EEEEEEDTcmcldtfp_7reservefp0_Ecvv_EERT_mNS1_12priority_tagILj1EEE:
13695|   174k|{
13696|   174k|    constexpr std::size_t reserve_cap = 16384;
13697|   174k|    arr.reserve((std::min)(len, reserve_cap));
13698|   174k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE15container_frameC2Embm:
15051|   408k|            : remaining(remaining_), type_marker(type_marker_), is_object(is_object_) {}
_ZN8nlohmann16json_abi_v3_12_06detail12unknown_sizeEv:
13677|  1.66M|{
13678|  1.66M|    return (std::numeric_limits<std::size_t>::max)();
13679|  1.66M|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE15leave_containerEv:
15114|   352k|    {
15115|   352k|        const bool is_object = container_stack.back().is_object;
15116|   352k|        container_stack.pop_back();
15117|   352k|        return is_object ? sax->end_object() : sax->end_array();
  ------------------
  |  Branch (15117:16): [True: 45.1k, False: 307k]
  ------------------
15118|   352k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE10end_objectEv:
13952|  59.4k|    {
13953|  59.4k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  59.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13953:9): [True: 59.4k, False: 0]
  ------------------
13954|  59.4k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  59.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13954:9): [True: 59.4k, False: 0]
  ------------------
13955|       |
13956|       |#if JSON_DIAGNOSTIC_POSITIONS
13957|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
13958|       |#endif
13959|       |
13960|  59.4k|        ref_stack.back()->set_parents();
13961|  59.4k|        ref_stack.pop_back();
13962|  59.4k|        return true;
13963|  59.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE9end_arrayEv:
13988|   336k|    {
13989|   336k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|   336k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13989:9): [True: 336k, False: 0]
  ------------------
13990|   336k|        JSON_ASSERT(ref_stack.back()->is_array());
  ------------------
  |  | 2591|   336k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13990:9): [True: 336k, False: 0]
  ------------------
13991|       |
13992|       |#if JSON_DIAGNOSTIC_POSITIONS
13993|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
13994|       |#endif
13995|       |
13996|   336k|        ref_stack.back()->set_parents();
13997|   336k|        ref_stack.pop_back();
13998|   336k|        return true;
13999|   336k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE12unexpect_eofEPKc:
19041|   544k|    {
19042|   544k|        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
  ------------------
  |  | 1667|   544k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 5.22k, False: 539k]
  |  |  ------------------
  ------------------
19043|  5.22k|        {
19044|  5.22k|            return report_eof(context);
19045|  5.22k|        }
19046|   539k|        return true;
19047|   544k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE17check_string_utf8ERSC_PKc:
18941|   146k|    {
18942|   146k|        if (error_handler == error_handler_t::keep || is_valid_utf8(result))
  ------------------
  |  Branch (18942:13): [True: 146k, False: 0]
  |  Branch (18942:55): [True: 0, False: 0]
  ------------------
18943|   146k|        {
18944|   146k|            return true;
18945|   146k|        }
18946|       |
18947|      0|        if (error_handler == error_handler_t::strict)
  ------------------
  |  Branch (18947:13): [True: 0, False: 0]
  ------------------
18948|      0|        {
18949|      0|            return last_byte_error(exception_id::invalid_string_or_size, "invalid string: ill-formed UTF-8 byte", context);
18950|      0|        }
18951|       |
18952|      0|        result = sanitize_utf8(result, error_handler);
18953|      0|        return true;
18954|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE3keyERSC_:
13942|   145k|    {
13943|   145k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|   145k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13943:9): [True: 145k, False: 0]
  ------------------
13944|   145k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|   145k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13944:9): [True: 145k, False: 0]
  ------------------
13945|       |
13946|       |        // add null at the given key and store the reference for later
13947|   145k|        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));
13948|   145k|        return true;
13949|   145k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toIdEEbRT_PKc:
18667|  83.3k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  83.3k|        auto new_chars_read = ia.get_elements(&dest);
18671|  83.3k|        chars_read += new_chars_read;
18672|  83.3k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  83.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 48, False: 83.2k]
  |  |  ------------------
  ------------------
18673|     48|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     48|            ++chars_read;
18676|     48|            static_cast<void>(report_eof(context));
18677|     48|            return false;
18678|     48|        }
18679|  83.2k|        return true;
18680|  83.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIdEEmPT_m:
 8644|  83.3k|    {
 8645|  83.3k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  83.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIdEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|  83.3k|    {
 8703|  83.3k|        const std::size_t wanted = count * sizeof(T);
 8704|  83.3k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|  83.3k|        const std::size_t copied = (std::min)(wanted, available);
 8706|  83.3k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|  83.3k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 83.3k, False: 12]
  |  |  ------------------
  ------------------
 8707|  83.3k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|  83.3k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|  83.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 83.3k, False: 0]
  ------------------
 8712|  83.3k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|  83.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 83.3k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|  83.3k|            std::memcpy(dest, &*current, copied);
 8716|  83.3k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|  83.3k|        }
 8718|  83.3k|        return copied;
 8719|  83.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10emit_floatIdEEbT_:
18825|  83.2k|    {
18826|  83.2k|        const auto result = static_cast<number_float_t>(number);
18827|  83.2k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1667|   162k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 83.2k]
  |  |  |  Branch (1667:94): [True: 79.5k, False: 3.75k]
  |  |  |  Branch (1667:94): [True: 0, False: 79.5k]
  |  |  ------------------
  ------------------
18828|      0|        {
18829|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
18830|      0|        }
18831|  83.2k|        return sax->number_float(result, "");
18832|  83.2k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE18out_of_range_errorENS1_12exception_idEPKcSQ_:
19068|    210|    {
19069|    210|        return sax->parse_error(chars_read, get_token_string(), out_of_range::create(id_, exception_message(detail, context), nullptr));
19070|    210|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE16get_token_stringEv:
19152|  5.33k|    {
19153|  5.33k|        return hex_byte(static_cast<std::uint8_t>(current));
19154|  5.33k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_range6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_NS1_12exception_idERKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5672|    732|    {
 5673|    732|        return create(static_cast<int>(id_), what_arg, context);
 5674|    732|    }
_ZN8nlohmann16json_abi_v3_12_06detail12out_of_range6createIDnTnNSt3__19enable_ifIXsr21is_basic_json_contextIT_EE5valueEiE4typeELi0EEES2_iRKNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEES6_:
 5665|    732|    {
 5666|    732|        const std::string w = concat(exception::name("out_of_range", id_), exception::diagnostics(context), what_arg);
 5667|    732|        return {id_, w.c_str()};
 5668|    732|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12number_floatEdRKSC_:
13908|   151k|    {
13909|   151k|        handle_value(val);
13910|   151k|        return true;
13911|   151k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIRdEEPSG_OT_:
14030|   151k|    {
14031|   151k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 9.41k, False: 141k]
  ------------------
14032|  9.41k|        {
14033|  9.41k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  9.41k|            return &root;
14040|  9.41k|        }
14041|       |
14042|   141k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|   141k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 141k, False: 862]
  |  Branch (14042:9): [True: 862, False: 0]
  |  Branch (14042:9): [True: 141k, False: 0]
  ------------------
14043|       |
14044|   141k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 141k, False: 862]
  ------------------
14045|   141k|        {
14046|   141k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|   141k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|   141k|        }
14054|       |
14055|    862|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    862|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 862, False: 0]
  ------------------
14056|    862|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    862|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 862, False: 0]
  ------------------
14057|    862|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    862|        return object_element;
14064|    862|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2IRddTnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SI_EE5valueEiE4typeELi0EEEOT_:
32410|   218k|    {
32411|   218k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
32412|   218k|        set_parents();
32413|   218k|        assert_invariant();
32414|   218k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIdvE7to_jsonINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEERdEEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 7868|   218k|    {
 7869|   218k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 7870|   218k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERdEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 7812|   218k|    {
 7813|   218k|        return to_json(j, std::forward<T>(val));
 7814|   218k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEdTnNS4_9enable_ifIXsr3std17is_floating_pointIT0_EE5valueEiE4typeELi0EEEvRT_SI_:
 7505|   218k|{
 7506|   218k|    external_constructor<value_t::number_float>::construct(j, static_cast<typename BasicJsonType::number_float_t>(val));
 7507|   218k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE7EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_NSK_14number_float_tE:
 7295|   218k|    {
 7296|   218k|        j.replace_value(value_t::number_float, val);
 7297|   218k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE13replace_valueENS0_6detail7value_tERKNSE_10json_valueE:
31210|   774k|    {
31211|   774k|        m_data.m_value.destroy(m_data.m_type);
31212|   774k|        m_data.m_value = v;
31213|   774k|        m_data.m_type = t;
31214|   774k|        set_parents();
31215|   774k|        assert_invariant();
31216|   774k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2Ed:
30661|   218k|        json_value(number_float_t v) noexcept : number_float(v) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_stringIiEEbT_RSC_:
18910|    879|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    879|        return get_bytes(len, "string", result);
18921|    879|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesIiSC_EEbT_PKcRT0_:
18998|    879|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    879|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  1.52k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 834, False: 693]
  ------------------
19003|    834|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    834|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 714, False: 120]
  ------------------
19007|    834|                                       ? static_cast<std::size_t>(len)
19008|    834|                                       : chunk_size;
19009|    834|            const std::size_t old_size = result.size();
19010|    834|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    834|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    834|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 834, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    834|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    834|            chars_read += bytes_read;
19018|    834|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    834|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 186, False: 648]
  |  |  ------------------
  ------------------
19019|    186|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    186|                result.resize(old_size + bytes_read);
19024|    186|                ++chars_read;
19025|    186|                current = char_traits<char_type>::eof();
19026|    186|                return unexpect_eof(context);
19027|    186|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    648|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    648|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 648, False: 0]
  ------------------
19030|    648|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    648|        }
19032|    693|        return true;
19033|    879|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIcEEmPT_m:
 8644|   125k|    {
 8645|   125k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|   125k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIcEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|   125k|    {
 8703|   125k|        const std::size_t wanted = count * sizeof(T);
 8704|   125k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|   125k|        const std::size_t copied = (std::min)(wanted, available);
 8706|   125k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|   125k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 124k, False: 1.15k]
  |  |  ------------------
  ------------------
 8707|   124k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|   124k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|   124k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 124k, False: 0]
  ------------------
 8712|   124k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|   124k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 124k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|   124k|            std::memcpy(dest, &*current, copied);
 8716|   124k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|   124k|        }
 8718|   125k|        return copied;
 8719|   125k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE6stringERSC_:
13914|  76.2k|    {
13915|       |        // json_sax documents that the passed value may be moved from,
13916|       |        // so hand the buffer over instead of copying it
13917|  76.2k|        handle_value(std::move(val));
13918|  76.2k|        return true;
13919|  76.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueISC_EEPSG_OT_:
14030|  76.2k|    {
14031|  76.2k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 2.57k, False: 73.6k]
  ------------------
14032|  2.57k|        {
14033|  2.57k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  2.57k|            return &root;
14040|  2.57k|        }
14041|       |
14042|  73.6k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  73.6k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 44.3k, False: 29.3k]
  |  Branch (14042:9): [True: 29.3k, False: 0]
  |  Branch (14042:9): [True: 73.6k, False: 0]
  ------------------
14043|       |
14044|  73.6k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 44.3k, False: 29.3k]
  ------------------
14045|  44.3k|        {
14046|  44.3k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  44.3k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  44.3k|        }
14054|       |
14055|  29.3k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  29.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 29.3k, False: 0]
  ------------------
14056|  29.3k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  29.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 29.3k, False: 0]
  ------------------
14057|  29.3k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  29.3k|        return object_element;
14064|  29.3k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2ISA_SA_TnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SH_EE5valueEiE4typeELi0EEEOT_:
32410|   107k|    {
32411|   107k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
32412|   107k|        set_parents();
32413|   107k|        assert_invariant();
32414|   107k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvE7to_jsonINS0_10basic_jsonINS2_3mapENS2_6vectorES8_blmdS6_S1_NSD_IhNS6_IhEEEEvEES8_EEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSI_:
 7868|   107k|    {
 7869|   107k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 7870|   107k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEESD_EEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSI_:
 7812|   107k|    {
 7813|   107k|        return to_json(j, std::forward<T>(val));
 7814|   107k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRT_ONSH_8string_tE:
 7498|   107k|{
 7499|   107k|    external_constructor<value_t::string>::construct(j, std::move(s));
 7500|   107k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE3EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_ONSK_8string_tE:
 7257|   107k|    {
 7258|   107k|        const typename BasicJsonType::json_value value(std::move(s));
 7259|   107k|        j.replace_value(value_t::string, value);
 7260|   107k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2EOSA_:
30752|   107k|        json_value(string_t&& value) : string(create<string_t>(std::move(value))) {}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6createISA_JSA_EEEPT_DpOT0_:
30589|   107k|    {
30590|   107k|        AllocatorType<T> alloc;
30591|   107k|        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
30592|       |
30593|   107k|        auto deleter = [&](T * obj)
30594|   107k|        {
30595|   107k|            AllocatorTraits::deallocate(alloc, obj, 1);
30596|   107k|        };
30597|   107k|        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
30598|   107k|        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
30599|   107k|        JSON_ASSERT(obj);
  ------------------
  |  | 2591|   107k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30599:9): [True: 107k, False: 0]
  ------------------
30600|   107k|        return obj.release();
30601|   107k|    }
_ZN8nlohmann16json_abi_v3_12_027byte_container_with_subtypeINSt3__16vectorIhNS2_9allocatorIhEEEEEC2Ev:
 7906|  11.2k|        : container_type()
 7907|  11.2k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIhEEmPT_m:
 8644|   122k|    {
 8645|   122k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|   122k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIhEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|   122k|    {
 8703|   122k|        const std::size_t wanted = count * sizeof(T);
 8704|   122k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|   122k|        const std::size_t copied = (std::min)(wanted, available);
 8706|   122k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|   122k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 121k, False: 513]
  |  |  ------------------
  ------------------
 8707|   121k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|   121k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|   121k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 121k, False: 0]
  ------------------
 8712|   121k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|   121k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 121k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|   121k|            std::memcpy(dest, &*current, copied);
 8716|   121k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|   121k|        }
 8718|   122k|        return copied;
 8719|   122k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE6binaryERNS0_27byte_container_with_subtypeISF_EE:
13922|  5.26k|    {
13923|       |        // json_sax documents that the passed value may be moved from,
13924|       |        // so hand the buffer over instead of copying it
13925|  5.26k|        handle_value(std::move(val));
13926|  5.26k|        return true;
13927|  5.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueINS0_27byte_container_with_subtypeISF_EEEEPSG_OT_:
14030|  5.26k|    {
14031|  5.26k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 165, False: 5.09k]
  ------------------
14032|    165|        {
14033|    165|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    165|            return &root;
14040|    165|        }
14041|       |
14042|  5.09k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  5.09k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 4.57k, False: 519]
  |  Branch (14042:9): [True: 519, False: 0]
  |  Branch (14042:9): [True: 5.09k, False: 0]
  ------------------
14043|       |
14044|  5.09k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 4.57k, False: 519]
  ------------------
14045|  4.57k|        {
14046|  4.57k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  4.57k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  4.57k|        }
14054|       |
14055|    519|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    519|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 519, False: 0]
  ------------------
14056|    519|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    519|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 519, False: 0]
  ------------------
14057|    519|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    519|        return object_element;
14064|    519|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2INS0_27byte_container_with_subtypeISD_EESH_TnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SJ_EE5valueEiE4typeELi0EEEOT_:
32410|  10.5k|    {
32411|  10.5k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
32412|  10.5k|        set_parents();
32413|  10.5k|        assert_invariant();
32414|  10.5k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerINS0_27byte_container_with_subtypeINSt3__16vectorIhNS3_9allocatorIhEEEEEEvE7to_jsonINS0_10basic_jsonINS3_3mapES4_NS3_12basic_stringIcNS3_11char_traitsIcEENS5_IcEEEEblmdS5_S1_S7_vEES8_EEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSK_:
 7868|  10.5k|    {
 7869|  10.5k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 7870|  10.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS0_27byte_container_with_subtypeISG_EEEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSK_:
 7812|  10.5k|    {
 7813|  10.5k|        return to_json(j, std::forward<T>(val));
 7814|  10.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRT_RKNSH_8binary_tE:
 7637|  10.5k|{
 7638|  10.5k|    external_constructor<value_t::binary>::construct(j, bin);
 7639|  10.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE8EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_RKNSK_8binary_tE:
 7277|  10.5k|    {
 7278|  10.5k|        const typename BasicJsonType::json_value value(b);
 7279|  10.5k|        j.replace_value(value_t::binary, value);
 7280|  10.5k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2ERKNS0_27byte_container_with_subtypeISD_EE:
30773|  10.5k|        json_value(const binary_t& value) : binary(create<binary_t>(value)) {}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6createINS0_27byte_container_with_subtypeISD_EEJRKSH_EEEPT_DpOT0_:
30589|  10.5k|    {
30590|  10.5k|        AllocatorType<T> alloc;
30591|  10.5k|        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
30592|       |
30593|  10.5k|        auto deleter = [&](T * obj)
30594|  10.5k|        {
30595|  10.5k|            AllocatorTraits::deallocate(alloc, obj, 1);
30596|  10.5k|        };
30597|  10.5k|        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
30598|  10.5k|        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
30599|  10.5k|        JSON_ASSERT(obj);
  ------------------
  |  | 2591|  10.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30599:9): [True: 10.5k, False: 0]
  ------------------
30600|  10.5k|        return obj.release();
30601|  10.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberIhLb0EEEbRT_:
18739|   119k|    {
18740|       |        // read in the original format
18741|       |
18742|   119k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|   119k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 60, False: 118k]
  |  |  ------------------
  ------------------
18743|     60|        {
18744|     60|            return false;
18745|     60|        }
18746|   118k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 118k]
  |  Branch (18746:34): [Folded, False: 118k]
  |  Branch (18746:57): [True: 118k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|   118k|        return true;
18751|   119k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toIhEEbRT_PKc:
18667|   119k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|   119k|        auto new_chars_read = ia.get_elements(&dest);
18671|   119k|        chars_read += new_chars_read;
18672|   119k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|   119k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 180, False: 118k]
  |  |  ------------------
  ------------------
18673|    180|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|    180|            ++chars_read;
18676|    180|            static_cast<void>(report_eof(context));
18677|    180|            return false;
18678|    180|        }
18679|   118k|        return true;
18680|   119k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE7booleanEb:
13890|   101k|    {
13891|   101k|        handle_value(val);
13892|   101k|        return true;
13893|   101k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIRbEEPSG_OT_:
14030|   101k|    {
14031|   101k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 87, False: 101k]
  ------------------
14032|     87|        {
14033|     87|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|     87|            return &root;
14040|     87|        }
14041|       |
14042|   101k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|   101k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 80.7k, False: 20.5k]
  |  Branch (14042:9): [True: 20.5k, False: 0]
  |  Branch (14042:9): [True: 101k, False: 0]
  ------------------
14043|       |
14044|   101k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 80.7k, False: 20.5k]
  ------------------
14045|  80.7k|        {
14046|  80.7k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  80.7k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  80.7k|        }
14054|       |
14055|  20.5k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  20.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 20.5k, False: 0]
  ------------------
14056|  20.5k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  20.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 20.5k, False: 0]
  ------------------
14057|  20.5k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  20.5k|        return object_element;
14064|  20.5k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2IRbbTnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SI_EE5valueEiE4typeELi0EEEOT_:
32410|   146k|    {
32411|   146k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
32412|   146k|        set_parents();
32413|   146k|        assert_invariant();
32414|   146k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIbvE7to_jsonINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEERbEEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 7868|   146k|    {
 7869|   146k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 7870|   146k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERbEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 7812|   146k|    {
 7813|   146k|        return to_json(j, std::forward<T>(val));
 7814|   146k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEbTnNS4_9enable_ifIXsr3std7is_sameIT0_NT_9boolean_tEEE5valueEiE4typeELi0EEEvRSJ_SI_:
 7472|   146k|{
 7473|   146k|    external_constructor<value_t::boolean>::construct(j, b);
 7474|   146k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE4EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_NSK_9boolean_tE:
 7240|   146k|    {
 7241|   146k|        j.replace_value(value_t::boolean, b);
 7242|   146k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2Eb:
30655|   146k|        json_value(boolean_t v) noexcept : boolean(v) {}
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE4nullEv:
13884|  64.2k|    {
13885|  64.2k|        handle_value(nullptr);
13886|  64.2k|        return true;
13887|  64.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIDnEEPSG_OT_:
14030|  64.2k|    {
14031|  64.2k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 42, False: 64.1k]
  ------------------
14032|     42|        {
14033|     42|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|     42|            return &root;
14040|     42|        }
14041|       |
14042|  64.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  64.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 32.4k, False: 31.7k]
  |  Branch (14042:9): [True: 31.7k, False: 0]
  |  Branch (14042:9): [True: 64.1k, False: 0]
  ------------------
14043|       |
14044|  64.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 32.4k, False: 31.7k]
  ------------------
14045|  32.4k|        {
14046|  32.4k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  32.4k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  32.4k|        }
14054|       |
14055|  31.7k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  31.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 31.7k, False: 0]
  ------------------
14056|  31.7k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  31.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 31.7k, False: 0]
  ------------------
14057|  31.7k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  31.7k|        return object_element;
14064|  31.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE11emit_signedIiEEbT_:
18771|  11.4k|    {
18772|  11.4k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  11.4k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 11.4k, False: 0]
  |  |  ------------------
  ------------------
18773|  11.4k|        {
18774|  11.4k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  11.4k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIliEEbT0_:
 5101|  14.8k|{
 5102|  14.8k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  14.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IliLb1EvE4testEi:
 5094|  14.8k|    {
 5095|  14.8k|        return true;
 5096|  14.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE14number_integerEl:
13896|  89.8k|    {
13897|  89.8k|        handle_value(val);
13898|  89.8k|        return true;
13899|  89.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIRlEEPSG_OT_:
14030|  89.8k|    {
14031|  89.8k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 3.84k, False: 85.9k]
  ------------------
14032|  3.84k|        {
14033|  3.84k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  3.84k|            return &root;
14040|  3.84k|        }
14041|       |
14042|  85.9k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  85.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 83.4k, False: 2.56k]
  |  Branch (14042:9): [True: 2.56k, False: 0]
  |  Branch (14042:9): [True: 85.9k, False: 0]
  ------------------
14043|       |
14044|  85.9k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 83.4k, False: 2.56k]
  ------------------
14045|  83.4k|        {
14046|  83.4k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  83.4k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  83.4k|        }
14054|       |
14055|  2.56k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  2.56k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 2.56k, False: 0]
  ------------------
14056|  2.56k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  2.56k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 2.56k, False: 0]
  ------------------
14057|  2.56k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  2.56k|        return object_element;
14064|  2.56k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2IRllTnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SI_EE5valueEiE4typeELi0EEEOT_:
32410|   112k|    {
32411|   112k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
32412|   112k|        set_parents();
32413|   112k|        assert_invariant();
32414|   112k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIlvE7to_jsonINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEERlEEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 7868|   112k|    {
 7869|   112k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 7870|   112k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERlEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 7812|   112k|    {
 7813|   112k|        return to_json(j, std::forward<T>(val));
 7814|   112k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEElTnNS4_9enable_ifIXsr33is_compatible_number_integer_typeIT_T0_EE5valueEiE4typeELi0EEEvRSI_SJ_:
 7519|   112k|{
 7520|   112k|    external_constructor<value_t::number_integer>::construct(j, static_cast<typename BasicJsonType::number_integer_t>(val));
 7521|   112k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE5EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_NSK_16number_integer_tE:
 7315|   112k|    {
 7316|   112k|        j.replace_value(value_t::number_integer, val);
 7317|   112k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2El:
30657|   112k|        json_value(number_integer_t v) noexcept : number_integer(v) {}
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImiEEbT0_:
 5101|  2.99k|{
 5102|  2.99k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  2.99k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImiLb0EvE4testEi:
 5085|  2.99k|    {
 5086|  2.99k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  2.99k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImiLb0ELb1EE4testEi:
 5059|  2.99k|    {
 5060|  2.99k|        using CommonType = typename std::common_type<OfType, T>::type;
 5061|  2.99k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5061:16): [True: 2.99k, False: 0]
  |  Branch (5061:28): [True: 2.99k, False: 0]
  ------------------
 5062|  2.99k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE15number_unsignedEm:
13902|   125k|    {
13903|   125k|        handle_value(val);
13904|   125k|        return true;
13905|   125k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEE12handle_valueIRmEEPSG_OT_:
14030|   125k|    {
14031|   125k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 2.87k, False: 122k]
  ------------------
14032|  2.87k|        {
14033|  2.87k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  2.87k|            return &root;
14040|  2.87k|        }
14041|       |
14042|   122k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|   122k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 119k, False: 2.98k]
  |  Branch (14042:9): [True: 2.98k, False: 0]
  |  Branch (14042:9): [True: 122k, False: 0]
  ------------------
14043|       |
14044|   122k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 119k, False: 2.98k]
  ------------------
14045|   119k|        {
14046|   119k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|   119k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|   119k|        }
14054|       |
14055|  2.98k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  2.98k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 2.98k, False: 0]
  ------------------
14056|  2.98k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  2.98k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 2.98k, False: 0]
  ------------------
14057|  2.98k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  2.98k|        return object_element;
14064|  2.98k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2IRmmTnNS2_9enable_ifIXaantsr6detail13is_basic_jsonIT0_EE5valuesr6detail18is_compatible_typeISE_SI_EE5valueEiE4typeELi0EEEOT_:
32410|   179k|    {
32411|   179k|        JSONSerializer<U>::to_json(*this, std::forward<CompatibleType>(val));
32412|   179k|        set_parents();
32413|   179k|        assert_invariant();
32414|   179k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerImvE7to_jsonINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEERmEEDTcmclL_ZNS0_12_GLOBAL__N_17to_jsonEEfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 7868|   179k|    {
 7869|   179k|        ::nlohmann::to_json(j, std::forward<TargetType>(val));
 7870|   179k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail10to_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERmEEDTcmcl7to_jsonfp_clsr3stdE7forwardIT0_Efp0_EEcvv_EERT_OSJ_:
 7812|   179k|    {
 7813|   179k|        return to_json(j, std::forward<T>(val));
 7814|   179k|    }
_ZN8nlohmann16json_abi_v3_12_06detail7to_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEmTnNS4_9enable_ifIXsr26is_compatible_integer_typeINS4_11conditionalIXsr3std7is_sameINT_16number_integer_tENSJ_17number_unsigned_tEEE5valueENS1_27same_as_number_integer_typeESL_E4typeET0_EE5valueEiE4typeELi0EEEvRSJ_SP_:
 7512|   179k|{
 7513|   179k|    external_constructor<value_t::number_unsigned>::construct(j, static_cast<typename BasicJsonType::number_unsigned_t>(val));
 7514|   179k|}
_ZN8nlohmann16json_abi_v3_12_06detail20external_constructorILNS1_7value_tE6EE9constructINS0_10basic_jsonINSt3__13mapENS7_6vectorENS7_12basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEblmdSD_NS0_14adl_serializerENS9_IhNSD_IhEEEEvEEEEvRT_NSK_17number_unsigned_tE:
 7305|   179k|    {
 7306|   179k|        j.replace_value(value_t::number_unsigned, val);
 7307|   179k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2Em:
30659|   179k|        json_value(detail::number_unsigned_overload_type<NumberIntegerType, NumberUnsignedType> v) noexcept : number_unsigned(v) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toIlEEbRT_PKc:
18667|  15.9k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  15.9k|        auto new_chars_read = ia.get_elements(&dest);
18671|  15.9k|        chars_read += new_chars_read;
18672|  15.9k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  15.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 165, False: 15.7k]
  |  |  ------------------
  ------------------
18673|    165|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|    165|            ++chars_read;
18676|    165|            static_cast<void>(report_eof(context));
18677|    165|            return false;
18678|    165|        }
18679|  15.7k|        return true;
18680|  15.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIlEEmPT_m:
 8644|  15.9k|    {
 8645|  15.9k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  15.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIlEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|  15.9k|    {
 8703|  15.9k|        const std::size_t wanted = count * sizeof(T);
 8704|  15.9k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|  15.9k|        const std::size_t copied = (std::min)(wanted, available);
 8706|  15.9k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|  15.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 15.8k, False: 63]
  |  |  ------------------
  ------------------
 8707|  15.8k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|  15.8k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|  15.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 15.8k, False: 0]
  ------------------
 8712|  15.8k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|  15.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 15.8k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|  15.8k|            std::memcpy(dest, &*current, copied);
 8716|  15.8k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|  15.8k|        }
 8718|  15.9k|        return copied;
 8719|  15.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE11emit_signedIlEEbT_:
18771|  13.6k|    {
18772|  13.6k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  13.6k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 13.6k, False: 0]
  |  |  ------------------
  ------------------
18773|  13.6k|        {
18774|  13.6k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  13.6k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIllEEbT0_:
 5101|  26.4k|{
 5102|  26.4k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  26.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IllLb1EvE4testEl:
 5094|  26.4k|    {
 5095|  26.4k|        return true;
 5096|  26.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImlEEbT0_:
 5101|  1.57k|{
 5102|  1.57k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  1.57k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImlLb0EvE4testEl:
 5085|  1.57k|    {
 5086|  1.57k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  1.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImlLb0ELb1EE4testEl:
 5059|  1.57k|    {
 5060|  1.57k|        using CommonType = typename std::common_type<OfType, T>::type;
 5061|  1.57k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5061:16): [True: 1.57k, False: 0]
  |  Branch (5061:28): [True: 1.57k, False: 0]
  ------------------
 5062|  1.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toImEEbRT_PKc:
18667|  17.2k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  17.2k|        auto new_chars_read = ia.get_elements(&dest);
18671|  17.2k|        chars_read += new_chars_read;
18672|  17.2k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  17.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 111, False: 17.1k]
  |  |  ------------------
  ------------------
18673|    111|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|    111|            ++chars_read;
18676|    111|            static_cast<void>(report_eof(context));
18677|    111|            return false;
18678|    111|        }
18679|  17.1k|        return true;
18680|  17.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsImEEmPT_m:
 8644|  17.2k|    {
 8645|  17.2k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  17.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implImEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|  17.2k|    {
 8703|  17.2k|        const std::size_t wanted = count * sizeof(T);
 8704|  17.2k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|  17.2k|        const std::size_t copied = (std::min)(wanted, available);
 8706|  17.2k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|  17.2k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 17.2k, False: 30]
  |  |  ------------------
  ------------------
 8707|  17.2k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|  17.2k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|  17.2k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 17.2k, False: 0]
  ------------------
 8712|  17.2k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|  17.2k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 17.2k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|  17.2k|            std::memcpy(dest, &*current, copied);
 8716|  17.2k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|  17.2k|        }
 8718|  17.2k|        return copied;
 8719|  17.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE13emit_unsignedImEEbT_:
18799|  54.9k|    {
18800|  54.9k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  54.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 54.9k, False: 0]
  |  |  ------------------
  ------------------
18801|  54.9k|        {
18802|  54.9k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  54.9k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  54.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImmEEbT0_:
 5101|   119k|{
 5102|   119k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|   119k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImmLb1EvE4testEm:
 5094|   119k|    {
 5095|   119k|        return true;
 5096|   119k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJPKcA16_cNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEEEEEmS4_DpRKT_:
 5222|  2.40k|{
 5223|  2.40k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  2.40k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJA16_cNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEmPKcDpRKT_:
 5222|  3.04k|{
 5223|  3.04k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  3.04k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERPKcJRA16_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|  3.04k|{
 5282|  3.04k|    out.append(std::forward<Arg>(arg));
 5283|  3.04k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  3.04k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA16_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|  3.04k|{
 5282|  3.04k|    out.append(std::forward<Arg>(arg));
 5283|  3.04k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  3.04k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_stringIjEEbT_RSC_:
18910|    843|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    843|        return get_bytes(len, "string", result);
18921|    843|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesIjSC_EEbT_PKcRT0_:
18998|    843|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    843|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  1.33k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 729, False: 606]
  ------------------
19003|    729|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    729|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 564, False: 165]
  ------------------
19007|    729|                                       ? static_cast<std::size_t>(len)
19008|    729|                                       : chunk_size;
19009|    729|            const std::size_t old_size = result.size();
19010|    729|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    729|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    729|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 729, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    729|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    729|            chars_read += bytes_read;
19018|    729|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    729|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 237, False: 492]
  |  |  ------------------
  ------------------
19019|    237|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    237|                result.resize(old_size + bytes_read);
19024|    237|                ++chars_read;
19025|    237|                current = char_traits<char_type>::eof();
19026|    237|                return unexpect_eof(context);
19027|    237|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    492|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    492|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 492, False: 0]
  ------------------
19030|    492|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    492|        }
19032|    606|        return true;
19033|    843|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_stringIhEEbT_RSC_:
18910|  38.8k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  38.8k|        return get_bytes(len, "string", result);
18921|  38.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesIhSC_EEbT_PKcRT0_:
18998|  38.8k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  38.8k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  66.1k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 27.4k, False: 38.7k]
  ------------------
19003|  27.4k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  27.4k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 27.4k, False: 0]
  ------------------
19007|  27.4k|                                       ? static_cast<std::size_t>(len)
19008|  27.4k|                                       : chunk_size;
19009|  27.4k|            const std::size_t old_size = result.size();
19010|  27.4k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  27.4k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  27.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 27.4k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  27.4k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  27.4k|            chars_read += bytes_read;
19018|  27.4k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  27.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 102, False: 27.2k]
  |  |  ------------------
  ------------------
19019|    102|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    102|                result.resize(old_size + bytes_read);
19024|    102|                ++chars_read;
19025|    102|                current = char_traits<char_type>::eof();
19026|    102|                return unexpect_eof(context);
19027|    102|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  27.2k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  27.2k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 27.2k, False: 0]
  ------------------
19030|  27.2k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  27.2k|        }
19032|  38.7k|        return true;
19033|  38.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberItLb0EEEbRT_:
18739|  12.8k|    {
18740|       |        // read in the original format
18741|       |
18742|  12.8k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  12.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 41, False: 12.8k]
  |  |  ------------------
  ------------------
18743|     41|        {
18744|     41|            return false;
18745|     41|        }
18746|  12.8k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 12.8k]
  |  Branch (18746:34): [Folded, False: 12.7k]
  |  Branch (18746:57): [True: 12.7k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  12.8k|        return true;
18751|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toItEEbRT_PKc:
18667|  12.8k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  12.8k|        auto new_chars_read = ia.get_elements(&dest);
18671|  12.8k|        chars_read += new_chars_read;
18672|  12.8k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  12.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 123, False: 12.7k]
  |  |  ------------------
  ------------------
18673|    123|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|    123|            ++chars_read;
18676|    123|            static_cast<void>(report_eof(context));
18677|    123|            return false;
18678|    123|        }
18679|  12.7k|        return true;
18680|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsItEEmPT_m:
 8644|  12.8k|    {
 8645|  12.8k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implItEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|  12.8k|    {
 8703|  12.8k|        const std::size_t wanted = count * sizeof(T);
 8704|  12.8k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|  12.8k|        const std::size_t copied = (std::min)(wanted, available);
 8706|  12.8k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|  12.8k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 12.7k, False: 102]
  |  |  ------------------
  ------------------
 8707|  12.7k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|  12.7k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|  12.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 12.7k, False: 0]
  ------------------
 8712|  12.7k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|  12.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 12.7k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|  12.7k|            std::memcpy(dest, &*current, copied);
 8716|  12.7k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|  12.7k|        }
 8718|  12.8k|        return copied;
 8719|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_stringItEEbT_RSC_:
18910|  1.31k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  1.31k|        return get_bytes(len, "string", result);
18921|  1.31k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesItSC_EEbT_PKcRT0_:
18998|  1.31k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  1.31k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  1.87k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 711, False: 1.16k]
  ------------------
19003|    711|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    711|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 654, False: 57]
  ------------------
19007|    711|                                       ? static_cast<std::size_t>(len)
19008|    711|                                       : chunk_size;
19009|    711|            const std::size_t old_size = result.size();
19010|    711|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    711|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    711|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 711, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    711|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    711|            chars_read += bytes_read;
19018|    711|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    711|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 156, False: 555]
  |  |  ------------------
  ------------------
19019|    156|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    156|                result.resize(old_size + bytes_read);
19024|    156|                ++chars_read;
19025|    156|                current = char_traits<char_type>::eof();
19026|    156|                return unexpect_eof(context);
19027|    156|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    555|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    555|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 555, False: 0]
  ------------------
19030|    555|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    555|        }
19032|  1.16k|        return true;
19033|  1.31k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberIjLb0EEEbRT_:
18739|  9.13k|    {
18740|       |        // read in the original format
18741|       |
18742|  9.13k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  9.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 29, False: 9.10k]
  |  |  ------------------
  ------------------
18743|     29|        {
18744|     29|            return false;
18745|     29|        }
18746|  9.10k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 9.10k]
  |  Branch (18746:34): [Folded, False: 9.04k]
  |  Branch (18746:57): [True: 9.04k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  9.10k|        return true;
18751|  9.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toIjEEbRT_PKc:
18667|  9.13k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  9.13k|        auto new_chars_read = ia.get_elements(&dest);
18671|  9.13k|        chars_read += new_chars_read;
18672|  9.13k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  9.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 87, False: 9.04k]
  |  |  ------------------
  ------------------
18673|     87|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     87|            ++chars_read;
18676|     87|            static_cast<void>(report_eof(context));
18677|     87|            return false;
18678|     87|        }
18679|  9.04k|        return true;
18680|  9.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIjEEmPT_m:
 8644|  9.13k|    {
 8645|  9.13k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  9.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIjEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|  9.13k|    {
 8703|  9.13k|        const std::size_t wanted = count * sizeof(T);
 8704|  9.13k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|  9.13k|        const std::size_t copied = (std::min)(wanted, available);
 8706|  9.13k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|  9.13k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 9.10k, False: 33]
  |  |  ------------------
  ------------------
 8707|  9.10k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|  9.10k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|  9.10k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 9.10k, False: 0]
  ------------------
 8712|  9.10k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|  9.10k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 9.10k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|  9.10k|            std::memcpy(dest, &*current, copied);
 8716|  9.10k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|  9.10k|        }
 8718|  9.13k|        return copied;
 8719|  9.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberImLb0EEEbRT_:
18739|  17.2k|    {
18740|       |        // read in the original format
18741|       |
18742|  17.2k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  17.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 37, False: 17.2k]
  |  |  ------------------
  ------------------
18743|     37|        {
18744|     37|            return false;
18745|     37|        }
18746|  17.2k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 17.2k]
  |  Branch (18746:34): [Folded, False: 17.1k]
  |  Branch (18746:57): [True: 17.1k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  17.2k|        return true;
18751|  17.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_stringImEEbT_RSC_:
18910|    924|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    924|        return get_bytes(len, "string", result);
18921|    924|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesImSC_EEbT_PKcRT0_:
18998|    924|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    924|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  1.33k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 804, False: 534]
  ------------------
19003|    804|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    804|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 492, False: 312]
  ------------------
19007|    804|                                       ? static_cast<std::size_t>(len)
19008|    804|                                       : chunk_size;
19009|    804|            const std::size_t old_size = result.size();
19010|    804|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    804|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    804|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 804, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    804|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    804|            chars_read += bytes_read;
19018|    804|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    804|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 390, False: 414]
  |  |  ------------------
  ------------------
19019|    390|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    390|                result.resize(old_size + bytes_read);
19024|    390|                ++chars_read;
19025|    390|                current = char_traits<char_type>::eof();
19026|    390|                return unexpect_eof(context);
19027|    390|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    414|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    414|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 414, False: 0]
  ------------------
19030|    414|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    414|        }
19032|    534|        return true;
19033|    924|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE13emit_unsignedIhEEbT_:
18799|  49.7k|    {
18800|  49.7k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  49.7k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 49.7k, False: 0]
  |  |  ------------------
  ------------------
18801|  49.7k|        {
18802|  49.7k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  49.7k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  49.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImhEEbT0_:
 5101|  65.2k|{
 5102|  65.2k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  65.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImhLb0EvE4testEh:
 5085|  65.2k|    {
 5086|  65.2k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  65.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImhLb0ELb0EE4testEh:
 5039|  65.2k|    {
 5040|  65.2k|        using CommonType = typename std::common_type<OfType, T>::type;
 5041|  65.2k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5042|  65.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE13emit_unsignedItEEbT_:
18799|  8.44k|    {
18800|  8.44k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  8.44k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 8.44k, False: 0]
  |  |  ------------------
  ------------------
18801|  8.44k|        {
18802|  8.44k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  8.44k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  8.44k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImtEEbT0_:
 5101|  12.8k|{
 5102|  12.8k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  12.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImtLb0EvE4testEt:
 5085|  12.8k|    {
 5086|  12.8k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImtLb0ELb0EE4testEt:
 5039|  12.8k|    {
 5040|  12.8k|        using CommonType = typename std::common_type<OfType, T>::type;
 5041|  12.8k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5042|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE13emit_unsignedIjEEbT_:
18799|  6.68k|    {
18800|  6.68k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  6.68k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 6.68k, False: 0]
  |  |  ------------------
  ------------------
18801|  6.68k|        {
18802|  6.68k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  6.68k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  6.68k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImjEEbT0_:
 5101|  9.76k|{
 5102|  9.76k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  9.76k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImjLb0EvE4testEj:
 5085|  9.76k|    {
 5086|  9.76k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  9.76k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImjLb0ELb0EE4testEj:
 5039|  9.76k|    {
 5040|  9.76k|        using CommonType = typename std::common_type<OfType, T>::type;
 5041|  9.76k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5042|  9.76k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIlmEEbT0_:
 5101|  9.41k|{
 5102|  9.41k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  9.41k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IlmLb0EvE4testEm:
 5085|  9.41k|    {
 5086|  9.41k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  9.41k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IlmLb1ELb0EE4testEm:
 5049|  9.41k|    {
 5050|  9.41k|        using CommonType = typename std::common_type<OfType, T>::type;
 5051|  9.41k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5052|  9.41k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_binaryImEEbT_RNS0_27byte_container_with_subtypeISF_EE:
18972|  5.61k|    {
18973|  5.61k|        return get_bytes(len, "binary", result);
18974|  5.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesImNS0_27byte_container_with_subtypeISF_EEEEbT_PKcRT0_:
18998|  5.61k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  5.61k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  8.31k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 3.04k, False: 5.26k]
  ------------------
19003|  3.04k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  3.04k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 2.76k, False: 279]
  ------------------
19007|  3.04k|                                       ? static_cast<std::size_t>(len)
19008|  3.04k|                                       : chunk_size;
19009|  3.04k|            const std::size_t old_size = result.size();
19010|  3.04k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  3.04k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  3.04k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 3.04k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  3.04k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  3.04k|            chars_read += bytes_read;
19018|  3.04k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  3.04k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 351, False: 2.69k]
  |  |  ------------------
  ------------------
19019|    351|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    351|                result.resize(old_size + bytes_read);
19024|    351|                ++chars_read;
19025|    351|                current = char_traits<char_type>::eof();
19026|    351|                return unexpect_eof(context);
19027|    351|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  2.69k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  2.69k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 2.69k, False: 0]
  ------------------
19030|  2.69k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  2.69k|        }
19032|  5.26k|        return true;
19033|  5.61k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE11enter_arrayEmm:
15094|   358k|    {
15095|   358k|        return enter_container(/*is_object*/false, len, type_marker);
15096|   358k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23conditional_static_castImjTnNSt3__19enable_ifIXntsr3std7is_sameIT_T0_EE5valueEiE4typeELi0EEES5_S6_:
 4988|  3.04k|{
 4989|  3.04k|    return static_cast<T>(value);
 4990|  3.04k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE12enter_objectEmm:
15100|  50.7k|    {
15101|  50.7k|        return enter_container(/*is_object*/true, len, type_marker);
15102|  50.7k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE15unexpected_byteEPKcSP_:
19130|    552|    {
19131|    552|        return last_byte_error(exception_id::unexpected_byte, concat(detail, ": 0x", get_token_string()), context);
19132|    552|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRPKcRA5_SA_S9_EEET_DpOT0_:
 5318|  1.10k|{
 5319|  1.10k|    OutStringType str;
 5320|  1.10k|    str.reserve(concat_length(args...));
 5321|  1.10k|    concat_into(str, std::forward<Args>(args)...);
 5322|  1.10k|    return str;
 5323|  1.10k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJA5_cNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEmPKcDpRKT_:
 5222|  1.10k|{
 5223|  1.10k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  1.10k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERPKcJRA5_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|  1.10k|{
 5282|  1.10k|    out.append(std::forward<Arg>(arg));
 5283|  1.10k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  1.10k|}
_ZN8nlohmann16json_abi_v3_12_06detail23conditional_static_castImmTnNSt3__19enable_ifIXsr3std7is_sameIT_T0_EE5valueEiE4typeELi0EEES5_S6_:
 4994|  4.59k|{
 4995|  4.59k|    return value;
 4996|  4.59k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE14get_half_floatEb:
18845|  53.6k|    {
18846|  53.6k|        const auto byte1_raw = get();
18847|  53.6k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  53.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 35, False: 53.5k]
  |  |  ------------------
  ------------------
18848|     35|        {
18849|     35|            return false;
18850|     35|        }
18851|  53.5k|        const auto byte2_raw = get();
18852|  53.5k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  53.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 15, False: 53.5k]
  |  |  ------------------
  ------------------
18853|     15|        {
18854|     15|            return false;
18855|     15|        }
18856|       |
18857|  53.5k|        const auto byte1 = static_cast<unsigned char>(byte1_raw);
18858|  53.5k|        const auto byte2 = static_cast<unsigned char>(byte2_raw);
18859|       |
18860|       |        // Code from RFC 8949, Appendix D, Figure 3:
18861|       |        // As half-precision floating-point numbers were only added
18862|       |        // to IEEE 754 in 2008, today's programming platforms often
18863|       |        // still only have limited support for them. It is very
18864|       |        // easy to include at least decoding support for them even
18865|       |        // without such support. An example of a small decoder for
18866|       |        // half-precision floating-point numbers in the C language
18867|       |        // is shown in Fig. 3.
18868|  53.5k|        const auto half = little_endian
  ------------------
  |  Branch (18868:27): [True: 53.4k, False: 100]
  ------------------
18869|  53.5k|                          ? static_cast<unsigned int>((byte2 << 8u) + byte1)
18870|  53.5k|                          : static_cast<unsigned int>((byte1 << 8u) + byte2);
18871|  53.5k|        const double val = [&half]
18872|  53.5k|        {
18873|  53.5k|            const int exp = (half >> 10u) & 0x1Fu;
18874|  53.5k|            const unsigned int mant = half & 0x3FFu;
18875|  53.5k|            JSON_ASSERT(exp <= 31);
18876|  53.5k|            JSON_ASSERT(mant <= 1023);
18877|  53.5k|            switch (exp)
18878|  53.5k|            {
18879|  53.5k|                case 0:
18880|  53.5k|                    return std::ldexp(mant, -24);
18881|  53.5k|                case 31:
18882|  53.5k|                    return (mant == 0)
18883|  53.5k|                    ? std::numeric_limits<double>::infinity()
18884|  53.5k|                    : std::numeric_limits<double>::quiet_NaN();
18885|  53.5k|                default:
18886|  53.5k|                    return std::ldexp(mant + 1024, exp - 25);
18887|  53.5k|            }
18888|  53.5k|        }();
18889|  53.5k|        return sax->number_float((half & 0x8000u) != 0
  ------------------
  |  Branch (18889:34): [True: 13.0k, False: 40.4k]
  ------------------
18890|  53.5k|                                 ? static_cast<number_float_t>(-val)
18891|  53.5k|                                 : static_cast<number_float_t>(val), "");
18892|  53.5k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE14get_half_floatEbENKUlvE_clEv:
18872|  53.4k|        {
18873|  53.4k|            const int exp = (half >> 10u) & 0x1Fu;
18874|  53.4k|            const unsigned int mant = half & 0x3FFu;
18875|  53.4k|            JSON_ASSERT(exp <= 31);
  ------------------
  |  | 2591|  53.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18875:13): [True: 53.4k, False: 0]
  ------------------
18876|  53.4k|            JSON_ASSERT(mant <= 1023);
  ------------------
  |  | 2591|  53.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18876:13): [True: 53.4k, False: 0]
  ------------------
18877|  53.4k|            switch (exp)
18878|  53.4k|            {
18879|  9.78k|                case 0:
  ------------------
  |  Branch (18879:17): [True: 9.78k, False: 43.6k]
  ------------------
18880|  9.78k|                    return std::ldexp(mant, -24);
18881|  5.23k|                case 31:
  ------------------
  |  Branch (18881:17): [True: 5.23k, False: 48.2k]
  ------------------
18882|  5.23k|                    return (mant == 0)
  ------------------
  |  Branch (18882:28): [True: 3, False: 5.23k]
  ------------------
18883|  5.23k|                    ? std::numeric_limits<double>::infinity()
18884|  5.23k|                    : std::numeric_limits<double>::quiet_NaN();
18885|  38.4k|                default:
  ------------------
  |  Branch (18885:17): [True: 38.4k, False: 15.0k]
  ------------------
18886|  38.4k|                    return std::ldexp(mant + 1024, exp - 25);
18887|  53.4k|            }
18888|  53.4k|        }();
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberIfLb0EEEbRT_:
18739|  7.38k|    {
18740|       |        // read in the original format
18741|       |
18742|  7.38k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  7.38k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 15, False: 7.37k]
  |  |  ------------------
  ------------------
18743|     15|        {
18744|     15|            return false;
18745|     15|        }
18746|  7.37k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 7.37k]
  |  Branch (18746:34): [Folded, False: 7.34k]
  |  Branch (18746:57): [True: 7.34k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  7.37k|        return true;
18751|  7.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toIfEEbRT_PKc:
18667|  7.38k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  7.38k|        auto new_chars_read = ia.get_elements(&dest);
18671|  7.38k|        chars_read += new_chars_read;
18672|  7.38k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  7.38k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 45, False: 7.34k]
  |  |  ------------------
  ------------------
18673|     45|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     45|            ++chars_read;
18676|     45|            static_cast<void>(report_eof(context));
18677|     45|            return false;
18678|     45|        }
18679|  7.34k|        return true;
18680|  7.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIfEEmPT_m:
 8644|  7.38k|    {
 8645|  7.38k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  7.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIfEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|  7.38k|    {
 8703|  7.38k|        const std::size_t wanted = count * sizeof(T);
 8704|  7.38k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|  7.38k|        const std::size_t copied = (std::min)(wanted, available);
 8706|  7.38k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|  7.38k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 7.36k, False: 21]
  |  |  ------------------
  ------------------
 8707|  7.36k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|  7.36k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|  7.36k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 7.36k, False: 0]
  ------------------
 8712|  7.36k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|  7.36k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 7.36k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|  7.36k|            std::memcpy(dest, &*current, copied);
 8716|  7.36k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|  7.36k|        }
 8718|  7.38k|        return copied;
 8719|  7.38k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10emit_floatIfEEbT_:
18825|  7.34k|    {
18826|  7.34k|        const auto result = static_cast<number_float_t>(number);
18827|  7.34k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1667|  13.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 7.34k]
  |  |  |  Branch (1667:94): [True: 5.95k, False: 1.38k]
  |  |  |  Branch (1667:94): [True: 0, False: 5.95k]
  |  |  ------------------
  ------------------
18828|      0|        {
18829|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
18830|      0|        }
18831|  7.34k|        return sax->number_float(result, "");
18832|  7.34k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberIdLb0EEEbRT_:
18739|  83.3k|    {
18740|       |        // read in the original format
18741|       |
18742|  83.3k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  83.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 16, False: 83.3k]
  |  |  ------------------
  ------------------
18743|     16|        {
18744|     16|            return false;
18745|     16|        }
18746|  83.3k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 83.3k]
  |  Branch (18746:34): [Folded, False: 83.2k]
  |  Branch (18746:57): [True: 83.2k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  83.3k|        return true;
18751|  83.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberIaLb0EEEbRT_:
18739|   346k|    {
18740|       |        // read in the original format
18741|       |
18742|   346k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|   346k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 21, False: 346k]
  |  |  ------------------
  ------------------
18743|     21|        {
18744|     21|            return false;
18745|     21|        }
18746|   346k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 346k]
  |  Branch (18746:34): [Folded, False: 346k]
  |  Branch (18746:57): [True: 346k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|   346k|        return true;
18751|   346k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toIaEEbRT_PKc:
18667|   346k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|   346k|        auto new_chars_read = ia.get_elements(&dest);
18671|   346k|        chars_read += new_chars_read;
18672|   346k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|   346k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 63, False: 346k]
  |  |  ------------------
  ------------------
18673|     63|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     63|            ++chars_read;
18676|     63|            static_cast<void>(report_eof(context));
18677|     63|            return false;
18678|     63|        }
18679|   346k|        return true;
18680|   346k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIaEEmPT_m:
 8644|   346k|    {
 8645|   346k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|   346k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIaEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|   346k|    {
 8703|   346k|        const std::size_t wanted = count * sizeof(T);
 8704|   346k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|   346k|        const std::size_t copied = (std::min)(wanted, available);
 8706|   346k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|   346k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 346k, False: 63]
  |  |  ------------------
  ------------------
 8707|   346k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|   346k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|   346k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 346k, False: 0]
  ------------------
 8712|   346k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|   346k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 346k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|   346k|            std::memcpy(dest, &*current, copied);
 8716|   346k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|   346k|        }
 8718|   346k|        return copied;
 8719|   346k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE11emit_signedIaEEbT_:
18771|  48.9k|    {
18772|  48.9k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  48.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 48.9k, False: 0]
  |  |  ------------------
  ------------------
18773|  48.9k|        {
18774|  48.9k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  48.9k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIlaEEbT0_:
 5101|  58.5k|{
 5102|  58.5k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  58.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IlaLb1EvE4testEa:
 5094|  58.5k|    {
 5095|  58.5k|        return true;
 5096|  58.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImaEEbT0_:
 5101|   218k|{
 5102|   218k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|   218k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImaLb0EvE4testEa:
 5085|   218k|    {
 5086|   218k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|   218k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImaLb0ELb1EE4testEa:
 5059|   218k|    {
 5060|   218k|        using CommonType = typename std::common_type<OfType, T>::type;
 5061|   218k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5061:16): [True: 218k, False: 0]
  |  Branch (5061:28): [True: 218k, False: 0]
  ------------------
 5062|   218k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberIsLb0EEEbRT_:
18739|  19.8k|    {
18740|       |        // read in the original format
18741|       |
18742|  19.8k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  19.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 30, False: 19.8k]
  |  |  ------------------
  ------------------
18743|     30|        {
18744|     30|            return false;
18745|     30|        }
18746|  19.8k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 19.8k]
  |  Branch (18746:34): [Folded, False: 19.8k]
  |  Branch (18746:57): [True: 19.8k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  19.8k|        return true;
18751|  19.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE6get_toIsEEbRT_PKc:
18667|  19.8k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  19.8k|        auto new_chars_read = ia.get_elements(&dest);
18671|  19.8k|        chars_read += new_chars_read;
18672|  19.8k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  19.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 90, False: 19.8k]
  |  |  ------------------
  ------------------
18673|     90|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     90|            ++chars_read;
18676|     90|            static_cast<void>(report_eof(context));
18677|     90|            return false;
18678|     90|        }
18679|  19.8k|        return true;
18680|  19.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E12get_elementsIsEEmPT_m:
 8644|  19.8k|    {
 8645|  19.8k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  19.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E17get_elements_implIsEEmPT_mNSt3__117integral_constantIbLb1EEE:
 8702|  19.8k|    {
 8703|  19.8k|        const std::size_t wanted = count * sizeof(T);
 8704|  19.8k|        const std::size_t available = remaining_count() * sizeof(char_type);
 8705|  19.8k|        const std::size_t copied = (std::min)(wanted, available);
 8706|  19.8k|        if (JSON_HEDLEY_LIKELY(copied != 0))
  ------------------
  |  | 1666|  19.8k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 19.8k, False: 60]
  |  |  ------------------
  ------------------
 8707|  19.8k|        {
 8708|       |            // the copy must stay within both buffers: the caller-provided
 8709|       |            // destination holds `wanted` bytes and the remaining input range
 8710|       |            // holds `available` bytes, and `copied` is the minimum of the two
 8711|  19.8k|            JSON_ASSERT(copied <= wanted);    // does not overrun the destination
  ------------------
  |  | 2591|  19.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8711:13): [True: 19.8k, False: 0]
  ------------------
 8712|  19.8k|            JSON_ASSERT(copied <= available); // does not read past the input end
  ------------------
  |  | 2591|  19.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8712:13): [True: 19.8k, False: 0]
  ------------------
 8713|       |            // &*current yields the raw address for both raw pointers and
 8714|       |            // non-pointer contiguous iterators (e.g. std::vector's iterator)
 8715|  19.8k|            std::memcpy(dest, &*current, copied);
 8716|  19.8k|            std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(copied / sizeof(char_type)));
 8717|  19.8k|        }
 8718|  19.8k|        return copied;
 8719|  19.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE11emit_signedIsEEbT_:
18771|  15.0k|    {
18772|  15.0k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  15.0k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 15.0k, False: 0]
  |  |  ------------------
  ------------------
18773|  15.0k|        {
18774|  15.0k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  15.0k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIlsEEbT0_:
 5101|  20.0k|{
 5102|  20.0k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  20.0k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IlsLb1EvE4testEs:
 5094|  20.0k|    {
 5095|  20.0k|        return true;
 5096|  20.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofImsEEbT0_:
 5101|  6.71k|{
 5102|  6.71k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  6.71k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ImsLb0EvE4testEs:
 5085|  6.71k|    {
 5086|  6.71k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  6.71k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ImsLb0ELb1EE4testEs:
 5059|  6.71k|    {
 5060|  6.71k|        using CommonType = typename std::common_type<OfType, T>::type;
 5061|  6.71k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5061:16): [True: 6.71k, False: 0]
  |  Branch (5061:28): [True: 6.71k, False: 0]
  ------------------
 5062|  6.71k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberIiLb0EEEbRT_:
18739|  14.1k|    {
18740|       |        // read in the original format
18741|       |
18742|  14.1k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  14.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 51, False: 14.1k]
  |  |  ------------------
  ------------------
18743|     51|        {
18744|     51|            return false;
18745|     51|        }
18746|  14.1k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 14.1k]
  |  Branch (18746:34): [Folded, False: 14.0k]
  |  Branch (18746:57): [True: 14.0k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  14.1k|        return true;
18751|  14.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_numberIlLb0EEEbRT_:
18739|  15.9k|    {
18740|       |        // read in the original format
18741|       |
18742|  15.9k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  15.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 55, False: 15.8k]
  |  |  ------------------
  ------------------
18743|     55|        {
18744|     55|            return false;
18745|     55|        }
18746|  15.8k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 15.8k]
  |  Branch (18746:34): [Folded, False: 15.7k]
  |  Branch (18746:57): [True: 15.7k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  15.8k|        return true;
18751|  15.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE21parse_ubjson_internalEv:
17175|  65.3k|    {
17176|       |        // the key currently being read; hoisted out of the loop so that its
17177|       |        // capacity is reused across elements and across nesting levels
17178|  65.3k|        string_t key;
17179|       |
17180|       |        // the type marker of the value to read next
17181|  65.3k|        char_int_type prefix = get_ignore_noop();
17182|       |
17183|   962k|        while (true)
  ------------------
  |  Branch (17183:16): [True: 951k, Folded]
  ------------------
17184|   951k|        {
17185|   951k|            const std::size_t depth = container_stack.size();
17186|       |
17187|   951k|            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(prefix)))
  ------------------
  |  | 1667|   951k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 4.44k, False: 947k]
  |  |  ------------------
  ------------------
17188|  4.44k|            {
17189|  4.44k|                return false;
17190|  4.44k|            }
17191|       |
17192|       |            // the value begun here is complete once it is not inside anything
17193|   947k|            if (container_stack.empty())
  ------------------
  |  Branch (17193:17): [True: 20.4k, False: 926k]
  ------------------
17194|  20.4k|            {
17195|  20.4k|                return true;
17196|  20.4k|            }
17197|       |
17198|       |            // a value was completed rather than a container opened; a
17199|       |            // container that ends at a marker needs the next byte to test
17200|   926k|            if (container_stack.size() == depth && container_stack.back().remaining == npos)
  ------------------
  |  Branch (17200:17): [True: 509k, False: 417k]
  |  Branch (17200:52): [True: 248k, False: 261k]
  ------------------
17201|   248k|            {
17202|   248k|                get_ignore_noop();
17203|   248k|            }
17204|       |
17205|       |            // advance to the next element, closing the containers that ended.
17206|       |            // top is a copy, not a reference: it must stay valid across the
17207|       |            // pop_back() below, which destroys the container_stack element it
17208|       |            // would otherwise alias.
17209|   926k|            for (;;)
17210|  1.24M|            {
17211|  1.24M|                const container_frame top = container_stack.back();
17212|       |
17213|  1.24M|                if (top.remaining != npos)
  ------------------
  |  Branch (17213:21): [True: 535k, False: 705k]
  ------------------
17214|   535k|                {
17215|   535k|                    if (top.remaining != 0)
  ------------------
  |  Branch (17215:25): [True: 392k, False: 143k]
  ------------------
17216|   392k|                    {
17217|   392k|                        --container_stack.back().remaining;
17218|   392k|                        if (top.is_object)
  ------------------
  |  Branch (17218:29): [True: 36.1k, False: 355k]
  ------------------
17219|  36.1k|                        {
17220|  36.1k|                            key.clear();
17221|  36.1k|                            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, true, "key") || !sax->key(key)))
  ------------------
  |  | 1667|  72.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 51, False: 36.1k]
  |  |  |  Branch (1667:94): [True: 153, False: 36.0k]
  |  |  |  Branch (1667:94): [True: 0, False: 36.0k]
  |  |  ------------------
  ------------------
17222|     51|                            {
17223|     51|                                return false;
17224|     51|                            }
17225|  36.1k|                        }
17226|       |                        // an optimized container gives its elements no marker
17227|   392k|                        prefix = (top.type_marker != 0) ? top.type_marker : get_ignore_noop();
  ------------------
  |  Branch (17227:34): [True: 115k, False: 276k]
  ------------------
17228|   392k|                        break;
17229|   392k|                    }
17230|   535k|                }
17231|       |                // the end marker is compared against a literal rather than
17232|       |                // against a conditional expression, because char_int_type is
17233|       |                // unsigned for some input adapters and MSVC then reports the
17234|       |                // comparison as a signed/unsigned mismatch
17235|   705k|                else if (top.is_object ? (current != '}') : (current != ']'))
  ------------------
  |  Branch (17235:26): [True: 94.4k, False: 610k]
  |  Branch (17235:26): [True: 496k, False: 208k]
  ------------------
17236|   496k|                {
17237|       |                    // a container that ends at a marker is never optimized, so
17238|       |                    // every element carries its own marker; for an object the
17239|       |                    // byte tested above is the first byte of the key
17240|   496k|                    if (top.is_object)
  ------------------
  |  Branch (17240:25): [True: 66.8k, False: 429k]
  ------------------
17241|  66.8k|                    {
17242|  66.8k|                        key.clear();
17243|  66.8k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false, "key") || !sax->key(key)))
  ------------------
  |  | 1667|   131k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 627, False: 66.1k]
  |  |  |  Branch (1667:94): [True: 1.88k, False: 64.9k]
  |  |  |  Branch (1667:94): [True: 0, False: 64.9k]
  |  |  ------------------
  ------------------
17244|    627|                        {
17245|    627|                            return false;
17246|    627|                        }
17247|  66.1k|                        prefix = get_ignore_noop();
17248|  66.1k|                    }
17249|   429k|                    else
17250|   429k|                    {
17251|   429k|                        prefix = current;
17252|   429k|                    }
17253|   495k|                    break;
17254|   496k|                }
17255|       |
17256|   352k|                if (JSON_HEDLEY_UNLIKELY(!leave_container()))
  ------------------
  |  | 1667|   352k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 352k]
  |  |  ------------------
  ------------------
17257|      0|                {
17258|      0|                    return false;
17259|      0|                }
17260|   352k|                if (container_stack.empty())
  ------------------
  |  Branch (17260:21): [True: 29.4k, False: 323k]
  ------------------
17261|  29.4k|                {
17262|  29.4k|                    return true;
17263|  29.4k|                }
17264|       |                // the container that just ended was an element of the one
17265|       |                // below it, which may need the next byte for its own test
17266|   323k|                if (container_stack.back().remaining == npos)
  ------------------
  |  Branch (17266:21): [True: 194k, False: 128k]
  ------------------
17267|   194k|                {
17268|   194k|                    get_ignore_noop();
17269|   194k|                }
17270|   323k|            }
17271|   926k|        }
17272|  65.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE16get_ubjson_valueEm:
17761|   994k|    {
17762|   994k|        switch (prefix)
17763|   994k|        {
17764|  2.18k|            case char_traits<char_type>::eof():  // EOF
  ------------------
  |  Branch (17764:13): [True: 2.18k, False: 992k]
  ------------------
17765|  2.18k|                return unexpect_eof("value");
17766|       |
17767|  44.9k|            case 'T':  // true
  ------------------
  |  Branch (17767:13): [True: 44.9k, False: 949k]
  ------------------
17768|  44.9k|                return sax->boolean(true);
17769|  56.5k|            case 'F':  // false
  ------------------
  |  Branch (17769:13): [True: 56.5k, False: 937k]
  ------------------
17770|  56.5k|                return sax->boolean(false);
17771|       |
17772|  64.2k|            case 'Z':  // null
  ------------------
  |  Branch (17772:13): [True: 64.2k, False: 930k]
  ------------------
17773|  64.2k|                return sax->null();
17774|       |
17775|  1.94k|            case 'B':  // byte
  ------------------
  |  Branch (17775:13): [True: 1.94k, False: 992k]
  ------------------
17776|  1.94k|            {
17777|  1.94k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17777:21): [True: 0, False: 1.94k]
  ------------------
17778|      0|                {
17779|      0|                    break;
17780|      0|                }
17781|  1.94k|                std::uint8_t number{};
17782|  1.94k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17782:24): [True: 1.94k, False: 6]
  |  Branch (17782:46): [True: 1.94k, False: 0]
  ------------------
17783|  1.94k|            }
17784|       |
17785|  47.9k|            case 'U':
  ------------------
  |  Branch (17785:13): [True: 47.9k, False: 946k]
  ------------------
17786|  47.9k|            {
17787|  47.9k|                std::uint8_t number{};
17788|  47.9k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17788:24): [True: 47.8k, False: 96]
  |  Branch (17788:46): [True: 47.8k, False: 0]
  ------------------
17789|  1.94k|            }
17790|       |
17791|  48.9k|            case 'i':
  ------------------
  |  Branch (17791:13): [True: 48.9k, False: 945k]
  ------------------
17792|  48.9k|            {
17793|  48.9k|                std::int8_t number{};
17794|  48.9k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17794:24): [True: 48.9k, False: 33]
  |  Branch (17794:46): [True: 48.9k, False: 0]
  ------------------
17795|  1.94k|            }
17796|       |
17797|  15.0k|            case 'I':
  ------------------
  |  Branch (17797:13): [True: 15.0k, False: 979k]
  ------------------
17798|  15.0k|            {
17799|  15.0k|                std::int16_t number{};
17800|  15.0k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17800:24): [True: 15.0k, False: 27]
  |  Branch (17800:46): [True: 15.0k, False: 0]
  ------------------
17801|  1.94k|            }
17802|       |
17803|  11.5k|            case 'l':
  ------------------
  |  Branch (17803:13): [True: 11.5k, False: 982k]
  ------------------
17804|  11.5k|            {
17805|  11.5k|                std::int32_t number{};
17806|  11.5k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17806:24): [True: 11.4k, False: 63]
  |  Branch (17806:46): [True: 11.4k, False: 0]
  ------------------
17807|  1.94k|            }
17808|       |
17809|  13.7k|            case 'L':
  ------------------
  |  Branch (17809:13): [True: 13.7k, False: 980k]
  ------------------
17810|  13.7k|            {
17811|  13.7k|                std::int64_t number{};
17812|  13.7k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17812:24): [True: 13.6k, False: 39]
  |  Branch (17812:46): [True: 13.6k, False: 0]
  ------------------
17813|  1.94k|            }
17814|       |
17815|  8.52k|            case 'u':
  ------------------
  |  Branch (17815:13): [True: 8.52k, False: 985k]
  ------------------
17816|  8.52k|            {
17817|  8.52k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17817:21): [True: 0, False: 8.52k]
  ------------------
17818|      0|                {
17819|      0|                    break;
17820|      0|                }
17821|  8.52k|                std::uint16_t number{};
17822|  8.52k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17822:24): [True: 8.44k, False: 81]
  |  Branch (17822:46): [True: 8.44k, False: 0]
  ------------------
17823|  8.52k|            }
17824|       |
17825|  6.71k|            case 'm':
  ------------------
  |  Branch (17825:13): [True: 6.71k, False: 987k]
  ------------------
17826|  6.71k|            {
17827|  6.71k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17827:21): [True: 0, False: 6.71k]
  ------------------
17828|      0|                {
17829|      0|                    break;
17830|      0|                }
17831|  6.71k|                std::uint32_t number{};
17832|  6.71k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17832:24): [True: 6.68k, False: 30]
  |  Branch (17832:46): [True: 6.68k, False: 0]
  ------------------
17833|  6.71k|            }
17834|       |
17835|  13.9k|            case 'M':
  ------------------
  |  Branch (17835:13): [True: 13.9k, False: 980k]
  ------------------
17836|  13.9k|            {
17837|  13.9k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17837:21): [True: 0, False: 13.9k]
  ------------------
17838|      0|                {
17839|      0|                    break;
17840|      0|                }
17841|  13.9k|                std::uint64_t number{};
17842|  13.9k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17842:24): [True: 13.9k, False: 39]
  |  Branch (17842:46): [True: 13.9k, False: 0]
  ------------------
17843|  13.9k|            }
17844|       |
17845|  53.6k|            case 'h':
  ------------------
  |  Branch (17845:13): [True: 53.6k, False: 940k]
  ------------------
17846|  53.6k|            {
17847|  53.6k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17847:21): [True: 0, False: 53.6k]
  ------------------
17848|      0|                {
17849|      0|                    break;
17850|      0|                }
17851|  53.6k|                return get_half_float(true);
17852|  53.6k|            }
17853|       |
17854|  7.38k|            case 'd':
  ------------------
  |  Branch (17854:13): [True: 7.38k, False: 987k]
  ------------------
17855|  7.38k|            {
17856|  7.38k|                float number{};
17857|  7.38k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (17857:24): [True: 7.34k, False: 45]
  |  Branch (17857:46): [True: 7.34k, False: 0]
  ------------------
17858|  53.6k|            }
17859|       |
17860|  83.3k|            case 'D':
  ------------------
  |  Branch (17860:13): [True: 83.3k, False: 911k]
  ------------------
17861|  83.3k|            {
17862|  83.3k|                double number{};
17863|  83.3k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (17863:24): [True: 83.2k, False: 48]
  |  Branch (17863:46): [True: 83.2k, False: 0]
  ------------------
17864|  53.6k|            }
17865|       |
17866|  20.1k|            case 'H':
  ------------------
  |  Branch (17866:13): [True: 20.1k, False: 974k]
  ------------------
17867|  20.1k|            {
17868|  20.1k|                return get_ubjson_high_precision_number();
17869|  53.6k|            }
17870|       |
17871|  16.0k|            case 'C':  // char
  ------------------
  |  Branch (17871:13): [True: 16.0k, False: 978k]
  ------------------
17872|  16.0k|            {
17873|  16.0k|                get();
17874|  16.0k|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1667|  16.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 6, False: 16.0k]
  |  |  ------------------
  ------------------
17875|      6|                {
17876|      6|                    return false;
17877|      6|                }
17878|  16.0k|                if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1667|  16.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 24, False: 16.0k]
  |  |  ------------------
  ------------------
17879|     24|                {
17880|     24|                    return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
17881|     24|                }
17882|  16.0k|                string_t s(1, static_cast<typename string_t::value_type>(current));
17883|  16.0k|                return sax->string(s);
17884|  16.0k|            }
17885|       |
17886|  46.2k|            case 'S':  // string
  ------------------
  |  Branch (17886:13): [True: 46.2k, False: 948k]
  ------------------
17887|  46.2k|            {
17888|  46.2k|                string_t s;
17889|  46.2k|                return get_ubjson_string(s) && sax->string(s);
  ------------------
  |  Branch (17889:24): [True: 45.6k, False: 612]
  |  Branch (17889:48): [True: 45.6k, False: 0]
  ------------------
17890|  16.0k|            }
17891|       |
17892|   379k|            case '[':  // array
  ------------------
  |  Branch (17892:13): [True: 379k, False: 614k]
  ------------------
17893|   379k|                return get_ubjson_array();
17894|       |
17895|  51.0k|            case '{':  // object
  ------------------
  |  Branch (17895:13): [True: 51.0k, False: 943k]
  ------------------
17896|  51.0k|                return get_ubjson_object();
17897|       |
17898|    543|            default: // anything else
  ------------------
  |  Branch (17898:13): [True: 543, False: 993k]
  ------------------
17899|    543|                break;
17900|   994k|        }
17901|    543|        return unexpected_byte("invalid byte", "value");
17902|   994k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE32get_ubjson_high_precision_numberEv:
18014|  20.1k|    {
18015|       |        // get the size of the following number string
18016|  20.1k|        std::size_t size{};
18017|  20.1k|        bool no_ndarray = true;
18018|  20.1k|        auto res = get_ubjson_size_value(size, no_ndarray);
18019|  20.1k|        if (JSON_HEDLEY_UNLIKELY(!res))
  ------------------
  |  | 1667|  20.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 185, False: 19.9k]
  |  |  ------------------
  ------------------
18020|    185|        {
18021|    185|            return res;
18022|    185|        }
18023|       |
18024|       |        // get number string
18025|  19.9k|        std::vector<char> number_vector;
18026|   254k|        for (std::size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (18026:33): [True: 234k, False: 19.7k]
  ------------------
18027|   234k|        {
18028|   234k|            get();
18029|   234k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|   234k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 161, False: 234k]
  |  |  ------------------
  ------------------
18030|    161|            {
18031|    161|                return false;
18032|    161|            }
18033|       |            // the lexer would stop at a NUL and accept the digits before it
18034|   234k|            if (JSON_HEDLEY_UNLIKELY(current == '\0'))
  ------------------
  |  | 1667|   234k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 9, False: 234k]
  |  |  ------------------
  ------------------
18035|      9|            {
18036|      9|                return sax->parse_error(chars_read, "00", parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18037|      9|                                        exception_message("invalid number text; last byte: 0x00", "high-precision number"), nullptr));
18038|      9|            }
18039|   234k|            number_vector.push_back(static_cast<char>(current));
18040|   234k|        }
18041|       |
18042|       |        // parse number string
18043|  19.7k|        using ia_type = decltype(detail::input_adapter(number_vector));
18044|  19.7k|        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
18045|  19.7k|        const auto result_number = number_lexer.scan();
18046|  19.7k|        const auto number_string = number_lexer.get_token_string();
18047|  19.7k|        const auto result_remainder = number_lexer.scan();
18048|       |
18049|  19.7k|        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
18050|       |
18051|  19.7k|        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
  ------------------
  |  | 1667|  19.7k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3.38k, False: 16.3k]
  |  |  ------------------
  ------------------
18052|  3.38k|        {
18053|  3.38k|            return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18054|  3.38k|                                    exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
18055|  3.38k|        }
18056|       |
18057|  16.3k|        switch (result_number)
18058|  16.3k|        {
18059|    732|            case token_type::value_integer:
  ------------------
  |  Branch (18059:13): [True: 732, False: 15.6k]
  ------------------
18060|    732|                return sax->number_integer(number_lexer.get_number_integer());
18061|  5.71k|            case token_type::value_unsigned:
  ------------------
  |  Branch (18061:13): [True: 5.71k, False: 10.6k]
  ------------------
18062|  5.71k|                return sax->number_unsigned(number_lexer.get_number_unsigned());
18063|  7.39k|            case token_type::value_float:
  ------------------
  |  Branch (18063:13): [True: 7.39k, False: 8.97k]
  ------------------
18064|  7.39k|            {
18065|  7.39k|                const auto parsed_float = number_lexer.get_number_float();
18066|  7.39k|                if (JSON_HEDLEY_UNLIKELY(!std::isfinite(parsed_float)))
  ------------------
  |  | 1667|  7.39k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 156, False: 7.23k]
  |  |  ------------------
  ------------------
18067|    156|                {
18068|    156|                    return sax->parse_error(
18069|    156|                               chars_read,
18070|    156|                               number_string,
18071|    156|                               out_of_range::create(exception_id::number_overflow, concat("number overflow parsing '", number_string, '\''), nullptr));
18072|    156|                }
18073|       |                // number_string is a std::string, while the SAX interface takes a
18074|       |                // string_t; convert explicitly, as the two are only implicitly
18075|       |                // convertible for some string types
18076|  7.23k|                return sax->number_float(parsed_float, string_t(number_string.data(), number_string.size()));
18077|  7.39k|            }
18078|      0|            case token_type::uninitialized:
  ------------------
  |  Branch (18078:13): [True: 0, False: 16.3k]
  ------------------
18079|      3|            case token_type::literal_true:
  ------------------
  |  Branch (18079:13): [True: 3, False: 16.3k]
  ------------------
18080|      3|            case token_type::literal_false:
  ------------------
  |  Branch (18080:13): [True: 0, False: 16.3k]
  ------------------
18081|      6|            case token_type::literal_null:
  ------------------
  |  Branch (18081:13): [True: 3, False: 16.3k]
  ------------------
18082|     12|            case token_type::value_string:
  ------------------
  |  Branch (18082:13): [True: 6, False: 16.3k]
  ------------------
18083|     18|            case token_type::begin_array:
  ------------------
  |  Branch (18083:13): [True: 6, False: 16.3k]
  ------------------
18084|     21|            case token_type::begin_object:
  ------------------
  |  Branch (18084:13): [True: 3, False: 16.3k]
  ------------------
18085|     24|            case token_type::end_array:
  ------------------
  |  Branch (18085:13): [True: 3, False: 16.3k]
  ------------------
18086|     27|            case token_type::end_object:
  ------------------
  |  Branch (18086:13): [True: 3, False: 16.3k]
  ------------------
18087|     30|            case token_type::name_separator:
  ------------------
  |  Branch (18087:13): [True: 3, False: 16.3k]
  ------------------
18088|     33|            case token_type::value_separator:
  ------------------
  |  Branch (18088:13): [True: 3, False: 16.3k]
  ------------------
18089|  1.71k|            case token_type::parse_error:
  ------------------
  |  Branch (18089:13): [True: 1.68k, False: 14.6k]
  ------------------
18090|  1.83k|            case token_type::end_of_input:
  ------------------
  |  Branch (18090:13): [True: 117, False: 16.2k]
  ------------------
18091|  1.83k|            case token_type::literal_or_value:
  ------------------
  |  Branch (18091:13): [True: 0, False: 16.3k]
  ------------------
18092|  1.83k|            default:
  ------------------
  |  Branch (18092:13): [True: 0, False: 16.3k]
  ------------------
18093|  1.83k|                return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18094|  1.83k|                                        exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
18095|  16.3k|        }
18096|  16.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE21get_ubjson_size_valueERmRbmm:
17503|   259k|    {
17504|   259k|        if (prefix == 0)
  ------------------
  |  Branch (17504:13): [True: 205k, False: 53.3k]
  ------------------
17505|   205k|        {
17506|   205k|            prefix = get_ignore_noop();
17507|   205k|        }
17508|       |
17509|   259k|        switch (prefix)
17510|   259k|        {
17511|  30.2k|            case 'U':
  ------------------
  |  Branch (17511:13): [True: 30.2k, False: 228k]
  ------------------
17512|  30.2k|            {
17513|  30.2k|                std::uint8_t number{};
17514|  30.2k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  30.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 22, False: 30.2k]
  |  |  ------------------
  ------------------
17515|     22|                {
17516|     22|                    return false;
17517|     22|                }
17518|  30.2k|                result = static_cast<std::size_t>(number);
17519|  30.2k|                return true;
17520|  30.2k|            }
17521|       |
17522|   194k|            case 'i':
  ------------------
  |  Branch (17522:13): [True: 194k, False: 64.5k]
  ------------------
17523|   194k|                return get_ubjson_signed_count<std::int8_t>(result);
17524|       |
17525|  3.44k|            case 'I':
  ------------------
  |  Branch (17525:13): [True: 3.44k, False: 255k]
  ------------------
17526|  3.44k|                return get_ubjson_signed_count<std::int16_t>(result);
17527|       |
17528|  1.67k|            case 'l':
  ------------------
  |  Branch (17528:13): [True: 1.67k, False: 257k]
  ------------------
17529|  1.67k|                return get_ubjson_signed_count<std::int32_t>(result);
17530|       |
17531|  1.08k|            case 'L':
  ------------------
  |  Branch (17531:13): [True: 1.08k, False: 258k]
  ------------------
17532|  1.08k|                return get_ubjson_signed_count<std::int64_t>(result);
17533|       |
17534|  3.01k|            case 'u':
  ------------------
  |  Branch (17534:13): [True: 3.01k, False: 256k]
  ------------------
17535|  3.01k|            {
17536|  3.01k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17536:21): [True: 0, False: 3.01k]
  ------------------
17537|      0|                {
17538|      0|                    break;
17539|      0|                }
17540|  3.01k|                std::uint16_t number{};
17541|  3.01k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  3.01k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 11, False: 3.00k]
  |  |  ------------------
  ------------------
17542|     11|                {
17543|     11|                    return false;
17544|     11|                }
17545|  3.00k|                result = static_cast<std::size_t>(number);
17546|  3.00k|                return true;
17547|  3.01k|            }
17548|       |
17549|  1.56k|            case 'm':
  ------------------
  |  Branch (17549:13): [True: 1.56k, False: 257k]
  ------------------
17550|  1.56k|            {
17551|  1.56k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17551:21): [True: 0, False: 1.56k]
  ------------------
17552|      0|                {
17553|      0|                    break;
17554|      0|                }
17555|  1.56k|                std::uint32_t number{};
17556|  1.56k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.56k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 14, False: 1.54k]
  |  |  ------------------
  ------------------
17557|     14|                {
17558|     14|                    return false;
17559|     14|                }
17560|  1.54k|                result = conditional_static_cast<std::size_t>(number);
17561|  1.54k|                return true;
17562|  1.56k|            }
17563|       |
17564|  2.34k|            case 'M':
  ------------------
  |  Branch (17564:13): [True: 2.34k, False: 256k]
  ------------------
17565|  2.34k|            {
17566|  2.34k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17566:21): [True: 0, False: 2.34k]
  ------------------
17567|      0|                {
17568|      0|                    break;
17569|      0|                }
17570|  2.34k|                std::uint64_t number{};
17571|  2.34k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  2.34k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 16, False: 2.32k]
  |  |  ------------------
  ------------------
17572|     16|                {
17573|     16|                    return false;
17574|     16|                }
17575|  2.32k|                if (!value_in_range_of<std::size_t>(number))
  ------------------
  |  Branch (17575:21): [True: 0, False: 2.32k]
  ------------------
17576|      0|                {
17577|      0|                    return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17578|      0|                }
17579|  2.32k|                result = detail::conditional_static_cast<std::size_t>(number);
17580|  2.32k|                return true;
17581|  2.32k|            }
17582|       |
17583|  20.2k|            case '[':
  ------------------
  |  Branch (17583:13): [True: 20.2k, False: 238k]
  ------------------
17584|  20.2k|            {
17585|  20.2k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17585:21): [True: 0, False: 20.2k]
  ------------------
17586|      0|                {
17587|      0|                    break;
17588|      0|                }
17589|  20.2k|                if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
  ------------------
  |  Branch (17589:21): [True: 18, False: 20.2k]
  ------------------
17590|     18|                {
17591|     18|                    return last_byte_error(exception_id::invalid_string_or_size, "ndarray dimensional vector is not allowed", "size");
17592|     18|                }
17593|  20.2k|                std::vector<size_t> dim;
17594|  20.2k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
  ------------------
  |  | 1667|  20.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 377, False: 19.9k]
  |  |  ------------------
  ------------------
17595|    377|                {
17596|    377|                    return false;
17597|    377|                }
17598|  19.9k|                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
  ------------------
  |  Branch (17598:21): [True: 1.57k, False: 18.3k]
  |  Branch (17598:41): [True: 9.41k, False: 8.92k]
  |  Branch (17598:60): [True: 111, False: 9.29k]
  ------------------
17599|    930|                {
17600|    930|                    result = dim.at(dim.size() - 1);
17601|    930|                    return true;
17602|    930|                }
17603|  18.9k|                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format
  ------------------
  |  Branch (17603:21): [True: 15.4k, False: 3.50k]
  ------------------
17604|  15.4k|                {
17605|  15.4k|                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
  ------------------
  |  Branch (17605:33): [True: 43.3k, False: 15.0k]
  ------------------
17606|  43.3k|                    {
17607|  43.3k|                        if ( i == 0 )
  ------------------
  |  Branch (17607:30): [True: 432, False: 42.9k]
  ------------------
17608|    432|                        {
17609|    432|                            result = 0;
17610|    432|                            return true;
17611|    432|                        }
17612|  43.3k|                    }
17613|       |
17614|  15.0k|                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3)))
  ------------------
  |  | 1667|  15.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 15.0k]
  |  |  ------------------
  ------------------
17615|      0|                    {
17616|      0|                        return false;
17617|      0|                    }
17618|       |
17619|       |                    // the element type precedes the dimension vector (see get_ubjson_size_type)
17620|       |                    // and is passed down as ndarray_dtype; emit it here so the annotation keys
17621|       |                    // follow the documented _ArrayType_, _ArraySize_, _ArrayData_ order
17622|  15.0k|                    if (ndarray_dtype != 0)
  ------------------
  |  Branch (17622:25): [True: 14.5k, False: 441]
  ------------------
17623|  14.5k|                    {
17624|  14.5k|                        const char* type_name = bjd_type_name(ndarray_dtype);
17625|  14.5k|                        if (JSON_HEDLEY_UNLIKELY(type_name == nullptr))
  ------------------
  |  | 1667|  14.5k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 9, False: 14.5k]
  |  |  ------------------
  ------------------
17626|      9|                        {
17627|      9|                            return unexpected_byte("invalid byte", "type");
17628|      9|                        }
17629|       |
17630|  14.5k|                        string_t type_key = "_ArrayType_";
17631|  14.5k|                        string_t type = type_name; // sax->string() takes a reference
17632|  14.5k|                        if (JSON_HEDLEY_UNLIKELY(!sax->key(type_key) || !sax->string(type)))
  ------------------
  |  | 1667|  29.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 14.5k]
  |  |  |  Branch (1667:94): [True: 0, False: 14.5k]
  |  |  |  Branch (1667:94): [True: 0, False: 14.5k]
  |  |  ------------------
  ------------------
17633|      0|                        {
17634|      0|                            return false;
17635|      0|                        }
17636|  14.5k|                    }
17637|       |
17638|  15.0k|                    string_t key = "_ArraySize_";
17639|  15.0k|                    if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(dim.size())))
  ------------------
  |  | 1667|  30.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 15.0k]
  |  |  |  Branch (1667:94): [True: 0, False: 15.0k]
  |  |  |  Branch (1667:94): [True: 0, False: 15.0k]
  |  |  ------------------
  ------------------
17640|      0|                    {
17641|      0|                        return false;
17642|      0|                    }
17643|  15.0k|                    result = 1;
17644|  15.0k|                    for (auto i : dim)
  ------------------
  |  Branch (17644:33): [True: 41.2k, False: 14.8k]
  ------------------
17645|  41.2k|                    {
17646|       |                        // Pre-multiplication overflow check: since the loop above
17647|       |                        // already rejected any zero dimension, i is always > 0
17648|       |                        // here, so result > SIZE_MAX/i means result*i would
17649|       |                        // overflow. This check must happen before multiplication
17650|       |                        // since overflow detection after the fact is unreliable,
17651|       |                        // as modular arithmetic can produce any value, not just 0
17652|       |                        // or SIZE_MAX.
17653|  41.2k|                        if (JSON_HEDLEY_UNLIKELY(result > (std::numeric_limits<std::size_t>::max)() / i))
  ------------------
  |  | 1667|  41.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 207, False: 41.0k]
  |  |  ------------------
  ------------------
17654|    207|                        {
17655|    207|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
17656|    207|                        }
17657|  41.0k|                        result *= i;
17658|       |                        // the pre-check above already rules out result becoming 0
17659|       |                        // by overflow; the only value it cannot rule out is an
17660|       |                        // exact match with npos, the sentinel reserved for an
17661|       |                        // unknown-size container (see get_ubjson_size_type())
17662|  41.0k|                        if (result == npos)
  ------------------
  |  Branch (17662:29): [True: 3, False: 41.0k]
  ------------------
17663|      3|                        {
17664|      3|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
17665|      3|                        }
17666|  41.0k|                        if (JSON_HEDLEY_UNLIKELY(!emit_unsigned(i)))
  ------------------
  |  | 1667|  41.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 41.0k]
  |  |  ------------------
  ------------------
17667|      0|                        {
17668|      0|                            return false;
17669|      0|                        }
17670|  41.0k|                    }
17671|  14.8k|                    is_ndarray = true;
17672|  14.8k|                    return sax->end_array();
17673|  15.0k|                }
17674|  3.50k|                result = 0;
17675|  3.50k|                return true;
17676|  18.9k|            }
17677|       |
17678|    912|            default:
  ------------------
  |  Branch (17678:13): [True: 912, False: 258k]
  ------------------
17679|    912|                break;
17680|   259k|        }
17681|    912|        return length_type_error(" after '#'", "size");
17682|   259k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE23get_ubjson_signed_countIaEEbRm:
17468|   194k|    {
17469|   194k|        SignedType number{};
17470|   194k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|   194k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 9, False: 194k]
  |  |  ------------------
  ------------------
17471|      9|        {
17472|      9|            return false;
17473|      9|        }
17474|   194k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|   194k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 24, False: 194k]
  |  |  ------------------
  ------------------
17475|     24|        {
17476|     24|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     24|        }
17478|   194k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|   194k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 194k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|   194k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|   194k|        return true;
17484|   194k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE23get_ubjson_signed_countIsEEbRm:
17468|  3.44k|    {
17469|  3.44k|        SignedType number{};
17470|  3.44k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  3.44k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 19, False: 3.42k]
  |  |  ------------------
  ------------------
17471|     19|        {
17472|     19|            return false;
17473|     19|        }
17474|  3.42k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  3.42k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 24, False: 3.40k]
  |  |  ------------------
  ------------------
17475|     24|        {
17476|     24|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     24|        }
17478|  3.40k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|  3.40k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.40k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|  3.40k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|  3.40k|        return true;
17484|  3.40k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE23get_ubjson_signed_countIiEEbRm:
17468|  1.67k|    {
17469|  1.67k|        SignedType number{};
17470|  1.67k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.67k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 25, False: 1.64k]
  |  |  ------------------
  ------------------
17471|     25|        {
17472|     25|            return false;
17473|     25|        }
17474|  1.64k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  1.64k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 99, False: 1.54k]
  |  |  ------------------
  ------------------
17475|     99|        {
17476|     99|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     99|        }
17478|  1.54k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|  1.54k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.54k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|  1.54k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|  1.54k|        return true;
17484|  1.54k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE23get_ubjson_signed_countIlEEbRm:
17468|  1.08k|    {
17469|  1.08k|        SignedType number{};
17470|  1.08k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.08k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 32, False: 1.05k]
  |  |  ------------------
  ------------------
17471|     32|        {
17472|     32|            return false;
17473|     32|        }
17474|  1.05k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  1.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 204, False: 853]
  |  |  ------------------
  ------------------
17475|    204|        {
17476|    204|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|    204|        }
17478|    853|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|    853|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 853]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|    853|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|    853|        return true;
17484|    853|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE23get_ubjson_ndarray_sizeERNS6_ImNSA_ImEEEE:
17399|  20.2k|    {
17400|  20.2k|        std::pair<std::size_t, char_int_type> size_and_type;
17401|  20.2k|        size_t dimlen = 0;
17402|  20.2k|        bool no_ndarray = true;
17403|       |
17404|  20.2k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
  ------------------
  |  | 1667|  20.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 20.2k]
  |  |  ------------------
  ------------------
17405|      8|        {
17406|      8|            return false;
17407|      8|        }
17408|       |
17409|  20.2k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (17409:13): [True: 7.81k, False: 12.4k]
  ------------------
17410|  7.81k|        {
17411|  7.81k|            if (size_and_type.second != 0)
  ------------------
  |  Branch (17411:17): [True: 4.09k, False: 3.72k]
  ------------------
17412|  4.09k|            {
17413|  4.09k|                if (size_and_type.second != 'N')
  ------------------
  |  Branch (17413:21): [True: 4.09k, False: 0]
  ------------------
17414|  4.09k|                {
17415|  31.3k|                    for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17415:45): [True: 27.4k, False: 3.91k]
  ------------------
17416|  27.4k|                    {
17417|  27.4k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
  ------------------
  |  | 1667|  27.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 177, False: 27.2k]
  |  |  ------------------
  ------------------
17418|    177|                        {
17419|    177|                            return false;
17420|    177|                        }
17421|  27.2k|                        dim.push_back(dimlen);
17422|  27.2k|                    }
17423|  4.09k|                }
17424|  4.09k|            }
17425|  3.72k|            else
17426|  3.72k|            {
17427|  13.1k|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17427:41): [True: 9.52k, False: 3.60k]
  ------------------
17428|  9.52k|                {
17429|  9.52k|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
  ------------------
  |  | 1667|  9.52k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 116, False: 9.40k]
  |  |  ------------------
  ------------------
17430|    116|                    {
17431|    116|                        return false;
17432|    116|                    }
17433|  9.40k|                    dim.push_back(dimlen);
17434|  9.40k|                }
17435|  3.72k|            }
17436|  7.81k|        }
17437|  12.4k|        else
17438|  12.4k|        {
17439|  38.2k|            while (current != ']')
  ------------------
  |  Branch (17439:20): [True: 25.9k, False: 12.3k]
  ------------------
17440|  25.9k|            {
17441|  25.9k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
  ------------------
  |  | 1667|  25.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 76, False: 25.8k]
  |  |  ------------------
  ------------------
17442|     76|                {
17443|     76|                    return false;
17444|     76|                }
17445|  25.8k|                dim.push_back(dimlen);
17446|  25.8k|                get_ignore_noop();
17447|  25.8k|            }
17448|  12.4k|        }
17449|  19.9k|        return true;
17450|  20.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE20get_ubjson_size_typeERNS4_4pairImmEEb:
17696|   451k|    {
17697|   451k|        result.first = npos; // size
17698|   451k|        result.second = 0; // type
17699|       |        // seed the flag with the caller's context: inside an ndarray dimension
17700|       |        // vector another ndarray is not allowed, and get_ubjson_size_value()
17701|       |        // rejects it up front instead of reading it and reporting afterwards.
17702|       |        // Seeding it with `false` made every '#' of a "[#[#[..." chain descend
17703|       |        // another level, which overflowed the stack (see #5104).
17704|   451k|        bool is_ndarray = inside_ndarray;
17705|       |
17706|   451k|        get_ignore_noop();
17707|       |
17708|   451k|        if (current == '$')
  ------------------
  |  Branch (17708:13): [True: 32.6k, False: 418k]
  ------------------
17709|  32.6k|        {
17710|  32.6k|            result.second = get();  // must not ignore 'N', because 'N' maybe the type
17711|  32.6k|            if (input_format == input_format_t::bjdata
  ------------------
  |  Branch (17711:17): [True: 32.6k, False: 0]
  ------------------
17712|  32.6k|                    && JSON_HEDLEY_UNLIKELY(is_bjd_excluded_optimized_type(result.second)))
  ------------------
  |  | 1667|  32.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 27, False: 32.6k]
  |  |  ------------------
  ------------------
17713|     27|            {
17714|     27|                return optimized_type_error();
17715|     27|            }
17716|       |
17717|  32.6k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("type")))
  ------------------
  |  | 1667|  32.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 32.6k]
  |  |  ------------------
  ------------------
17718|      3|            {
17719|      3|                return false;
17720|      3|            }
17721|       |
17722|  32.6k|            get_ignore_noop();
17723|  32.6k|            if (JSON_HEDLEY_UNLIKELY(current != '#'))
  ------------------
  |  | 1667|  32.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 168, False: 32.4k]
  |  |  ------------------
  ------------------
17724|    168|            {
17725|    168|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1667|    168|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 32, False: 136]
  |  |  ------------------
  ------------------
17726|     32|                {
17727|     32|                    return false;
17728|     32|                }
17729|    136|                return last_byte_error(exception_id::unexpected_byte, "expected '#' after type information", "size", "");
17730|    168|            }
17731|       |
17732|  32.4k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray, 0, result.second);
17733|       |            // an ndarray was read here only if the flag flipped; when it was
17734|       |            // seeded true, get_ubjson_size_value() already rejected the nested
17735|       |            // dimension vector
17736|  32.4k|            if (input_format == input_format_t::bjdata && is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (17736:17): [True: 32.3k, False: 80]
  |  Branch (17736:59): [True: 18.6k, False: 13.7k]
  |  Branch (17736:73): [True: 14.5k, False: 4.09k]
  ------------------
17737|  14.5k|            {
17738|  14.5k|                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
17739|  14.5k|            }
17740|  32.4k|            return is_error;
17741|  32.6k|        }
17742|       |
17743|   418k|        if (current == '#')
  ------------------
  |  Branch (17743:13): [True: 143k, False: 274k]
  ------------------
17744|   143k|        {
17745|   143k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
17746|   143k|            if (input_format == input_format_t::bjdata && is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (17746:17): [True: 142k, False: 868]
  |  Branch (17746:59): [True: 3.96k, False: 138k]
  |  Branch (17746:73): [True: 234, False: 3.73k]
  ------------------
17747|    234|            {
17748|    234|                return last_byte_error(exception_id::unexpected_byte, "ndarray requires both type and size", "size");
17749|    234|            }
17750|   143k|            return is_error;
17751|   143k|        }
17752|       |
17753|   274k|        return true;
17754|   418k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE30is_bjd_excluded_optimized_typeEm:
19242|  32.6k|    {
19243|  32.6k|        return marker == '[' || marker == '{' || marker == 'S' || marker == 'H'
  ------------------
  |  Branch (19243:16): [True: 6, False: 32.6k]
  |  Branch (19243:33): [True: 3, False: 32.6k]
  |  Branch (19243:50): [True: 3, False: 32.6k]
  |  Branch (19243:67): [True: 3, False: 32.6k]
  ------------------
19244|  32.6k|               || marker == 'T' || marker == 'F' || marker == 'N' || marker == 'Z';
  ------------------
  |  Branch (19244:19): [True: 3, False: 32.6k]
  |  Branch (19244:36): [True: 3, False: 32.6k]
  |  Branch (19244:53): [True: 3, False: 32.6k]
  |  Branch (19244:70): [True: 3, False: 32.6k]
  ------------------
19245|  32.6k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE20optimized_type_errorEv:
19081|     27|    {
19082|     27|        return last_byte_error(exception_id::unexpected_byte, concat("marker 0x", get_token_string(), " is not a permitted optimized array type"), "type");
19083|     27|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA10_KcS9_RA41_SA_EEET_DpOT0_:
 5318|     54|{
 5319|     54|    OutStringType str;
 5320|     54|    str.reserve(concat_length(args...));
 5321|     54|    concat_into(str, std::forward<Args>(args)...);
 5322|     54|    return str;
 5323|     54|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEA41_cEEEmPKcDpRKT_:
 5222|     54|{
 5223|     54|    return ::strlen(cstr) + concat_length(rest...);
 5224|     54|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJA41_cEEEmRKT_DpRKT0_:
 5228|     54|{
 5229|     54|    return str.size() + concat_length(rest...);
 5230|     54|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA10_KcJS9_RA41_SA_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|     54|{
 5282|     54|    out.append(std::forward<Arg>(arg));
 5283|     54|    concat_into(out, std::forward<Args>(rest)...);
 5284|     54|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEES9_JRA41_KcETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|     54|{
 5282|     54|    out.append(std::forward<Arg>(arg));
 5283|     54|    concat_into(out, std::forward<Args>(rest)...);
 5284|     54|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA41_KcJETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|     54|{
 5282|     54|    out.append(std::forward<Arg>(arg));
 5283|     54|    concat_into(out, std::forward<Args>(rest)...);
 5284|     54|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE13bjd_type_nameEm:
19256|  14.5k|    {
19257|  14.5k|        switch (marker)
19258|  14.5k|        {
19259|  1.13k|            case 'B':
  ------------------
  |  Branch (19259:13): [True: 1.13k, False: 13.4k]
  ------------------
19260|  1.13k|                return "byte";
19261|  1.76k|            case 'C':
  ------------------
  |  Branch (19261:13): [True: 1.76k, False: 12.8k]
  ------------------
19262|  1.76k|                return "char";
19263|  1.04k|            case 'D':
  ------------------
  |  Branch (19263:13): [True: 1.04k, False: 13.5k]
  ------------------
19264|  1.04k|                return "double";
19265|  1.00k|            case 'I':
  ------------------
  |  Branch (19265:13): [True: 1.00k, False: 13.5k]
  ------------------
19266|  1.00k|                return "int16";
19267|    758|            case 'L':
  ------------------
  |  Branch (19267:13): [True: 758, False: 13.8k]
  ------------------
19268|    758|                return "int64";
19269|    644|            case 'M':
  ------------------
  |  Branch (19269:13): [True: 644, False: 13.9k]
  ------------------
19270|    644|                return "uint64";
19271|  1.85k|            case 'U':
  ------------------
  |  Branch (19271:13): [True: 1.85k, False: 12.7k]
  ------------------
19272|  1.85k|                return "uint8";
19273|    974|            case 'd':
  ------------------
  |  Branch (19273:13): [True: 974, False: 13.6k]
  ------------------
19274|    974|                return "single";
19275|  2.72k|            case 'i':
  ------------------
  |  Branch (19275:13): [True: 2.72k, False: 11.8k]
  ------------------
19276|  2.72k|                return "int8";
19277|    989|            case 'l':
  ------------------
  |  Branch (19277:13): [True: 989, False: 13.6k]
  ------------------
19278|    989|                return "int32";
19279|    766|            case 'm':
  ------------------
  |  Branch (19279:13): [True: 766, False: 13.8k]
  ------------------
19280|    766|                return "uint32";
19281|    926|            case 'u':
  ------------------
  |  Branch (19281:13): [True: 926, False: 13.6k]
  ------------------
19282|    926|                return "uint16";
19283|      9|            default:
  ------------------
  |  Branch (19283:13): [True: 9, False: 14.5k]
  ------------------
19284|      9|                return nullptr;
19285|  14.5k|        }
19286|  14.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE17length_type_errorEPKcSP_:
19142|  1.20k|    {
19143|  1.20k|        const char* types = input_format == input_format_t::bjdata ? "U, i, u, I, m, l, M, L" : "U, i, I, l, L";
  ------------------
  |  Branch (19143:29): [True: 1.20k, False: 0]
  ------------------
19144|  1.20k|        return last_byte_error(exception_id::invalid_string_or_size,
19145|  1.20k|                               concat("expected length type specification (", types, ")", position, "; last byte: 0x", get_token_string()), context);
19146|  1.20k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA37_KcRPSA_RA2_SA_SE_RA16_SA_S9_EEET_DpOT0_:
 5318|  2.40k|{
 5319|  2.40k|    OutStringType str;
 5320|  2.40k|    str.reserve(concat_length(args...));
 5321|  2.40k|    concat_into(str, std::forward<Args>(args)...);
 5322|  2.40k|    return str;
 5323|  2.40k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJPKcA2_cS4_A16_cNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEEEEmS4_DpRKT_:
 5222|  2.40k|{
 5223|  2.40k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  2.40k|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJA2_cPKcA16_cNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEEEEEmS5_DpRKT_:
 5222|  2.40k|{
 5223|  2.40k|    return ::strlen(cstr) + concat_length(rest...);
 5224|  2.40k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA37_KcJRPSA_RA2_SA_SE_RA16_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSK_OSL_DpOT1_:
 5281|  2.40k|{
 5282|  2.40k|    out.append(std::forward<Arg>(arg));
 5283|  2.40k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  2.40k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERPKcJRA2_SA_SC_RA16_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5281|  2.40k|{
 5282|  2.40k|    out.append(std::forward<Arg>(arg));
 5283|  2.40k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  2.40k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA2_KcJRPSA_RA16_SA_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5281|  2.40k|{
 5282|  2.40k|    out.append(std::forward<Arg>(arg));
 5283|  2.40k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  2.40k|}
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterINSt3__16vectorIcNS3_9allocatorIcEEEETnNS3_9enable_ifIXsr28is_contiguous_byte_containerIT_EE5valueEiE4typeELi0EEEDTcl13input_adaptercldtfp_4dataEplcldtfp_4dataEcldtfp_4sizeEEERKS9_:
 9104|  38.1k|{
 9105|  38.1k|    return input_adapter(container.data(), container.data() + container.size());
 9106|  38.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterIPKcS4_vEENS1_30iterator_input_adapter_factoryIT_T0_vE12adapter_typeES6_S7_:
 9007|  38.1k|{
 9008|  38.1k|    using factory_type = iterator_input_adapter_factory<IteratorType, SentinelType>;
 9009|  38.1k|    return factory_type::create(first, last);
 9010|  38.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail30iterator_input_adapter_factoryIPKcS4_vE6createES4_S4_:
 8935|  38.1k|    {
 8936|  38.1k|        return adapter_type(std::move(first), std::move(last));
 8937|  38.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_EC2ES4_S4_:
 8586|  38.1k|        : begin(first), current(std::move(first)), end(std::move(last))
 8587|  38.1k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEEC2EOSK_bb:
11404|  38.1k|        : ia(std::move(adapter))
11405|  38.1k|        , ignore_comments(ignore_comments_)
11406|  38.1k|        , discard_number_values(discard_number_values_)
11407|  38.1k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE4scanEv:
13362|  76.2k|    {
13363|       |        // initially, skip the BOM
13364|  76.2k|        if (get_chars_read_total() == 0 && !skip_bom())
  ------------------
  |  Branch (13364:13): [True: 38.1k, False: 38.1k]
  |  Branch (13364:44): [True: 126, False: 37.9k]
  ------------------
13365|    126|        {
13366|    126|            error_message = "invalid BOM; must be 0xEF 0xBB 0xBF if given";
13367|    126|            return token_type::parse_error;
13368|    126|        }
13369|       |
13370|       |        // read the next character and ignore whitespace
13371|  76.1k|        skip_whitespace();
13372|       |
13373|  76.1k|        return scan_after_whitespace();
13374|  76.2k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE20get_chars_read_totalEv:
13126|  76.2k|    {
13127|  76.2k|        return get_chars_read_total_impl(std::integral_constant<bool, lazy_position> {});
13128|  76.2k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE25get_chars_read_total_implENS4_17integral_constantIbLb1EEE:
13176|  76.2k|    {
13177|  76.2k|        return ia.get_read_count() - (next_unget ? 1u : 0u);
  ------------------
  |  Branch (13177:39): [True: 9.29k, False: 66.9k]
  ------------------
13178|  76.2k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E14get_read_countEv:
 8611|  76.2k|    {
 8612|  76.2k|        return get_consumed_count() + eof_reads;
 8613|  76.2k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E18get_consumed_countEv:
 8604|   163k|    {
 8605|   163k|        return static_cast<std::size_t>(std::distance(begin, current));
 8606|   163k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE8skip_bomEv:
13273|  38.1k|    {
13274|  38.1k|        if (get() == 0xEF)
  ------------------
  |  Branch (13274:13): [True: 720, False: 37.4k]
  ------------------
13275|    720|        {
13276|       |            // check if we completely parse the BOM
13277|    720|            return get() == 0xBB && get() == 0xBF;
  ------------------
  |  Branch (13277:20): [True: 660, False: 60]
  |  Branch (13277:37): [True: 594, False: 66]
  ------------------
13278|    720|        }
13279|       |
13280|       |        // the first character is not the beginning of the BOM; unget it to
13281|       |        // process is later
13282|  37.4k|        unget();
13283|  37.4k|        return true;
13284|  38.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE3getEv:
12908|   171k|    {
12909|   171k|        advance_position();
12910|       |
12911|   171k|        if (next_unget)
  ------------------
  |  Branch (12911:13): [True: 46.6k, False: 125k]
  ------------------
12912|  46.6k|        {
12913|       |            // only reset the next_unget variable and work with current
12914|  46.6k|            next_unget = false;
12915|  46.6k|        }
12916|   125k|        else
12917|   125k|        {
12918|   125k|            current = ia.get_character();
12919|   125k|        }
12920|       |
12921|   171k|        return track_after_read();
12922|   171k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE16advance_positionEv:
12928|   184k|    {
12929|   184k|        advance_position_impl(std::integral_constant<bool, lazy_position> {});
12930|   184k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE21advance_position_implENS4_17integral_constantIbLb1EEE:
12933|   184k|    void advance_position_impl(std::true_type /*lazy*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E13get_characterEv:
 8590|   137k|    {
 8591|   137k|        if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|   137k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 103k, False: 34.5k]
  |  |  ------------------
  ------------------
 8592|   103k|        {
 8593|   103k|            auto result = char_traits<char_type>::to_int_type(*current);
 8594|   103k|            std::advance(current, 1);
 8595|   103k|            return result;
 8596|   103k|        }
 8597|       |
 8598|  34.5k|        ++eof_reads;
 8599|  34.5k|        return char_traits<char_type>::eof();
 8600|   137k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE16track_after_readEv:
12946|   184k|    {
12947|       |        // seekable adapters reconstruct the token lazily on error (see
12948|       |        // get_token_string), so the eager per-character copy is skipped
12949|   184k|        capture_char(std::integral_constant<bool, lazy_token_string> {});
12950|   184k|        track_newline(std::integral_constant<bool, lazy_position> {});
12951|   184k|        return current;
12952|   184k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE12capture_charENS4_17integral_constantIbLb1EEE:
12994|   184k|    void capture_char(std::true_type /*lazy*/) const noexcept {}
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE13track_newlineENS4_17integral_constantIbLb1EEE:
12955|   184k|    void track_newline(std::true_type /*lazy*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE5ungetEv:
13015|  46.9k|    {
13016|  46.9k|        next_unget = true;
13017|  46.9k|        unget_position(std::integral_constant<bool, lazy_position> {});
13018|  46.9k|        uncapture_char(std::integral_constant<bool, lazy_token_string> {});
13019|  46.9k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE14unget_positionENS4_17integral_constantIbLb1EEE:
13022|  46.9k|    void unget_position(std::true_type /*lazy*/) const noexcept {}
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE14uncapture_charENS4_17integral_constantIbLb1EEE:
13067|  46.9k|    void uncapture_char(std::true_type /*lazy*/) const noexcept {}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE15skip_whitespaceEv:
13293|  76.1k|    {
13294|       |        // the first character may be a pending unget() left over from the
13295|       |        // previous token (see get_ignoring_pending_unget()); every
13296|       |        // subsequent character read by this loop is guaranteed fresh, since
13297|       |        // nothing below calls unget()
13298|  76.1k|        get();
13299|       |
13300|  76.1k|        if (!current_is_whitespace())
  ------------------
  |  Branch (13300:13): [True: 69.9k, False: 6.20k]
  ------------------
13301|  69.9k|        {
13302|  69.9k|            return;
13303|  69.9k|        }
13304|       |
13305|       |        // this is written as an if-guarded do-while (rather than a plain
13306|       |        // while loop) because that shape is what lets both GCC and Clang
13307|       |        // keep the input adapter's read pointer in a register across
13308|       |        // iterations; the equivalent while-loop measurably defeated that
13309|       |        // optimization in testing, turning long whitespace runs (e.g. the
13310|       |        // indentation of pretty-printed JSON) from a register-only loop
13311|       |        // into one that reloads the pointer from memory every character
13312|  6.20k|        do
13313|  12.5k|        {
13314|  12.5k|            if (current == '\n')
  ------------------
  |  Branch (13314:17): [True: 5.37k, False: 7.18k]
  ------------------
13315|  5.37k|            {
13316|  5.37k|                skip_indentation(std::integral_constant<bool, bulk_scan> {});
13317|  5.37k|            }
13318|  12.5k|            get_ignoring_pending_unget();
13319|  12.5k|        }
13320|  12.5k|        while (current_is_whitespace());
  ------------------
  |  Branch (13320:16): [True: 6.35k, False: 6.20k]
  ------------------
13321|  6.20k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE21current_is_whitespaceEv:
13288|  88.6k|    {
13289|  88.6k|        return current == ' ' || current == '\t' || current == '\n' || current == '\r';
  ------------------
  |  Branch (13289:16): [True: 1.91k, False: 86.7k]
  |  Branch (13289:34): [True: 2.11k, False: 84.6k]
  |  Branch (13289:53): [True: 5.37k, False: 79.2k]
  |  Branch (13289:72): [True: 3.15k, False: 76.1k]
  ------------------
13290|  88.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE16skip_indentationENS4_17integral_constantIbLb1EEE:
13335|  5.37k|    {
13336|  5.37k|        JSON_ASSERT(!next_unget);
  ------------------
  |  | 2591|  5.37k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13336:9): [True: 5.37k, False: 0]
  ------------------
13337|  5.37k|        const std::size_t remaining = ia.bulk_remaining();
13338|  5.37k|        if (remaining < 8)
  ------------------
  |  Branch (13338:13): [True: 2.52k, False: 2.85k]
  ------------------
13339|  2.52k|        {
13340|  2.52k|            return;
13341|  2.52k|        }
13342|  2.85k|        const char* const data = reinterpret_cast<const char*>(ia.bulk_data());
13343|  2.85k|        std::size_t pos = 0;
13344|  3.20k|        for (; pos + 8 <= remaining; pos += 8)
  ------------------
  |  Branch (13344:16): [True: 2.95k, False: 252]
  ------------------
13345|  2.95k|        {
13346|       |            // little-endian, so the first byte is the lowest
13347|  2.95k|            const std::uint64_t non_space = read_eight_bytes(data + pos) ^ 0x2020202020202020ull;
13348|  2.95k|            if (non_space != 0)
  ------------------
  |  Branch (13348:17): [True: 2.60k, False: 348]
  ------------------
13349|  2.60k|            {
13350|       |                // skip the spaces before the first other byte of this word
13351|  2.60k|                pos += static_cast<std::size_t>(count_trailing_zeros(non_space)) / 8;
13352|  2.60k|                break;
13353|  2.60k|            }
13354|  2.95k|        }
13355|  2.85k|        ia.bulk_skip(pos);
13356|  2.85k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E14bulk_remainingEv:
 8688|  52.5k|    {
 8689|  52.5k|        return remaining_count();
 8690|  52.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E15remaining_countEv:
 8663|  52.5k|    {
 8664|       |#if JSON_HAS_RANGES && defined(__cpp_lib_concepts) && defined(JSON_HAS_CPP_20)
 8665|       |        // std::ranges::distance also supports sized sentinels of a different
 8666|       |        // type (e.g. std::counted_iterator + std::default_sentinel_t)
 8667|       |        return static_cast<std::size_t>(std::ranges::distance(current, end));
 8668|       |#else
 8669|  52.5k|        return static_cast<std::size_t>(std::distance(current, end));
 8670|  52.5k|#endif
 8671|  52.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E9bulk_dataEv:
 8682|  39.6k|    {
 8683|  39.6k|        return &*current;
 8684|  39.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail16read_eight_bytesEPKc:
 9392|  17.8k|{
 9393|  17.8k|    return read_eight_bytes(reinterpret_cast<const unsigned char*>(p)); // NOLINT(cppcoreguidelines-pro-type-reinterpret-cast)
 9394|  17.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E9bulk_skipEm:
 8694|  29.3k|    {
 8695|  29.3k|        std::advance(current, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(n));
 8696|  29.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE26get_ignoring_pending_ungetEv:
12984|  12.5k|    {
12985|  12.5k|        JSON_ASSERT(!next_unget);
  ------------------
  |  | 2591|  12.5k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (12985:9): [True: 12.5k, False: 0]
  ------------------
12986|       |
12987|  12.5k|        advance_position();
12988|  12.5k|        current = ia.get_character();
12989|       |
12990|  12.5k|        return track_after_read();
12991|  12.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE21scan_after_whitespaceEv:
13405|  76.1k|    {
13406|       |        // ignore comments
13407|  76.1k|        while (ignore_comments && current == '/')
  ------------------
  |  Branch (13407:16): [True: 0, False: 76.1k]
  |  Branch (13407:35): [True: 0, False: 0]
  ------------------
13408|      0|        {
13409|      0|            if (!scan_comment())
  ------------------
  |  Branch (13409:17): [True: 0, False: 0]
  ------------------
13410|      0|            {
13411|      0|                return token_type::parse_error;
13412|      0|            }
13413|       |
13414|       |            // skip following whitespace
13415|      0|            skip_whitespace();
13416|      0|        }
13417|       |
13418|  76.1k|        switch (current)
13419|  76.1k|        {
13420|       |            // structural characters
13421|    150|            case '[':
  ------------------
  |  Branch (13421:13): [True: 150, False: 75.9k]
  ------------------
13422|    150|                return token_type::begin_array;
13423|     66|            case ']':
  ------------------
  |  Branch (13423:13): [True: 66, False: 76.0k]
  ------------------
13424|     66|                return token_type::end_array;
13425|     66|            case '{':
  ------------------
  |  Branch (13425:13): [True: 66, False: 76.0k]
  ------------------
13426|     66|                return token_type::begin_object;
13427|     24|            case '}':
  ------------------
  |  Branch (13427:13): [True: 24, False: 76.0k]
  ------------------
13428|     24|                return token_type::end_object;
13429|     54|            case ':':
  ------------------
  |  Branch (13429:13): [True: 54, False: 76.0k]
  ------------------
13430|     54|                return token_type::name_separator;
13431|     90|            case ',':
  ------------------
  |  Branch (13431:13): [True: 90, False: 76.0k]
  ------------------
13432|     90|                return token_type::value_separator;
13433|       |
13434|       |            // literals
13435|    138|            case 't':
  ------------------
  |  Branch (13435:13): [True: 138, False: 75.9k]
  ------------------
13436|    138|            {
13437|    138|                std::array<char_type, 4> true_literal = {{static_cast<char_type>('t'), static_cast<char_type>('r'), static_cast<char_type>('u'), static_cast<char_type>('e')}};
13438|    138|                return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true);
13439|      0|            }
13440|    114|            case 'f':
  ------------------
  |  Branch (13440:13): [True: 114, False: 76.0k]
  ------------------
13441|    114|            {
13442|    114|                std::array<char_type, 5> false_literal = {{static_cast<char_type>('f'), static_cast<char_type>('a'), static_cast<char_type>('l'), static_cast<char_type>('s'), static_cast<char_type>('e')}};
13443|    114|                return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false);
13444|      0|            }
13445|    138|            case 'n':
  ------------------
  |  Branch (13445:13): [True: 138, False: 75.9k]
  ------------------
13446|    138|            {
13447|    138|                std::array<char_type, 4> null_literal = {{static_cast<char_type>('n'), static_cast<char_type>('u'), static_cast<char_type>('l'), static_cast<char_type>('l')}};
13448|    138|                return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null);
13449|      0|            }
13450|       |
13451|       |            // string
13452|  4.07k|            case '\"':
  ------------------
  |  Branch (13452:13): [True: 4.07k, False: 72.0k]
  ------------------
13453|  4.07k|                return scan_string();
13454|       |
13455|       |            // number
13456|  4.11k|            case '-':
  ------------------
  |  Branch (13456:13): [True: 4.11k, False: 72.0k]
  ------------------
13457|  9.21k|            case '0':
  ------------------
  |  Branch (13457:13): [True: 5.10k, False: 71.0k]
  ------------------
13458|  14.6k|            case '1':
  ------------------
  |  Branch (13458:13): [True: 5.47k, False: 70.6k]
  ------------------
13459|  17.8k|            case '2':
  ------------------
  |  Branch (13459:13): [True: 3.18k, False: 72.9k]
  ------------------
13460|  22.5k|            case '3':
  ------------------
  |  Branch (13460:13): [True: 4.69k, False: 71.4k]
  ------------------
13461|  24.3k|            case '4':
  ------------------
  |  Branch (13461:13): [True: 1.79k, False: 74.3k]
  ------------------
13462|  26.3k|            case '5':
  ------------------
  |  Branch (13462:13): [True: 1.95k, False: 74.1k]
  ------------------
13463|  28.3k|            case '6':
  ------------------
  |  Branch (13463:13): [True: 1.99k, False: 74.1k]
  ------------------
13464|  29.6k|            case '7':
  ------------------
  |  Branch (13464:13): [True: 1.34k, False: 74.7k]
  ------------------
13465|  31.1k|            case '8':
  ------------------
  |  Branch (13465:13): [True: 1.54k, False: 74.5k]
  ------------------
13466|  34.7k|            case '9':
  ------------------
  |  Branch (13466:13): [True: 3.56k, False: 72.5k]
  ------------------
13467|  34.7k|                return scan_number_dispatch(std::integral_constant<bool, bulk_scan> {});
13468|       |
13469|      0|#if !JSON_STRICT_NUL_HANDLING
13470|      0|            case '\0':
  ------------------
  |  Branch (13470:13): [True: 0, False: 76.1k]
  ------------------
13471|      0|#endif
13472|       |            // end of input; by default, a null byte is also treated as end of
13473|       |            // input for backwards compatibility (see JSON_STRICT_NUL_HANDLING
13474|       |            // to opt into rejecting a null byte in the input instead)
13475|  31.5k|            case char_traits<char_type>::eof():
  ------------------
  |  Branch (13475:13): [True: 31.5k, False: 44.5k]
  ------------------
13476|  31.5k|                return token_type::end_of_input;
13477|       |
13478|       |            // error
13479|  4.86k|            default:
  ------------------
  |  Branch (13479:13): [True: 4.86k, False: 71.2k]
  ------------------
13480|  4.86k|                error_message = "invalid literal";
13481|  4.86k|                return token_type::parse_error;
13482|  76.1k|        }
13483|  76.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE12scan_literalESJ_mNS1_10lexer_baseISG_E10token_typeE:
12850|    390|    {
12851|    390|        JSON_ASSERT(char_traits<char_type>::to_char_type(current) == literal_text[0]);
  ------------------
  |  | 2591|    390|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (12851:9): [True: 390, False: 0]
  ------------------
12852|    786|        for (std::size_t i = 1; i < length; ++i)
  ------------------
  |  Branch (12852:33): [True: 732, False: 54]
  ------------------
12853|    732|        {
12854|    732|            if (JSON_HEDLEY_UNLIKELY(char_traits<char_type>::to_char_type(get()) != literal_text[i]))
  ------------------
  |  | 1667|    732|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 336, False: 396]
  |  |  ------------------
  ------------------
12855|    336|            {
12856|    336|                error_message = "invalid literal";
12857|    336|                return token_type::parse_error;
12858|    336|            }
12859|    732|        }
12860|     54|        return return_type;
12861|    390|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE11scan_stringEv:
11595|  4.07k|    {
11596|       |        // reset token_buffer (ignore opening quote)
11597|  4.07k|        reset();
11598|       |
11599|       |        // we entered the function by reading an open quote
11600|  4.07k|        JSON_ASSERT(current == '\"');
  ------------------
  |  | 2591|  4.07k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (11600:9): [True: 4.07k, False: 0]
  ------------------
11601|       |
11602|  10.4k|        while (true)
  ------------------
  |  Branch (11602:16): [True: 10.4k, Folded]
  ------------------
11603|  10.4k|        {
11604|       |            // bulk-consume ordinary characters from contiguous input, then
11605|       |            // handle the next special byte through the switch below
11606|  10.4k|            scan_string_bulk(std::integral_constant<bool, bulk_scan> {});
11607|       |
11608|       |            // get the next character
11609|  10.4k|            switch (get())
11610|  10.4k|            {
11611|       |                // end of file while parsing the string
11612|    828|                case char_traits<char_type>::eof():
  ------------------
  |  Branch (11612:17): [True: 828, False: 9.58k]
  ------------------
11613|    828|                {
11614|    828|                    error_message = "invalid string: missing closing quote";
11615|    828|                    return token_type::parse_error;
11616|      0|                }
11617|       |
11618|       |                // closing quote
11619|     30|                case '\"':
  ------------------
  |  Branch (11619:17): [True: 30, False: 10.3k]
  ------------------
11620|     30|                {
11621|     30|                    return token_type::value_string;
11622|      0|                }
11623|       |
11624|       |                // escapes
11625|  6.97k|                case '\\':
  ------------------
  |  Branch (11625:17): [True: 6.97k, False: 3.43k]
  ------------------
11626|  6.97k|                {
11627|  6.97k|                    switch (get())
11628|  6.97k|                    {
11629|       |                        // quotation mark
11630|    780|                        case '\"':
  ------------------
  |  Branch (11630:25): [True: 780, False: 6.19k]
  ------------------
11631|    780|                            add('\"');
11632|    780|                            break;
11633|       |                        // reverse solidus
11634|  1.84k|                        case '\\':
  ------------------
  |  Branch (11634:25): [True: 1.84k, False: 5.13k]
  ------------------
11635|  1.84k|                            add('\\');
11636|  1.84k|                            break;
11637|       |                        // solidus
11638|    288|                        case '/':
  ------------------
  |  Branch (11638:25): [True: 288, False: 6.69k]
  ------------------
11639|    288|                            add('/');
11640|    288|                            break;
11641|       |                        // backspace
11642|     84|                        case 'b':
  ------------------
  |  Branch (11642:25): [True: 84, False: 6.89k]
  ------------------
11643|     84|                            add('\b');
11644|     84|                            break;
11645|       |                        // form feed
11646|  1.23k|                        case 'f':
  ------------------
  |  Branch (11646:25): [True: 1.23k, False: 5.74k]
  ------------------
11647|  1.23k|                            add('\f');
11648|  1.23k|                            break;
11649|       |                        // line feed
11650|    300|                        case 'n':
  ------------------
  |  Branch (11650:25): [True: 300, False: 6.67k]
  ------------------
11651|    300|                            add('\n');
11652|    300|                            break;
11653|       |                        // carriage return
11654|     84|                        case 'r':
  ------------------
  |  Branch (11654:25): [True: 84, False: 6.89k]
  ------------------
11655|     84|                            add('\r');
11656|     84|                            break;
11657|       |                        // tab
11658|    570|                        case 't':
  ------------------
  |  Branch (11658:25): [True: 570, False: 6.40k]
  ------------------
11659|    570|                            add('\t');
11660|    570|                            break;
11661|       |
11662|       |                        // unicode escapes
11663|  1.71k|                        case 'u':
  ------------------
  |  Branch (11663:25): [True: 1.71k, False: 5.26k]
  ------------------
11664|  1.71k|                        {
11665|  1.71k|                            const int codepoint1 = get_codepoint();
11666|  1.71k|                            int codepoint = codepoint1; // start with codepoint1
11667|       |
11668|  1.71k|                            if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1))
  ------------------
  |  | 1667|  1.71k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 240, False: 1.47k]
  |  |  ------------------
  ------------------
11669|    240|                            {
11670|    240|                                error_message = "invalid string: '\\u' must be followed by 4 hex digits";
11671|    240|                                return token_type::parse_error;
11672|    240|                            }
11673|       |
11674|       |                            // check if code point is a high surrogate
11675|  1.47k|                            if (0xD800 <= codepoint1 && codepoint1 <= 0xDBFF)
  ------------------
  |  Branch (11675:33): [True: 912, False: 564]
  |  Branch (11675:57): [True: 510, False: 402]
  ------------------
11676|    510|                            {
11677|       |                                // expect next \uxxxx entry
11678|    510|                                if (JSON_HEDLEY_LIKELY(get() == '\\' && get() == 'u'))
  ------------------
  |  | 1666|    942|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 336, False: 174]
  |  |  |  Branch (1666:94): [True: 432, False: 78]
  |  |  |  Branch (1666:94): [True: 336, False: 96]
  |  |  ------------------
  ------------------
11679|    336|                                {
11680|    336|                                    const int codepoint2 = get_codepoint();
11681|       |
11682|    336|                                    if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1))
  ------------------
  |  | 1667|    336|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 18, False: 318]
  |  |  ------------------
  ------------------
11683|     18|                                    {
11684|     18|                                        error_message = "invalid string: '\\u' must be followed by 4 hex digits";
11685|     18|                                        return token_type::parse_error;
11686|     18|                                    }
11687|       |
11688|       |                                    // check if codepoint2 is a low surrogate
11689|    318|                                    if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 && codepoint2 <= 0xDFFF))
  ------------------
  |  | 1666|    600|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 246, False: 72]
  |  |  |  Branch (1666:94): [True: 282, False: 36]
  |  |  |  Branch (1666:94): [True: 246, False: 36]
  |  |  ------------------
  ------------------
11690|    246|                                    {
11691|       |                                        // overwrite codepoint
11692|    246|                                        codepoint = static_cast<int>(
11693|       |                                                        // high surrogate occupies the most significant 22 bits
11694|    246|                                                        (static_cast<unsigned int>(codepoint1) << 10u)
11695|       |                                                        // low surrogate occupies the least significant 15 bits
11696|    246|                                                        + static_cast<unsigned int>(codepoint2)
11697|       |                                                        // there is still the 0xD800, 0xDC00, and 0x10000 noise
11698|       |                                                        // in the result, so we have to subtract with:
11699|       |                                                        // (0xD800 << 10) + DC00 - 0x10000 = 0x35FDC00
11700|    246|                                                        - 0x35FDC00u);
11701|    246|                                    }
11702|     72|                                    else
11703|     72|                                    {
11704|     72|                                        error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF";
11705|     72|                                        return token_type::parse_error;
11706|     72|                                    }
11707|    318|                                }
11708|    174|                                else
11709|    174|                                {
11710|    174|                                    error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF";
11711|    174|                                    return token_type::parse_error;
11712|    174|                                }
11713|    510|                            }
11714|    966|                            else
11715|    966|                            {
11716|    966|                                if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 && codepoint1 <= 0xDFFF))
  ------------------
  |  | 1667|  1.36k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 54, False: 912]
  |  |  |  Branch (1667:94): [True: 402, False: 564]
  |  |  |  Branch (1667:94): [True: 54, False: 348]
  |  |  ------------------
  ------------------
11717|     54|                                {
11718|     54|                                    error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF";
11719|     54|                                    return token_type::parse_error;
11720|     54|                                }
11721|    966|                            }
11722|       |
11723|       |                            // the result of the above calculation yields a proper codepoint
11724|  1.15k|                            JSON_ASSERT(0x00 <= codepoint && codepoint <= 0x10FFFF);
  ------------------
  |  | 2591|  1.15k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (11724:29): [True: 1.15k, False: 0]
  |  Branch (11724:29): [True: 1.15k, False: 0]
  |  Branch (11724:29): [True: 1.15k, False: 0]
  ------------------
11725|       |
11726|       |                            // translate codepoint into bytes
11727|  1.15k|                            encode_utf8(static_cast<std::uint32_t>(codepoint), [this](std::uint32_t byte)
11728|  1.15k|                            {
11729|  1.15k|                                add(static_cast<char_int_type>(byte));
11730|  1.15k|                            });
11731|       |
11732|  1.15k|                            break;
11733|  1.15k|                        }
11734|       |
11735|       |                        // other characters after escape
11736|     84|                        default:
  ------------------
  |  Branch (11736:25): [True: 84, False: 6.89k]
  ------------------
11737|     84|                            error_message = "invalid string: forbidden character after backslash";
11738|     84|                            return token_type::parse_error;
11739|  6.97k|                    }
11740|       |
11741|  6.33k|                    break;
11742|  6.97k|                }
11743|       |
11744|       |                // invalid control characters
11745|  6.33k|                case 0x00:
  ------------------
  |  Branch (11745:17): [True: 0, False: 10.4k]
  ------------------
11746|      0|                {
11747|      0|                    error_message = "invalid string: control character U+0000 (NUL) must be escaped to \\u0000";
11748|      0|                    return token_type::parse_error;
11749|  6.97k|                }
11750|       |
11751|     18|                case 0x01:
  ------------------
  |  Branch (11751:17): [True: 18, False: 10.3k]
  ------------------
11752|     18|                {
11753|     18|                    error_message = "invalid string: control character U+0001 (SOH) must be escaped to \\u0001";
11754|     18|                    return token_type::parse_error;
11755|  6.97k|                }
11756|       |
11757|     30|                case 0x02:
  ------------------
  |  Branch (11757:17): [True: 30, False: 10.3k]
  ------------------
11758|     30|                {
11759|     30|                    error_message = "invalid string: control character U+0002 (STX) must be escaped to \\u0002";
11760|     30|                    return token_type::parse_error;
11761|  6.97k|                }
11762|       |
11763|     24|                case 0x03:
  ------------------
  |  Branch (11763:17): [True: 24, False: 10.3k]
  ------------------
11764|     24|                {
11765|     24|                    error_message = "invalid string: control character U+0003 (ETX) must be escaped to \\u0003";
11766|     24|                    return token_type::parse_error;
11767|  6.97k|                }
11768|       |
11769|     18|                case 0x04:
  ------------------
  |  Branch (11769:17): [True: 18, False: 10.3k]
  ------------------
11770|     18|                {
11771|     18|                    error_message = "invalid string: control character U+0004 (EOT) must be escaped to \\u0004";
11772|     18|                    return token_type::parse_error;
11773|  6.97k|                }
11774|       |
11775|     30|                case 0x05:
  ------------------
  |  Branch (11775:17): [True: 30, False: 10.3k]
  ------------------
11776|     30|                {
11777|     30|                    error_message = "invalid string: control character U+0005 (ENQ) must be escaped to \\u0005";
11778|     30|                    return token_type::parse_error;
11779|  6.97k|                }
11780|       |
11781|     24|                case 0x06:
  ------------------
  |  Branch (11781:17): [True: 24, False: 10.3k]
  ------------------
11782|     24|                {
11783|     24|                    error_message = "invalid string: control character U+0006 (ACK) must be escaped to \\u0006";
11784|     24|                    return token_type::parse_error;
11785|  6.97k|                }
11786|       |
11787|     18|                case 0x07:
  ------------------
  |  Branch (11787:17): [True: 18, False: 10.3k]
  ------------------
11788|     18|                {
11789|     18|                    error_message = "invalid string: control character U+0007 (BEL) must be escaped to \\u0007";
11790|     18|                    return token_type::parse_error;
11791|  6.97k|                }
11792|       |
11793|     18|                case 0x08:
  ------------------
  |  Branch (11793:17): [True: 18, False: 10.3k]
  ------------------
11794|     18|                {
11795|     18|                    error_message = "invalid string: control character U+0008 (BS) must be escaped to \\u0008 or \\b";
11796|     18|                    return token_type::parse_error;
11797|  6.97k|                }
11798|       |
11799|     18|                case 0x09:
  ------------------
  |  Branch (11799:17): [True: 18, False: 10.3k]
  ------------------
11800|     18|                {
11801|     18|                    error_message = "invalid string: control character U+0009 (HT) must be escaped to \\u0009 or \\t";
11802|     18|                    return token_type::parse_error;
11803|  6.97k|                }
11804|       |
11805|     36|                case 0x0A:
  ------------------
  |  Branch (11805:17): [True: 36, False: 10.3k]
  ------------------
11806|     36|                {
11807|     36|                    error_message = "invalid string: control character U+000A (LF) must be escaped to \\u000A or \\n";
11808|     36|                    return token_type::parse_error;
11809|  6.97k|                }
11810|       |
11811|     18|                case 0x0B:
  ------------------
  |  Branch (11811:17): [True: 18, False: 10.3k]
  ------------------
11812|     18|                {
11813|     18|                    error_message = "invalid string: control character U+000B (VT) must be escaped to \\u000B";
11814|     18|                    return token_type::parse_error;
11815|  6.97k|                }
11816|       |
11817|     30|                case 0x0C:
  ------------------
  |  Branch (11817:17): [True: 30, False: 10.3k]
  ------------------
11818|     30|                {
11819|     30|                    error_message = "invalid string: control character U+000C (FF) must be escaped to \\u000C or \\f";
11820|     30|                    return token_type::parse_error;
11821|  6.97k|                }
11822|       |
11823|     24|                case 0x0D:
  ------------------
  |  Branch (11823:17): [True: 24, False: 10.3k]
  ------------------
11824|     24|                {
11825|     24|                    error_message = "invalid string: control character U+000D (CR) must be escaped to \\u000D or \\r";
11826|     24|                    return token_type::parse_error;
11827|  6.97k|                }
11828|       |
11829|     18|                case 0x0E:
  ------------------
  |  Branch (11829:17): [True: 18, False: 10.3k]
  ------------------
11830|     18|                {
11831|     18|                    error_message = "invalid string: control character U+000E (SO) must be escaped to \\u000E";
11832|     18|                    return token_type::parse_error;
11833|  6.97k|                }
11834|       |
11835|     24|                case 0x0F:
  ------------------
  |  Branch (11835:17): [True: 24, False: 10.3k]
  ------------------
11836|     24|                {
11837|     24|                    error_message = "invalid string: control character U+000F (SI) must be escaped to \\u000F";
11838|     24|                    return token_type::parse_error;
11839|  6.97k|                }
11840|       |
11841|     18|                case 0x10:
  ------------------
  |  Branch (11841:17): [True: 18, False: 10.3k]
  ------------------
11842|     18|                {
11843|     18|                    error_message = "invalid string: control character U+0010 (DLE) must be escaped to \\u0010";
11844|     18|                    return token_type::parse_error;
11845|  6.97k|                }
11846|       |
11847|     18|                case 0x11:
  ------------------
  |  Branch (11847:17): [True: 18, False: 10.3k]
  ------------------
11848|     18|                {
11849|     18|                    error_message = "invalid string: control character U+0011 (DC1) must be escaped to \\u0011";
11850|     18|                    return token_type::parse_error;
11851|  6.97k|                }
11852|       |
11853|     18|                case 0x12:
  ------------------
  |  Branch (11853:17): [True: 18, False: 10.3k]
  ------------------
11854|     18|                {
11855|     18|                    error_message = "invalid string: control character U+0012 (DC2) must be escaped to \\u0012";
11856|     18|                    return token_type::parse_error;
11857|  6.97k|                }
11858|       |
11859|     18|                case 0x13:
  ------------------
  |  Branch (11859:17): [True: 18, False: 10.3k]
  ------------------
11860|     18|                {
11861|     18|                    error_message = "invalid string: control character U+0013 (DC3) must be escaped to \\u0013";
11862|     18|                    return token_type::parse_error;
11863|  6.97k|                }
11864|       |
11865|     30|                case 0x14:
  ------------------
  |  Branch (11865:17): [True: 30, False: 10.3k]
  ------------------
11866|     30|                {
11867|     30|                    error_message = "invalid string: control character U+0014 (DC4) must be escaped to \\u0014";
11868|     30|                    return token_type::parse_error;
11869|  6.97k|                }
11870|       |
11871|     24|                case 0x15:
  ------------------
  |  Branch (11871:17): [True: 24, False: 10.3k]
  ------------------
11872|     24|                {
11873|     24|                    error_message = "invalid string: control character U+0015 (NAK) must be escaped to \\u0015";
11874|     24|                    return token_type::parse_error;
11875|  6.97k|                }
11876|       |
11877|     18|                case 0x16:
  ------------------
  |  Branch (11877:17): [True: 18, False: 10.3k]
  ------------------
11878|     18|                {
11879|     18|                    error_message = "invalid string: control character U+0016 (SYN) must be escaped to \\u0016";
11880|     18|                    return token_type::parse_error;
11881|  6.97k|                }
11882|       |
11883|     18|                case 0x17:
  ------------------
  |  Branch (11883:17): [True: 18, False: 10.3k]
  ------------------
11884|     18|                {
11885|     18|                    error_message = "invalid string: control character U+0017 (ETB) must be escaped to \\u0017";
11886|     18|                    return token_type::parse_error;
11887|  6.97k|                }
11888|       |
11889|     18|                case 0x18:
  ------------------
  |  Branch (11889:17): [True: 18, False: 10.3k]
  ------------------
11890|     18|                {
11891|     18|                    error_message = "invalid string: control character U+0018 (CAN) must be escaped to \\u0018";
11892|     18|                    return token_type::parse_error;
11893|  6.97k|                }
11894|       |
11895|     18|                case 0x19:
  ------------------
  |  Branch (11895:17): [True: 18, False: 10.3k]
  ------------------
11896|     18|                {
11897|     18|                    error_message = "invalid string: control character U+0019 (EM) must be escaped to \\u0019";
11898|     18|                    return token_type::parse_error;
11899|  6.97k|                }
11900|       |
11901|     18|                case 0x1A:
  ------------------
  |  Branch (11901:17): [True: 18, False: 10.3k]
  ------------------
11902|     18|                {
11903|     18|                    error_message = "invalid string: control character U+001A (SUB) must be escaped to \\u001A";
11904|     18|                    return token_type::parse_error;
11905|  6.97k|                }
11906|       |
11907|     18|                case 0x1B:
  ------------------
  |  Branch (11907:17): [True: 18, False: 10.3k]
  ------------------
11908|     18|                {
11909|     18|                    error_message = "invalid string: control character U+001B (ESC) must be escaped to \\u001B";
11910|     18|                    return token_type::parse_error;
11911|  6.97k|                }
11912|       |
11913|     30|                case 0x1C:
  ------------------
  |  Branch (11913:17): [True: 30, False: 10.3k]
  ------------------
11914|     30|                {
11915|     30|                    error_message = "invalid string: control character U+001C (FS) must be escaped to \\u001C";
11916|     30|                    return token_type::parse_error;
11917|  6.97k|                }
11918|       |
11919|     18|                case 0x1D:
  ------------------
  |  Branch (11919:17): [True: 18, False: 10.3k]
  ------------------
11920|     18|                {
11921|     18|                    error_message = "invalid string: control character U+001D (GS) must be escaped to \\u001D";
11922|     18|                    return token_type::parse_error;
11923|  6.97k|                }
11924|       |
11925|     18|                case 0x1E:
  ------------------
  |  Branch (11925:17): [True: 18, False: 10.3k]
  ------------------
11926|     18|                {
11927|     18|                    error_message = "invalid string: control character U+001E (RS) must be escaped to \\u001E";
11928|     18|                    return token_type::parse_error;
11929|  6.97k|                }
11930|       |
11931|     18|                case 0x1F:
  ------------------
  |  Branch (11931:17): [True: 18, False: 10.3k]
  ------------------
11932|     18|                {
11933|     18|                    error_message = "invalid string: control character U+001F (US) must be escaped to \\u001F";
11934|     18|                    return token_type::parse_error;
11935|  6.97k|                }
11936|       |
11937|       |                // U+0020..U+007F (except U+0022 (quote) and U+005C (backspace))
11938|      0|                case 0x20:
  ------------------
  |  Branch (11938:17): [True: 0, False: 10.4k]
  ------------------
11939|      0|                case 0x21:
  ------------------
  |  Branch (11939:17): [True: 0, False: 10.4k]
  ------------------
11940|      0|                case 0x23:
  ------------------
  |  Branch (11940:17): [True: 0, False: 10.4k]
  ------------------
11941|      0|                case 0x24:
  ------------------
  |  Branch (11941:17): [True: 0, False: 10.4k]
  ------------------
11942|      0|                case 0x25:
  ------------------
  |  Branch (11942:17): [True: 0, False: 10.4k]
  ------------------
11943|      0|                case 0x26:
  ------------------
  |  Branch (11943:17): [True: 0, False: 10.4k]
  ------------------
11944|      0|                case 0x27:
  ------------------
  |  Branch (11944:17): [True: 0, False: 10.4k]
  ------------------
11945|      0|                case 0x28:
  ------------------
  |  Branch (11945:17): [True: 0, False: 10.4k]
  ------------------
11946|      0|                case 0x29:
  ------------------
  |  Branch (11946:17): [True: 0, False: 10.4k]
  ------------------
11947|      0|                case 0x2A:
  ------------------
  |  Branch (11947:17): [True: 0, False: 10.4k]
  ------------------
11948|      0|                case 0x2B:
  ------------------
  |  Branch (11948:17): [True: 0, False: 10.4k]
  ------------------
11949|      0|                case 0x2C:
  ------------------
  |  Branch (11949:17): [True: 0, False: 10.4k]
  ------------------
11950|      0|                case 0x2D:
  ------------------
  |  Branch (11950:17): [True: 0, False: 10.4k]
  ------------------
11951|      0|                case 0x2E:
  ------------------
  |  Branch (11951:17): [True: 0, False: 10.4k]
  ------------------
11952|      0|                case 0x2F:
  ------------------
  |  Branch (11952:17): [True: 0, False: 10.4k]
  ------------------
11953|      0|                case 0x30:
  ------------------
  |  Branch (11953:17): [True: 0, False: 10.4k]
  ------------------
11954|      0|                case 0x31:
  ------------------
  |  Branch (11954:17): [True: 0, False: 10.4k]
  ------------------
11955|      0|                case 0x32:
  ------------------
  |  Branch (11955:17): [True: 0, False: 10.4k]
  ------------------
11956|      0|                case 0x33:
  ------------------
  |  Branch (11956:17): [True: 0, False: 10.4k]
  ------------------
11957|      0|                case 0x34:
  ------------------
  |  Branch (11957:17): [True: 0, False: 10.4k]
  ------------------
11958|      0|                case 0x35:
  ------------------
  |  Branch (11958:17): [True: 0, False: 10.4k]
  ------------------
11959|      0|                case 0x36:
  ------------------
  |  Branch (11959:17): [True: 0, False: 10.4k]
  ------------------
11960|      0|                case 0x37:
  ------------------
  |  Branch (11960:17): [True: 0, False: 10.4k]
  ------------------
11961|      0|                case 0x38:
  ------------------
  |  Branch (11961:17): [True: 0, False: 10.4k]
  ------------------
11962|      0|                case 0x39:
  ------------------
  |  Branch (11962:17): [True: 0, False: 10.4k]
  ------------------
11963|      0|                case 0x3A:
  ------------------
  |  Branch (11963:17): [True: 0, False: 10.4k]
  ------------------
11964|      0|                case 0x3B:
  ------------------
  |  Branch (11964:17): [True: 0, False: 10.4k]
  ------------------
11965|      0|                case 0x3C:
  ------------------
  |  Branch (11965:17): [True: 0, False: 10.4k]
  ------------------
11966|      0|                case 0x3D:
  ------------------
  |  Branch (11966:17): [True: 0, False: 10.4k]
  ------------------
11967|      0|                case 0x3E:
  ------------------
  |  Branch (11967:17): [True: 0, False: 10.4k]
  ------------------
11968|      0|                case 0x3F:
  ------------------
  |  Branch (11968:17): [True: 0, False: 10.4k]
  ------------------
11969|      0|                case 0x40:
  ------------------
  |  Branch (11969:17): [True: 0, False: 10.4k]
  ------------------
11970|      0|                case 0x41:
  ------------------
  |  Branch (11970:17): [True: 0, False: 10.4k]
  ------------------
11971|      0|                case 0x42:
  ------------------
  |  Branch (11971:17): [True: 0, False: 10.4k]
  ------------------
11972|      0|                case 0x43:
  ------------------
  |  Branch (11972:17): [True: 0, False: 10.4k]
  ------------------
11973|      0|                case 0x44:
  ------------------
  |  Branch (11973:17): [True: 0, False: 10.4k]
  ------------------
11974|      0|                case 0x45:
  ------------------
  |  Branch (11974:17): [True: 0, False: 10.4k]
  ------------------
11975|      0|                case 0x46:
  ------------------
  |  Branch (11975:17): [True: 0, False: 10.4k]
  ------------------
11976|      0|                case 0x47:
  ------------------
  |  Branch (11976:17): [True: 0, False: 10.4k]
  ------------------
11977|      0|                case 0x48:
  ------------------
  |  Branch (11977:17): [True: 0, False: 10.4k]
  ------------------
11978|      0|                case 0x49:
  ------------------
  |  Branch (11978:17): [True: 0, False: 10.4k]
  ------------------
11979|      0|                case 0x4A:
  ------------------
  |  Branch (11979:17): [True: 0, False: 10.4k]
  ------------------
11980|      0|                case 0x4B:
  ------------------
  |  Branch (11980:17): [True: 0, False: 10.4k]
  ------------------
11981|      0|                case 0x4C:
  ------------------
  |  Branch (11981:17): [True: 0, False: 10.4k]
  ------------------
11982|      0|                case 0x4D:
  ------------------
  |  Branch (11982:17): [True: 0, False: 10.4k]
  ------------------
11983|      0|                case 0x4E:
  ------------------
  |  Branch (11983:17): [True: 0, False: 10.4k]
  ------------------
11984|      0|                case 0x4F:
  ------------------
  |  Branch (11984:17): [True: 0, False: 10.4k]
  ------------------
11985|      0|                case 0x50:
  ------------------
  |  Branch (11985:17): [True: 0, False: 10.4k]
  ------------------
11986|      0|                case 0x51:
  ------------------
  |  Branch (11986:17): [True: 0, False: 10.4k]
  ------------------
11987|      0|                case 0x52:
  ------------------
  |  Branch (11987:17): [True: 0, False: 10.4k]
  ------------------
11988|      0|                case 0x53:
  ------------------
  |  Branch (11988:17): [True: 0, False: 10.4k]
  ------------------
11989|      0|                case 0x54:
  ------------------
  |  Branch (11989:17): [True: 0, False: 10.4k]
  ------------------
11990|      0|                case 0x55:
  ------------------
  |  Branch (11990:17): [True: 0, False: 10.4k]
  ------------------
11991|      0|                case 0x56:
  ------------------
  |  Branch (11991:17): [True: 0, False: 10.4k]
  ------------------
11992|      0|                case 0x57:
  ------------------
  |  Branch (11992:17): [True: 0, False: 10.4k]
  ------------------
11993|      0|                case 0x58:
  ------------------
  |  Branch (11993:17): [True: 0, False: 10.4k]
  ------------------
11994|      0|                case 0x59:
  ------------------
  |  Branch (11994:17): [True: 0, False: 10.4k]
  ------------------
11995|      0|                case 0x5A:
  ------------------
  |  Branch (11995:17): [True: 0, False: 10.4k]
  ------------------
11996|      0|                case 0x5B:
  ------------------
  |  Branch (11996:17): [True: 0, False: 10.4k]
  ------------------
11997|      0|                case 0x5D:
  ------------------
  |  Branch (11997:17): [True: 0, False: 10.4k]
  ------------------
11998|      0|                case 0x5E:
  ------------------
  |  Branch (11998:17): [True: 0, False: 10.4k]
  ------------------
11999|      0|                case 0x5F:
  ------------------
  |  Branch (11999:17): [True: 0, False: 10.4k]
  ------------------
12000|      0|                case 0x60:
  ------------------
  |  Branch (12000:17): [True: 0, False: 10.4k]
  ------------------
12001|      0|                case 0x61:
  ------------------
  |  Branch (12001:17): [True: 0, False: 10.4k]
  ------------------
12002|      0|                case 0x62:
  ------------------
  |  Branch (12002:17): [True: 0, False: 10.4k]
  ------------------
12003|      0|                case 0x63:
  ------------------
  |  Branch (12003:17): [True: 0, False: 10.4k]
  ------------------
12004|      0|                case 0x64:
  ------------------
  |  Branch (12004:17): [True: 0, False: 10.4k]
  ------------------
12005|      0|                case 0x65:
  ------------------
  |  Branch (12005:17): [True: 0, False: 10.4k]
  ------------------
12006|      0|                case 0x66:
  ------------------
  |  Branch (12006:17): [True: 0, False: 10.4k]
  ------------------
12007|      0|                case 0x67:
  ------------------
  |  Branch (12007:17): [True: 0, False: 10.4k]
  ------------------
12008|      0|                case 0x68:
  ------------------
  |  Branch (12008:17): [True: 0, False: 10.4k]
  ------------------
12009|      0|                case 0x69:
  ------------------
  |  Branch (12009:17): [True: 0, False: 10.4k]
  ------------------
12010|      0|                case 0x6A:
  ------------------
  |  Branch (12010:17): [True: 0, False: 10.4k]
  ------------------
12011|      0|                case 0x6B:
  ------------------
  |  Branch (12011:17): [True: 0, False: 10.4k]
  ------------------
12012|      0|                case 0x6C:
  ------------------
  |  Branch (12012:17): [True: 0, False: 10.4k]
  ------------------
12013|      0|                case 0x6D:
  ------------------
  |  Branch (12013:17): [True: 0, False: 10.4k]
  ------------------
12014|      0|                case 0x6E:
  ------------------
  |  Branch (12014:17): [True: 0, False: 10.4k]
  ------------------
12015|      0|                case 0x6F:
  ------------------
  |  Branch (12015:17): [True: 0, False: 10.4k]
  ------------------
12016|      0|                case 0x70:
  ------------------
  |  Branch (12016:17): [True: 0, False: 10.4k]
  ------------------
12017|      0|                case 0x71:
  ------------------
  |  Branch (12017:17): [True: 0, False: 10.4k]
  ------------------
12018|      0|                case 0x72:
  ------------------
  |  Branch (12018:17): [True: 0, False: 10.4k]
  ------------------
12019|      0|                case 0x73:
  ------------------
  |  Branch (12019:17): [True: 0, False: 10.4k]
  ------------------
12020|      0|                case 0x74:
  ------------------
  |  Branch (12020:17): [True: 0, False: 10.4k]
  ------------------
12021|      0|                case 0x75:
  ------------------
  |  Branch (12021:17): [True: 0, False: 10.4k]
  ------------------
12022|      0|                case 0x76:
  ------------------
  |  Branch (12022:17): [True: 0, False: 10.4k]
  ------------------
12023|      0|                case 0x77:
  ------------------
  |  Branch (12023:17): [True: 0, False: 10.4k]
  ------------------
12024|      0|                case 0x78:
  ------------------
  |  Branch (12024:17): [True: 0, False: 10.4k]
  ------------------
12025|      0|                case 0x79:
  ------------------
  |  Branch (12025:17): [True: 0, False: 10.4k]
  ------------------
12026|      0|                case 0x7A:
  ------------------
  |  Branch (12026:17): [True: 0, False: 10.4k]
  ------------------
12027|      0|                case 0x7B:
  ------------------
  |  Branch (12027:17): [True: 0, False: 10.4k]
  ------------------
12028|      0|                case 0x7C:
  ------------------
  |  Branch (12028:17): [True: 0, False: 10.4k]
  ------------------
12029|      0|                case 0x7D:
  ------------------
  |  Branch (12029:17): [True: 0, False: 10.4k]
  ------------------
12030|      0|                case 0x7E:
  ------------------
  |  Branch (12030:17): [True: 0, False: 10.4k]
  ------------------
12031|      0|                case 0x7F:
  ------------------
  |  Branch (12031:17): [True: 0, False: 10.4k]
  ------------------
12032|      0|                {
12033|      0|                    add(current);
12034|      0|                    break;
12035|      0|                }
12036|       |
12037|       |                // U+0080..U+07FF: bytes C2..DF 80..BF
12038|     18|                case 0xC2:
  ------------------
  |  Branch (12038:17): [True: 18, False: 10.3k]
  ------------------
12039|     48|                case 0xC3:
  ------------------
  |  Branch (12039:17): [True: 30, False: 10.3k]
  ------------------
12040|     72|                case 0xC4:
  ------------------
  |  Branch (12040:17): [True: 24, False: 10.3k]
  ------------------
12041|     96|                case 0xC5:
  ------------------
  |  Branch (12041:17): [True: 24, False: 10.3k]
  ------------------
12042|    120|                case 0xC6:
  ------------------
  |  Branch (12042:17): [True: 24, False: 10.3k]
  ------------------
12043|    150|                case 0xC7:
  ------------------
  |  Branch (12043:17): [True: 30, False: 10.3k]
  ------------------
12044|    168|                case 0xC8:
  ------------------
  |  Branch (12044:17): [True: 18, False: 10.3k]
  ------------------
12045|    186|                case 0xC9:
  ------------------
  |  Branch (12045:17): [True: 18, False: 10.3k]
  ------------------
12046|    210|                case 0xCA:
  ------------------
  |  Branch (12046:17): [True: 24, False: 10.3k]
  ------------------
12047|    234|                case 0xCB:
  ------------------
  |  Branch (12047:17): [True: 24, False: 10.3k]
  ------------------
12048|    264|                case 0xCC:
  ------------------
  |  Branch (12048:17): [True: 30, False: 10.3k]
  ------------------
12049|    288|                case 0xCD:
  ------------------
  |  Branch (12049:17): [True: 24, False: 10.3k]
  ------------------
12050|    318|                case 0xCE:
  ------------------
  |  Branch (12050:17): [True: 30, False: 10.3k]
  ------------------
12051|    342|                case 0xCF:
  ------------------
  |  Branch (12051:17): [True: 24, False: 10.3k]
  ------------------
12052|    366|                case 0xD0:
  ------------------
  |  Branch (12052:17): [True: 24, False: 10.3k]
  ------------------
12053|    390|                case 0xD1:
  ------------------
  |  Branch (12053:17): [True: 24, False: 10.3k]
  ------------------
12054|    444|                case 0xD2:
  ------------------
  |  Branch (12054:17): [True: 54, False: 10.3k]
  ------------------
12055|    462|                case 0xD3:
  ------------------
  |  Branch (12055:17): [True: 18, False: 10.3k]
  ------------------
12056|    480|                case 0xD4:
  ------------------
  |  Branch (12056:17): [True: 18, False: 10.3k]
  ------------------
12057|    510|                case 0xD5:
  ------------------
  |  Branch (12057:17): [True: 30, False: 10.3k]
  ------------------
12058|    534|                case 0xD6:
  ------------------
  |  Branch (12058:17): [True: 24, False: 10.3k]
  ------------------
12059|    564|                case 0xD7:
  ------------------
  |  Branch (12059:17): [True: 30, False: 10.3k]
  ------------------
12060|    582|                case 0xD8:
  ------------------
  |  Branch (12060:17): [True: 18, False: 10.3k]
  ------------------
12061|    600|                case 0xD9:
  ------------------
  |  Branch (12061:17): [True: 18, False: 10.3k]
  ------------------
12062|    618|                case 0xDA:
  ------------------
  |  Branch (12062:17): [True: 18, False: 10.3k]
  ------------------
12063|    636|                case 0xDB:
  ------------------
  |  Branch (12063:17): [True: 18, False: 10.3k]
  ------------------
12064|    660|                case 0xDC:
  ------------------
  |  Branch (12064:17): [True: 24, False: 10.3k]
  ------------------
12065|    678|                case 0xDD:
  ------------------
  |  Branch (12065:17): [True: 18, False: 10.3k]
  ------------------
12066|    696|                case 0xDE:
  ------------------
  |  Branch (12066:17): [True: 18, False: 10.3k]
  ------------------
12067|    714|                case 0xDF:
  ------------------
  |  Branch (12067:17): [True: 18, False: 10.3k]
  ------------------
12068|    714|                {
12069|    714|                    if (JSON_HEDLEY_UNLIKELY(!next_byte_in_range({0x80, 0xBF})))
  ------------------
  |  | 1667|    714|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 714, False: 0]
  |  |  ------------------
  ------------------
12070|    714|                    {
12071|    714|                        return token_type::parse_error;
12072|    714|                    }
12073|      0|                    break;
12074|    714|                }
12075|       |
12076|       |                // U+0800..U+0FFF: bytes E0 A0..BF 80..BF
12077|    126|                case 0xE0:
  ------------------
  |  Branch (12077:17): [True: 126, False: 10.2k]
  ------------------
12078|    126|                {
12079|    126|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1667|    126|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 126, False: 0]
  |  |  ------------------
  ------------------
12080|    126|                    {
12081|    126|                        return token_type::parse_error;
12082|    126|                    }
12083|      0|                    break;
12084|    126|                }
12085|       |
12086|       |                // U+1000..U+CFFF: bytes E1..EC 80..BF 80..BF
12087|       |                // U+E000..U+FFFF: bytes EE..EF 80..BF 80..BF
12088|     30|                case 0xE1:
  ------------------
  |  Branch (12088:17): [True: 30, False: 10.3k]
  ------------------
12089|     54|                case 0xE2:
  ------------------
  |  Branch (12089:17): [True: 24, False: 10.3k]
  ------------------
12090|     72|                case 0xE3:
  ------------------
  |  Branch (12090:17): [True: 18, False: 10.3k]
  ------------------
12091|    108|                case 0xE4:
  ------------------
  |  Branch (12091:17): [True: 36, False: 10.3k]
  ------------------
12092|    132|                case 0xE5:
  ------------------
  |  Branch (12092:17): [True: 24, False: 10.3k]
  ------------------
12093|    162|                case 0xE6:
  ------------------
  |  Branch (12093:17): [True: 30, False: 10.3k]
  ------------------
12094|    186|                case 0xE7:
  ------------------
  |  Branch (12094:17): [True: 24, False: 10.3k]
  ------------------
12095|    216|                case 0xE8:
  ------------------
  |  Branch (12095:17): [True: 30, False: 10.3k]
  ------------------
12096|    234|                case 0xE9:
  ------------------
  |  Branch (12096:17): [True: 18, False: 10.3k]
  ------------------
12097|    252|                case 0xEA:
  ------------------
  |  Branch (12097:17): [True: 18, False: 10.3k]
  ------------------
12098|    276|                case 0xEB:
  ------------------
  |  Branch (12098:17): [True: 24, False: 10.3k]
  ------------------
12099|    294|                case 0xEC:
  ------------------
  |  Branch (12099:17): [True: 18, False: 10.3k]
  ------------------
12100|    312|                case 0xEE:
  ------------------
  |  Branch (12100:17): [True: 18, False: 10.3k]
  ------------------
12101|    336|                case 0xEF:
  ------------------
  |  Branch (12101:17): [True: 24, False: 10.3k]
  ------------------
12102|    336|                {
12103|    336|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1667|    336|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 336, False: 0]
  |  |  ------------------
  ------------------
12104|    336|                    {
12105|    336|                        return token_type::parse_error;
12106|    336|                    }
12107|      0|                    break;
12108|    336|                }
12109|       |
12110|       |                // U+D000..U+D7FF: bytes ED 80..9F 80..BF
12111|    156|                case 0xED:
  ------------------
  |  Branch (12111:17): [True: 156, False: 10.2k]
  ------------------
12112|    156|                {
12113|    156|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x9F, 0x80, 0xBF}))))
  ------------------
  |  | 1667|    156|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 156, False: 0]
  |  |  ------------------
  ------------------
12114|    156|                    {
12115|    156|                        return token_type::parse_error;
12116|    156|                    }
12117|      0|                    break;
12118|    156|                }
12119|       |
12120|       |                // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF
12121|    144|                case 0xF0:
  ------------------
  |  Branch (12121:17): [True: 144, False: 10.2k]
  ------------------
12122|    144|                {
12123|    144|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1667|    144|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 144, False: 0]
  |  |  ------------------
  ------------------
12124|    144|                    {
12125|    144|                        return token_type::parse_error;
12126|    144|                    }
12127|      0|                    break;
12128|    144|                }
12129|       |
12130|       |                // U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF
12131|     60|                case 0xF1:
  ------------------
  |  Branch (12131:17): [True: 60, False: 10.3k]
  ------------------
12132|    102|                case 0xF2:
  ------------------
  |  Branch (12132:17): [True: 42, False: 10.3k]
  ------------------
12133|    174|                case 0xF3:
  ------------------
  |  Branch (12133:17): [True: 72, False: 10.3k]
  ------------------
12134|    174|                {
12135|    174|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1667|    174|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 174, False: 0]
  |  |  ------------------
  ------------------
12136|    174|                    {
12137|    174|                        return token_type::parse_error;
12138|    174|                    }
12139|      0|                    break;
12140|    174|                }
12141|       |
12142|       |                // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF
12143|    126|                case 0xF4:
  ------------------
  |  Branch (12143:17): [True: 126, False: 10.2k]
  ------------------
12144|    126|                {
12145|    126|                    if (JSON_HEDLEY_UNLIKELY(!(next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF}))))
  ------------------
  |  | 1667|    126|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 126, False: 0]
  |  |  ------------------
  ------------------
12146|    126|                    {
12147|    126|                        return token_type::parse_error;
12148|    126|                    }
12149|      0|                    break;
12150|    126|                }
12151|       |
12152|       |                // the remaining bytes (80..C1 and F5..FF) are ill-formed
12153|    132|                default:
  ------------------
  |  Branch (12153:17): [True: 132, False: 10.2k]
  ------------------
12154|    132|                {
12155|    132|                    error_message = "invalid string: ill-formed UTF-8 byte";
12156|    132|                    return token_type::parse_error;
12157|    126|                }
12158|  10.4k|            }
12159|  10.4k|        }
12160|  4.07k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE5resetEv:
12869|  38.8k|    {
12870|  38.8k|        token_buffer.clear();
12871|  38.8k|        decimal_point_position = std::string::npos;
12872|       |
12873|       |#if JSON_DIAGNOSTIC_POSITIONS
12874|       |        // the first character of the token has already been read, hence the -1
12875|       |        token_start_position = get_chars_read_total() - 1;
12876|       |#endif
12877|       |
12878|  38.8k|        note_token_start(std::integral_constant<bool, lazy_token_string> {});
12879|  38.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE16note_token_startENS4_17integral_constantIbLb1EEE:
12885|  38.8k|    {
12886|  38.8k|        token_string_start = ia.get_consumed_count() - 1;
12887|  38.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE16scan_string_bulkENS4_17integral_constantIbLb1EEE:
11554|  10.4k|    {
11555|       |        // a pending unget must be consumed through the normal path first
11556|  10.4k|        if (next_unget)
  ------------------
  |  Branch (11556:13): [True: 0, False: 10.4k]
  ------------------
11557|      0|        {
11558|      0|            return;
11559|      0|        }
11560|  10.4k|        const std::size_t remaining = ia.bulk_remaining();
11561|  10.4k|        if (remaining == 0)
  ------------------
  |  Branch (11561:13): [True: 648, False: 9.76k]
  ------------------
11562|    648|        {
11563|    648|            return;
11564|    648|        }
11565|  9.76k|        const auto* const data = reinterpret_cast<const unsigned char*>(ia.bulk_data());
11566|       |
11567|  9.76k|        const std::size_t pos = string_bulk_run(data, remaining);
11568|  9.76k|        if (pos == 0)
  ------------------
  |  Branch (11568:13): [True: 8.49k, False: 1.26k]
  ------------------
11569|  8.49k|        {
11570|  8.49k|            return;
11571|  8.49k|        }
11572|  1.26k|        token_buffer.append(reinterpret_cast<const typename string_t::value_type*>(data), pos);
11573|  1.26k|        ia.bulk_skip(pos);
11574|  1.26k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE3addEi:
13081|  44.8k|    {
13082|  44.8k|        token_buffer.push_back(static_cast<typename string_t::value_type>(c));
13083|  44.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE13get_codepointEv:
11472|  2.05k|    {
11473|       |        // this function only makes sense after reading `\u`
11474|  2.05k|        JSON_ASSERT(current == 'u');
  ------------------
  |  | 2591|  2.05k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (11474:9): [True: 2.05k, False: 0]
  ------------------
11475|       |
11476|       |        // contiguous input: decode all 4 hex digits directly from the buffer
11477|  2.05k|        int fast_codepoint = 0;
11478|  2.05k|        if (get_codepoint_bulk(std::integral_constant<bool, bulk_scan> {}, fast_codepoint))
  ------------------
  |  Branch (11478:13): [True: 1.79k, False: 258]
  ------------------
11479|  1.79k|        {
11480|  1.79k|            return fast_codepoint;
11481|  1.79k|        }
11482|       |
11483|    258|        int codepoint = 0;
11484|       |
11485|    258|        const auto factors = { 12u, 8u, 4u, 0u };
11486|    258|        for (const auto factor : factors)
  ------------------
  |  Branch (11486:32): [True: 600, False: 0]
  ------------------
11487|    600|        {
11488|    600|            get();
11489|       |
11490|    600|            if (current >= '0' && current <= '9')
  ------------------
  |  Branch (11490:17): [True: 444, False: 156]
  |  Branch (11490:35): [True: 120, False: 324]
  ------------------
11491|    120|            {
11492|    120|                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x30u) << factor);
11493|    120|            }
11494|    480|            else if (current >= 'A' && current <= 'F')
  ------------------
  |  Branch (11494:22): [True: 318, False: 162]
  |  Branch (11494:40): [True: 120, False: 198]
  ------------------
11495|    120|            {
11496|    120|                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x37u) << factor);
11497|    120|            }
11498|    360|            else if (current >= 'a' && current <= 'f')
  ------------------
  |  Branch (11498:22): [True: 192, False: 168]
  |  Branch (11498:40): [True: 102, False: 90]
  ------------------
11499|    102|            {
11500|    102|                codepoint += static_cast<int>((static_cast<unsigned int>(current) - 0x57u) << factor);
11501|    102|            }
11502|    258|            else
11503|    258|            {
11504|    258|                return -1;
11505|    258|            }
11506|    600|        }
11507|       |
11508|      0|        JSON_ASSERT(0x0000 <= codepoint && codepoint <= 0xFFFF);
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (11508:9): [True: 0, False: 0]
  |  Branch (11508:9): [True: 0, False: 0]
  |  Branch (11508:9): [True: 0, False: 0]
  ------------------
11509|      0|        return codepoint;
11510|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE18get_codepoint_bulkENS4_17integral_constantIbLb1EEERi:
11433|  2.05k|    {
11434|  2.05k|        if (next_unget || ia.bulk_remaining() < 4)
  ------------------
  |  Branch (11434:13): [True: 0, False: 2.05k]
  |  Branch (11434:27): [True: 180, False: 1.87k]
  ------------------
11435|    180|        {
11436|    180|            return false;
11437|    180|        }
11438|  1.87k|        const char_type* const raw = ia.bulk_data();
11439|  1.87k|        const int codepoint = hex_codepoint(reinterpret_cast<const unsigned char*>(raw));
11440|  1.87k|        if (codepoint < 0)
  ------------------
  |  Branch (11440:13): [True: 78, False: 1.79k]
  ------------------
11441|     78|        {
11442|     78|            return false;
11443|     78|        }
11444|  1.79k|        ia.bulk_skip(4);
11445|  1.79k|        current = char_traits<char_type>::to_int_type(raw[3]);
11446|  1.79k|        out = codepoint;
11447|  1.79k|        return true;
11448|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13hex_codepointEPKh:
11168|  1.87k|{
11169|  1.87k|    static const std::array<std::uint8_t, 256> hex_digit_table = // NOLINT(cppcoreguidelines-avoid-non-const-global-variables)
11170|  1.87k|    {
11171|  1.87k|        {
11172|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 00..0F
11173|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 10..1F
11174|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 20..2F
11175|  1.87k|            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 30..3F ('0'..'9')
11176|  1.87k|            0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 40..4F ('A'..'F')
11177|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 50..5F
11178|  1.87k|            0xFF, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 60..6F ('a'..'f')
11179|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 70..7F
11180|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 80..8F
11181|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // 90..9F
11182|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // A0..AF
11183|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // B0..BF
11184|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // C0..CF
11185|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // D0..DF
11186|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, // E0..EF
11187|  1.87k|            0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF  // F0..FF
11188|  1.87k|        }
11189|  1.87k|    };
11190|       |
11191|  1.87k|    const std::uint8_t d0 = hex_digit_table[data[0]];
11192|  1.87k|    const std::uint8_t d1 = hex_digit_table[data[1]];
11193|  1.87k|    const std::uint8_t d2 = hex_digit_table[data[2]];
11194|  1.87k|    const std::uint8_t d3 = hex_digit_table[data[3]];
11195|       |    // every valid digit is <= 0xF; the combined OR only exceeds it if at
11196|       |    // least one of the four bytes was not a hex digit (looked up as 0xFF)
11197|  1.87k|    if ((d0 | d1 | d2 | d3) > 0x0F)
  ------------------
  |  Branch (11197:9): [True: 78, False: 1.79k]
  ------------------
11198|     78|    {
11199|     78|        return -1;
11200|     78|    }
11201|  1.79k|    return (d0 << 12) | (d1 << 8) | (d2 << 4) | d3;
11202|  1.87k|}
_ZN8nlohmann16json_abi_v3_12_06detail11encode_utf8IZNS1_5lexerINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterIPKcSK_EEE11scan_stringEvEUljE_EEvjRKT_:
 6724|  1.15k|{
 6725|  1.15k|    JSON_ASSERT(cp <= 0x10FFFF);
  ------------------
  |  | 2591|  1.15k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (6725:5): [True: 1.15k, False: 0]
  ------------------
 6726|       |
 6727|  1.15k|    if (cp < 0x80)
  ------------------
  |  Branch (6727:9): [True: 132, False: 1.02k]
  ------------------
 6728|    132|    {
 6729|       |        // 1-byte characters: 0xxxxxxx (ASCII)
 6730|    132|        out(cp);
 6731|    132|    }
 6732|  1.02k|    else if (cp <= 0x7FF)
  ------------------
  |  Branch (6732:14): [True: 240, False: 786]
  ------------------
 6733|    240|    {
 6734|       |        // 2-byte characters: 110xxxxx 10xxxxxx
 6735|    240|        out(0xC0u | (cp >> 6u));
 6736|    240|        out(0x80u | (cp & 0x3Fu));
 6737|    240|    }
 6738|    786|    else if (cp <= 0xFFFF)
  ------------------
  |  Branch (6738:14): [True: 540, False: 246]
  ------------------
 6739|    540|    {
 6740|       |        // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx
 6741|    540|        out(0xE0u | (cp >> 12u));
 6742|    540|        out(0x80u | ((cp >> 6u) & 0x3Fu));
 6743|    540|        out(0x80u | (cp & 0x3Fu));
 6744|    540|    }
 6745|    246|    else
 6746|    246|    {
 6747|       |        // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 6748|    246|        out(0xF0u | (cp >> 18u));
 6749|    246|        out(0x80u | ((cp >> 12u) & 0x3Fu));
 6750|    246|        out(0x80u | ((cp >> 6u) & 0x3Fu));
 6751|    246|        out(0x80u | (cp & 0x3Fu));
 6752|    246|    }
 6753|  1.15k|}
_ZZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE11scan_stringEvENKUljE_clEj:
11728|  3.21k|                            {
11729|  3.21k|                                add(static_cast<char_int_type>(byte));
11730|  3.21k|                            });
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE18next_byte_in_rangeESt16initializer_listIiE:
11528|  1.77k|    {
11529|  1.77k|        JSON_ASSERT(ranges.size() == 2 || ranges.size() == 4 || ranges.size() == 6);
  ------------------
  |  | 2591|  1.77k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (11529:9): [True: 714, False: 1.06k]
  |  Branch (11529:9): [True: 618, False: 444]
  |  Branch (11529:9): [True: 444, False: 0]
  |  Branch (11529:9): [True: 1.77k, False: 0]
  ------------------
11530|  1.77k|        add(current);
11531|       |
11532|  2.34k|        for (auto range = ranges.begin(); range != ranges.end(); ++range)
  ------------------
  |  Branch (11532:43): [True: 2.34k, False: 0]
  ------------------
11533|  2.34k|        {
11534|  2.34k|            get();
11535|  2.34k|            if (JSON_HEDLEY_LIKELY(*range <= current && current <= *(++range))) // NOLINT(bugprone-inc-dec-in-conditions)
  ------------------
  |  | 1666|  3.33k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 564, False: 1.77k]
  |  |  |  Branch (1666:94): [True: 990, False: 1.35k]
  |  |  |  Branch (1666:94): [True: 564, False: 426]
  |  |  ------------------
  ------------------
11536|    564|            {
11537|    564|                add(current);
11538|    564|            }
11539|  1.77k|            else
11540|  1.77k|            {
11541|  1.77k|                error_message = "invalid string: ill-formed UTF-8 byte";
11542|  1.77k|                return false;
11543|  1.77k|            }
11544|  2.34k|        }
11545|       |
11546|      0|        return true;
11547|  1.77k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE20scan_number_dispatchENS4_17integral_constantIbLb1EEE:
12831|  34.7k|    {
12832|  34.7k|        const token_type t = scan_number_bulk_contiguous();
12833|  34.7k|        return (t != token_type::uninitialized) ? t : scan_number();
  ------------------
  |  Branch (12833:16): [True: 23.4k, False: 11.3k]
  ------------------
12834|  34.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE27scan_number_bulk_contiguousEv:
12712|  34.7k|    {
12713|       |        // a pending unget offsets the buffer position from current; fall back
12714|  34.7k|        if (next_unget)
  ------------------
  |  Branch (12714:13): [True: 0, False: 34.7k]
  ------------------
12715|      0|        {
12716|      0|            return token_type::uninitialized;
12717|      0|        }
12718|  34.7k|        const std::size_t rem = ia.bulk_remaining();
12719|  34.7k|        if (rem == 0)
  ------------------
  |  Branch (12719:13): [True: 9.55k, False: 25.2k]
  ------------------
12720|  9.55k|        {
12721|       |            // the first digit is the last input byte; let scan_number() finish
12722|  9.55k|            return token_type::uninitialized;
12723|  9.55k|        }
12724|       |        // the byte before the next unread one is current (contiguous input)
12725|  25.2k|        const char* const data = reinterpret_cast<const char*>(ia.bulk_data()) - 1;
12726|  25.2k|        const std::size_t avail = rem + 1;
12727|       |
12728|       |        // validate + classify the number extent (mirrors scan_number()'s grammar)
12729|  25.2k|        std::size_t i = 0;
12730|  25.2k|        std::size_t dot_index = std::string::npos;
12731|  25.2k|        token_type number_type = token_type::value_unsigned;
12732|  25.2k|        if (data[0] == '-')
  ------------------
  |  Branch (12732:13): [True: 4.09k, False: 21.1k]
  ------------------
12733|  4.09k|        {
12734|  4.09k|            number_type = token_type::value_integer;
12735|  4.09k|            i = 1;
12736|  4.09k|            if (i >= avail)
  ------------------
  |  Branch (12736:17): [True: 0, False: 4.09k]
  ------------------
12737|      0|            {
12738|      0|                return token_type::uninitialized;
12739|      0|            }
12740|  4.09k|        }
12741|  25.2k|        if (data[i] == '0')
  ------------------
  |  Branch (12741:13): [True: 4.51k, False: 20.6k]
  ------------------
12742|  4.51k|        {
12743|  4.51k|            ++i;
12744|  4.51k|        }
12745|  20.6k|        else if (data[i] >= '1' && data[i] <= '9')
  ------------------
  |  Branch (12745:18): [True: 20.5k, False: 156]
  |  Branch (12745:36): [True: 20.4k, False: 54]
  ------------------
12746|  20.4k|        {
12747|  20.4k|            ++i;
12748|   188k|            while (i < avail && data[i] >= '0' && data[i] <= '9')
  ------------------
  |  Branch (12748:20): [True: 183k, False: 4.07k]
  |  Branch (12748:33): [True: 177k, False: 6.97k]
  |  Branch (12748:51): [True: 167k, False: 9.43k]
  ------------------
12749|   167k|            {
12750|   167k|                ++i;
12751|   167k|            }
12752|  20.4k|        }
12753|    210|        else
12754|    210|        {
12755|    210|            return token_type::uninitialized;
12756|    210|        }
12757|  24.9k|        if (i < avail && data[i] == '.')
  ------------------
  |  Branch (12757:13): [True: 20.8k, False: 4.19k]
  |  Branch (12757:26): [True: 8.00k, False: 12.7k]
  ------------------
12758|  8.00k|        {
12759|  8.00k|            number_type = token_type::value_float;
12760|  8.00k|            dot_index = i;
12761|  8.00k|            ++i;
12762|  8.00k|            if (i >= avail || !(data[i] >= '0' && data[i] <= '9'))
  ------------------
  |  Branch (12762:17): [True: 156, False: 7.84k]
  |  Branch (12762:33): [True: 7.70k, False: 144]
  |  Branch (12762:51): [True: 7.59k, False: 108]
  ------------------
12763|    408|            {
12764|    408|                return token_type::uninitialized;
12765|    408|            }
12766|  83.2k|            while (i < avail && data[i] >= '0' && data[i] <= '9')
  ------------------
  |  Branch (12766:20): [True: 78.3k, False: 4.89k]
  |  Branch (12766:33): [True: 77.4k, False: 954]
  |  Branch (12766:51): [True: 75.6k, False: 1.75k]
  ------------------
12767|  75.6k|            {
12768|  75.6k|                ++i;
12769|  75.6k|            }
12770|  7.59k|        }
12771|       |        // the mantissa ends here, whether or not an exponent part follows
12772|  24.5k|        const std::size_t mantissa_end = i;
12773|  24.5k|        if (i < avail && (data[i] == 'e' || data[i] == 'E'))
  ------------------
  |  Branch (12773:13): [True: 15.5k, False: 9.08k]
  |  Branch (12773:27): [True: 8.31k, False: 7.18k]
  |  Branch (12773:45): [True: 3.24k, False: 3.94k]
  ------------------
12774|  11.5k|        {
12775|  11.5k|            number_type = token_type::value_float;
12776|  11.5k|            ++i;
12777|  11.5k|            if (i < avail && (data[i] == '+' || data[i] == '-'))
  ------------------
  |  Branch (12777:17): [True: 11.0k, False: 552]
  |  Branch (12777:31): [True: 270, False: 10.7k]
  |  Branch (12777:49): [True: 3.62k, False: 7.11k]
  ------------------
12778|  3.89k|            {
12779|  3.89k|                ++i;
12780|  3.89k|            }
12781|  11.5k|            if (i >= avail || !(data[i] >= '0' && data[i] <= '9'))
  ------------------
  |  Branch (12781:17): [True: 588, False: 10.9k]
  |  Branch (12781:33): [True: 10.6k, False: 342]
  |  Branch (12781:51): [True: 10.3k, False: 246]
  ------------------
12782|  1.17k|            {
12783|  1.17k|                return token_type::uninitialized;
12784|  1.17k|            }
12785|  53.5k|            while (i < avail && data[i] >= '0' && data[i] <= '9')
  ------------------
  |  Branch (12785:20): [True: 45.9k, False: 7.57k]
  |  Branch (12785:33): [True: 43.8k, False: 2.12k]
  |  Branch (12785:51): [True: 43.1k, False: 678]
  ------------------
12786|  43.1k|            {
12787|  43.1k|                ++i;
12788|  43.1k|            }
12789|  10.3k|        }
12790|  23.4k|        const std::size_t len = i;
12791|       |
12792|       |        // reset() records where this token starts (for diagnostics), so it has
12793|       |        // to run before the input position advances below
12794|  23.4k|        reset();
12795|       |
12796|       |        // An integer token needs no token_buffer: the SAX callbacks for
12797|       |        // number_integer/number_unsigned take only the value, and the overflow
12798|       |        // diagnostic rebuilds the text from the input. Convert straight from the
12799|       |        // input buffer and leave token_buffer empty. (JSON_DIAGNOSTIC_POSITIONS
12800|       |        // derives a number's start position from get_string().size(), so there
12801|       |        // the token still has to be materialized.)
12802|  23.4k|#if !JSON_DIAGNOSTIC_POSITIONS
12803|  23.4k|        if (number_type != token_type::value_float)
  ------------------
  |  Branch (12803:13): [True: 6.66k, False: 16.7k]
  ------------------
12804|  6.66k|        {
12805|  6.66k|            const token_type integer_result = convert_integer(number_type, data, data + len);
12806|  6.66k|            if (JSON_HEDLEY_LIKELY(integer_result != token_type::uninitialized))
  ------------------
  |  | 1666|  6.66k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 4.29k, False: 2.36k]
  |  |  ------------------
  ------------------
12807|  4.29k|            {
12808|  4.29k|                ia.bulk_skip(len - 1);
12809|  4.29k|                return integer_result;
12810|  4.29k|            }
12811|       |            // The value does not fit an integer, so this token converts as a
12812|       |            // float. Recording that here keeps convert_number() below from
12813|       |            // repeating the integer attempt that just failed.
12814|  2.36k|            number_type = token_type::value_float;
12815|  2.36k|        }
12816|  19.1k|#endif
12817|       |
12818|       |        // materialize the token exactly as scan_number() would. reset() already
12819|       |        // cleared token_buffer, so append() fills it (assign() is avoided
12820|       |        // because custom string_t types need not provide it)
12821|  19.1k|        token_buffer.append(reinterpret_cast<const typename string_t::value_type*>(data), len);
12822|  19.1k|        decimal_point_position = dot_index;
12823|       |
12824|  19.1k|        ia.bulk_skip(len - 1);
12825|       |
12826|  19.1k|        return convert_number(number_type, mantissa_end);
12827|  23.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE15convert_integerENS1_10lexer_baseISG_E10token_typeESJ_SJ_:
12599|  16.1k|    {
12600|  16.1k|        if (number_type == token_type::value_unsigned)
  ------------------
  |  Branch (12600:13): [True: 14.1k, False: 2.08k]
  ------------------
12601|  14.1k|        {
12602|  14.1k|            if (parse_integer_unsigned(first, last, value_unsigned))
  ------------------
  |  Branch (12602:17): [True: 12.2k, False: 1.82k]
  ------------------
12603|  12.2k|            {
12604|  12.2k|                return token_type::value_unsigned;
12605|  12.2k|            }
12606|  14.1k|        }
12607|  2.08k|        else if (number_type == token_type::value_integer)
  ------------------
  |  Branch (12607:18): [True: 2.08k, False: 0]
  ------------------
12608|  2.08k|        {
12609|  2.08k|            if (parse_integer_signed(first, last, value_integer))
  ------------------
  |  Branch (12609:17): [True: 1.54k, False: 540]
  ------------------
12610|  1.54k|            {
12611|  1.54k|                return token_type::value_integer;
12612|  1.54k|            }
12613|  2.08k|        }
12614|       |
12615|  2.36k|        return token_type::uninitialized;
12616|  16.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22parse_integer_unsignedImEEbPKcS4_RT_:
 9864|  14.1k|{
 9865|       |    // accumulate in the widest unsigned type used by the previous strtoull
 9866|       |    // path so the overflow behavior is unchanged for custom number types
 9867|  14.1k|    std::uint64_t x = 0;
 9868|  14.1k|    constexpr std::uint64_t cutoff = (std::numeric_limits<std::uint64_t>::max)() / 10u;
 9869|  14.1k|    constexpr std::uint64_t cutlim = (std::numeric_limits<std::uint64_t>::max)() % 10u;
 9870|  71.7k|    for (const char* p = first; p != last; ++p)
  ------------------
  |  Branch (9870:33): [True: 59.4k, False: 12.2k]
  ------------------
 9871|  59.4k|    {
 9872|  59.4k|        const auto digit = static_cast<std::uint64_t>(static_cast<unsigned char>(*p) - static_cast<unsigned char>('0'));
 9873|  59.4k|        if (JSON_HEDLEY_UNLIKELY(x > cutoff || (x == cutoff && digit > cutlim)))
  ------------------
  |  | 1667|   174k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1.82k, False: 57.6k]
  |  |  |  Branch (1667:94): [True: 72, False: 57.5k]
  |  |  |  Branch (1667:94): [True: 12, False: 60]
  |  |  |  Branch (1667:94): [True: 1.81k, False: 57.6k]
  |  |  ------------------
  ------------------
 9874|  1.82k|        {
 9875|  1.82k|            return false;
 9876|  1.82k|        }
 9877|  57.6k|        x = (x * 10u) + digit;
 9878|  57.6k|    }
 9879|  12.2k|    value = static_cast<NumberUnsignedType>(x);
 9880|       |    // reject values that do not round-trip into a narrower NumberUnsignedType,
 9881|       |    // and values that wrap around to negative numbers if it is a signed type
 9882|       |    // (number_unsigned_t may be the same type as number_integer_t, #2573)
 9883|  12.2k|    return static_cast<std::uint64_t>(value) == x && !is_negative_integer(value, std::is_signed<NumberUnsignedType>());
  ------------------
  |  Branch (9883:12): [True: 12.2k, False: 0]
  |  Branch (9883:54): [True: 12.2k, False: 0]
  ------------------
 9884|  14.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail19is_negative_integerImEEbT_NSt3__117integral_constantIbLb0EEE:
 9843|  12.2k|{
 9844|  12.2k|    return false;
 9845|  12.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail20parse_integer_signedIlEEbPKcS4_RT_:
 9896|  2.08k|{
 9897|       |    // the state machine only reaches the signed path via a leading '-'
 9898|  2.08k|    JSON_ASSERT(first != last && *first == '-');
  ------------------
  |  | 2591|  2.08k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (9898:5): [True: 2.08k, False: 0]
  |  Branch (9898:5): [True: 2.08k, False: 0]
  |  Branch (9898:5): [True: 2.08k, False: 0]
  ------------------
 9899|  2.08k|    std::uint64_t magnitude = 0;
 9900|       |    // |INT64_MIN| == INT64_MAX + 1; this is the largest admissible magnitude
 9901|  2.08k|    constexpr std::uint64_t limit = static_cast<std::uint64_t>((std::numeric_limits<std::int64_t>::max)()) + 1u;
 9902|  21.1k|    for (const char* p = first + 1; p != last; ++p)
  ------------------
  |  Branch (9902:37): [True: 19.6k, False: 1.54k]
  ------------------
 9903|  19.6k|    {
 9904|  19.6k|        const auto digit = static_cast<std::uint64_t>(static_cast<unsigned char>(*p) - static_cast<unsigned char>('0'));
 9905|  19.6k|        if (JSON_HEDLEY_UNLIKELY(magnitude > (limit - digit) / 10u))
  ------------------
  |  | 1667|  19.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 540, False: 19.0k]
  |  |  ------------------
  ------------------
 9906|    540|        {
 9907|    540|            return false;
 9908|    540|        }
 9909|  19.0k|        magnitude = (magnitude * 10u) + digit;
 9910|  19.0k|    }
 9911|  1.54k|    const std::int64_t x = (magnitude == limit)
  ------------------
  |  Branch (9911:28): [True: 90, False: 1.45k]
  ------------------
 9912|  1.54k|                           ? (std::numeric_limits<std::int64_t>::min)()
 9913|  1.54k|                           : -static_cast<std::int64_t>(magnitude);
 9914|  1.54k|    value = static_cast<NumberIntegerType>(x);
 9915|       |    // reject values that do not round-trip into a narrower NumberIntegerType
 9916|  1.54k|    return static_cast<std::int64_t>(value) == x;
 9917|  2.08k|}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE14convert_numberENS1_10lexer_baseISG_E10token_typeEm:
12634|  28.6k|    {
12635|       |        // accept() only needs to know whether the input is valid, so it sets
12636|       |        // discard_number_values (see json.hpp), and an integer token whose
12637|       |        // digit count shows that it fits is reported without calling
12638|       |        // convert_integer(). A number with up to 18 digits always fits into
12639|       |        // both std::uint64_t and std::int64_t (18 nines is about 1e18, below
12640|       |        // INT64_MAX, which is about 9.2e18). Longer tokens take the exact path
12641|       |        // below, including the fallback to floating point when the value does
12642|       |        // not fit.
12643|       |        //
12644|       |        // With a narrower number_unsigned_t/number_integer_t (e.g.
12645|       |        // std::uint32_t), the exact path would reclassify some of these tokens
12646|       |        // as (finite) floats, while this check reports integers. That does not
12647|       |        // change the result of accept(): it always parses through
12648|       |        // json_sax_acceptor, whose number callbacks discard their argument and
12649|       |        // return true, and the parser rejects neither integers nor finite
12650|       |        // floats. value_unsigned/value_integer are left unset here, so a caller
12651|       |        // that reads the converted value must not set discard_number_values.
12652|       |        //
12653|       |        // On contiguous input, scan_number_bulk_contiguous() converts integer
12654|       |        // tokens itself and does not pass them to this function, unless
12655|       |        // JSON_DIAGNOSTIC_POSITIONS is enabled. This check is therefore only
12656|       |        // reached for input without bulk access (e.g. streams), with
12657|       |        // JSON_DIAGNOSTIC_POSITIONS, or when scan_number_bulk_contiguous()
12658|       |        // falls back to scan_number().
12659|  28.6k|        if (discard_number_values)
  ------------------
  |  Branch (12659:13): [True: 0, False: 28.6k]
  ------------------
12660|      0|        {
12661|      0|            constexpr std::size_t safe_digit_count = 18;
12662|      0|            if (number_type == token_type::value_unsigned && token_buffer.size() <= safe_digit_count)
  ------------------
  |  Branch (12662:17): [True: 0, False: 0]
  |  Branch (12662:62): [True: 0, False: 0]
  ------------------
12663|      0|            {
12664|      0|                return token_type::value_unsigned;
12665|      0|            }
12666|      0|            if (number_type == token_type::value_integer && token_buffer.size() - 1 <= safe_digit_count)
  ------------------
  |  Branch (12666:17): [True: 0, False: 0]
  |  Branch (12666:61): [True: 0, False: 0]
  ------------------
12667|      0|            {
12668|      0|                return token_type::value_integer;
12669|      0|            }
12670|      0|        }
12671|       |
12672|  28.6k|        const char* const num_begin = token_buffer.data();
12673|  28.6k|        const char* const num_end = num_begin + token_buffer.size();
12674|       |
12675|  28.6k|        if (number_type != token_type::value_float)
  ------------------
  |  Branch (12675:13): [True: 9.53k, False: 19.1k]
  ------------------
12676|  9.53k|        {
12677|  9.53k|            const token_type integer_result = convert_integer(number_type, num_begin, num_end);
12678|  9.53k|            if (integer_result != token_type::uninitialized)
  ------------------
  |  Branch (12678:17): [True: 9.53k, False: 0]
  ------------------
12679|  9.53k|            {
12680|  9.53k|                return integer_result;
12681|  9.53k|            }
12682|  9.53k|        }
12683|       |
12684|       |        // this code is reached if we parse a floating-point number or if an
12685|       |        // integer conversion above overflowed. float and double (and long
12686|       |        // double where it is binary64) are converted by the library itself,
12687|       |        // correctly rounded and independent of the locale; other long double
12688|       |        // formats use std::from_chars when available, otherwise the
12689|       |        // locale-aware strtold.
12690|  19.1k|        if (convert_float_fast(num_begin, num_end, decimal_point_position, mantissa_end, value_float))
  ------------------
  |  Branch (12690:13): [True: 19.1k, False: 0]
  ------------------
12691|  19.1k|        {
12692|  19.1k|            return token_type::value_float;
12693|  19.1k|        }
12694|       |
12695|      0|        convert_float_locale_aware(token_buffer, decimal_point_position, value_float);
12696|      0|        return token_type::value_float;
12697|  19.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18convert_float_fastIdEEbPKcS4_mmRT_:
10689|  19.1k|{
10690|  19.1k|    return convert_float_fast(first, last, decimal_point_position, mantissa_end, value,
10691|  19.1k|                              std::integral_constant<bool, has_native_float_format<FloatType>::value> {});
10692|  19.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail18convert_float_fastIdEEbPKcS4_mmRT_NSt3__117integral_constantIbLb1EEE:
10656|  19.1k|{
10657|  19.1k|    value = parse_float_native<FloatType>(first, last, decimal_point_position, mantissa_end);
10658|  19.1k|    return true;
10659|  19.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail18parse_float_nativeIdEET_PKcS5_mm:
10600|  19.1k|{
10601|  19.1k|    using result_type = native_float_t<FloatType>;
10602|  19.1k|    using format = ieee_binary_format<std::numeric_limits<FloatType>::digits>;
10603|  19.1k|    static_assert(std::numeric_limits<result_type>::digits == std::numeric_limits<FloatType>::digits, "unexpected float format");
10604|       |
10605|  19.1k|    const float_significand s = parse_float_significand(first, last, decimal_point_position, mantissa_end);
10606|  19.1k|    if (JSON_HEDLEY_LIKELY(!s.truncated))
  ------------------
  |  | 1666|  19.1k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 13.3k, False: 5.74k]
  |  |  ------------------
  ------------------
10607|  13.3k|    {
10608|  13.3k|        return decimal_to_float<FloatType>(s);
10609|  13.3k|    }
10610|       |
10611|  5.74k|    std::uint64_t bits = eisel_lemire<format>(s.exponent, s.w);
10612|  5.74k|    if (JSON_HEDLEY_UNLIKELY(bits != eisel_lemire<format>(s.exponent, s.w + 1)))
  ------------------
  |  | 1667|  5.74k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1.65k, False: 4.09k]
  |  |  ------------------
  ------------------
10613|  1.65k|    {
10614|  1.65k|        bits = digit_comparison<format>(first, last, bits);
10615|  1.65k|    }
10616|  5.74k|    result_type value{};
10617|  5.74k|    float_from_bits(bits | (s.negative ? (std::uint64_t{1} << format::sign_bit()) : 0u), value);
  ------------------
  |  Branch (10617:29): [True: 906, False: 4.83k]
  ------------------
10618|  5.74k|    const FloatType result = value;
10619|  5.74k|    return result;
10620|  19.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail23parse_float_significandEPKcS3_mm:
10112|  19.1k|{
10113|  19.1k|    float_significand s;
10114|  19.1k|    const char* p = first;
10115|  19.1k|    s.negative = *p == '-';
10116|  19.1k|    p += s.negative ? 1 : 0;
  ------------------
  |  Branch (10116:10): [True: 2.10k, False: 17.0k]
  ------------------
10117|  19.1k|    const bool has_dot = decimal_point_position != std::string::npos;
10118|  19.1k|    const char* const mantissa_last = first + mantissa_end;
10119|  19.1k|    const char* const integer_last = has_dot ? first + decimal_point_position : mantissa_last;
  ------------------
  |  Branch (10119:38): [True: 7.18k, False: 11.9k]
  ------------------
10120|       |
10121|  19.1k|    std::uint64_t w = 0;
10122|  19.1k|    int remaining = 19; // digits that still fit into w
10123|  19.1k|    if (*p != '0') // the integer part is "0" or [1-9][0-9]*
  ------------------
  |  Branch (10123:9): [True: 15.4k, False: 3.71k]
  ------------------
10124|  15.4k|    {
10125|  26.8k|        while (remaining >= 8 && integer_last - p >= 8)
  ------------------
  |  Branch (10125:16): [True: 21.5k, False: 5.32k]
  |  Branch (10125:34): [True: 11.4k, False: 10.0k]
  ------------------
10126|  11.4k|        {
10127|  11.4k|            w = (w * 100000000u) + parse_eight_digits(read_eight_bytes(p));
10128|  11.4k|            p += 8;
10129|  11.4k|            remaining -= 8;
10130|  11.4k|        }
10131|  45.5k|        for (; remaining > 0 && p != integer_last; ++p, --remaining)
  ------------------
  |  Branch (10131:16): [True: 41.6k, False: 3.88k]
  |  Branch (10131:33): [True: 30.1k, False: 11.5k]
  ------------------
10132|  30.1k|        {
10133|  30.1k|            w = (w * 10u) + static_cast<std::uint64_t>(*p - '0');
10134|  30.1k|        }
10135|  15.4k|        s.exponent = integer_last - p;
10136|  15.4k|        s.truncated = has_nonzero_digit(p, integer_last);
10137|  15.4k|    }
10138|       |
10139|  19.1k|    if (has_dot)
  ------------------
  |  Branch (10139:9): [True: 7.18k, False: 11.9k]
  ------------------
10140|  7.18k|    {
10141|  7.18k|        p = integer_last + 1;
10142|  7.18k|        if (w == 0)
  ------------------
  |  Branch (10142:13): [True: 2.76k, False: 4.41k]
  ------------------
10143|  2.76k|        {
10144|       |            // zeros after the decimal point of "0." are not significant
10145|  2.76k|            const char* const zeros = p;
10146|  7.60k|            while (p != mantissa_last && *p == '0')
  ------------------
  |  Branch (10146:20): [True: 6.19k, False: 1.41k]
  |  Branch (10146:42): [True: 4.83k, False: 1.35k]
  ------------------
10147|  4.83k|            {
10148|  4.83k|                ++p;
10149|  4.83k|            }
10150|  2.76k|            s.exponent -= p - zeros;
10151|  2.76k|        }
10152|  7.18k|        const char* const digits = p;
10153|  10.6k|        while (remaining >= 8 && mantissa_last - p >= 8)
  ------------------
  |  Branch (10153:16): [True: 6.30k, False: 4.33k]
  |  Branch (10153:34): [True: 3.46k, False: 2.84k]
  ------------------
10154|  3.46k|        {
10155|  3.46k|            w = (w * 100000000u) + parse_eight_digits(read_eight_bytes(p));
10156|  3.46k|            p += 8;
10157|  3.46k|            remaining -= 8;
10158|  3.46k|        }
10159|  19.7k|        for (; remaining > 0 && p != mantissa_last; ++p, --remaining)
  ------------------
  |  Branch (10159:16): [True: 16.3k, False: 3.31k]
  |  Branch (10159:33): [True: 12.5k, False: 3.86k]
  ------------------
10160|  12.5k|        {
10161|  12.5k|            w = (w * 10u) + static_cast<std::uint64_t>(*p - '0');
10162|  12.5k|        }
10163|  7.18k|        s.exponent -= p - digits;
10164|  7.18k|        s.truncated = s.truncated || has_nonzero_digit(p, mantissa_last);
  ------------------
  |  Branch (10164:23): [True: 366, False: 6.81k]
  |  Branch (10164:38): [True: 2.41k, False: 4.39k]
  ------------------
10165|  7.18k|    }
10166|       |
10167|  19.1k|    if (mantissa_last != last)
  ------------------
  |  Branch (10167:9): [True: 10.3k, False: 8.73k]
  ------------------
10168|  10.3k|    {
10169|  10.3k|        s.exponent += parse_float_exponent(mantissa_last + 1, last);
10170|  10.3k|    }
10171|  19.1k|    s.w = w;
10172|  19.1k|    return s;
10173|  19.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail18parse_eight_digitsEm:
10052|  14.9k|{
10053|  14.9k|    v = ((v & 0x0F0F0F0F0F0F0F0Fu) * 2561u) >> 8u;
10054|  14.9k|    v = ((v & 0x00FF00FF00FF00FFu) * 6553601u) >> 16u;
10055|  14.9k|    return static_cast<std::uint32_t>(((v & 0x0000FFFF0000FFFFu) * 42949672960001u) >> 32u);
10056|  14.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail17has_nonzero_digitEPKcS3_:
10060|  22.2k|{
10061|  22.2k|    return std::any_of(first, last, [](char c) noexcept
10062|  22.2k|    {
10063|  22.2k|        return c != '0';
10064|  22.2k|    });
10065|  22.2k|}
_ZZN8nlohmann16json_abi_v3_12_06detail17has_nonzero_digitEPKcS3_ENKUlcE_clEc:
10062|  16.1k|    {
10063|  16.1k|        return c != '0';
10064|  16.1k|    });
_ZN8nlohmann16json_abi_v3_12_06detail20parse_float_exponentEPKcS3_:
10070|  10.5k|{
10071|  10.5k|    const bool negative = *first == '-';
10072|  10.5k|    first += (*first == '-' || *first == '+') ? 1 : 0;
  ------------------
  |  Branch (10072:15): [True: 3.59k, False: 6.94k]
  |  Branch (10072:32): [True: 234, False: 6.70k]
  ------------------
10073|  10.5k|    constexpr std::int64_t saturation = 100000000000000000; // 10^17
10074|  10.5k|    std::int64_t value = 0;
10075|  55.5k|    for (; first != last; ++first)
  ------------------
  |  Branch (10075:12): [True: 45.0k, False: 10.5k]
  ------------------
10076|  45.0k|    {
10077|  45.0k|        if (value < saturation)
  ------------------
  |  Branch (10077:13): [True: 41.8k, False: 3.19k]
  ------------------
10078|  41.8k|        {
10079|  41.8k|            value = (value * 10) + (*first - '0');
10080|  41.8k|        }
10081|  45.0k|    }
10082|  10.5k|    return negative ? -value : value;
  ------------------
  |  Branch (10082:12): [True: 3.59k, False: 6.94k]
  ------------------
10083|  10.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail16decimal_to_floatIdEET_RKNS1_17float_significandE:
10547|  13.3k|{
10548|  13.3k|    using result_type = native_float_t<FloatType>;
10549|  13.3k|    using format = ieee_binary_format<std::numeric_limits<FloatType>::digits>;
10550|  13.3k|    JSON_ASSERT(!s.truncated);
  ------------------
  |  | 2591|  13.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10550:5): [True: 13.3k, False: 0]
  ------------------
10551|       |
10552|  13.3k|#if !defined(FLT_EVAL_METHOD) || FLT_EVAL_METHOD == 0
10553|  13.3k|    if (s.exponent >= -format::max_exponent_fast_path() && s.exponent <= format::max_exponent_fast_path()
  ------------------
  |  Branch (10553:9): [True: 10.9k, False: 2.41k]
  |  Branch (10553:60): [True: 7.64k, False: 3.31k]
  ------------------
10554|  7.64k|            && s.w <= format::max_mantissa_fast_path())
  ------------------
  |  Branch (10554:16): [True: 5.84k, False: 1.80k]
  ------------------
10555|  5.84k|    {
10556|  5.84k|        auto value = static_cast<result_type>(s.w);
10557|  5.84k|        if (s.exponent < 0)
  ------------------
  |  Branch (10557:13): [True: 2.86k, False: 2.97k]
  ------------------
10558|  2.86k|        {
10559|  2.86k|            value /= exact_power_of_ten(-s.exponent, result_type{});
10560|  2.86k|        }
10561|  2.97k|        else
10562|  2.97k|        {
10563|  2.97k|            value *= exact_power_of_ten(s.exponent, result_type{});
10564|  2.97k|        }
10565|  5.84k|        const FloatType result = s.negative ? -value : value;
  ------------------
  |  Branch (10565:34): [True: 804, False: 5.04k]
  ------------------
10566|  5.84k|        return result;
10567|  5.84k|    }
10568|  7.53k|#endif
10569|       |
10570|  7.53k|    result_type value{};
10571|  7.53k|    float_from_bits(eisel_lemire<format>(s.exponent, s.w) | (s.negative ? (std::uint64_t{1} << format::sign_bit()) : 0u), value);
  ------------------
  |  Branch (10571:62): [True: 390, False: 7.14k]
  ------------------
10572|  7.53k|    const FloatType result = value;
10573|  7.53k|    return result;
10574|  13.3k|}
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE22max_exponent_fast_pathEv:
10016|  24.3k|    {
10017|  24.3k|        return 22;
10018|  24.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE22max_mantissa_fast_pathEv:
10020|  7.64k|    {
10021|  7.64k|        return std::uint64_t{2} << 52u;
10022|  7.64k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18exact_power_of_tenEld:
10508|  5.84k|{
10509|  5.84k|    static const std::array<double, 23> powers =
10510|  5.84k|    {
10511|  5.84k|        {
10512|  5.84k|            1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11,
10513|  5.84k|            1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22
10514|  5.84k|        }
10515|  5.84k|    };
10516|  5.84k|    return powers[static_cast<std::size_t>(n)];
10517|  5.84k|}
_ZN8nlohmann16json_abi_v3_12_06detail12eisel_lemireINS1_18ieee_binary_formatILi53EEEEEmlm:
10197|  19.0k|{
10198|  19.0k|    constexpr int mantissa_bits = Format::mantissa_bits();
10199|  19.0k|    constexpr std::uint64_t infinity = static_cast<std::uint64_t>(Format::infinite_power()) << mantissa_bits;
10200|  19.0k|    if (w == 0 || q < Format::smallest_power_of_ten())
  ------------------
  |  Branch (10200:9): [True: 684, False: 18.3k]
  |  Branch (10200:19): [True: 1.30k, False: 17.0k]
  ------------------
10201|  1.98k|    {
10202|  1.98k|        return 0;
10203|  1.98k|    }
10204|  17.0k|    if (q > Format::largest_power_of_ten())
  ------------------
  |  Branch (10204:9): [True: 1.19k, False: 15.8k]
  ------------------
10205|  1.19k|    {
10206|  1.19k|        return infinity;
10207|  1.19k|    }
10208|       |
10209|  15.8k|    const int lz = count_leading_zeros(w);
10210|  15.8k|    w <<= static_cast<unsigned>(lz);
10211|  15.8k|    const auto index = static_cast<std::size_t>(2 * (q - pow5_128_smallest_power));
10212|  15.8k|    uint128_parts product = full_multiplication(w, pow5_128()[index]);
10213|  15.8k|    constexpr std::uint64_t precision_mask = 0xFFFFFFFFFFFFFFFFu >> (mantissa_bits + 3);
10214|  15.8k|    if ((product.high & precision_mask) == precision_mask)
  ------------------
  |  Branch (10214:9): [True: 2.19k, False: 13.6k]
  ------------------
10215|  2.19k|    {
10216|       |        // the lower bits may carry into the result: use the next 64 bits of 5^q
10217|  2.19k|        const uint128_parts second = full_multiplication(w, pow5_128()[index + 1]);
10218|  2.19k|        product.low += second.high;
10219|  2.19k|        if (second.high > product.low)
  ------------------
  |  Branch (10219:13): [True: 1.14k, False: 1.05k]
  ------------------
10220|  1.14k|        {
10221|  1.14k|            ++product.high;
10222|  1.14k|        }
10223|  2.19k|    }
10224|       |
10225|  15.8k|    const auto upperbit = static_cast<int>(product.high >> 63u);
10226|  15.8k|    const int shift = upperbit + 64 - mantissa_bits - 3;
10227|  15.8k|    std::uint64_t mantissa = product.high >> static_cast<unsigned>(shift);
10228|       |    // floor(log2(10^q)) + 63 + bias, with log2(10) ~ 217706 / 2^16
10229|  15.8k|    std::int64_t power2 = (((152170 + 65536) * q) >> 16) + 63 + upperbit - lz - Format::minimum_exponent();
10230|       |
10231|  15.8k|    if (power2 <= 0) // subnormal
  ------------------
  |  Branch (10231:9): [True: 1.59k, False: 14.2k]
  ------------------
10232|  1.59k|    {
10233|  1.59k|        if (-power2 + 1 >= 64)
  ------------------
  |  Branch (10233:13): [True: 216, False: 1.38k]
  ------------------
10234|    216|        {
10235|    216|            return 0;
10236|    216|        }
10237|  1.38k|        mantissa >>= static_cast<unsigned>(-power2 + 1);
10238|       |        // no tie is possible here: that needs a small |q|
10239|  1.38k|        mantissa += (mantissa & 1u);
10240|  1.38k|        mantissa >>= 1u;
10241|       |        // rounding up may produce the smallest normal number
10242|  1.38k|        power2 = (mantissa < (std::uint64_t{1} << mantissa_bits)) ? 0 : 1;
  ------------------
  |  Branch (10242:18): [True: 1.38k, False: 0]
  ------------------
10243|  1.38k|        return (mantissa & ((std::uint64_t{1} << mantissa_bits) - 1)) | (static_cast<std::uint64_t>(power2) << mantissa_bits);
10244|  1.59k|    }
10245|       |
10246|       |    // a value exactly between two floats rounds to even; this can only
10247|       |    // happen for small |q|, where 5^q is exact
10248|  14.2k|    if (product.low <= 1 && q >= Format::min_exponent_round_to_even() && q <= Format::max_exponent_round_to_even()
  ------------------
  |  Branch (10248:9): [True: 5.13k, False: 9.10k]
  |  Branch (10248:29): [True: 4.17k, False: 960]
  |  Branch (10248:74): [True: 3.48k, False: 690]
  ------------------
10249|  3.48k|            && (mantissa & 3u) == 1 && (mantissa << static_cast<unsigned>(shift)) == product.high)
  ------------------
  |  Branch (10249:16): [True: 1.54k, False: 1.94k]
  |  Branch (10249:40): [True: 624, False: 918]
  ------------------
10250|    624|    {
10251|    624|        mantissa &= ~std::uint64_t{1};
10252|    624|    }
10253|  14.2k|    mantissa += (mantissa & 1u);
10254|  14.2k|    mantissa >>= 1u;
10255|  14.2k|    if (mantissa >= (std::uint64_t{2} << mantissa_bits))
  ------------------
  |  Branch (10255:9): [True: 492, False: 13.7k]
  ------------------
10256|    492|    {
10257|    492|        mantissa = std::uint64_t{1} << mantissa_bits;
10258|    492|        ++power2;
10259|    492|    }
10260|  14.2k|    mantissa &= ~(std::uint64_t{1} << mantissa_bits);
10261|  14.2k|    if (power2 >= Format::infinite_power())
  ------------------
  |  Branch (10261:9): [True: 144, False: 14.0k]
  ------------------
10262|    144|    {
10263|    144|        return infinity;
10264|    144|    }
10265|  14.0k|    return mantissa | (static_cast<std::uint64_t>(power2) << mantissa_bits);
10266|  14.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE21smallest_power_of_tenEv:
10000|  18.3k|    {
10001|  18.3k|        return -342;
10002|  18.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE20largest_power_of_tenEv:
10004|  17.0k|    {
10005|  17.0k|        return 308;
10006|  17.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE16minimum_exponentEv:
 9992|  17.4k|    {
 9993|  17.4k|        return -1023;
 9994|  17.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE26min_exponent_round_to_evenEv:
10008|  5.13k|    {
10009|  5.13k|        return -4;
10010|  5.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE26max_exponent_round_to_evenEv:
10012|  4.17k|    {
10013|  4.17k|        return 23;
10014|  4.17k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE14infinite_powerEv:
 9996|  14.2k|    {
 9997|  14.2k|        return 0x7FF;
 9998|  14.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail16digit_comparisonINS1_18ieee_binary_formatILi53EEEEEmPKcS6_m:
10391|  1.65k|{
10392|  1.65k|    const char* p = first + ((*first == '-') ? 1 : 0);
  ------------------
  |  Branch (10392:30): [True: 144, False: 1.50k]
  ------------------
10393|       |
10394|       |    // D, in chunks of up to 9 digits, and s
10395|  1.65k|    float_bigint digits(0);
10396|  1.65k|    std::int64_t count = 0;
10397|  1.65k|    std::int64_t point = 0; // the value is 0.D... * 10^point
10398|  1.65k|    bool truncated = false;
10399|  1.65k|    std::uint32_t chunk = 0;
10400|  1.65k|    int chunk_digits = 0;
10401|  1.65k|    static const std::array<std::uint32_t, 10> powers_of_ten = {{1u, 10u, 100u, 1000u, 10000u, 100000u, 1000000u, 10000000u, 100000000u, 1000000000u}};
10402|  1.65k|    const auto append = [&](char c) noexcept
10403|  1.65k|    {
10404|  1.65k|        if (count < Format::max_digits())
10405|  1.65k|        {
10406|  1.65k|            chunk = (chunk * 10u) + static_cast<std::uint32_t>(c - '0');
10407|  1.65k|            ++count;
10408|  1.65k|            if (++chunk_digits == 9)
10409|  1.65k|            {
10410|  1.65k|                digits.multiply_add(powers_of_ten[9], chunk);
10411|  1.65k|                chunk = 0;
10412|  1.65k|                chunk_digits = 0;
10413|  1.65k|            }
10414|  1.65k|        }
10415|  1.65k|        else
10416|  1.65k|        {
10417|  1.65k|            truncated = truncated || c != '0';
10418|  1.65k|        }
10419|  1.65k|    };
10420|  1.65k|    bool significant = false;
10421|  36.3k|    for (; p != last && *p >= '0' && *p <= '9'; ++p)
  ------------------
  |  Branch (10421:12): [True: 35.7k, False: 624]
  |  Branch (10421:25): [True: 34.8k, False: 954]
  |  Branch (10421:38): [True: 34.7k, False: 72]
  ------------------
10422|  34.7k|    {
10423|  34.7k|        significant = significant || *p != '0';
  ------------------
  |  Branch (10423:23): [True: 33.0k, False: 1.65k]
  |  Branch (10423:38): [True: 1.52k, False: 126]
  ------------------
10424|  34.7k|        if (significant)
  ------------------
  |  Branch (10424:13): [True: 34.6k, False: 126]
  ------------------
10425|  34.6k|        {
10426|  34.6k|            append(*p);
10427|  34.6k|            ++point;
10428|  34.6k|        }
10429|  34.7k|    }
10430|  1.65k|    if (p != last && *p == '.')
  ------------------
  |  Branch (10430:9): [True: 1.02k, False: 624]
  |  Branch (10430:22): [True: 954, False: 72]
  ------------------
10431|    954|    {
10432|  23.8k|        for (++p; p != last && *p >= '0' && *p <= '9'; ++p)
  ------------------
  |  Branch (10432:19): [True: 22.9k, False: 870]
  |  Branch (10432:32): [True: 22.9k, False: 0]
  |  Branch (10432:45): [True: 22.8k, False: 84]
  ------------------
10433|  22.8k|        {
10434|  22.8k|            significant = significant || *p != '0';
  ------------------
  |  Branch (10434:27): [True: 22.0k, False: 768]
  |  Branch (10434:42): [True: 126, False: 642]
  ------------------
10435|  22.8k|            if (significant)
  ------------------
  |  Branch (10435:17): [True: 22.2k, False: 642]
  ------------------
10436|  22.2k|            {
10437|  22.2k|                append(*p);
10438|  22.2k|            }
10439|    642|            else
10440|    642|            {
10441|    642|                --point;
10442|    642|            }
10443|  22.8k|        }
10444|    954|    }
10445|  1.65k|    if (chunk_digits != 0)
  ------------------
  |  Branch (10445:9): [True: 1.58k, False: 66]
  ------------------
10446|  1.58k|    {
10447|  1.58k|        digits.multiply_add(powers_of_ten[static_cast<std::size_t>(chunk_digits)], chunk);
10448|  1.58k|    }
10449|  1.65k|    if (p != last)
  ------------------
  |  Branch (10449:9): [True: 156, False: 1.49k]
  ------------------
10450|    156|    {
10451|    156|        point += parse_float_exponent(p + 1, last);
10452|    156|    }
10453|  1.65k|    const std::int64_t s = point - count; // v = D * 10^s
10454|       |
10455|       |    // the midpoint above the lower candidate
10456|  1.65k|    constexpr int mantissa_bits = Format::mantissa_bits();
10457|  1.65k|    const std::uint64_t exponent_field = lower >> mantissa_bits;
10458|  1.65k|    std::uint64_t mantissa = lower & ((std::uint64_t{1} << mantissa_bits) - 1);
10459|  1.65k|    std::int64_t e = 1 + Format::minimum_exponent() - mantissa_bits; // of the smallest subnormal number
10460|  1.65k|    if (exponent_field != 0)
  ------------------
  |  Branch (10460:9): [True: 1.64k, False: 6]
  ------------------
10461|  1.64k|    {
10462|  1.64k|        mantissa |= std::uint64_t{1} << mantissa_bits;
10463|  1.64k|        e += static_cast<std::int64_t>(exponent_field) - 1;
10464|  1.64k|    }
10465|  1.65k|    float_bigint midpoint((2 * mantissa) + 1);
10466|  1.65k|    const std::int64_t midpoint_exponent = e - 1; // m = midpoint * 2^midpoint_exponent
10467|       |
10468|       |    // compare D * 5^s * 2^s with midpoint * 2^midpoint_exponent
10469|  1.65k|    if (s >= 0)
  ------------------
  |  Branch (10469:9): [True: 678, False: 972]
  ------------------
10470|    678|    {
10471|    678|        digits.multiply_power_of_five(s);
10472|    678|    }
10473|    972|    else
10474|    972|    {
10475|    972|        midpoint.multiply_power_of_five(-s);
10476|    972|    }
10477|  1.65k|    const std::int64_t shift = s - midpoint_exponent;
10478|  1.65k|    if (shift >= 0)
  ------------------
  |  Branch (10478:9): [True: 408, False: 1.24k]
  ------------------
10479|    408|    {
10480|    408|        digits.shift_left(shift);
10481|    408|    }
10482|  1.24k|    else
10483|  1.24k|    {
10484|  1.24k|        midpoint.shift_left(-shift);
10485|  1.24k|    }
10486|  1.65k|    const int order = digits.compare(midpoint);
10487|  1.65k|    const bool round_up = order > 0 || (order == 0 && (truncated || (mantissa & 1u) != 0));
  ------------------
  |  Branch (10487:27): [True: 546, False: 1.10k]
  |  Branch (10487:41): [True: 66, False: 1.03k]
  |  Branch (10487:56): [True: 0, False: 66]
  |  Branch (10487:69): [True: 6, False: 60]
  ------------------
10488|  1.65k|    return lower + (round_up ? 1u : 0u);
  ------------------
  |  Branch (10488:21): [True: 552, False: 1.09k]
  ------------------
10489|  1.65k|}
_ZN8nlohmann16json_abi_v3_12_06detail12float_bigintC2Em:
10274|  3.30k|    {
10275|  6.60k|        for (; value != 0; value >>= 32u)
  ------------------
  |  Branch (10275:16): [True: 3.30k, False: 3.30k]
  ------------------
10276|  3.30k|        {
10277|  3.30k|            limbs[count++] = static_cast<std::uint32_t>(value);
10278|  3.30k|        }
10279|  3.30k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail16digit_comparisonINS1_18ieee_binary_formatILi53EEEEEmPKcS6_mENKUlcE_clEc:
10403|  56.8k|    {
10404|  56.8k|        if (count < Format::max_digits())
  ------------------
  |  Branch (10404:13): [True: 56.8k, False: 0]
  ------------------
10405|  56.8k|        {
10406|  56.8k|            chunk = (chunk * 10u) + static_cast<std::uint32_t>(c - '0');
10407|  56.8k|            ++count;
10408|  56.8k|            if (++chunk_digits == 9)
  ------------------
  |  Branch (10408:17): [True: 5.80k, False: 51.0k]
  ------------------
10409|  5.80k|            {
10410|  5.80k|                digits.multiply_add(powers_of_ten[9], chunk);
10411|  5.80k|                chunk = 0;
10412|  5.80k|                chunk_digits = 0;
10413|  5.80k|            }
10414|  56.8k|        }
10415|      0|        else
10416|      0|        {
10417|      0|            truncated = truncated || c != '0';
  ------------------
  |  Branch (10417:25): [True: 0, False: 0]
  |  Branch (10417:38): [True: 0, False: 0]
  ------------------
10418|      0|        }
10419|  56.8k|    };
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE10max_digitsEv:
10024|  56.8k|    {
10025|  56.8k|        return 769;
10026|  56.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12float_bigint12multiply_addEjj:
10283|  11.6k|    {
10284|  11.6k|        std::uint64_t carry = summand;
10285|  71.1k|        for (std::size_t i = 0; i < count; ++i)
  ------------------
  |  Branch (10285:33): [True: 59.5k, False: 11.6k]
  ------------------
10286|  59.5k|        {
10287|  59.5k|            const std::uint64_t product = (static_cast<std::uint64_t>(limbs[i]) * factor) + carry;
10288|  59.5k|            limbs[i] = static_cast<std::uint32_t>(product);
10289|  59.5k|            carry = product >> 32u;
10290|  59.5k|        }
10291|  11.6k|        if (carry != 0)
  ------------------
  |  Branch (10291:13): [True: 9.90k, False: 1.72k]
  ------------------
10292|  9.90k|        {
10293|  9.90k|            JSON_ASSERT(count < limbs.size());
  ------------------
  |  | 2591|  9.90k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10293:13): [True: 9.90k, False: 0]
  ------------------
10294|  9.90k|            limbs[count++] = static_cast<std::uint32_t>(carry);
10295|  9.90k|        }
10296|  11.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12float_bigint22multiply_power_of_fiveEl:
10300|  1.65k|    {
10301|  1.65k|        static const std::array<std::uint32_t, 14> powers =
10302|  1.65k|        {
10303|  1.65k|            {1u, 5u, 25u, 125u, 625u, 3125u, 15625u, 78125u, 390625u, 1953125u, 9765625u, 48828125u, 244140625u, 1220703125u}
10304|  1.65k|        };
10305|  4.23k|        for (; n >= 13; n -= 13)
  ------------------
  |  Branch (10305:16): [True: 2.58k, False: 1.65k]
  ------------------
10306|  2.58k|        {
10307|  2.58k|            multiply_add(powers[13], 0);
10308|  2.58k|        }
10309|  1.65k|        multiply_add(powers[static_cast<std::size_t>(n)], 0);
10310|  1.65k|    }
_ZN8nlohmann16json_abi_v3_12_06detail12float_bigint10shift_leftEl:
10314|  1.65k|    {
10315|  1.65k|        if (count == 0)
  ------------------
  |  Branch (10315:13): [True: 0, False: 1.65k]
  ------------------
10316|      0|        {
10317|      0|            return;
10318|      0|        }
10319|  1.65k|        const auto limb_shift = static_cast<std::size_t>(n / 32);
10320|  1.65k|        const auto bit_shift = static_cast<unsigned>(n % 32);
10321|  1.65k|        JSON_ASSERT(count + limb_shift + 1 <= limbs.size());
  ------------------
  |  | 2591|  1.65k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (10321:9): [True: 1.65k, False: 0]
  ------------------
10322|  1.65k|        if (bit_shift != 0)
  ------------------
  |  Branch (10322:13): [True: 1.51k, False: 132]
  ------------------
10323|  1.51k|        {
10324|  1.51k|            std::uint32_t carry = 0;
10325|  5.86k|            for (std::size_t i = 0; i < count; ++i)
  ------------------
  |  Branch (10325:37): [True: 4.34k, False: 1.51k]
  ------------------
10326|  4.34k|            {
10327|  4.34k|                const std::uint32_t limb = limbs[i];
10328|  4.34k|                limbs[i] = (limb << bit_shift) | carry;
10329|  4.34k|                carry = limb >> (32u - bit_shift);
10330|  4.34k|            }
10331|  1.51k|            if (carry != 0)
  ------------------
  |  Branch (10331:17): [True: 1.09k, False: 426]
  ------------------
10332|  1.09k|            {
10333|  1.09k|                limbs[count++] = carry;
10334|  1.09k|            }
10335|  1.51k|        }
10336|  1.65k|        if (limb_shift != 0)
  ------------------
  |  Branch (10336:13): [True: 474, False: 1.17k]
  ------------------
10337|    474|        {
10338|  2.40k|            for (std::size_t i = count; i-- > 0;)
  ------------------
  |  Branch (10338:41): [True: 1.93k, False: 474]
  ------------------
10339|  1.93k|            {
10340|  1.93k|                limbs[i + limb_shift] = limbs[i];
10341|  1.93k|            }
10342|  3.10k|            for (std::size_t i = 0; i < limb_shift; ++i)
  ------------------
  |  Branch (10342:37): [True: 2.62k, False: 474]
  ------------------
10343|  2.62k|            {
10344|  2.62k|                limbs[i] = 0;
10345|  2.62k|            }
10346|    474|            count += limb_shift;
10347|    474|        }
10348|  1.65k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12float_bigint7compareERKS2_:
10352|  1.65k|    {
10353|  1.65k|        if (count != other.count)
  ------------------
  |  Branch (10353:13): [True: 0, False: 1.65k]
  ------------------
10354|      0|        {
10355|      0|            return count < other.count ? -1 : 1;
  ------------------
  |  Branch (10355:20): [True: 0, False: 0]
  ------------------
10356|      0|        }
10357|  4.89k|        for (std::size_t i = count; i-- > 0;)
  ------------------
  |  Branch (10357:37): [True: 4.83k, False: 66]
  ------------------
10358|  4.83k|        {
10359|  4.83k|            if (limbs[i] != other.limbs[i])
  ------------------
  |  Branch (10359:17): [True: 1.58k, False: 3.24k]
  ------------------
10360|  1.58k|            {
10361|  1.58k|                return limbs[i] < other.limbs[i] ? -1 : 1;
  ------------------
  |  Branch (10361:24): [True: 1.03k, False: 546]
  ------------------
10362|  1.58k|            }
10363|  4.83k|        }
10364|     66|        return 0;
10365|  1.65k|    }
_ZN8nlohmann16json_abi_v3_12_06detail15float_from_bitsEmRd:
10493|  13.2k|{
10494|  13.2k|    static_assert(sizeof(double) == sizeof(std::uint64_t), "double must have 64 bits");
10495|  13.2k|    std::memcpy(&value, &bits, sizeof(value));
10496|  13.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail18ieee_binary_formatILi53EE8sign_bitEv:
 9988|  13.2k|    {
 9989|  13.2k|        return 63;
 9990|  13.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE11scan_numberEv:
12290|  11.3k|    {
12291|       |        // reset token_buffer to store the number's bytes
12292|  11.3k|        reset();
12293|       |
12294|       |        // the type of the parsed number; initially set to unsigned; will be
12295|       |        // changed if minus sign, decimal point, or exponent is read
12296|  11.3k|        token_type number_type = token_type::value_unsigned;
12297|       |
12298|       |        // offset just past the last mantissa byte in token_buffer (i.e. the
12299|       |        // index of 'e'/'E', or the whole token when there is no exponent).
12300|       |        // convert_number() uses it to split the token; npos means
12301|       |        // "not seen an exponent yet" and is resolved at scan_number_done
12302|  11.3k|        std::size_t mantissa_end = std::string::npos;
12303|       |
12304|       |        // state (init): we just found out we need to scan a number
12305|  11.3k|        switch (current)
12306|  11.3k|        {
12307|    462|            case '-':
  ------------------
  |  Branch (12307:13): [True: 462, False: 10.8k]
  ------------------
12308|    462|            {
12309|    462|                add(current);
12310|    462|                goto scan_number_minus;
12311|      0|            }
12312|       |
12313|  1.07k|            case '0':
  ------------------
  |  Branch (12313:13): [True: 1.07k, False: 10.2k]
  ------------------
12314|  1.07k|            {
12315|  1.07k|                add(current);
12316|  1.07k|                goto scan_number_zero;
12317|      0|            }
12318|       |
12319|    960|            case '1':
  ------------------
  |  Branch (12319:13): [True: 960, False: 10.3k]
  ------------------
12320|  2.10k|            case '2':
  ------------------
  |  Branch (12320:13): [True: 1.14k, False: 10.2k]
  ------------------
12321|  5.10k|            case '3':
  ------------------
  |  Branch (12321:13): [True: 3.00k, False: 8.34k]
  ------------------
12322|  5.98k|            case '4':
  ------------------
  |  Branch (12322:13): [True: 882, False: 10.4k]
  ------------------
12323|  6.70k|            case '5':
  ------------------
  |  Branch (12323:13): [True: 720, False: 10.6k]
  ------------------
12324|  7.59k|            case '6':
  ------------------
  |  Branch (12324:13): [True: 888, False: 10.4k]
  ------------------
12325|  8.17k|            case '7':
  ------------------
  |  Branch (12325:13): [True: 582, False: 10.7k]
  ------------------
12326|  9.12k|            case '8':
  ------------------
  |  Branch (12326:13): [True: 948, False: 10.3k]
  ------------------
12327|  9.81k|            case '9':
  ------------------
  |  Branch (12327:13): [True: 684, False: 10.6k]
  ------------------
12328|  9.81k|            {
12329|  9.81k|                add(current);
12330|  9.81k|                goto scan_number_any1;
12331|  9.12k|            }
12332|       |
12333|       |            // all other characters are rejected outside scan_number()
12334|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (12334:13): [True: 0, False: 11.3k]
  ------------------
12335|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (12335:17): [Folded, False: 0]
  ------------------
12336|  11.3k|        }
12337|       |
12338|    462|scan_number_minus:
12339|       |        // state: we just parsed a leading minus sign
12340|    462|        number_type = token_type::value_integer;
12341|    462|        switch (get())
12342|    462|        {
12343|     30|            case '0':
  ------------------
  |  Branch (12343:13): [True: 30, False: 432]
  ------------------
12344|     30|            {
12345|     30|                add(current);
12346|     30|                goto scan_number_zero;
12347|      0|            }
12348|       |
12349|     24|            case '1':
  ------------------
  |  Branch (12349:13): [True: 24, False: 438]
  ------------------
12350|     54|            case '2':
  ------------------
  |  Branch (12350:13): [True: 30, False: 432]
  ------------------
12351|     78|            case '3':
  ------------------
  |  Branch (12351:13): [True: 24, False: 438]
  ------------------
12352|     96|            case '4':
  ------------------
  |  Branch (12352:13): [True: 18, False: 444]
  ------------------
12353|    120|            case '5':
  ------------------
  |  Branch (12353:13): [True: 24, False: 438]
  ------------------
12354|    150|            case '6':
  ------------------
  |  Branch (12354:13): [True: 30, False: 432]
  ------------------
12355|    168|            case '7':
  ------------------
  |  Branch (12355:13): [True: 18, False: 444]
  ------------------
12356|    186|            case '8':
  ------------------
  |  Branch (12356:13): [True: 18, False: 444]
  ------------------
12357|    204|            case '9':
  ------------------
  |  Branch (12357:13): [True: 18, False: 444]
  ------------------
12358|    204|            {
12359|    204|                add(current);
12360|    204|                goto scan_number_any1;
12361|    186|            }
12362|       |
12363|    228|            default:
  ------------------
  |  Branch (12363:13): [True: 228, False: 234]
  ------------------
12364|    228|            {
12365|    228|                error_message = "invalid number; expected digit after '-'";
12366|    228|                return token_type::parse_error;
12367|    186|            }
12368|    462|        }
12369|       |
12370|  1.10k|scan_number_zero:
12371|       |        // state: we just parse a zero (maybe with a leading minus sign)
12372|  1.10k|        switch (get())
12373|  1.10k|        {
12374|    216|            case '.':
  ------------------
  |  Branch (12374:13): [True: 216, False: 888]
  ------------------
12375|    216|            {
12376|    216|                add(current);
12377|    216|                decimal_point_position = token_buffer.size() - 1;
12378|    216|                goto scan_number_decimal1;
12379|      0|            }
12380|       |
12381|     60|            case 'e':
  ------------------
  |  Branch (12381:13): [True: 60, False: 1.04k]
  ------------------
12382|    108|            case 'E':
  ------------------
  |  Branch (12382:13): [True: 48, False: 1.05k]
  ------------------
12383|    108|            {
12384|    108|                add(current);
12385|    108|                goto scan_number_exponent;
12386|     60|            }
12387|       |
12388|    780|            default:
  ------------------
  |  Branch (12388:13): [True: 780, False: 324]
  ------------------
12389|    780|                goto scan_number_done;
12390|  1.10k|        }
12391|       |
12392|  22.5k|scan_number_any1:
12393|       |        // state: we just parsed a number 0-9 (maybe with a leading minus sign)
12394|  22.5k|        switch (get())
12395|  22.5k|        {
12396|  2.97k|            case '0':
  ------------------
  |  Branch (12396:13): [True: 2.97k, False: 19.5k]
  ------------------
12397|  4.17k|            case '1':
  ------------------
  |  Branch (12397:13): [True: 1.20k, False: 21.3k]
  ------------------
12398|  4.93k|            case '2':
  ------------------
  |  Branch (12398:13): [True: 762, False: 21.7k]
  ------------------
12399|  5.83k|            case '3':
  ------------------
  |  Branch (12399:13): [True: 900, False: 21.6k]
  ------------------
12400|  6.46k|            case '4':
  ------------------
  |  Branch (12400:13): [True: 630, False: 21.9k]
  ------------------
12401|  7.09k|            case '5':
  ------------------
  |  Branch (12401:13): [True: 624, False: 21.9k]
  ------------------
12402|  8.29k|            case '6':
  ------------------
  |  Branch (12402:13): [True: 1.20k, False: 21.3k]
  ------------------
12403|  9.60k|            case '7':
  ------------------
  |  Branch (12403:13): [True: 1.30k, False: 21.2k]
  ------------------
12404|  10.6k|            case '8':
  ------------------
  |  Branch (12404:13): [True: 1.02k, False: 21.5k]
  ------------------
12405|  12.5k|            case '9':
  ------------------
  |  Branch (12405:13): [True: 1.89k, False: 20.6k]
  ------------------
12406|  12.5k|            {
12407|  12.5k|                add(current);
12408|  12.5k|                goto scan_number_any1;
12409|  10.6k|            }
12410|       |
12411|    606|            case '.':
  ------------------
  |  Branch (12411:13): [True: 606, False: 21.9k]
  ------------------
12412|    606|            {
12413|    606|                add(current);
12414|    606|                decimal_point_position = token_buffer.size() - 1;
12415|    606|                goto scan_number_decimal1;
12416|  10.6k|            }
12417|       |
12418|    462|            case 'e':
  ------------------
  |  Branch (12418:13): [True: 462, False: 22.0k]
  ------------------
12419|    654|            case 'E':
  ------------------
  |  Branch (12419:13): [True: 192, False: 22.3k]
  ------------------
12420|    654|            {
12421|    654|                add(current);
12422|    654|                goto scan_number_exponent;
12423|    462|            }
12424|       |
12425|  8.75k|            default:
  ------------------
  |  Branch (12425:13): [True: 8.75k, False: 13.7k]
  ------------------
12426|  8.75k|                goto scan_number_done;
12427|  22.5k|        }
12428|       |
12429|    822|scan_number_decimal1:
12430|       |        // state: we just parsed a decimal point
12431|    822|        number_type = token_type::value_float;
12432|    822|        switch (get())
12433|    822|        {
12434|    114|            case '0':
  ------------------
  |  Branch (12434:13): [True: 114, False: 708]
  ------------------
12435|    144|            case '1':
  ------------------
  |  Branch (12435:13): [True: 30, False: 792]
  ------------------
12436|    198|            case '2':
  ------------------
  |  Branch (12436:13): [True: 54, False: 768]
  ------------------
12437|    228|            case '3':
  ------------------
  |  Branch (12437:13): [True: 30, False: 792]
  ------------------
12438|    270|            case '4':
  ------------------
  |  Branch (12438:13): [True: 42, False: 780]
  ------------------
12439|    306|            case '5':
  ------------------
  |  Branch (12439:13): [True: 36, False: 786]
  ------------------
12440|    330|            case '6':
  ------------------
  |  Branch (12440:13): [True: 24, False: 798]
  ------------------
12441|    366|            case '7':
  ------------------
  |  Branch (12441:13): [True: 36, False: 786]
  ------------------
12442|    378|            case '8':
  ------------------
  |  Branch (12442:13): [True: 12, False: 810]
  ------------------
12443|    414|            case '9':
  ------------------
  |  Branch (12443:13): [True: 36, False: 786]
  ------------------
12444|    414|            {
12445|    414|                add(current);
12446|    414|                goto scan_number_decimal2;
12447|    378|            }
12448|       |
12449|    408|            default:
  ------------------
  |  Branch (12449:13): [True: 408, False: 414]
  ------------------
12450|    408|            {
12451|    408|                error_message = "invalid number; expected digit after '.'";
12452|    408|                return token_type::parse_error;
12453|    378|            }
12454|    822|        }
12455|       |
12456|  7.87k|scan_number_decimal2:
12457|       |        // we just parsed at least one number after a decimal point
12458|  7.87k|        switch (get())
12459|  7.87k|        {
12460|  1.21k|            case '0':
  ------------------
  |  Branch (12460:13): [True: 1.21k, False: 6.66k]
  ------------------
12461|  1.60k|            case '1':
  ------------------
  |  Branch (12461:13): [True: 390, False: 7.48k]
  ------------------
12462|  2.19k|            case '2':
  ------------------
  |  Branch (12462:13): [True: 588, False: 7.29k]
  ------------------
12463|  2.86k|            case '3':
  ------------------
  |  Branch (12463:13): [True: 678, False: 7.20k]
  ------------------
12464|  3.75k|            case '4':
  ------------------
  |  Branch (12464:13): [True: 882, False: 6.99k]
  ------------------
12465|  4.60k|            case '5':
  ------------------
  |  Branch (12465:13): [True: 852, False: 7.02k]
  ------------------
12466|  5.55k|            case '6':
  ------------------
  |  Branch (12466:13): [True: 948, False: 6.93k]
  ------------------
12467|  6.47k|            case '7':
  ------------------
  |  Branch (12467:13): [True: 924, False: 6.95k]
  ------------------
12468|  6.90k|            case '8':
  ------------------
  |  Branch (12468:13): [True: 426, False: 7.45k]
  ------------------
12469|  7.46k|            case '9':
  ------------------
  |  Branch (12469:13): [True: 564, False: 7.31k]
  ------------------
12470|  7.46k|            {
12471|  7.46k|                add(current);
12472|  7.46k|                goto scan_number_decimal2;
12473|  6.90k|            }
12474|       |
12475|    240|            case 'e':
  ------------------
  |  Branch (12475:13): [True: 240, False: 7.63k]
  ------------------
12476|    414|            case 'E':
  ------------------
  |  Branch (12476:13): [True: 174, False: 7.70k]
  ------------------
12477|    414|            {
12478|    414|                add(current);
12479|    414|                goto scan_number_exponent;
12480|    240|            }
12481|       |
12482|      0|            default:
  ------------------
  |  Branch (12482:13): [True: 0, False: 7.87k]
  ------------------
12483|      0|                goto scan_number_done;
12484|  7.87k|        }
12485|       |
12486|  1.17k|scan_number_exponent:
12487|       |        // we just parsed an exponent
12488|  1.17k|        number_type = token_type::value_float;
12489|       |        // this label is reached only right after the 'e'/'E' was appended (from
12490|       |        // the zero, any1, and decimal2 states), so the mantissa ends before it
12491|  1.17k|        mantissa_end = token_buffer.size() - 1;
12492|  1.17k|        switch (get())
12493|  1.17k|        {
12494|     42|            case '+':
  ------------------
  |  Branch (12494:13): [True: 42, False: 1.13k]
  ------------------
12495|    132|            case '-':
  ------------------
  |  Branch (12495:13): [True: 90, False: 1.08k]
  ------------------
12496|    132|            {
12497|    132|                add(current);
12498|    132|                goto scan_number_sign;
12499|     42|            }
12500|       |
12501|      0|            case '0':
  ------------------
  |  Branch (12501:13): [True: 0, False: 1.17k]
  ------------------
12502|      0|            case '1':
  ------------------
  |  Branch (12502:13): [True: 0, False: 1.17k]
  ------------------
12503|      0|            case '2':
  ------------------
  |  Branch (12503:13): [True: 0, False: 1.17k]
  ------------------
12504|      0|            case '3':
  ------------------
  |  Branch (12504:13): [True: 0, False: 1.17k]
  ------------------
12505|      0|            case '4':
  ------------------
  |  Branch (12505:13): [True: 0, False: 1.17k]
  ------------------
12506|      0|            case '5':
  ------------------
  |  Branch (12506:13): [True: 0, False: 1.17k]
  ------------------
12507|      0|            case '6':
  ------------------
  |  Branch (12507:13): [True: 0, False: 1.17k]
  ------------------
12508|      0|            case '7':
  ------------------
  |  Branch (12508:13): [True: 0, False: 1.17k]
  ------------------
12509|      0|            case '8':
  ------------------
  |  Branch (12509:13): [True: 0, False: 1.17k]
  ------------------
12510|      0|            case '9':
  ------------------
  |  Branch (12510:13): [True: 0, False: 1.17k]
  ------------------
12511|      0|            {
12512|      0|                add(current);
12513|      0|                goto scan_number_any2;
12514|      0|            }
12515|       |
12516|  1.04k|            default:
  ------------------
  |  Branch (12516:13): [True: 1.04k, False: 132]
  ------------------
12517|  1.04k|            {
12518|  1.04k|                error_message =
12519|  1.04k|                    "invalid number; expected '+', '-', or digit after exponent";
12520|  1.04k|                return token_type::parse_error;
12521|      0|            }
12522|  1.17k|        }
12523|       |
12524|    132|scan_number_sign:
12525|       |        // we just parsed an exponent sign
12526|    132|        switch (get())
12527|    132|        {
12528|      0|            case '0':
  ------------------
  |  Branch (12528:13): [True: 0, False: 132]
  ------------------
12529|      0|            case '1':
  ------------------
  |  Branch (12529:13): [True: 0, False: 132]
  ------------------
12530|      0|            case '2':
  ------------------
  |  Branch (12530:13): [True: 0, False: 132]
  ------------------
12531|      0|            case '3':
  ------------------
  |  Branch (12531:13): [True: 0, False: 132]
  ------------------
12532|      0|            case '4':
  ------------------
  |  Branch (12532:13): [True: 0, False: 132]
  ------------------
12533|      0|            case '5':
  ------------------
  |  Branch (12533:13): [True: 0, False: 132]
  ------------------
12534|      0|            case '6':
  ------------------
  |  Branch (12534:13): [True: 0, False: 132]
  ------------------
12535|      0|            case '7':
  ------------------
  |  Branch (12535:13): [True: 0, False: 132]
  ------------------
12536|      0|            case '8':
  ------------------
  |  Branch (12536:13): [True: 0, False: 132]
  ------------------
12537|      0|            case '9':
  ------------------
  |  Branch (12537:13): [True: 0, False: 132]
  ------------------
12538|      0|            {
12539|      0|                add(current);
12540|      0|                goto scan_number_any2;
12541|      0|            }
12542|       |
12543|    132|            default:
  ------------------
  |  Branch (12543:13): [True: 132, False: 0]
  ------------------
12544|    132|            {
12545|    132|                error_message = "invalid number; expected digit after exponent sign";
12546|    132|                return token_type::parse_error;
12547|      0|            }
12548|    132|        }
12549|       |
12550|      0|scan_number_any2:
12551|       |        // we just parsed a number after the exponent or exponent sign
12552|      0|        switch (get())
12553|      0|        {
12554|      0|            case '0':
  ------------------
  |  Branch (12554:13): [True: 0, False: 0]
  ------------------
12555|      0|            case '1':
  ------------------
  |  Branch (12555:13): [True: 0, False: 0]
  ------------------
12556|      0|            case '2':
  ------------------
  |  Branch (12556:13): [True: 0, False: 0]
  ------------------
12557|      0|            case '3':
  ------------------
  |  Branch (12557:13): [True: 0, False: 0]
  ------------------
12558|      0|            case '4':
  ------------------
  |  Branch (12558:13): [True: 0, False: 0]
  ------------------
12559|      0|            case '5':
  ------------------
  |  Branch (12559:13): [True: 0, False: 0]
  ------------------
12560|      0|            case '6':
  ------------------
  |  Branch (12560:13): [True: 0, False: 0]
  ------------------
12561|      0|            case '7':
  ------------------
  |  Branch (12561:13): [True: 0, False: 0]
  ------------------
12562|      0|            case '8':
  ------------------
  |  Branch (12562:13): [True: 0, False: 0]
  ------------------
12563|      0|            case '9':
  ------------------
  |  Branch (12563:13): [True: 0, False: 0]
  ------------------
12564|      0|            {
12565|      0|                add(current);
12566|      0|                goto scan_number_any2;
12567|      0|            }
12568|       |
12569|      0|            default:
  ------------------
  |  Branch (12569:13): [True: 0, False: 0]
  ------------------
12570|      0|                goto scan_number_done;
12571|      0|        }
12572|       |
12573|  9.53k|scan_number_done:
12574|       |        // unget the character after the number (we only read it to know that
12575|       |        // we are done scanning a number)
12576|  9.53k|        unget();
12577|       |
12578|       |        // no exponent was scanned: the mantissa spans the whole token
12579|  9.53k|        if (mantissa_end == std::string::npos)
  ------------------
  |  Branch (12579:13): [True: 9.53k, False: 0]
  ------------------
12580|  9.53k|        {
12581|  9.53k|            mantissa_end = token_buffer.size();
12582|  9.53k|        }
12583|       |
12584|  9.53k|        return convert_number(number_type, mantissa_end);
12585|      0|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE16get_token_stringEv:
13232|  48.5k|    {
13233|  48.5k|        std::vector<char_type> reconstructed;
13234|  48.5k|        const std::vector<char_type>& chars = collect_token_chars(reconstructed, std::integral_constant<bool, lazy_token_string> {});
13235|       |
13236|       |        // escape control characters
13237|  48.5k|        std::string result;
13238|  48.5k|        for (const auto c : chars)
  ------------------
  |  Branch (13238:27): [True: 537k, False: 48.5k]
  ------------------
13239|   537k|        {
13240|   537k|            if (static_cast<unsigned char>(c) <= '\x1F')
  ------------------
  |  Branch (13240:17): [True: 12.7k, False: 524k]
  ------------------
13241|  12.7k|            {
13242|       |                // escape control characters
13243|  12.7k|                std::array<char, 9> cs{{}};
13244|  12.7k|                static_cast<void>((std::snprintf)(cs.data(), cs.size(), "<U+%.4X>", static_cast<unsigned char>(c))); // NOLINT(cppcoreguidelines-pro-type-vararg,hicpp-vararg)
13245|  12.7k|                result += cs.data();
13246|  12.7k|            }
13247|   524k|            else
13248|   524k|            {
13249|       |                // add character as is
13250|   524k|                result.push_back(static_cast<std::string::value_type>(c));
13251|   524k|            }
13252|   537k|        }
13253|       |
13254|  48.5k|        return result;
13255|  48.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE19collect_token_charsERNS6_IcSB_EENS4_17integral_constantIbLb1EEE:
13209|  48.5k|    {
13210|       |        // a pending unget of a real (non-EOF) character means that character
13211|       |        // was consumed from the input but is not part of the token; EOF is
13212|       |        // never consumed, so it must not be subtracted (mirrors unget())
13213|  48.5k|        const bool pending_real_unget = next_unget && current != char_traits<char_type>::eof();
  ------------------
  |  Branch (13213:41): [True: 9.53k, False: 39.0k]
  |  Branch (13213:55): [True: 0, False: 9.53k]
  ------------------
13214|  48.5k|        const std::size_t stop = ia.get_consumed_count() - (pending_real_unget ? 1u : 0u);
  ------------------
  |  Branch (13214:61): [True: 0, False: 48.5k]
  ------------------
13215|  48.5k|        if (JSON_HEDLEY_LIKELY(stop >= token_string_start))
  ------------------
  |  | 1666|  48.5k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 48.5k, False: 0]
  |  |  ------------------
  ------------------
13216|  48.5k|        {
13217|  48.5k|            ia.copy_consumed_range(token_string_start, stop, out);
13218|  48.5k|        }
13219|  48.5k|        return out;
13220|  48.5k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKcS4_E19copy_consumed_rangeINSt3__16vectorIcNS7_9allocatorIcEEEEEEvmmRT_:
 8632|  48.5k|    {
 8633|  48.5k|        const auto from = std::next(begin, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(first_index));
 8634|  48.5k|        const auto to = std::next(begin, static_cast<typename std::iterator_traits<IteratorType>::difference_type>(last_index));
 8635|  48.5k|        out.insert(out.end(), from, to);
 8636|  48.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA22_KcS9_EEET_DpOT0_:
 5318|  10.4k|{
 5319|  10.4k|    OutStringType str;
 5320|  10.4k|    str.reserve(concat_length(args...));
 5321|  10.4k|    concat_into(str, std::forward<Args>(args)...);
 5322|  10.4k|    return str;
 5323|  10.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA22_KcJS9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSE_OSF_DpOT1_:
 5281|  10.4k|{
 5282|  10.4k|    out.append(std::forward<Arg>(arg));
 5283|  10.4k|    concat_into(out, std::forward<Args>(rest)...);
 5284|  10.4k|}
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE18get_number_integerEv:
13092|  1.46k|    {
13093|  1.46k|        return value_integer;
13094|  1.46k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE19get_number_unsignedEv:
13098|  11.4k|    {
13099|  11.4k|        return value_unsigned;
13100|  11.4k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEE16get_number_floatEv:
13104|  14.7k|    {
13105|  14.7k|        return value_float;
13106|  14.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRA26_KcRKS9_cEEET_DpOT0_:
 5318|    312|{
 5319|    312|    OutStringType str;
 5320|    312|    str.reserve(concat_length(args...));
 5321|    312|    concat_into(str, std::forward<Args>(args)...);
 5322|    312|    return str;
 5323|    312|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcEEEmPKcDpRKT_:
 5222|    312|{
 5223|    312|    return ::strlen(cstr) + concat_length(rest...);
 5224|    312|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJcEEEmRKT_DpRKT0_:
 5228|    312|{
 5229|    312|    return str.size() + concat_length(rest...);
 5230|    312|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthIJEEEmcDpRKT_:
 5216|    312|{
 5217|    312|    return 1 + concat_length(rest...);
 5218|    312|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERA26_KcJRKS9_cETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSG_OSH_DpOT1_:
 5281|    312|{
 5282|    312|    out.append(std::forward<Arg>(arg));
 5283|    312|    concat_into(out, std::forward<Args>(rest)...);
 5284|    312|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JcETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSD_OSE_DpOT1_:
 5281|    312|{
 5282|    312|    out.append(std::forward<Arg>(arg));
 5283|    312|    concat_into(out, std::forward<Args>(rest)...);
 5284|    312|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEcJETnNS3_9enable_ifIXaantsr24detect_string_can_appendIT_T0_EE5valuesr27detect_string_can_append_opISB_SC_EE5valueEiE4typeELi0EEEvRSB_OSC_DpOT1_:
 5290|    312|{
 5291|    312|    out += std::forward<Arg>(arg);
 5292|    312|    concat_into(out, std::forward<Args>(rest)...);
 5293|    312|}
_ZN8nlohmann16json_abi_v3_12_06detail5lexerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKcSJ_EEED2Ev:
11414|  38.1k|    ~lexer() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE16get_ubjson_arrayEv:
17908|   379k|    {
17909|   379k|        std::pair<std::size_t, char_int_type> size_and_type;
17910|   379k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1667|   379k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 510, False: 379k]
  |  |  ------------------
  ------------------
17911|    510|        {
17912|    510|            return false;
17913|    510|        }
17914|       |
17915|       |        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
17916|       |        // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
17917|       |
17918|   379k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (17918:13): [True: 378k, False: 1.02k]
  |  Branch (17918:55): [True: 148k, False: 229k]
  |  Branch (17918:86): [True: 14.5k, False: 134k]
  ------------------
17919|  14.5k|        {
17920|  14.5k|            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
17921|       |
17922|       |            // the "_ArrayType_" and "_ArraySize_" annotation keys were already emitted by
17923|       |            // get_ubjson_size_value() (the type marker is known before the dimension vector
17924|       |            // that determines size_and_type.first is read, so it is emitted first there to
17925|       |            // match the documented _ArrayType_, _ArraySize_, _ArrayData_ key order)
17926|  14.5k|            if (size_and_type.second == 'C' || size_and_type.second == 'B')
  ------------------
  |  Branch (17926:17): [True: 1.76k, False: 12.8k]
  |  Branch (17926:48): [True: 1.13k, False: 11.6k]
  ------------------
17927|  2.89k|            {
17928|  2.89k|                size_and_type.second = 'U';
17929|  2.89k|            }
17930|       |
17931|  14.5k|            string_t key = "_ArrayData_";
17932|  14.5k|            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
  ------------------
  |  | 1667|  29.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1, False: 14.5k]
  |  |  |  Branch (1667:94): [True: 0, False: 14.5k]
  |  |  |  Branch (1667:94): [True: 3, False: 14.5k]
  |  |  ------------------
  ------------------
17933|      1|            {
17934|      1|                return false;
17935|      1|            }
17936|       |
17937|  57.1k|            for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17937:37): [True: 42.6k, False: 14.4k]
  ------------------
17938|  42.6k|            {
17939|  42.6k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
  ------------------
  |  | 1667|  42.6k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 88, False: 42.5k]
  |  |  ------------------
  ------------------
17940|     88|                {
17941|     88|                    return false;
17942|     88|                }
17943|  42.6k|            }
17944|       |
17945|  14.4k|            return (sax->end_array() && sax->end_object());
  ------------------
  |  Branch (17945:21): [True: 14.3k, False: 178]
  |  Branch (17945:41): [True: 14.3k, False: 0]
  ------------------
17946|  14.5k|        }
17947|       |
17948|       |        // If BJData type marker is 'B' decode as binary
17949|   364k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && size_and_type.second == 'B')
  ------------------
  |  Branch (17949:13): [True: 363k, False: 1.02k]
  |  Branch (17949:55): [True: 134k, False: 229k]
  |  Branch (17949:86): [True: 5.61k, False: 128k]
  ------------------
17950|  5.61k|        {
17951|  5.61k|            binary_t result;
17952|  5.61k|            return get_binary(size_and_type.first, result) && sax->binary(result);
  ------------------
  |  Branch (17952:20): [True: 5.26k, False: 351]
  |  Branch (17952:63): [True: 5.26k, False: 0]
  ------------------
17953|  5.61k|        }
17954|       |
17955|   359k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (17955:13): [True: 128k, False: 230k]
  ------------------
17956|   128k|        {
17957|       |            // reading an element of a valueless type consumes no input, so the
17958|       |            // declared count alone decides how much is allocated; the check is
17959|       |            // made before the start event so that no container is opened that
17960|       |            // is then abandoned. See @ref max_valueless_container_size.
17961|   128k|            if (JSON_HEDLEY_UNLIKELY((size_and_type.second == 'Z' || size_and_type.second == 'T' || size_and_type.second == 'F')
  ------------------
  |  | 1667|   642k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 128k]
  |  |  |  Branch (1667:94): [True: 0, False: 128k]
  |  |  |  Branch (1667:94): [True: 0, False: 128k]
  |  |  |  Branch (1667:94): [True: 0, False: 128k]
  |  |  |  Branch (1667:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
17962|   128k|                                     && size_and_type.first > max_valueless_container_size))
17963|      0|            {
17964|      0|                return out_of_range_error(exception_id::container_too_large, "excessive array size", "size");
17965|      0|            }
17966|       |
17967|   128k|            if (JSON_HEDLEY_UNLIKELY(!enter_array(size_and_type.first, size_and_type.second)))
  ------------------
  |  | 1667|   128k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 127, False: 128k]
  |  |  ------------------
  ------------------
17968|    127|            {
17969|    127|                return false;
17970|    127|            }
17971|       |
17972|   128k|            if (size_and_type.second == 'N')
  ------------------
  |  Branch (17972:17): [True: 0, False: 128k]
  ------------------
17973|      0|            {
17974|       |                // a no-op is not a value, so a container of them holds none;
17975|       |                // the declared size has already been passed to the SAX parser
17976|      0|                container_stack.back().remaining = 0;
17977|      0|            }
17978|       |
17979|   128k|            return true;
17980|   128k|        }
17981|       |
17982|   230k|        return enter_array(detail::unknown_size());
17983|   359k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE17get_ubjson_objectEv:
17989|  51.0k|    {
17990|  51.0k|        std::pair<std::size_t, char_int_type> size_and_type;
17991|  51.0k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1667|  51.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 99, False: 50.9k]
  |  |  ------------------
  ------------------
17992|     99|        {
17993|     99|            return false;
17994|     99|        }
17995|       |
17996|       |        // do not accept ND-array size in objects in BJData
17997|  50.9k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (17997:13): [True: 50.8k, False: 198]
  |  Branch (17997:55): [True: 18.0k, False: 32.7k]
  |  Branch (17997:86): [True: 12, False: 18.0k]
  ------------------
17998|     12|        {
17999|     12|            return last_byte_error(exception_id::unexpected_byte, "BJData object does not support ND-array size in optimized format", "object");
18000|     12|        }
18001|       |
18002|  50.9k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (18002:13): [True: 18.0k, False: 32.9k]
  ------------------
18003|  18.0k|        {
18004|  18.0k|            return enter_object(size_and_type.first, size_and_type.second);
18005|  18.0k|        }
18006|       |
18007|  32.9k|        return enter_object(detail::unknown_size());
18008|  50.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE17get_ubjson_stringERSC_bPKc:
17311|   149k|    {
17312|   149k|        if (get_char)
  ------------------
  |  Branch (17312:13): [True: 82.4k, False: 66.8k]
  ------------------
17313|  82.4k|        {
17314|       |            // no get_ignore_noop() here: the byte read next must be a string
17315|       |            // length type specification, and a no-op ('N') is not valid in
17316|       |            // that position. No-ops at positions where a value may appear are
17317|       |            // already consumed by the callers via get_ignore_noop().
17318|  82.4k|            get();
17319|  82.4k|        }
17320|       |
17321|   149k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1667|   149k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 118, False: 149k]
  |  |  ------------------
  ------------------
17322|    118|        {
17323|    118|            return false;
17324|    118|        }
17325|       |
17326|   149k|        switch (current)
17327|   149k|        {
17328|  38.9k|            case 'U':
  ------------------
  |  Branch (17328:13): [True: 38.9k, False: 110k]
  ------------------
17329|  38.9k|            {
17330|  38.9k|                std::uint8_t len{};
17331|  38.9k|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17331:24): [True: 38.8k, False: 12]
  |  Branch (17331:43): [True: 38.7k, False: 102]
  |  Branch (17331:70): [True: 38.7k, False: 0]
  ------------------
17332|      0|            }
17333|       |
17334|   103k|            case 'i':
  ------------------
  |  Branch (17334:13): [True: 103k, False: 46.0k]
  ------------------
17335|   103k|            {
17336|   103k|                std::int8_t len{};
17337|   103k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17337:24): [True: 103k, False: 3]
  |  Branch (17337:43): [True: 103k, False: 18]
  |  Branch (17337:78): [True: 103k, False: 81]
  |  Branch (17337:105): [True: 103k, False: 0]
  ------------------
17338|      0|            }
17339|       |
17340|  1.37k|            case 'I':
  ------------------
  |  Branch (17340:13): [True: 1.37k, False: 147k]
  ------------------
17341|  1.37k|            {
17342|  1.37k|                std::int16_t len{};
17343|  1.37k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17343:24): [True: 1.36k, False: 6]
  |  Branch (17343:43): [True: 1.35k, False: 9]
  |  Branch (17343:78): [True: 1.22k, False: 135]
  |  Branch (17343:105): [True: 1.22k, False: 0]
  ------------------
17344|      0|            }
17345|       |
17346|    987|            case 'l':
  ------------------
  |  Branch (17346:13): [True: 987, False: 148k]
  ------------------
17347|    987|            {
17348|    987|                std::int32_t len{};
17349|    987|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17349:24): [True: 972, False: 15]
  |  Branch (17349:43): [True: 879, False: 93]
  |  Branch (17349:78): [True: 693, False: 186]
  |  Branch (17349:105): [True: 693, False: 0]
  ------------------
17350|      0|            }
17351|       |
17352|  1.11k|            case 'L':
  ------------------
  |  Branch (17352:13): [True: 1.11k, False: 148k]
  ------------------
17353|  1.11k|            {
17354|  1.11k|                std::int64_t len{};
17355|  1.11k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17355:24): [True: 1.08k, False: 30]
  |  Branch (17355:43): [True: 888, False: 192]
  |  Branch (17355:78): [True: 597, False: 291]
  |  Branch (17355:105): [True: 597, False: 0]
  ------------------
17356|      0|            }
17357|       |
17358|  1.32k|            case 'u':
  ------------------
  |  Branch (17358:13): [True: 1.32k, False: 147k]
  ------------------
17359|  1.32k|            {
17360|  1.32k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17360:21): [True: 0, False: 1.32k]
  ------------------
17361|      0|                {
17362|      0|                    break;
17363|      0|                }
17364|  1.32k|                std::uint16_t len{};
17365|  1.32k|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17365:24): [True: 1.31k, False: 9]
  |  Branch (17365:43): [True: 1.16k, False: 156]
  |  Branch (17365:70): [True: 1.16k, False: 0]
  ------------------
17366|  1.32k|            }
17367|       |
17368|    858|            case 'm':
  ------------------
  |  Branch (17368:13): [True: 858, False: 148k]
  ------------------
17369|    858|            {
17370|    858|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17370:21): [True: 0, False: 858]
  ------------------
17371|      0|                {
17372|      0|                    break;
17373|      0|                }
17374|    858|                std::uint32_t len{};
17375|    858|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17375:24): [True: 843, False: 15]
  |  Branch (17375:43): [True: 606, False: 237]
  |  Branch (17375:70): [True: 606, False: 0]
  ------------------
17376|    858|            }
17377|       |
17378|    948|            case 'M':
  ------------------
  |  Branch (17378:13): [True: 948, False: 148k]
  ------------------
17379|    948|            {
17380|    948|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17380:21): [True: 0, False: 948]
  ------------------
17381|      0|                {
17382|      0|                    break;
17383|      0|                }
17384|    948|                std::uint64_t len{};
17385|    948|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17385:24): [True: 924, False: 24]
  |  Branch (17385:43): [True: 534, False: 390]
  |  Branch (17385:70): [True: 534, False: 0]
  ------------------
17386|    948|            }
17387|       |
17388|    288|            default:
  ------------------
  |  Branch (17388:13): [True: 288, False: 148k]
  ------------------
17389|    288|                break;
17390|   149k|        }
17391|    288|        return length_type_error("", "string");
17392|   149k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE26check_ubjson_string_lengthIaEEbT_:
17288|   103k|    {
17289|   103k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|   103k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 18, False: 103k]
  |  |  ------------------
  ------------------
17290|     18|        {
17291|     18|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|     18|        }
17293|   103k|        return true;
17294|   103k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_stringIaEEbT_RSC_:
18910|   103k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|   103k|        return get_bytes(len, "string", result);
18921|   103k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesIaSC_EEbT_PKcRT0_:
18998|   103k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|   103k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|   195k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 92.8k, False: 103k]
  ------------------
19003|  92.8k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  92.8k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 92.8k, False: 0]
  ------------------
19007|  92.8k|                                       ? static_cast<std::size_t>(len)
19008|  92.8k|                                       : chunk_size;
19009|  92.8k|            const std::size_t old_size = result.size();
19010|  92.8k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  92.8k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  92.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 92.8k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  92.8k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  92.8k|            chars_read += bytes_read;
19018|  92.8k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  92.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 81, False: 92.7k]
  |  |  ------------------
  ------------------
19019|     81|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     81|                result.resize(old_size + bytes_read);
19024|     81|                ++chars_read;
19025|     81|                current = char_traits<char_type>::eof();
19026|     81|                return unexpect_eof(context);
19027|     81|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  92.7k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  92.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 92.7k, False: 0]
  ------------------
19030|  92.7k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  92.7k|        }
19032|   103k|        return true;
19033|   103k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE26check_ubjson_string_lengthIsEEbT_:
17288|  1.36k|    {
17289|  1.36k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|  1.36k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 9, False: 1.35k]
  |  |  ------------------
  ------------------
17290|      9|        {
17291|      9|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|      9|        }
17293|  1.35k|        return true;
17294|  1.36k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_stringIsEEbT_RSC_:
18910|  1.35k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  1.35k|        return get_bytes(len, "string", result);
18921|  1.35k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesIsSC_EEbT_PKcRT0_:
18998|  1.35k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  1.35k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  2.48k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 1.26k, False: 1.22k]
  ------------------
19003|  1.26k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  1.26k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 1.20k, False: 63]
  ------------------
19007|  1.26k|                                       ? static_cast<std::size_t>(len)
19008|  1.26k|                                       : chunk_size;
19009|  1.26k|            const std::size_t old_size = result.size();
19010|  1.26k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  1.26k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  1.26k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 1.26k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  1.26k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  1.26k|            chars_read += bytes_read;
19018|  1.26k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  1.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 135, False: 1.12k]
  |  |  ------------------
  ------------------
19019|    135|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    135|                result.resize(old_size + bytes_read);
19024|    135|                ++chars_read;
19025|    135|                current = char_traits<char_type>::eof();
19026|    135|                return unexpect_eof(context);
19027|    135|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  1.12k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  1.12k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 1.12k, False: 0]
  ------------------
19030|  1.12k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  1.12k|        }
19032|  1.22k|        return true;
19033|  1.35k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE26check_ubjson_string_lengthIiEEbT_:
17288|    972|    {
17289|    972|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    972|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 93, False: 879]
  |  |  ------------------
  ------------------
17290|     93|        {
17291|     93|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|     93|        }
17293|    879|        return true;
17294|    972|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE26check_ubjson_string_lengthIlEEbT_:
17288|  1.08k|    {
17289|  1.08k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|  1.08k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 192, False: 888]
  |  |  ------------------
  ------------------
17290|    192|        {
17291|    192|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|    192|        }
17293|    888|        return true;
17294|  1.08k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE10get_stringIlEEbT_RSC_:
18910|    888|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    888|        return get_bytes(len, "string", result);
18921|    888|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE9get_bytesIlSC_EEbT_PKcRT0_:
18998|    888|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    888|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  1.38k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 792, False: 597]
  ------------------
19003|    792|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    792|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 576, False: 216]
  ------------------
19007|    792|                                       ? static_cast<std::size_t>(len)
19008|    792|                                       : chunk_size;
19009|    792|            const std::size_t old_size = result.size();
19010|    792|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    792|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    792|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 792, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    792|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    792|            chars_read += bytes_read;
19018|    792|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    792|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 291, False: 501]
  |  |  ------------------
  ------------------
19019|    291|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    291|                result.resize(old_size + bytes_read);
19024|    291|                ++chars_read;
19025|    291|                current = char_traits<char_type>::eof();
19026|    291|                return unexpect_eof(context);
19027|    291|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    501|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    501|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 501, False: 0]
  ------------------
19030|    501|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    501|        }
19032|    597|        return true;
19033|    888|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE15get_ignore_noopEv:
18686|  1.61M|    {
18687|  1.61M|        do
18688|  1.63M|        {
18689|  1.63M|            get();
18690|  1.63M|        }
18691|  1.63M|        while (current == 'N');
  ------------------
  |  Branch (18691:16): [True: 16.5k, False: 1.61M]
  ------------------
18692|       |
18693|  1.61M|        return current;
18694|  1.61M|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE3getEv:
18652|  2.10M|    {
18653|  2.10M|        ++chars_read;
18654|  2.10M|        return current = ia.get_character();
18655|  2.10M|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_E13get_characterEv:
 8590|  2.10M|    {
 8591|  2.10M|        if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  2.10M|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 2.05M, False: 53.5k]
  |  |  ------------------
  ------------------
 8592|  2.05M|        {
 8593|  2.05M|            auto result = char_traits<char_type>::to_int_type(*current);
 8594|  2.05M|            std::advance(current, 1);
 8595|  2.05M|            return result;
 8596|  2.05M|        }
 8597|       |
 8598|  53.5k|        ++eof_reads;
 8599|  53.5k|        return char_traits<char_type>::eof();
 8600|  2.10M|    }
_ZN8nlohmann16json_abi_v3_12_06detail11char_traitsIhE11to_int_typeEh:
 4289|  2.38M|    {
 4290|  2.38M|        return static_cast<int_type>(c);
 4291|  2.38M|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEE15last_byte_errorENS1_12exception_idERKSC_PKcSS_:
19116|  3.02k|    {
19117|       |        // with a tail, the message reads "<detail><tail>; last byte: 0x<token>"
19118|  3.02k|        return sax->parse_error(chars_read, get_token_string(), parse_error::create(id_, chars_read,
19119|  3.02k|                                exception_message(tail == nullptr ? detail : concat(detail, tail, "; last byte: 0x", get_token_string()), context), nullptr));
  ------------------
  |  Branch (19119:51): [True: 2.70k, False: 321]
  ------------------
19120|  3.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail6concatINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJRKS9_RPKcRA16_SC_S9_EEET_DpOT0_:
 5318|    642|{
 5319|    642|    OutStringType str;
 5320|    642|    str.reserve(concat_length(args...));
 5321|    642|    concat_into(str, std::forward<Args>(args)...);
 5322|    642|    return str;
 5323|    642|}
_ZN8nlohmann16json_abi_v3_12_06detail13concat_lengthINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEJPKcA16_cS9_EEEmRKT_DpRKT0_:
 5228|    642|{
 5229|    642|    return str.size() + concat_length(rest...);
 5230|    642|}
_ZN8nlohmann16json_abi_v3_12_06detail11concat_intoINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEERKS9_JRPKcRA16_SC_S9_ETnNS3_9enable_ifIXsr24detect_string_can_appendIT_T0_EE5valueEiE4typeELi0EEEvRSI_OSJ_DpOT1_:
 5281|    642|{
 5282|    642|    out.append(std::forward<Arg>(arg));
 5283|    642|    concat_into(out, std::forward<Args>(rest)...);
 5284|    642|}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEC2ENS0_6detail7value_tE:
32384|   663k|        : m_data(stored_kind(v))
32385|   663k|    {
32386|   663k|        assert_invariant();
32387|   663k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11stored_kindENS0_6detail7value_tE:
30581|   663k|    {
30582|   663k|        return (std::is_same<number_integer_t, number_unsigned_t>::value && t == value_t::number_unsigned) ? value_t::number_integer : t;
  ------------------
  |  Branch (30582:17): [Folded, False: 663k]
  |  Branch (30582:77): [True: 0, False: 0]
  ------------------
30583|   663k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4dataC2ENS0_6detail7value_tE:
36324|   663k|            : m_type(v), m_value(v)
36325|   663k|        {
36326|   663k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_valueC2ENS0_6detail7value_tE:
30664|   663k|        {
30665|   663k|            switch (t)
30666|   663k|            {
30667|  95.7k|                case value_t::object:
  ------------------
  |  Branch (30667:17): [True: 95.7k, False: 567k]
  ------------------
30668|   657k|                case value_t::array:
  ------------------
  |  Branch (30668:17): [True: 562k, False: 100k]
  ------------------
30669|   657k|                case value_t::string:
  ------------------
  |  Branch (30669:17): [True: 0, False: 663k]
  ------------------
30670|   657k|                case value_t::binary:
  ------------------
  |  Branch (30670:17): [True: 0, False: 663k]
  ------------------
30671|   657k|                {
30672|       |                    // allocating: kept out of line, so the scalar cases below inline
30673|   657k|                    init_owned(t);
30674|   657k|                    break;
30675|   657k|                }
30676|       |
30677|      0|                case value_t::boolean:
  ------------------
  |  Branch (30677:17): [True: 0, False: 663k]
  ------------------
30678|      0|                {
30679|      0|                    boolean = static_cast<boolean_t>(false);
30680|      0|                    break;
30681|   657k|                }
30682|       |
30683|      0|                case value_t::number_integer:
  ------------------
  |  Branch (30683:17): [True: 0, False: 663k]
  ------------------
30684|      0|                {
30685|      0|                    number_integer = static_cast<number_integer_t>(0);
30686|      0|                    break;
30687|   657k|                }
30688|       |
30689|      0|                case value_t::number_unsigned:
  ------------------
  |  Branch (30689:17): [True: 0, False: 663k]
  ------------------
30690|      0|                {
30691|      0|                    number_unsigned = static_cast<number_unsigned_t>(0);
30692|      0|                    break;
30693|   657k|                }
30694|       |
30695|      0|                case value_t::number_float:
  ------------------
  |  Branch (30695:17): [True: 0, False: 663k]
  ------------------
30696|      0|                {
30697|      0|                    number_float = static_cast<number_float_t>(0.0);
30698|      0|                    break;
30699|   657k|                }
30700|       |
30701|      0|                case value_t::null:
  ------------------
  |  Branch (30701:17): [True: 0, False: 663k]
  ------------------
30702|      0|                {
30703|      0|                    object = nullptr;  // silence warning, see #821
30704|      0|                    break;
30705|   657k|                }
30706|       |
30707|  5.19k|                case value_t::discarded:
  ------------------
  |  Branch (30707:17): [True: 5.19k, False: 657k]
  ------------------
30708|  5.19k|                default:
  ------------------
  |  Branch (30708:17): [True: 0, False: 663k]
  ------------------
30709|  5.19k|                {
30710|  5.19k|                    object = nullptr;  // silence warning, see #821
30711|  5.19k|                    if (JSON_HEDLEY_UNLIKELY(t == value_t::null))
  ------------------
  |  | 1667|  5.19k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.19k]
  |  |  ------------------
  ------------------
30712|      0|                    {
30713|      0|                        detail::throw_literal<other_error>(detail::exception_id::internal_error, "961c151d2e87f2686a955a9be24d316f1362bf21 3.12.0", nullptr); // LCOV_EXCL_LINE
30714|      0|                    }
30715|  5.19k|                    break;
30716|  5.19k|                }
30717|   663k|            }
30718|   663k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE10json_value10init_ownedENS0_6detail7value_tE:
30722|   657k|        {
30723|   657k|            switch (t)
30724|   657k|            {
30725|  95.7k|                case value_t::object:
  ------------------
  |  Branch (30725:17): [True: 95.7k, False: 562k]
  ------------------
30726|  95.7k|                    object = create<object_t>();
30727|  95.7k|                    break;
30728|   562k|                case value_t::array:
  ------------------
  |  Branch (30728:17): [True: 562k, False: 95.7k]
  ------------------
30729|   562k|                    array = create<array_t>();
30730|   562k|                    break;
30731|      0|                case value_t::string:
  ------------------
  |  Branch (30731:17): [True: 0, False: 657k]
  ------------------
30732|      0|                    string = create<string_t>("");
30733|      0|                    break;
30734|      0|                case value_t::binary:
  ------------------
  |  Branch (30734:17): [True: 0, False: 657k]
  ------------------
30735|      0|                    binary = create<binary_t>();
30736|      0|                    break;
30737|      0|                case value_t::null:
  ------------------
  |  Branch (30737:17): [True: 0, False: 657k]
  ------------------
30738|      0|                case value_t::boolean:
  ------------------
  |  Branch (30738:17): [True: 0, False: 657k]
  ------------------
30739|      0|                case value_t::number_integer:
  ------------------
  |  Branch (30739:17): [True: 0, False: 657k]
  ------------------
30740|      0|                case value_t::number_unsigned:
  ------------------
  |  Branch (30740:17): [True: 0, False: 657k]
  ------------------
30741|      0|                case value_t::number_float:
  ------------------
  |  Branch (30741:17): [True: 0, False: 657k]
  ------------------
30742|      0|                case value_t::discarded:
  ------------------
  |  Branch (30742:17): [True: 0, False: 657k]
  ------------------
30743|      0|                default:
  ------------------
  |  Branch (30743:17): [True: 0, False: 657k]
  ------------------
30744|      0|                    break;
30745|   657k|            }
30746|   657k|        }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6createINS3_ISA_SE_NS2_4lessISA_EENS8_INS2_4pairIKSA_SE_EEEEEEJEEEPT_DpOT0_:
30589|  95.7k|    {
30590|  95.7k|        AllocatorType<T> alloc;
30591|  95.7k|        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
30592|       |
30593|  95.7k|        auto deleter = [&](T * obj)
30594|  95.7k|        {
30595|  95.7k|            AllocatorTraits::deallocate(alloc, obj, 1);
30596|  95.7k|        };
30597|  95.7k|        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
30598|  95.7k|        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
30599|  95.7k|        JSON_ASSERT(obj);
  ------------------
  |  | 2591|  95.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30599:9): [True: 95.7k, False: 0]
  ------------------
30600|  95.7k|        return obj.release();
30601|  95.7k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6createINS4_ISE_NS8_ISE_EEEEJEEEPT_DpOT0_:
30589|   562k|    {
30590|   562k|        AllocatorType<T> alloc;
30591|   562k|        using AllocatorTraits = std::allocator_traits<AllocatorType<T>>;
30592|       |
30593|   562k|        auto deleter = [&](T * obj)
30594|   562k|        {
30595|   562k|            AllocatorTraits::deallocate(alloc, obj, 1);
30596|   562k|        };
30597|   562k|        std::unique_ptr<T, decltype(deleter)> obj(AllocatorTraits::allocate(alloc, 1), deleter);
30598|   562k|        AllocatorTraits::construct(alloc, obj.get(), std::forward<Args>(args)...);
30599|   562k|        JSON_ASSERT(obj);
  ------------------
  |  | 2591|   562k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (30599:9): [True: 562k, False: 0]
  ------------------
30600|   562k|        return obj.release();
30601|   562k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEaSESE_:
32797|   293k|    {
32798|       |        // check that the passed value is valid
32799|   293k|        other.assert_invariant();
32800|       |
32801|   293k|        using std::swap;
32802|   293k|        swap(m_data.m_type, other.m_data.m_type);
32803|   293k|        swap(m_data.m_value, other.m_data.m_value);
32804|       |
32805|       |#if JSON_DIAGNOSTIC_POSITIONS
32806|       |        swap(start_position, other.start_position);
32807|       |        swap(end_position, other.end_position);
32808|       |#endif
32809|       |
32810|   293k|        json_base_class_t::operator=(std::move(other));
32811|       |
32812|   293k|        set_parents();
32813|   293k|        assert_invariant();
32814|   293k|        return *this;
32815|   293k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EENS1_19json_sax_dom_parserISG_SK_EEED2Ev:
14954|  65.3k|    ~binary_reader() = default;
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterIPKhSJ_EEED2Ev:
13881|  65.3k|    ~json_sax_dom_parser() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterINSt3__16vectorIhNS3_9allocatorIhEEEETnNS3_9enable_ifIXsr28is_contiguous_byte_containerIT_EE5valueEiE4typeELi0EEEDTcl13input_adaptercldtfp_4dataEplcldtfp_4dataEcldtfp_4sizeEEERKS9_:
 9104|  54.3k|{
 9105|  54.3k|    return input_adapter(container.data(), container.data() + container.size());
 9106|  54.3k|}
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterIPKhS4_vEENS1_30iterator_input_adapter_factoryIT_T0_vE12adapter_typeES6_S7_:
 9007|  65.3k|{
 9008|  65.3k|    using factory_type = iterator_input_adapter_factory<IteratorType, SentinelType>;
 9009|  65.3k|    return factory_type::create(first, last);
 9010|  65.3k|}
_ZN8nlohmann16json_abi_v3_12_06detail30iterator_input_adapter_factoryIPKhS4_vE6createES4_S4_:
 8935|  65.3k|    {
 8936|  65.3k|        return adapter_type(std::move(first), std::move(last));
 8937|  65.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterIPKhS4_EC2ES4_S4_:
 8586|  65.3k|        : begin(first), current(std::move(first)), end(std::move(last))
 8587|  65.3k|    {}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE9to_bjdataERKSE_bbNS0_6detail16bjdata_version_tENSH_15error_handler_tE:
36496|  32.5k|    {
36497|  32.5k|        std::vector<std::uint8_t> result;
36498|  32.5k|        result.reserve(detail::binary_reserve_hint(j));
36499|  32.5k|        vector_writer(result, error_handler).write_ubjson(j, use_size, use_type, true, true, version);
36500|  32.5k|        return result;
36501|  32.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19binary_reserve_hintINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEmRKT_:
23013|  32.5k|{
23014|  32.5k|    if (j.is_array())
  ------------------
  |  Branch (23014:9): [True: 17.6k, False: 14.9k]
  ------------------
23015|  17.6k|    {
23016|  17.6k|        return j.size() + 1;
23017|  17.6k|    }
23018|       |
23019|  14.9k|    if (j.is_object())
  ------------------
  |  Branch (23019:9): [True: 2.47k, False: 12.4k]
  ------------------
23020|  2.47k|    {
23021|  2.47k|        return (j.size() * 2) + 1;
23022|  2.47k|    }
23023|       |
23024|  12.4k|    return 0;
23025|  14.9k|}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE13vector_writerIhEENS0_6detail13binary_writerISE_T_NSG_18output_vector_sinkISI_NS8_ISI_EEEEEERNS4_ISI_SK_EENSG_15error_handler_tE:
30271|  32.5k|    {
30272|  32.5k|        return vector_binary_writer<CharType>(::nlohmann::detail::output_vector_sink<CharType>(v), error_handler);
30273|  32.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEEC2ERNS3_6vectorIhS5_EE:
22740|  32.5k|        : v(vec)
22741|  32.5k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEEC2ESI_NS1_15error_handler_tE:
23055|  32.5k|        : oa(std::move(sink)), error_handler(error_handler_)
23056|  32.5k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_ubjsonERKSG_bbbbNS1_16bjdata_version_tEm:
23573|   547k|    {
23574|   547k|        if (JSON_HEDLEY_UNLIKELY(depth >= recursion_depth_limit()) && (j.is_array() || j.is_object()))
  ------------------
  |  | 1667|  1.09M|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 4.26k, False: 543k]
  |  |  ------------------
  ------------------
  |  Branch (23574:72): [True: 1.42k, False: 2.84k]
  |  Branch (23574:88): [True: 2.16k, False: 676]
  ------------------
23575|  3.58k|        {
23576|  3.58k|            write_ubjson_iterative(j, use_count, use_type, add_prefix, use_bjdata, bjdata_version);
23577|  3.58k|            return;
23578|  3.58k|        }
23579|       |
23580|   543k|        const bool bjdata_draft3 = use_bjdata && bjdata_version == bjdata_version_t::draft3;
  ------------------
  |  Branch (23580:36): [True: 543k, False: 0]
  |  Branch (23580:50): [True: 0, False: 543k]
  ------------------
23581|       |
23582|   543k|        switch (j.type())
23583|   543k|        {
23584|  34.4k|            case value_t::null:
  ------------------
  |  Branch (23584:13): [True: 34.4k, False: 509k]
  ------------------
23585|  34.4k|            {
23586|  34.4k|                if (add_prefix)
  ------------------
  |  Branch (23586:21): [True: 34.4k, False: 0]
  ------------------
23587|  34.4k|                {
23588|  34.4k|                    oa.write_character(to_char_type('Z'));
23589|  34.4k|                }
23590|  34.4k|                break;
23591|      0|            }
23592|       |
23593|  56.7k|            case value_t::boolean:
  ------------------
  |  Branch (23593:13): [True: 56.7k, False: 487k]
  ------------------
23594|  56.7k|            {
23595|  56.7k|                if (add_prefix)
  ------------------
  |  Branch (23595:21): [True: 56.7k, False: 0]
  ------------------
23596|  56.7k|                {
23597|  56.7k|                    oa.write_character(j.m_data.m_value.boolean
  ------------------
  |  Branch (23597:40): [True: 24.3k, False: 32.4k]
  ------------------
23598|  56.7k|                                       ? to_char_type('T')
23599|  56.7k|                                       : to_char_type('F'));
23600|  56.7k|                }
23601|  56.7k|                break;
23602|      0|            }
23603|       |
23604|  38.2k|            case value_t::number_integer:
  ------------------
  |  Branch (23604:13): [True: 38.2k, False: 505k]
  ------------------
23605|  38.2k|            {
23606|  38.2k|                write_number_with_ubjson_prefix(j.m_data.m_value.number_integer, add_prefix, use_bjdata);
23607|  38.2k|                break;
23608|      0|            }
23609|       |
23610|  66.0k|            case value_t::number_unsigned:
  ------------------
  |  Branch (23610:13): [True: 66.0k, False: 477k]
  ------------------
23611|  66.0k|            {
23612|  66.0k|                write_number_with_ubjson_prefix(j.m_data.m_value.number_unsigned, add_prefix, use_bjdata);
23613|  66.0k|                break;
23614|      0|            }
23615|       |
23616|  79.5k|            case value_t::number_float:
  ------------------
  |  Branch (23616:13): [True: 79.5k, False: 464k]
  ------------------
23617|  79.5k|            {
23618|  79.5k|                write_number_with_ubjson_prefix(j.m_data.m_value.number_float, add_prefix, use_bjdata);
23619|  79.5k|                break;
23620|      0|            }
23621|       |
23622|  36.0k|            case value_t::string:
  ------------------
  |  Branch (23622:13): [True: 36.0k, False: 507k]
  ------------------
23623|  36.0k|            {
23624|  36.0k|                string_t storage;
23625|  36.0k|                const string_t& value = sanitize_utf8_for_write(*j.m_data.m_value.string, j, storage);
23626|       |
23627|  36.0k|                if (add_prefix)
  ------------------
  |  Branch (23627:21): [True: 36.0k, False: 0]
  ------------------
23628|  36.0k|                {
23629|  36.0k|                    oa.write_character(to_char_type('S'));
23630|  36.0k|                }
23631|  36.0k|                write_number_with_ubjson_prefix(value.size(), true, use_bjdata);
23632|  36.0k|                oa.write_characters(
23633|  36.0k|                      reinterpret_cast<const CharType*>(value.data()),
23634|  36.0k|                      value.size());
23635|  36.0k|                break;
23636|      0|            }
23637|       |
23638|   196k|            case value_t::array:
  ------------------
  |  Branch (23638:13): [True: 196k, False: 347k]
  ------------------
23639|   196k|            {
23640|   196k|                bool prefix_required = true;
23641|   196k|                const bool write_closer = write_ubjson_start_array(j, use_count, use_type, add_prefix, use_bjdata, prefix_required);
23642|       |
23643|   196k|                for (const auto& el : *j.m_data.m_value.array)
  ------------------
  |  Branch (23643:37): [True: 445k, False: 196k]
  ------------------
23644|   445k|                {
23645|   445k|                    write_ubjson(el, use_count, use_type, prefix_required, use_bjdata, bjdata_version, depth + 1);
23646|   445k|                }
23647|       |
23648|   196k|                if (write_closer)
  ------------------
  |  Branch (23648:21): [True: 72.6k, False: 123k]
  ------------------
23649|  72.6k|                {
23650|  72.6k|                    oa.write_character(to_char_type(']'));
23651|  72.6k|                }
23652|       |
23653|   196k|                break;
23654|      0|            }
23655|       |
23656|  3.45k|            case value_t::binary:
  ------------------
  |  Branch (23656:13): [True: 3.45k, False: 540k]
  ------------------
23657|  3.45k|            {
23658|  3.45k|                if (add_prefix)
  ------------------
  |  Branch (23658:21): [True: 3.45k, False: 0]
  ------------------
23659|  3.45k|                {
23660|  3.45k|                    oa.write_character(to_char_type('['));
23661|  3.45k|                }
23662|       |
23663|  3.45k|                if (use_type && (bjdata_draft3 || !j.m_data.m_value.binary->empty()))
  ------------------
  |  Branch (23663:21): [True: 1.15k, False: 2.30k]
  |  Branch (23663:34): [True: 0, False: 1.15k]
  |  Branch (23663:51): [True: 737, False: 414]
  ------------------
23664|    737|                {
23665|    737|                    if (!use_count)
  ------------------
  |  Branch (23665:25): [True: 0, False: 737]
  ------------------
23666|      0|                    {
23667|      0|                        JSON_THROW(other_error::create(exception_id::size_marker_required, "use_type requires use_size = true", &j));
  ------------------
  |  | 2556|      0|    #define JSON_THROW(exception) throw exception
  ------------------
23668|      0|                    }
23669|    737|                    oa.write_character(to_char_type('$'));
23670|    737|                    oa.write_character(bjdata_draft3 ? 'B' : 'U');
  ------------------
  |  Branch (23670:40): [True: 0, False: 737]
  ------------------
23671|    737|                }
23672|       |
23673|  3.45k|                if (use_count)
  ------------------
  |  Branch (23673:21): [True: 2.30k, False: 1.15k]
  ------------------
23674|  2.30k|                {
23675|  2.30k|                    oa.write_character(to_char_type('#'));
23676|  2.30k|                    write_number_with_ubjson_prefix(j.m_data.m_value.binary->size(), true, use_bjdata);
23677|  2.30k|                }
23678|       |
23679|  3.45k|                if (use_type)
  ------------------
  |  Branch (23679:21): [True: 1.15k, False: 2.30k]
  ------------------
23680|  1.15k|                {
23681|  1.15k|                    oa.write_characters(
23682|  1.15k|                          reinterpret_cast<const CharType*>(j.m_data.m_value.binary->data()),
23683|  1.15k|                          j.m_data.m_value.binary->size());
23684|  1.15k|                }
23685|  2.30k|                else
23686|  2.30k|                {
23687|  12.7k|                    for (size_t i = 0; i < j.m_data.m_value.binary->size(); ++i)
  ------------------
  |  Branch (23687:40): [True: 10.4k, False: 2.30k]
  ------------------
23688|  10.4k|                    {
23689|  10.4k|                        oa.write_character(to_char_type(bjdata_draft3 ? 'B' : 'U'));
  ------------------
  |  Branch (23689:57): [True: 0, False: 10.4k]
  ------------------
23690|       |                        // the cast is needed for binary types whose value type
23691|       |                        // is not an integer (e.g., std::byte)
23692|  10.4k|                        oa.write_character(to_char_type(static_cast<std::uint8_t>(j.m_data.m_value.binary->data()[i])));
23693|  10.4k|                    }
23694|  2.30k|                }
23695|       |
23696|  3.45k|                if (!use_count)
  ------------------
  |  Branch (23696:21): [True: 1.15k, False: 2.30k]
  ------------------
23697|  1.15k|                {
23698|  1.15k|                    oa.write_character(to_char_type(']'));
23699|  1.15k|                }
23700|       |
23701|  3.45k|                break;
23702|  3.45k|            }
23703|       |
23704|  32.9k|            case value_t::object:
  ------------------
  |  Branch (23704:13): [True: 32.9k, False: 510k]
  ------------------
23705|  32.9k|            {
23706|  32.9k|                if (use_bjdata && is_bjdata_ndarray(j))
  ------------------
  |  Branch (23706:21): [True: 32.9k, False: 0]
  |  Branch (23706:35): [True: 16.1k, False: 16.7k]
  ------------------
23707|  16.1k|                {
23708|  16.1k|                    if (!write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type, bjdata_version))  // decode bjdata ndarray in the JData format (https://github.com/NeuroJSON/jdata)
  ------------------
  |  Branch (23708:25): [True: 8.51k, False: 7.61k]
  ------------------
23709|  8.51k|                    {
23710|  8.51k|                        break;
23711|  8.51k|                    }
23712|  16.1k|                }
23713|       |
23714|  24.3k|                bool prefix_required = true;
23715|  24.3k|                const bool write_closer = write_ubjson_start_object(j, use_count, use_type, add_prefix, use_bjdata, prefix_required);
23716|       |
23717|  24.3k|                for (const auto& el : *j.m_data.m_value.object)
  ------------------
  |  Branch (23717:37): [True: 53.3k, False: 24.3k]
  ------------------
23718|  53.3k|                {
23719|       |                    // a converted key must outlive the reference returned by sanitize_utf8_for_write
23720|  53.3k|                    const object_key_string_t key_string = el.first;
23721|  53.3k|                    string_t storage;
23722|  53.3k|                    const string_t& key = sanitize_utf8_for_write(key_string, j, storage);
23723|  53.3k|                    write_number_with_ubjson_prefix(key.size(), true, use_bjdata);
23724|  53.3k|                    oa.write_characters(
23725|  53.3k|                          reinterpret_cast<const CharType*>(key.data()),
23726|  53.3k|                          key.size());
23727|  53.3k|                    write_ubjson(el.second, use_count, use_type, prefix_required, use_bjdata, bjdata_version, depth + 1);
23728|  53.3k|                }
23729|       |
23730|  24.3k|                if (write_closer)
  ------------------
  |  Branch (23730:21): [True: 8.83k, False: 15.5k]
  ------------------
23731|  8.83k|                {
23732|  8.83k|                    oa.write_character(to_char_type('}'));
23733|  8.83k|                }
23734|       |
23735|  24.3k|                break;
23736|  32.9k|            }
23737|       |
23738|      0|            case value_t::discarded:
  ------------------
  |  Branch (23738:13): [True: 0, False: 543k]
  ------------------
23739|      0|            default:
  ------------------
  |  Branch (23739:13): [True: 0, False: 543k]
  ------------------
23740|      0|                throw_on_discarded(j, use_bjdata ? "BJData" : "UBJSON");
  ------------------
  |  Branch (23740:39): [True: 0, False: 0]
  ------------------
23741|   543k|        }
23742|   543k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE22write_ubjson_iterativeERKSG_bbbbNS1_16bjdata_version_tE:
24224|  3.58k|    {
24225|  3.58k|        std::vector<ubjson_frame> stack;
24226|  3.58k|        write_ubjson_value_or_push(root, add_prefix, use_count, use_type, use_bjdata, bjdata_version, stack);
24227|       |
24228|  20.7k|        while (!stack.empty())
  ------------------
  |  Branch (24228:16): [True: 17.1k, False: 3.58k]
  ------------------
24229|  17.1k|        {
24230|  17.1k|            const ubjson_frame current = stack.back();
24231|  17.1k|            const BasicJsonType& j = *current.value;
24232|       |
24233|  17.1k|            if (j.is_array())
  ------------------
  |  Branch (24233:17): [True: 12.7k, False: 4.38k]
  ------------------
24234|  12.7k|            {
24235|  12.7k|                const auto& array = *j.m_data.m_value.array;
24236|  12.7k|                if (current.array_it == array.cend())
  ------------------
  |  Branch (24236:21): [True: 4.16k, False: 8.59k]
  ------------------
24237|  4.16k|                {
24238|  4.16k|                    if (!use_count)
  ------------------
  |  Branch (24238:25): [True: 1.50k, False: 2.65k]
  ------------------
24239|  1.50k|                    {
24240|  1.50k|                        oa.write_character(to_char_type(']'));
24241|  1.50k|                    }
24242|  4.16k|                    stack.pop_back();
24243|  4.16k|                    continue;
24244|  4.16k|                }
24245|       |
24246|  8.59k|                const BasicJsonType* child = &(*current.array_it);
24247|  8.59k|                const bool child_prefix = current.prefix_required;
24248|  8.59k|                ++stack.back().array_it;
24249|  8.59k|                write_ubjson_value_or_push(*child, child_prefix, use_count, use_type, use_bjdata, bjdata_version, stack);
24250|  8.59k|            }
24251|  4.38k|            else
24252|  4.38k|            {
24253|  4.38k|                const auto& object = *j.m_data.m_value.object;
24254|  4.38k|                if (current.object_it == object.cend())
  ------------------
  |  Branch (24254:21): [True: 1.55k, False: 2.83k]
  ------------------
24255|  1.55k|                {
24256|  1.55k|                    if (!use_count)
  ------------------
  |  Branch (24256:25): [True: 556, False: 994]
  ------------------
24257|    556|                    {
24258|    556|                        oa.write_character(to_char_type('}'));
24259|    556|                    }
24260|  1.55k|                    stack.pop_back();
24261|  1.55k|                    continue;
24262|  1.55k|                }
24263|       |
24264|       |                // a converted key must outlive the reference returned by sanitize_utf8_for_write
24265|  2.83k|                const object_key_string_t key_string = current.object_it->first;
24266|  2.83k|                string_t storage;
24267|  2.83k|                const string_t& key = sanitize_utf8_for_write(key_string, j, storage);
24268|  2.83k|                write_number_with_ubjson_prefix(key.size(), true, use_bjdata);
24269|  2.83k|                oa.write_characters(
24270|  2.83k|                      reinterpret_cast<const CharType*>(key.data()),
24271|  2.83k|                      key.size());
24272|  2.83k|                const BasicJsonType* child = &(current.object_it->second);
24273|  2.83k|                const bool child_prefix = current.prefix_required;
24274|  2.83k|                ++stack.back().object_it;
24275|  2.83k|                write_ubjson_value_or_push(*child, child_prefix, use_count, use_type, use_bjdata, bjdata_version, stack);
24276|  2.83k|            }
24277|  17.1k|        }
24278|  3.58k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26write_ubjson_value_or_pushERKSG_bbbbNS1_16bjdata_version_tERNS6_INSJ_12ubjson_frameENSA_ISN_EEEE:
24176|  15.0k|    {
24177|  15.0k|        if (!j.is_array() && !j.is_object())
  ------------------
  |  Branch (24177:13): [True: 10.0k, False: 4.95k]
  |  Branch (24177:30): [True: 7.09k, False: 2.96k]
  ------------------
24178|  7.09k|        {
24179|  7.09k|            write_ubjson(j, use_count, use_type, add_prefix, use_bjdata, bjdata_version);
24180|  7.09k|            return;
24181|  7.09k|        }
24182|       |
24183|  7.91k|        if (use_bjdata && j.is_object() && is_bjdata_ndarray(j)
  ------------------
  |  Branch (24183:13): [True: 7.91k, False: 0]
  |  Branch (24183:27): [True: 2.96k, False: 4.95k]
  |  Branch (24183:44): [True: 350, False: 2.61k]
  ------------------
24184|    350|                && !write_bjdata_ndarray(*j.m_data.m_value.object, use_count, use_type, bjdata_version))
  ------------------
  |  Branch (24184:20): [True: 114, False: 236]
  ------------------
24185|    114|        {
24186|       |            // fully written as an ND-array: nothing below it to come back to
24187|    114|            return;
24188|    114|        }
24189|       |
24190|  7.80k|        const bool is_array = j.is_array();
24191|  7.80k|        bool prefix_required = true;
24192|  7.80k|        if (is_array)
  ------------------
  |  Branch (24192:13): [True: 4.95k, False: 2.85k]
  ------------------
24193|  4.95k|        {
24194|  4.95k|            write_ubjson_start_array(j, use_count, use_type, add_prefix, use_bjdata, prefix_required);
24195|  4.95k|        }
24196|  2.85k|        else
24197|  2.85k|        {
24198|  2.85k|            write_ubjson_start_object(j, use_count, use_type, add_prefix, use_bjdata, prefix_required);
24199|  2.85k|        }
24200|       |
24201|  7.80k|        const bool empty = is_array ? j.m_data.m_value.array->empty() : j.m_data.m_value.object->empty();
  ------------------
  |  Branch (24201:28): [True: 4.95k, False: 2.85k]
  ------------------
24202|  7.80k|        if (!empty)
  ------------------
  |  Branch (24202:13): [True: 5.71k, False: 2.09k]
  ------------------
24203|  5.71k|        {
24204|  5.71k|            stack.emplace_back(&j, prefix_required);
24205|  5.71k|            return;
24206|  5.71k|        }
24207|       |
24208|       |        // write_ubjson_start_array/_object return !use_count, i.e. whether a
24209|       |        // closer still has to be written; use_count is constant for the whole
24210|       |        // document, so that is recomputed here instead of being carried along
24211|  2.09k|        if (!use_count)
  ------------------
  |  Branch (24211:13): [True: 734, False: 1.35k]
  ------------------
24212|    734|        {
24213|    734|            oa.write_character(to_char_type(is_array ? ']' : '}'));
  ------------------
  |  Branch (24213:45): [True: 286, False: 448]
  ------------------
24214|    734|        }
24215|  2.09k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12ubjson_frameC2EPKSG_b:
24131|  5.71k|            : value(value_)
24132|  5.71k|            , prefix_required(prefix_required_)
24133|  5.71k|        {
24134|  5.71k|            if (value->is_object())
  ------------------
  |  Branch (24134:17): [True: 1.55k, False: 4.16k]
  ------------------
24135|  1.55k|            {
24136|  1.55k|                object_it = value->m_data.m_value.object->cbegin();
24137|  1.55k|            }
24138|  4.16k|            else
24139|  4.16k|            {
24140|  4.16k|                array_it = value->m_data.m_value.array->cbegin();
24141|  4.16k|            }
24142|  5.71k|        }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4typeEv:
32866|   689k|    {
32867|   689k|        return m_data.m_type;
32868|   689k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE15write_characterEh:
22744|  1.04M|    {
22745|  1.04M|        v.push_back(c);
22746|  1.04M|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12to_char_typeIhTnPNS4_9enable_ifIXsr3std11is_unsignedIT_EE5valueEvE4typeELPv0EEEhh:
26198|   703k|    {
26199|   703k|        return x;
26200|   703k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE31write_number_with_ubjson_prefixIlTnNS4_9enable_ifIXsr11is_integralIT_EE5valueEiE4typeELi0EEEvSM_bb:
25040|  38.2k|    {
25041|  38.2k|        const CharType prefix = ubjson_integer_prefix(n, use_bjdata);
25042|  38.2k|        if (add_prefix)
  ------------------
  |  Branch (25042:13): [True: 30.9k, False: 7.21k]
  ------------------
25043|  30.9k|        {
25044|  30.9k|            oa.write_character(prefix);
25045|  30.9k|        }
25046|  38.2k|        write_ubjson_integer_payload(prefix, n, use_bjdata);
25047|  38.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE21ubjson_integer_prefixIlEEhT_b:
25067|  48.9k|    {
25068|  48.9k|        if (value_in_range_of<std::int8_t>(n))
  ------------------
  |  Branch (25068:13): [True: 24.5k, False: 24.4k]
  ------------------
25069|  24.5k|        {
25070|  24.5k|            return 'i';
25071|  24.5k|        }
25072|  24.4k|        if (value_in_range_of<std::uint8_t>(n))
  ------------------
  |  Branch (25072:13): [True: 1.46k, False: 22.9k]
  ------------------
25073|  1.46k|        {
25074|  1.46k|            return 'U';
25075|  1.46k|        }
25076|  22.9k|        if (value_in_range_of<std::int16_t>(n))
  ------------------
  |  Branch (25076:13): [True: 7.14k, False: 15.7k]
  ------------------
25077|  7.14k|        {
25078|  7.14k|            return 'I';
25079|  7.14k|        }
25080|  15.7k|        if (use_bjdata && value_in_range_of<std::uint16_t>(n))
  ------------------
  |  Branch (25080:13): [True: 15.7k, False: 0]
  |  Branch (25080:27): [True: 893, False: 14.8k]
  ------------------
25081|    893|        {
25082|    893|            return 'u';
25083|    893|        }
25084|  14.8k|        if (value_in_range_of<std::int32_t>(n))
  ------------------
  |  Branch (25084:13): [True: 6.35k, False: 8.53k]
  ------------------
25085|  6.35k|        {
25086|  6.35k|            return 'l';
25087|  6.35k|        }
25088|  8.53k|        if (use_bjdata && value_in_range_of<std::uint32_t>(n))
  ------------------
  |  Branch (25088:13): [True: 8.53k, False: 0]
  |  Branch (25088:27): [True: 645, False: 7.89k]
  ------------------
25089|    645|        {
25090|    645|            return 'm';
25091|    645|        }
25092|  7.89k|        if (value_in_range_of<std::int64_t>(n))
  ------------------
  |  Branch (25092:13): [True: 7.89k, False: 0]
  ------------------
25093|  7.89k|        {
25094|  7.89k|            return 'L';
25095|  7.89k|        }
25096|      0|        if (use_bjdata && std::is_unsigned<NumberType>::value)
  ------------------
  |  Branch (25096:13): [True: 0, False: 0]
  |  Branch (25096:27): [Folded, False: 0]
  ------------------
25097|      0|        {
25098|      0|            return 'M';
25099|      0|        }
25100|       |        // anything else is treated as a high-precision number
25101|      0|        return 'H';
25102|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIalEEbT0_:
 5101|  53.9k|{
 5102|  53.9k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  53.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IalLb0EvE4testEl:
 5085|  53.9k|    {
 5086|  53.9k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  53.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IalLb1ELb1EE4testEl:
 5069|  53.9k|    {
 5070|  53.9k|        using CommonType = typename std::common_type<OfType, T>::type;
 5071|  53.9k|        return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())
  ------------------
  |  Branch (5071:16): [True: 44.5k, False: 9.34k]
  ------------------
 5072|  44.5k|               && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5072:19): [True: 28.9k, False: 15.6k]
  ------------------
 5073|  53.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIhlEEbT0_:
 5101|  25.8k|{
 5102|  25.8k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  25.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IhlLb0EvE4testEl:
 5085|  25.8k|    {
 5086|  25.8k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  25.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IhlLb0ELb1EE4testEl:
 5059|  25.8k|    {
 5060|  25.8k|        using CommonType = typename std::common_type<OfType, T>::type;
 5061|  25.8k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5061:16): [True: 16.3k, False: 9.41k]
  |  Branch (5061:28): [True: 2.24k, False: 14.1k]
  ------------------
 5062|  25.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIslEEbT0_:
 5101|  25.7k|{
 5102|  25.7k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  25.7k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IslLb0EvE4testEl:
 5085|  25.7k|    {
 5086|  25.7k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  25.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IslLb1ELb1EE4testEl:
 5069|  25.7k|    {
 5070|  25.7k|        using CommonType = typename std::common_type<OfType, T>::type;
 5071|  25.7k|        return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())
  ------------------
  |  Branch (5071:16): [True: 18.7k, False: 6.97k]
  ------------------
 5072|  18.7k|               && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5072:19): [True: 9.43k, False: 9.32k]
  ------------------
 5073|  25.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofItlEEbT0_:
 5101|  15.7k|{
 5102|  15.7k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  15.7k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ItlLb0EvE4testEl:
 5085|  15.7k|    {
 5086|  15.7k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  15.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ItlLb0ELb1EE4testEl:
 5059|  15.7k|    {
 5060|  15.7k|        using CommonType = typename std::common_type<OfType, T>::type;
 5061|  15.7k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5061:16): [True: 9.16k, False: 6.61k]
  |  Branch (5061:28): [True: 893, False: 8.27k]
  ------------------
 5062|  15.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIilEEbT0_:
 5101|  16.3k|{
 5102|  16.3k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  16.3k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IilLb0EvE4testEl:
 5085|  16.3k|    {
 5086|  16.3k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  16.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IilLb1ELb1EE4testEl:
 5069|  16.3k|    {
 5070|  16.3k|        using CommonType = typename std::common_type<OfType, T>::type;
 5071|  16.3k|        return static_cast<CommonType>(val) >= static_cast<CommonType>((std::numeric_limits<OfType>::min)())
  ------------------
  |  Branch (5071:16): [True: 12.7k, False: 3.66k]
  ------------------
 5072|  12.7k|               && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5072:19): [True: 7.76k, False: 4.95k]
  ------------------
 5073|  16.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIjlEEbT0_:
 5101|  8.53k|{
 5102|  8.53k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  8.53k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IjlLb0EvE4testEl:
 5085|  8.53k|    {
 5086|  8.53k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  8.53k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IjlLb0ELb1EE4testEl:
 5059|  8.53k|    {
 5060|  8.53k|        using CommonType = typename std::common_type<OfType, T>::type;
 5061|  8.53k|        return val >= 0 && static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
  ------------------
  |  Branch (5061:16): [True: 4.90k, False: 3.63k]
  |  Branch (5061:28): [True: 645, False: 4.26k]
  ------------------
 5062|  8.53k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_ubjson_integer_payloadIlEEvhT_b:
25110|  38.2k|    {
25111|  38.2k|        switch (prefix)
25112|  38.2k|        {
25113|  18.9k|            case 'i':
  ------------------
  |  Branch (25113:13): [True: 18.9k, False: 19.2k]
  ------------------
25114|  18.9k|                write_number(static_cast<std::int8_t>(n), use_bjdata);
25115|  18.9k|                break;
25116|  1.10k|            case 'U':
  ------------------
  |  Branch (25116:13): [True: 1.10k, False: 37.1k]
  ------------------
25117|  1.10k|                write_number(static_cast<std::uint8_t>(n), use_bjdata);
25118|  1.10k|                break;
25119|  5.67k|            case 'I':
  ------------------
  |  Branch (25119:13): [True: 5.67k, False: 32.5k]
  ------------------
25120|  5.67k|                write_number(static_cast<std::int16_t>(n), use_bjdata);
25121|  5.67k|                break;
25122|    672|            case 'u':
  ------------------
  |  Branch (25122:13): [True: 672, False: 37.5k]
  ------------------
25123|    672|                write_number(static_cast<std::uint16_t>(n), use_bjdata);
25124|    672|                break;
25125|  5.08k|            case 'l':
  ------------------
  |  Branch (25125:13): [True: 5.08k, False: 33.1k]
  ------------------
25126|  5.08k|                write_number(static_cast<std::int32_t>(n), use_bjdata);
25127|  5.08k|                break;
25128|    477|            case 'm':
  ------------------
  |  Branch (25128:13): [True: 477, False: 37.7k]
  ------------------
25129|    477|                write_number(static_cast<std::uint32_t>(n), use_bjdata);
25130|    477|                break;
25131|  6.26k|            case 'L':
  ------------------
  |  Branch (25131:13): [True: 6.26k, False: 31.9k]
  ------------------
25132|  6.26k|                write_number(static_cast<std::int64_t>(n), use_bjdata);
25133|  6.26k|                break;
25134|      0|            case 'M':
  ------------------
  |  Branch (25134:13): [True: 0, False: 38.2k]
  ------------------
25135|      0|                write_number(static_cast<std::uint64_t>(n), use_bjdata);
25136|      0|                break;
25137|      0|            default:
  ------------------
  |  Branch (25137:13): [True: 0, False: 38.2k]
  ------------------
25138|      0|            {
25139|       |                // high-precision number: the decimal digits as a string
25140|      0|                JSON_ASSERT(prefix == 'H');
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25140:17): [True: 0, False: 0]
  ------------------
25141|      0|                const auto number = BasicJsonType(n).dump();
25142|      0|                write_number_with_ubjson_prefix(number.size(), true, use_bjdata);
25143|      0|                for (std::size_t i = 0; i < number.size(); ++i)
  ------------------
  |  Branch (25143:41): [True: 0, False: 0]
  ------------------
25144|      0|                {
25145|      0|                    oa.write_character(to_char_type(static_cast<std::uint8_t>(number[i])));
25146|      0|                }
25147|      0|                break;
25148|      0|            }
25149|  38.2k|        }
25150|  38.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIaEEvT_b:
26103|   301k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|   301k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|   301k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|   301k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 301k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|   301k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|   301k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIhEEvT_b:
26103|  19.0k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  19.0k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  19.0k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  19.0k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 19.0k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  19.0k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  19.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIsEEvT_b:
26103|  10.0k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  10.0k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  10.0k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  10.0k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 10.0k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  10.0k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  10.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberItEEvT_b:
26103|  4.04k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  4.04k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  4.04k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  4.04k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 4.04k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  4.04k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  4.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIiEEvT_b:
26103|  7.99k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  7.99k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  7.99k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  7.99k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 7.99k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  7.99k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  7.99k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIjEEvT_b:
26103|  3.59k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  3.59k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  3.59k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  3.59k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 3.59k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  3.59k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  3.59k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIlEEvT_b:
26103|  10.1k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  10.1k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  10.1k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  10.1k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 10.1k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  10.1k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  10.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberImEEvT_b:
26103|  6.00k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  6.00k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  6.00k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  6.00k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 6.00k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  6.00k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  6.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE31write_number_with_ubjson_prefixImTnNS4_9enable_ifIXsr11is_integralIT_EE5valueEiE4typeELi0EEEvSM_bb:
25040|   304k|    {
25041|   304k|        const CharType prefix = ubjson_integer_prefix(n, use_bjdata);
25042|   304k|        if (add_prefix)
  ------------------
  |  Branch (25042:13): [True: 291k, False: 13.2k]
  ------------------
25043|   291k|        {
25044|   291k|            oa.write_character(prefix);
25045|   291k|        }
25046|   304k|        write_ubjson_integer_payload(prefix, n, use_bjdata);
25047|   304k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE21ubjson_integer_prefixImEEhT_b:
25067|   322k|    {
25068|   322k|        if (value_in_range_of<std::int8_t>(n))
  ------------------
  |  Branch (25068:13): [True: 290k, False: 32.2k]
  ------------------
25069|   290k|        {
25070|   290k|            return 'i';
25071|   290k|        }
25072|  32.2k|        if (value_in_range_of<std::uint8_t>(n))
  ------------------
  |  Branch (25072:13): [True: 13.3k, False: 18.9k]
  ------------------
25073|  13.3k|        {
25074|  13.3k|            return 'U';
25075|  13.3k|        }
25076|  18.9k|        if (value_in_range_of<std::int16_t>(n))
  ------------------
  |  Branch (25076:13): [True: 2.98k, False: 15.9k]
  ------------------
25077|  2.98k|        {
25078|  2.98k|            return 'I';
25079|  2.98k|        }
25080|  15.9k|        if (use_bjdata && value_in_range_of<std::uint16_t>(n))
  ------------------
  |  Branch (25080:13): [True: 15.9k, False: 0]
  |  Branch (25080:27): [True: 2.38k, False: 13.5k]
  ------------------
25081|  2.38k|        {
25082|  2.38k|            return 'u';
25083|  2.38k|        }
25084|  13.5k|        if (value_in_range_of<std::int32_t>(n))
  ------------------
  |  Branch (25084:13): [True: 1.91k, False: 11.6k]
  ------------------
25085|  1.91k|        {
25086|  1.91k|            return 'l';
25087|  1.91k|        }
25088|  11.6k|        if (use_bjdata && value_in_range_of<std::uint32_t>(n))
  ------------------
  |  Branch (25088:13): [True: 11.6k, False: 0]
  |  Branch (25088:27): [True: 2.65k, False: 8.97k]
  ------------------
25089|  2.65k|        {
25090|  2.65k|            return 'm';
25091|  2.65k|        }
25092|  8.97k|        if (value_in_range_of<std::int64_t>(n))
  ------------------
  |  Branch (25092:13): [True: 3.10k, False: 5.87k]
  ------------------
25093|  3.10k|        {
25094|  3.10k|            return 'L';
25095|  3.10k|        }
25096|  5.87k|        if (use_bjdata && std::is_unsigned<NumberType>::value)
  ------------------
  |  Branch (25096:13): [True: 5.87k, False: 0]
  |  Branch (25096:27): [True: 0, Folded]
  ------------------
25097|  5.87k|        {
25098|  5.87k|            return 'M';
25099|  5.87k|        }
25100|       |        // anything else is treated as a high-precision number
25101|      0|        return 'H';
25102|  5.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIamEEbT0_:
 5101|   323k|{
 5102|   323k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|   323k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IamLb0EvE4testEm:
 5085|   323k|    {
 5086|   323k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|   323k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IamLb1ELb0EE4testEm:
 5049|   323k|    {
 5050|   323k|        using CommonType = typename std::common_type<OfType, T>::type;
 5051|   323k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5052|   323k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIhmEEbT0_:
 5101|  39.8k|{
 5102|  39.8k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  39.8k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IhmLb0EvE4testEm:
 5085|  39.8k|    {
 5086|  39.8k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  39.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IhmLb0ELb0EE4testEm:
 5039|  39.8k|    {
 5040|  39.8k|        using CommonType = typename std::common_type<OfType, T>::type;
 5041|  39.8k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5042|  39.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIsmEEbT0_:
 5101|  19.5k|{
 5102|  19.5k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  19.5k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IsmLb0EvE4testEm:
 5085|  19.5k|    {
 5086|  19.5k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  19.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IsmLb1ELb0EE4testEm:
 5049|  19.5k|    {
 5050|  19.5k|        using CommonType = typename std::common_type<OfType, T>::type;
 5051|  19.5k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5052|  19.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofItmEEbT0_:
 5101|  17.4k|{
 5102|  17.4k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  17.4k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1ItmLb0EvE4testEm:
 5085|  17.4k|    {
 5086|  17.4k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  17.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2ItmLb0ELb0EE4testEm:
 5039|  17.4k|    {
 5040|  17.4k|        using CommonType = typename std::common_type<OfType, T>::type;
 5041|  17.4k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5042|  17.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIimEEbT0_:
 5101|  13.9k|{
 5102|  13.9k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  13.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IimLb0EvE4testEm:
 5085|  13.9k|    {
 5086|  13.9k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  13.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IimLb1ELb0EE4testEm:
 5049|  13.9k|    {
 5050|  13.9k|        using CommonType = typename std::common_type<OfType, T>::type;
 5051|  13.9k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5052|  13.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail17value_in_range_ofIjmEEbT0_:
 5101|  12.6k|{
 5102|  12.6k|    return value_in_range_of_impl1<OfType, T>::test(val);
 5103|  12.6k|}
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl1IjmLb0EvE4testEm:
 5085|  12.6k|    {
 5086|  12.6k|        return value_in_range_of_impl2<OfType, T>::test(val);
 5087|  12.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail23value_in_range_of_impl2IjmLb0ELb0EE4testEm:
 5039|  12.6k|    {
 5040|  12.6k|        using CommonType = typename std::common_type<OfType, T>::type;
 5041|  12.6k|        return static_cast<CommonType>(val) <= static_cast<CommonType>((std::numeric_limits<OfType>::max)());
 5042|  12.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_ubjson_integer_payloadImEEvhT_b:
25110|   304k|    {
25111|   304k|        switch (prefix)
25112|   304k|        {
25113|   278k|            case 'i':
  ------------------
  |  Branch (25113:13): [True: 278k, False: 26.0k]
  ------------------
25114|   278k|                write_number(static_cast<std::int8_t>(n), use_bjdata);
25115|   278k|                break;
25116|  10.7k|            case 'U':
  ------------------
  |  Branch (25116:13): [True: 10.7k, False: 294k]
  ------------------
25117|  10.7k|                write_number(static_cast<std::uint8_t>(n), use_bjdata);
25118|  10.7k|                break;
25119|  2.44k|            case 'I':
  ------------------
  |  Branch (25119:13): [True: 2.44k, False: 302k]
  ------------------
25120|  2.44k|                write_number(static_cast<std::int16_t>(n), use_bjdata);
25121|  2.44k|                break;
25122|  1.87k|            case 'u':
  ------------------
  |  Branch (25122:13): [True: 1.87k, False: 303k]
  ------------------
25123|  1.87k|                write_number(static_cast<std::uint16_t>(n), use_bjdata);
25124|  1.87k|                break;
25125|  1.59k|            case 'l':
  ------------------
  |  Branch (25125:13): [True: 1.59k, False: 303k]
  ------------------
25126|  1.59k|                write_number(static_cast<std::int32_t>(n), use_bjdata);
25127|  1.59k|                break;
25128|  2.14k|            case 'm':
  ------------------
  |  Branch (25128:13): [True: 2.14k, False: 302k]
  ------------------
25129|  2.14k|                write_number(static_cast<std::uint32_t>(n), use_bjdata);
25130|  2.14k|                break;
25131|  2.53k|            case 'L':
  ------------------
  |  Branch (25131:13): [True: 2.53k, False: 302k]
  ------------------
25132|  2.53k|                write_number(static_cast<std::int64_t>(n), use_bjdata);
25133|  2.53k|                break;
25134|  4.73k|            case 'M':
  ------------------
  |  Branch (25134:13): [True: 4.73k, False: 300k]
  ------------------
25135|  4.73k|                write_number(static_cast<std::uint64_t>(n), use_bjdata);
25136|  4.73k|                break;
25137|      0|            default:
  ------------------
  |  Branch (25137:13): [True: 0, False: 304k]
  ------------------
25138|      0|            {
25139|       |                // high-precision number: the decimal digits as a string
25140|      0|                JSON_ASSERT(prefix == 'H');
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (25140:17): [True: 0, False: 0]
  ------------------
25141|      0|                const auto number = BasicJsonType(n).dump();
25142|      0|                write_number_with_ubjson_prefix(number.size(), true, use_bjdata);
25143|      0|                for (std::size_t i = 0; i < number.size(); ++i)
  ------------------
  |  Branch (25143:41): [True: 0, False: 0]
  ------------------
25144|      0|                {
25145|      0|                    oa.write_character(to_char_type(static_cast<std::uint8_t>(number[i])));
25146|      0|                }
25147|      0|                break;
25148|      0|            }
25149|   304k|        }
25150|   304k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE31write_number_with_ubjson_prefixIdTnNS4_9enable_ifIXsr17is_floating_pointIT_EE5valueEiE4typeELi0EEEvSM_bb:
25026|  79.5k|    {
25027|  79.5k|        if (add_prefix)
  ------------------
  |  Branch (25027:13): [True: 59.1k, False: 20.3k]
  ------------------
25028|  59.1k|        {
25029|  59.1k|            oa.write_character(get_ubjson_float_prefix<NumberType>());
25030|  59.1k|        }
25031|  79.5k|        write_number(n, use_bjdata);
25032|  79.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE23get_ubjson_float_prefixIdEEhv:
25211|  79.9k|    {
25212|  79.9k|        static_assert(std::is_same<FloatType, float>::value || std::is_same<FloatType, double>::value,
25213|  79.9k|                      "number_float_t must be float or double for the UBJSON/BJData writer");
25214|  79.9k|        return std::is_same<FloatType, float>::value ? 'd' : 'D';  // float 32 / float 64
  ------------------
  |  Branch (25214:16): [Folded, False: 79.9k]
  ------------------
25215|  79.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIdEEvT_b:
26103|  80.7k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  80.7k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  80.7k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  80.7k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 80.7k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  80.7k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  80.7k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE23sanitize_utf8_for_writeERKSC_RKSG_RSC_:
25865|  92.3k|    {
25866|  92.3k|        switch (error_handler)
25867|  92.3k|        {
25868|  92.3k|            case error_handler_t::keep:
  ------------------
  |  Branch (25868:13): [True: 92.3k, False: 0]
  ------------------
25869|  92.3k|                return s; // NOLINT(bugprone-return-const-ref-from-parameter): callers pass lvalues that outlive the call
25870|       |
25871|      0|            case error_handler_t::strict:
  ------------------
  |  Branch (25871:13): [True: 0, False: 92.3k]
  ------------------
25872|      0|                check_utf8(s, context);
25873|      0|                return s; // NOLINT(bugprone-return-const-ref-from-parameter): callers pass lvalues that outlive the call
25874|       |
25875|      0|            case error_handler_t::replace:
  ------------------
  |  Branch (25875:13): [True: 0, False: 92.3k]
  ------------------
25876|      0|            case error_handler_t::ignore:
  ------------------
  |  Branch (25876:13): [True: 0, False: 92.3k]
  ------------------
25877|      0|            default:
  ------------------
  |  Branch (25877:13): [True: 0, False: 92.3k]
  ------------------
25878|      0|                if (is_valid_utf8(s))
  ------------------
  |  Branch (25878:21): [True: 0, False: 0]
  ------------------
25879|      0|                {
25880|      0|                    return s; // NOLINT(bugprone-return-const-ref-from-parameter): callers pass lvalues that outlive the call
25881|      0|                }
25882|      0|                storage = sanitize_utf8(s, error_handler);
25883|      0|                return storage;
25884|  92.3k|        }
25885|  92.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18output_vector_sinkIhNSt3__19allocatorIhEEE16write_charactersEPKhm:
22753|   540k|    {
22754|   540k|        v.insert(v.end(), s, s + length);
22755|   540k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE24write_ubjson_start_arrayERKSG_bbbbRb:
24019|   201k|    {
24020|   201k|        prefix_required = true;
24021|   201k|        if (add_prefix)
  ------------------
  |  Branch (24021:13): [True: 201k, False: 0]
  ------------------
24022|   201k|        {
24023|   201k|            oa.write_character(to_char_type('['));
24024|   201k|        }
24025|       |
24026|   201k|        if (use_type && !j.m_data.m_value.array->empty())
  ------------------
  |  Branch (24026:13): [True: 63.4k, False: 137k]
  |  Branch (24026:25): [True: 61.4k, False: 1.93k]
  ------------------
24027|  61.4k|        {
24028|  61.4k|            if (!use_count)
  ------------------
  |  Branch (24028:17): [True: 0, False: 61.4k]
  ------------------
24029|      0|            {
24030|      0|                JSON_THROW(other_error::create(exception_id::size_marker_required, "use_type requires use_size = true", &j));
  ------------------
  |  | 2556|      0|    #define JSON_THROW(exception) throw exception
  ------------------
24031|      0|            }
24032|  61.4k|            const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
24033|  61.4k|            const bool same_prefix = std::all_of(j.begin() + 1, j.end(),
24034|  61.4k|                                                 [this, first_prefix, use_bjdata](const BasicJsonType & v)
24035|  61.4k|            {
24036|  61.4k|                return ubjson_prefix(v, use_bjdata) == first_prefix;
24037|  61.4k|            });
24038|       |
24039|       |            // an optimized array of a valueless type carries no payload, so a
24040|       |            // reader has nothing but the declared count to bound the allocation
24041|       |            // by and refuses an excessive one. Write the unoptimized form for
24042|       |            // those, at one byte per element, so the result can be read back.
24043|       |            // Objects are not affected: every element is preceded by its key.
24044|  61.4k|            const bool valueless_type = (first_prefix == 'Z' || first_prefix == 'T' || first_prefix == 'F');
  ------------------
  |  Branch (24044:42): [True: 754, False: 60.7k]
  |  Branch (24044:65): [True: 933, False: 59.8k]
  |  Branch (24044:88): [True: 766, False: 59.0k]
  ------------------
24045|  61.4k|            const bool excessive_valueless = valueless_type
  ------------------
  |  Branch (24045:46): [True: 2.45k, False: 59.0k]
  ------------------
24046|  2.45k|                                             && j.m_data.m_value.array->size() > detail::max_valueless_container_size;
  ------------------
  |  Branch (24046:49): [True: 0, False: 2.45k]
  ------------------
24047|       |
24048|  61.4k|            if (same_prefix && !excessive_valueless
  ------------------
  |  Branch (24048:17): [True: 55.7k, False: 5.73k]
  |  Branch (24048:32): [True: 55.7k, False: 0]
  ------------------
24049|  55.7k|                    && !(use_bjdata && is_bjdata_excluded_type_marker(first_prefix)))
  ------------------
  |  Branch (24049:26): [True: 55.7k, False: 0]
  |  Branch (24049:40): [True: 48.1k, False: 7.60k]
  ------------------
24050|  7.60k|            {
24051|  7.60k|                prefix_required = false;
24052|  7.60k|                oa.write_character(to_char_type('$'));
24053|  7.60k|                oa.write_character(first_prefix);
24054|  7.60k|            }
24055|  61.4k|        }
24056|       |
24057|   201k|        if (use_count)
  ------------------
  |  Branch (24057:13): [True: 126k, False: 74.4k]
  ------------------
24058|   126k|        {
24059|   126k|            oa.write_character(to_char_type('#'));
24060|   126k|            write_number_with_ubjson_prefix(j.m_data.m_value.array->size(), true, use_bjdata);
24061|   126k|        }
24062|       |
24063|   201k|        return !use_count;
24064|   201k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE13ubjson_prefixERKSG_b:
25156|   145k|    {
25157|   145k|        switch (j.type())
25158|   145k|        {
25159|  8.99k|            case value_t::null:
  ------------------
  |  Branch (25159:13): [True: 8.99k, False: 136k]
  ------------------
25160|  8.99k|                return 'Z';
25161|       |
25162|  10.9k|            case value_t::boolean:
  ------------------
  |  Branch (25162:13): [True: 10.9k, False: 134k]
  ------------------
25163|  10.9k|                return j.m_data.m_value.boolean ? 'T' : 'F';
  ------------------
  |  Branch (25163:24): [True: 7.05k, False: 3.87k]
  ------------------
25164|       |
25165|  10.6k|            case value_t::number_integer:
  ------------------
  |  Branch (25165:13): [True: 10.6k, False: 134k]
  ------------------
25166|  10.6k|                return ubjson_integer_prefix(j.m_data.m_value.number_integer, use_bjdata);
25167|       |
25168|  17.6k|            case value_t::number_unsigned:
  ------------------
  |  Branch (25168:13): [True: 17.6k, False: 127k]
  ------------------
25169|  17.6k|                return ubjson_integer_prefix(j.m_data.m_value.number_unsigned, use_bjdata);
25170|       |
25171|  20.8k|            case value_t::number_float:
  ------------------
  |  Branch (25171:13): [True: 20.8k, False: 124k]
  ------------------
25172|  20.8k|                return get_ubjson_float_prefix<number_float_t>();
25173|       |
25174|  9.67k|            case value_t::string:
  ------------------
  |  Branch (25174:13): [True: 9.67k, False: 135k]
  ------------------
25175|  9.67k|                return 'S';
25176|       |
25177|  56.1k|            case value_t::array: // fallthrough
  ------------------
  |  Branch (25177:13): [True: 56.1k, False: 89.1k]
  ------------------
25178|  57.1k|            case value_t::binary:
  ------------------
  |  Branch (25178:13): [True: 982, False: 144k]
  ------------------
25179|  57.1k|                return '[';
25180|       |
25181|  9.38k|            case value_t::object:
  ------------------
  |  Branch (25181:13): [True: 9.38k, False: 135k]
  ------------------
25182|  9.38k|                return '{';
25183|       |
25184|      0|            case value_t::discarded:
  ------------------
  |  Branch (25184:13): [True: 0, False: 145k]
  ------------------
25185|      0|            default:  // discarded values
  ------------------
  |  Branch (25185:13): [True: 0, False: 145k]
  ------------------
25186|      0|                return 'N';
25187|   145k|        }
25188|   145k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE5frontEv:
34074|  68.1k|    {
34075|  68.1k|        return *cbegin();
34076|  68.1k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE6cbeginEv:
34456|   183k|    {
34457|   183k|        const_iterator result(this);
34458|   183k|        result.set_begin();
34459|   183k|        return result;
34460|   183k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEC2EPSH_:
20171|   299k|    explicit iter_impl(pointer object) noexcept : m_object(object)
20172|   299k|    {
20173|   299k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2591|   299k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (20173:9): [True: 299k, False: 0]
  ------------------
20174|       |
20175|   299k|        switch (m_object->m_data.m_type)
20176|   299k|        {
20177|  20.0k|            case value_t::object:
  ------------------
  |  Branch (20177:13): [True: 20.0k, False: 279k]
  ------------------
20178|  20.0k|            {
20179|  20.0k|                m_it.object_iterator = typename object_t::iterator();
20180|  20.0k|                break;
20181|      0|            }
20182|       |
20183|   279k|            case value_t::array:
  ------------------
  |  Branch (20183:13): [True: 279k, False: 20.0k]
  ------------------
20184|   279k|            {
20185|   279k|                m_it.array_iterator = typename array_t::iterator();
20186|   279k|                break;
20187|      0|            }
20188|       |
20189|      0|            case value_t::null:
  ------------------
  |  Branch (20189:13): [True: 0, False: 299k]
  ------------------
20190|      0|            case value_t::string:
  ------------------
  |  Branch (20190:13): [True: 0, False: 299k]
  ------------------
20191|      0|            case value_t::boolean:
  ------------------
  |  Branch (20191:13): [True: 0, False: 299k]
  ------------------
20192|      0|            case value_t::number_integer:
  ------------------
  |  Branch (20192:13): [True: 0, False: 299k]
  ------------------
20193|      0|            case value_t::number_unsigned:
  ------------------
  |  Branch (20193:13): [True: 0, False: 299k]
  ------------------
20194|      0|            case value_t::number_float:
  ------------------
  |  Branch (20194:13): [True: 0, False: 299k]
  ------------------
20195|      0|            case value_t::binary:
  ------------------
  |  Branch (20195:13): [True: 0, False: 299k]
  ------------------
20196|      0|            case value_t::discarded:
  ------------------
  |  Branch (20196:13): [True: 0, False: 299k]
  ------------------
20197|      0|            default:
  ------------------
  |  Branch (20197:13): [True: 0, False: 299k]
  ------------------
20198|      0|            {
20199|      0|                m_it.primitive_iterator = primitive_iterator_t();
20200|      0|                break;
20201|      0|            }
20202|   299k|        }
20203|   299k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE9set_beginEv:
20269|   183k|    {
20270|   183k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2591|   183k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (20270:9): [True: 183k, False: 0]
  ------------------
20271|       |
20272|   183k|        switch (m_object->m_data.m_type)
20273|   183k|        {
20274|  13.3k|            case value_t::object:
  ------------------
  |  Branch (20274:13): [True: 13.3k, False: 170k]
  ------------------
20275|  13.3k|            {
20276|  13.3k|                m_it.object_iterator = m_object->m_data.m_value.object->begin();
20277|  13.3k|                break;
20278|      0|            }
20279|       |
20280|   170k|            case value_t::array:
  ------------------
  |  Branch (20280:13): [True: 170k, False: 13.3k]
  ------------------
20281|   170k|            {
20282|   170k|                m_it.array_iterator = m_object->m_data.m_value.array->begin();
20283|   170k|                break;
20284|      0|            }
20285|       |
20286|      0|            case value_t::null:
  ------------------
  |  Branch (20286:13): [True: 0, False: 183k]
  ------------------
20287|      0|            {
20288|       |                // set to end so begin()==end() is true: null is empty
20289|      0|                m_it.primitive_iterator.set_end();
20290|      0|                break;
20291|      0|            }
20292|       |
20293|      0|            case value_t::string:
  ------------------
  |  Branch (20293:13): [True: 0, False: 183k]
  ------------------
20294|      0|            case value_t::boolean:
  ------------------
  |  Branch (20294:13): [True: 0, False: 183k]
  ------------------
20295|      0|            case value_t::number_integer:
  ------------------
  |  Branch (20295:13): [True: 0, False: 183k]
  ------------------
20296|      0|            case value_t::number_unsigned:
  ------------------
  |  Branch (20296:13): [True: 0, False: 183k]
  ------------------
20297|      0|            case value_t::number_float:
  ------------------
  |  Branch (20297:13): [True: 0, False: 183k]
  ------------------
20298|      0|            case value_t::binary:
  ------------------
  |  Branch (20298:13): [True: 0, False: 183k]
  ------------------
20299|      0|            case value_t::discarded:
  ------------------
  |  Branch (20299:13): [True: 0, False: 183k]
  ------------------
20300|      0|            default:
  ------------------
  |  Branch (20300:13): [True: 0, False: 183k]
  ------------------
20301|      0|            {
20302|      0|                m_it.primitive_iterator.set_begin();
20303|      0|                break;
20304|      0|            }
20305|   183k|        }
20306|   183k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEdeEv:
20358|   265k|    {
20359|   265k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2591|   265k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (20359:9): [True: 265k, False: 0]
  ------------------
20360|       |
20361|   265k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::array))
  ------------------
  |  | 1666|   265k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 242k, False: 22.9k]
  |  |  ------------------
  ------------------
20362|   242k|        {
20363|   242k|            JSON_ASSERT(m_it.array_iterator != m_object->m_data.m_value.array->end());
  ------------------
  |  | 2591|   242k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (20363:13): [True: 242k, False: 0]
  ------------------
20364|   242k|            return *m_it.array_iterator;
20365|   242k|        }
20366|       |
20367|  22.9k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::object))
  ------------------
  |  | 1666|  22.9k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 22.9k, False: 0]
  |  |  ------------------
  ------------------
20368|  22.9k|        {
20369|  22.9k|            JSON_ASSERT(m_it.object_iterator != m_object->m_data.m_value.object->end());
  ------------------
  |  | 2591|  22.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (20369:13): [True: 22.9k, False: 0]
  ------------------
20370|  22.9k|            return m_it.object_iterator->second;
20371|  22.9k|        }
20372|       |
20373|       |        // neither array nor object: a primitive value (null has no value to point to)
20374|      0|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type != value_t::null && m_it.primitive_iterator.is_begin()))
  ------------------
  |  | 1666|      0|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 0, False: 0]
  |  |  |  Branch (1666:94): [True: 0, False: 0]
  |  |  |  Branch (1666:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
20375|      0|        {
20376|      0|            return *m_object;
20377|      0|        }
20378|       |
20379|      0|        throw_cannot_get_value();
20380|      0|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEneISI_TnNS4_9enable_ifIXoosr3std7is_sameIT_SI_EE5valuesr3std7is_sameISL_NS2_ISG_EEEE5valueEDnE4typeELDn0EEEbRKSL_:
20522|   299k|    {
20523|   299k|        return !operator==(other);
20524|   299k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEeqISI_TnNS4_9enable_ifIXoosr3std7is_sameIT_SI_EE5valuesr3std7is_sameISL_NS2_ISG_EEEE5valueEDnE4typeELDn0EEEbRKSL_:
20489|   299k|    {
20490|       |        // if objects are not the same, the comparison is undefined
20491|   299k|        if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object))
  ------------------
  |  | 1667|   299k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 299k]
  |  |  ------------------
  ------------------
20492|      0|        {
20493|      0|            throw_literal<invalid_iterator>(exception_id::iterators_compare_different_values, "cannot compare iterators of different containers", m_object);
20494|      0|        }
20495|       |
20496|       |        // value-initialized forward iterators can be compared, and must compare equal to other value-initialized iterators of the same type #4493
20497|   299k|        if (m_object == nullptr)
  ------------------
  |  Branch (20497:13): [True: 0, False: 299k]
  ------------------
20498|      0|        {
20499|      0|            return true;
20500|      0|        }
20501|       |
20502|   299k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::array))
  ------------------
  |  | 1666|   299k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 279k, False: 20.1k]
  |  |  ------------------
  ------------------
20503|   279k|        {
20504|   279k|            return (m_it.array_iterator == other.m_it.array_iterator);
20505|   279k|        }
20506|       |
20507|  20.1k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::object))
  ------------------
  |  | 1666|  20.1k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 20.1k, False: 0]
  |  |  ------------------
  ------------------
20508|  20.1k|        {
20509|  20.1k|            return (m_it.object_iterator == other.m_it.object_iterator);
20510|  20.1k|        }
20511|       |
20512|       |        // neither array nor object: a primitive value
20513|      0|        return (m_it.primitive_iterator == other.m_it.primitive_iterator);
20514|  20.1k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE24write_ubjson_start_arrayERKSG_bbbbRbENKUlSL_E_clESL_:
24035|  60.8k|            {
24036|  60.8k|                return ubjson_prefix(v, use_bjdata) == first_prefix;
24037|  60.8k|            });
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEppEv:
20427|   183k|    {
20428|   183k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2591|   183k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (20428:9): [True: 183k, False: 0]
  ------------------
20429|       |
20430|   183k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::array))
  ------------------
  |  | 1666|   183k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 170k, False: 13.4k]
  |  |  ------------------
  ------------------
20431|   170k|        {
20432|   170k|            ++m_it.array_iterator;
20433|   170k|            return *this;
20434|   170k|        }
20435|       |
20436|  13.4k|        if (JSON_HEDLEY_LIKELY(m_object->m_data.m_type == value_t::object))
  ------------------
  |  | 1666|  13.4k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 13.4k, False: 0]
  |  |  ------------------
  ------------------
20437|  13.4k|        {
20438|  13.4k|            std::advance(m_it.object_iterator, 1);
20439|  13.4k|            return *this;
20440|  13.4k|        }
20441|       |
20442|       |        // neither array nor object: a primitive value
20443|      0|        ++m_it.primitive_iterator;
20444|      0|        return *this;
20445|  13.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEC2ERKSI_:
20222|   197k|        : m_object(other.m_object), m_it(other.m_it)
20223|   197k|    {}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE5beginEv:
34449|   115k|    {
34450|   115k|        return cbegin();
34451|   115k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEplEl:
20644|  61.4k|    {
20645|  61.4k|        auto result = *this;
20646|  61.4k|        result += i;
20647|  61.4k|        return result;
20648|  61.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEpLEl:
20598|  61.4k|    {
20599|  61.4k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2591|  61.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (20599:9): [True: 61.4k, False: 0]
  ------------------
20600|       |
20601|  61.4k|        switch (m_object->m_data.m_type)
20602|  61.4k|        {
20603|      0|            case value_t::object:
  ------------------
  |  Branch (20603:13): [True: 0, False: 61.4k]
  ------------------
20604|      0|                throw_literal<invalid_iterator>(exception_id::iterator_arithmetic_on_object, "cannot use offsets with object iterators", m_object);
20605|       |
20606|  61.4k|            case value_t::array:
  ------------------
  |  Branch (20606:13): [True: 61.4k, False: 0]
  ------------------
20607|  61.4k|            {
20608|  61.4k|                std::advance(m_it.array_iterator, i);
20609|  61.4k|                break;
20610|      0|            }
20611|       |
20612|      0|            case value_t::null:
  ------------------
  |  Branch (20612:13): [True: 0, False: 61.4k]
  ------------------
20613|      0|            case value_t::string:
  ------------------
  |  Branch (20613:13): [True: 0, False: 61.4k]
  ------------------
20614|      0|            case value_t::boolean:
  ------------------
  |  Branch (20614:13): [True: 0, False: 61.4k]
  ------------------
20615|      0|            case value_t::number_integer:
  ------------------
  |  Branch (20615:13): [True: 0, False: 61.4k]
  ------------------
20616|      0|            case value_t::number_unsigned:
  ------------------
  |  Branch (20616:13): [True: 0, False: 61.4k]
  ------------------
20617|      0|            case value_t::number_float:
  ------------------
  |  Branch (20617:13): [True: 0, False: 61.4k]
  ------------------
20618|      0|            case value_t::binary:
  ------------------
  |  Branch (20618:13): [True: 0, False: 61.4k]
  ------------------
20619|      0|            case value_t::discarded:
  ------------------
  |  Branch (20619:13): [True: 0, False: 61.4k]
  ------------------
20620|      0|            default:
  ------------------
  |  Branch (20620:13): [True: 0, False: 61.4k]
  ------------------
20621|      0|            {
20622|      0|                m_it.primitive_iterator += i;
20623|      0|                break;
20624|      0|            }
20625|  61.4k|        }
20626|       |
20627|  61.4k|        return *this;
20628|  61.4k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3endEv:
34474|   115k|    {
34475|   115k|        return cend();
34476|   115k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE4cendEv:
34481|   115k|    {
34482|   115k|        const_iterator result(this);
34483|   115k|        result.set_end();
34484|   115k|        return result;
34485|   115k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9iter_implIKNS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEE7set_endEv:
20313|   115k|    {
20314|   115k|        JSON_ASSERT(m_object != nullptr);
  ------------------
  |  | 2591|   115k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (20314:9): [True: 115k, False: 0]
  ------------------
20315|       |
20316|   115k|        switch (m_object->m_data.m_type)
20317|   115k|        {
20318|  6.67k|            case value_t::object:
  ------------------
  |  Branch (20318:13): [True: 6.67k, False: 109k]
  ------------------
20319|  6.67k|            {
20320|  6.67k|                m_it.object_iterator = m_object->m_data.m_value.object->end();
20321|  6.67k|                break;
20322|      0|            }
20323|       |
20324|   109k|            case value_t::array:
  ------------------
  |  Branch (20324:13): [True: 109k, False: 6.67k]
  ------------------
20325|   109k|            {
20326|   109k|                m_it.array_iterator = m_object->m_data.m_value.array->end();
20327|   109k|                break;
20328|      0|            }
20329|       |
20330|      0|            case value_t::null:
  ------------------
  |  Branch (20330:13): [True: 0, False: 115k]
  ------------------
20331|      0|            case value_t::string:
  ------------------
  |  Branch (20331:13): [True: 0, False: 115k]
  ------------------
20332|      0|            case value_t::boolean:
  ------------------
  |  Branch (20332:13): [True: 0, False: 115k]
  ------------------
20333|      0|            case value_t::number_integer:
  ------------------
  |  Branch (20333:13): [True: 0, False: 115k]
  ------------------
20334|      0|            case value_t::number_unsigned:
  ------------------
  |  Branch (20334:13): [True: 0, False: 115k]
  ------------------
20335|      0|            case value_t::number_float:
  ------------------
  |  Branch (20335:13): [True: 0, False: 115k]
  ------------------
20336|      0|            case value_t::binary:
  ------------------
  |  Branch (20336:13): [True: 0, False: 115k]
  ------------------
20337|      0|            case value_t::discarded:
  ------------------
  |  Branch (20337:13): [True: 0, False: 115k]
  ------------------
20338|      0|            default:
  ------------------
  |  Branch (20338:13): [True: 0, False: 115k]
  ------------------
20339|      0|            {
20340|      0|                m_it.primitive_iterator.set_end();
20341|      0|                break;
20342|      0|            }
20343|   115k|        }
20344|   115k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE30is_bjdata_excluded_type_markerEh:
25200|  59.6k|    {
25201|  59.6k|        return marker == '[' || marker == '{' || marker == 'S' || marker == 'H'
  ------------------
  |  Branch (25201:16): [True: 44.1k, False: 15.5k]
  |  Branch (25201:33): [True: 3.10k, False: 12.4k]
  |  Branch (25201:50): [True: 629, False: 11.7k]
  |  Branch (25201:67): [True: 0, False: 11.7k]
  ------------------
25202|  11.7k|               || marker == 'T' || marker == 'F' || marker == 'N' || marker == 'Z';
  ------------------
  |  Branch (25202:19): [True: 2.02k, False: 9.76k]
  |  Branch (25202:36): [True: 490, False: 9.27k]
  |  Branch (25202:53): [True: 0, False: 9.27k]
  |  Branch (25202:70): [True: 907, False: 8.37k]
  ------------------
25203|  59.6k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE17is_bjdata_ndarrayERKSG_:
24118|  35.8k|    {
24119|  35.8k|        const auto& object = *j.m_data.m_value.object;
24120|  35.8k|        return object.size() == 3
  ------------------
  |  Branch (24120:16): [True: 18.1k, False: 17.7k]
  ------------------
24121|  18.1k|               && object.find("_ArrayType_") != object.end()
  ------------------
  |  Branch (24121:19): [True: 16.6k, False: 1.50k]
  ------------------
24122|  16.6k|               && object.find("_ArraySize_") != object.end()
  ------------------
  |  Branch (24122:19): [True: 16.5k, False: 112]
  ------------------
24123|  16.5k|               && object.find("_ArrayData_") != object.end();
  ------------------
  |  Branch (24123:19): [True: 16.4k, False: 58]
  ------------------
24124|  35.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE20write_bjdata_ndarrayERKNS5_ISC_SG_NS4_4lessISC_EENSA_INS4_4pairIKSC_SG_EEEEEEbbNS1_16bjdata_version_tE:
25405|  16.4k|    {
25406|  16.4k|        const auto& array_type = value.at("_ArrayType_");
25407|       |        // the type name is looked up as a string below; a non-string
25408|       |        // annotation (e.g. a number, null, or an array) cannot name a known
25409|       |        // dtype, so it is treated the same as an unrecognized type name and
25410|       |        // falls back to a plain object encoding instead of throwing
25411|       |        // type_error.302 out of get<string_t>()
25412|  16.4k|        if (!array_type.is_string())
  ------------------
  |  Branch (25412:13): [True: 72, False: 16.4k]
  ------------------
25413|     72|        {
25414|     72|            return true;
25415|     72|        }
25416|       |
25417|       |        // use get<string_t>() instead of static_cast<string_t> to avoid an
25418|       |        // ambiguous conversion under explicit instantiation on C++17 (see #4825)
25419|  16.4k|        const CharType dtype = bjdata_ndarray_type_marker(array_type.template get<string_t>());
25420|  16.4k|        if (dtype == '\0')
  ------------------
  |  Branch (25420:13): [True: 150, False: 16.2k]
  ------------------
25421|    150|        {
25422|    150|            return true;
25423|    150|        }
25424|       |
25425|       |        // the 'B' (byte) marker is only defined from BJData Draft 3 onward;
25426|       |        // emitting it under an earlier draft would produce a stream that an
25427|       |        // earlier-draft reader rejects, so such an object falls back to a
25428|       |        // plain object encoding instead (see the "Binary values" section of
25429|       |        // the BJData documentation)
25430|  16.2k|        if (dtype == 'B' && bjdata_version < bjdata_version_t::draft3)
  ------------------
  |  Branch (25430:13): [True: 1.84k, False: 14.4k]
  |  Branch (25430:29): [True: 1.84k, False: 0]
  ------------------
25431|  1.84k|        {
25432|  1.84k|            return true;
25433|  1.84k|        }
25434|       |
25435|  14.4k|        const auto& array_size = value.at("_ArraySize_");
25436|       |        // the dimensions are written verbatim as the header length below, so a
25437|       |        // value that is not an array cannot produce a valid one: null emits 'Z'
25438|       |        // and an object emits '{', neither of which a reader accepts after '#'.
25439|       |        // Such an object is not a valid ndarray and falls back to a plain object.
25440|  14.4k|        if (!array_size.is_array())
  ------------------
  |  Branch (25440:13): [True: 190, False: 14.2k]
  ------------------
25441|    190|        {
25442|    190|            return true;
25443|    190|        }
25444|       |
25445|       |        // the reader only restores an annotated object from an ND-array header
25446|       |        // with at least two dimensions: an empty dimension vector, a single
25447|       |        // dimension, or a 1xN row vector is read back as a plain array, which
25448|       |        // would silently drop the annotation, so such an object falls back to
25449|       |        // a plain object encoding instead
25450|  14.2k|        const auto& dims = array_size;
25451|  14.2k|        if (dims.size() < 2 || (dims.size() == 2 && dims.at(0).is_number_integer() && dims.at(0).template get<std::int64_t>() == 1))
  ------------------
  |  Branch (25451:13): [True: 81, False: 14.1k]
  |  Branch (25451:33): [True: 10.1k, False: 4.00k]
  |  Branch (25451:53): [True: 10.0k, False: 78]
  |  Branch (25451:87): [True: 78, False: 9.98k]
  ------------------
25452|    159|        {
25453|    159|            return true;
25454|    159|        }
25455|       |
25456|  14.0k|        std::size_t len = 1;
25457|  14.0k|        for (const auto& el : dims)
  ------------------
  |  Branch (25457:29): [True: 34.3k, False: 13.1k]
  ------------------
25458|  34.3k|        {
25459|       |            // a dimension is read as an unsigned value below, so anything that
25460|       |            // is not a non-negative integer is rejected: a non-integer entry
25461|       |            // would pun unrelated bytes as the dimension, and a negative one
25462|       |            // would wrap into a nonsensical length
25463|  34.3k|            if (!el.is_number_integer() || (!el.is_number_unsigned() && el.template get<std::int64_t>() < 0))
  ------------------
  |  Branch (25463:17): [True: 236, False: 34.0k]
  |  Branch (25463:45): [True: 7.90k, False: 26.1k]
  |  Branch (25463:73): [True: 470, False: 7.43k]
  ------------------
25464|    706|            {
25465|    706|                return true;
25466|    706|            }
25467|       |
25468|       |            // a dimension that does not fit into std::size_t, or a product that
25469|       |            // overflows it, would wrap around and could match the size of
25470|       |            // _ArrayData_ by accident; the resulting header announces an
25471|       |            // element count that no reader can honor (the binary reader rejects
25472|       |            // it with out_of_range.408), so encode as a plain object instead
25473|  33.6k|            const auto dim = el.template get<std::uint64_t>();
25474|  33.6k|            if (!value_in_range_of<std::size_t>(dim))
  ------------------
  |  Branch (25474:17): [True: 0, False: 33.6k]
  ------------------
25475|      0|            {
25476|      0|                return true;
25477|      0|            }
25478|  33.6k|            const auto dim_size = static_cast<std::size_t>(dim);
25479|       |
25480|       |            // the reader turns an ND-array with any zero dimension into an
25481|       |            // empty plain array, dropping the annotation, so keep the object
25482|  33.6k|            if (dim_size == 0)
  ------------------
  |  Branch (25482:17): [True: 103, False: 33.5k]
  ------------------
25483|    103|            {
25484|    103|                return true;
25485|    103|            }
25486|  33.5k|            if (len > (std::numeric_limits<std::size_t>::max)() / dim_size)
  ------------------
  |  Branch (25486:17): [True: 122, False: 33.3k]
  ------------------
25487|    122|            {
25488|    122|                return true;
25489|    122|            }
25490|  33.3k|            len *= dim_size;
25491|  33.3k|        }
25492|       |
25493|       |        // the elements are written from _ArrayData_ as a flat list, so it has
25494|       |        // to be an array: size() is 0 for null and 1 for any other scalar, and
25495|       |        // iterating an object visits its values, so any of these could match
25496|       |        // the dimensions by accident and be encoded as an unrelated ND-array
25497|  13.1k|        const auto& array_data = value.at("_ArrayData_");
25498|  13.1k|        if (!array_data.is_array() || array_data.size() != len)
  ------------------
  |  Branch (25498:13): [True: 146, False: 12.9k]
  |  Branch (25498:39): [True: 548, False: 12.4k]
  ------------------
25499|    694|        {
25500|    694|            return true;
25501|    694|        }
25502|       |
25503|       |        // every element is written below as the number kind dtype names, so it
25504|       |        // has to actually be a number of that category: an element of any other
25505|       |        // type would reinterpret unrelated bytes, e.g. a string's heap pointer,
25506|       |        // as that number. Such an object falls back to a plain object encoding.
25507|       |        // dtype names the wire type, not the storage type: whether an integer
25508|       |        // is held as number_integer or number_unsigned depends on how the value
25509|       |        // was built (parsing stores non-negative integers as unsigned, the C++
25510|       |        // API stores int literals as signed), so both are accepted here and the
25511|       |        // writes below go through get<>, which reads the member that is active.
25512|  12.4k|        const bool ndarray_is_float = (dtype == 'd' || dtype == 'D');
  ------------------
  |  Branch (25512:40): [True: 632, False: 11.8k]
  |  Branch (25512:56): [True: 686, False: 11.1k]
  ------------------
25513|  12.4k|        for (const auto& el : array_data)
  ------------------
  |  Branch (25513:29): [True: 31.4k, False: 12.3k]
  ------------------
25514|  31.4k|        {
25515|  31.4k|            if (ndarray_is_float ? !el.is_number_float() : !el.is_number_integer())
  ------------------
  |  Branch (25515:17): [True: 4.63k, False: 26.8k]
  |  Branch (25515:17): [True: 42, False: 31.4k]
  ------------------
25516|     42|            {
25517|     42|                return true;
25518|     42|            }
25519|  31.4k|        }
25520|       |
25521|       |        // every element is cast to the (possibly narrower) C++ type matching
25522|       |        // dtype below; a value that does not fit that type would silently
25523|       |        // wrap (integers) or overflow to infinity (the "single" precision
25524|       |        // float) instead of being reported, so such an object falls back to
25525|       |        // a plain object encoding as well
25526|  12.3k|        if (!write_bjdata_ndarray_elements(array_data, dtype, true))
  ------------------
  |  Branch (25526:13): [True: 3.76k, False: 8.63k]
  ------------------
25527|  3.76k|        {
25528|  3.76k|            return true;
25529|  3.76k|        }
25530|       |
25531|  8.63k|        oa.write_character(to_char_type('['));
25532|  8.63k|        oa.write_character(to_char_type('$'));
25533|  8.63k|        oa.write_character(dtype);
25534|  8.63k|        oa.write_character(to_char_type('#'));
25535|       |
25536|  8.63k|        write_ubjson(array_size, use_count, use_type, true,  true, bjdata_version);
25537|       |
25538|  8.63k|        write_bjdata_ndarray_elements(array_data, dtype, false);
25539|  8.63k|        return false;
25540|  12.3k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE9is_stringEv:
32954|  49.3k|    {
32955|  49.3k|        return m_data.m_type == value_t::string;
32956|  49.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE26bjdata_ndarray_type_markerERKSC_:
25241|  16.4k|    {
25242|  16.4k|        if (name == "uint8")
  ------------------
  |  Branch (25242:13): [True: 2.30k, False: 14.1k]
  ------------------
25243|  2.30k|        {
25244|  2.30k|            return 'U';
25245|  2.30k|        }
25246|  14.1k|        if (name == "int8")
  ------------------
  |  Branch (25246:13): [True: 2.89k, False: 11.2k]
  ------------------
25247|  2.89k|        {
25248|  2.89k|            return 'i';
25249|  2.89k|        }
25250|  11.2k|        if (name == "uint16")
  ------------------
  |  Branch (25250:13): [True: 548, False: 10.6k]
  ------------------
25251|    548|        {
25252|    548|            return 'u';
25253|    548|        }
25254|  10.6k|        if (name == "int16")
  ------------------
  |  Branch (25254:13): [True: 2.88k, False: 7.77k]
  ------------------
25255|  2.88k|        {
25256|  2.88k|            return 'I';
25257|  2.88k|        }
25258|  7.77k|        if (name == "uint32")
  ------------------
  |  Branch (25258:13): [True: 490, False: 7.28k]
  ------------------
25259|    490|        {
25260|    490|            return 'm';
25261|    490|        }
25262|  7.28k|        if (name == "int32")
  ------------------
  |  Branch (25262:13): [True: 1.37k, False: 5.91k]
  ------------------
25263|  1.37k|        {
25264|  1.37k|            return 'l';
25265|  1.37k|        }
25266|  5.91k|        if (name == "uint64")
  ------------------
  |  Branch (25266:13): [True: 404, False: 5.51k]
  ------------------
25267|    404|        {
25268|    404|            return 'M';
25269|    404|        }
25270|  5.51k|        if (name == "int64")
  ------------------
  |  Branch (25270:13): [True: 1.01k, False: 4.49k]
  ------------------
25271|  1.01k|        {
25272|  1.01k|            return 'L';
25273|  1.01k|        }
25274|  4.49k|        if (name == "single")
  ------------------
  |  Branch (25274:13): [True: 632, False: 3.86k]
  ------------------
25275|    632|        {
25276|    632|            return 'd';
25277|    632|        }
25278|  3.86k|        if (name == "double")
  ------------------
  |  Branch (25278:13): [True: 686, False: 3.18k]
  ------------------
25279|    686|        {
25280|    686|            return 'D';
25281|    686|        }
25282|  3.18k|        if (name == "char")
  ------------------
  |  Branch (25282:13): [True: 1.18k, False: 1.99k]
  ------------------
25283|  1.18k|        {
25284|  1.18k|            return 'C';
25285|  1.18k|        }
25286|  1.99k|        if (name == "byte")
  ------------------
  |  Branch (25286:13): [True: 1.84k, False: 150]
  ------------------
25287|  1.84k|        {
25288|  1.84k|            return 'B';
25289|  1.84k|        }
25290|    150|        return '\0';
25291|  1.99k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3getISA_SA_EEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv:
33381|  16.4k|    {
33382|       |        // we cannot static_assert on ValueTypeCV being non-const, because
33383|       |        // there is support for get<const basic_json_t>(), which is why we
33384|       |        // still need the uncvref
33385|  16.4k|        static_assert(!std::is_reference<ValueTypeCV>::value,
33386|  16.4k|                      "get() cannot be used with reference types, you might want to use get_ref()");
33387|  16.4k|        return get_impl<ValueType>(detail::priority_tag<4> {});
33388|  16.4k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8get_implISA_TnNS2_9enable_ifIXaasr6detail24is_default_constructibleIT_EE5valuesr6detail13has_from_jsonISE_SH_EE5valueEiE4typeELi0EEESH_NS0_6detail12priority_tagILj0EEE:
33240|  16.4k|    {
33241|  16.4k|        auto ret = ValueType();
33242|  16.4k|        JSONSerializer<ValueType>::from_json(*this, ret);
33243|       |        // false positive: ret is returned by value, not its address
33244|       |        // @infer-ignore STACK_VARIABLE_ADDRESS_ESCAPE
33245|  16.4k|        return ret;
33246|  16.4k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerINSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEvE9from_jsonIRKNS0_10basic_jsonINS2_3mapENS2_6vectorES8_blmdS6_S1_NSD_IhNS6_IhEEEEvEES8_EEDTcmclL_ZNS0_12_GLOBAL__N_19from_jsonEEclsr3stdE7forwardIT_Efp_Efp0_Ecvv_EEOSK_RT0_:
 7848|  16.4k|    {
 7849|  16.4k|        ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
 7850|  16.4k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12from_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERSD_EEDTcl9from_jsonfp_clsr3stdE7forwardIT0_Efp0_EEERKT_OSJ_:
 6519|  16.4k|    {
 6520|  16.4k|        return from_json(j, std::forward<T>(val));
 6521|  16.4k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9from_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRKT_RNSH_8string_tE:
 5991|  16.4k|{
 5992|  16.4k|    if (JSON_HEDLEY_UNLIKELY(!j.is_string()))
  ------------------
  |  | 1667|  16.4k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 16.4k]
  |  |  ------------------
  ------------------
 5993|      0|    {
 5994|      0|        throw_type_must_be("string", j);
 5995|      0|    }
 5996|  16.4k|    s = *j.template get_ptr<const typename BasicJsonType::string_t*>();
 5997|  16.4k|}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE7get_ptrIPKSA_TnNS2_9enable_ifIXaasr3std10is_pointerIT_EE5valuesr3std8is_constINS2_14remove_pointerISJ_E4typeEEE5valueEiE4typeELi0EEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalISJ_ELi0EEEvEE12get_impl_ptrclsr3stdE7declvalISJ_EEEEv:
33189|  16.4k|    {
33190|       |        // delegate the call to get_impl_ptr<>() const
33191|  16.4k|        return get_impl_ptr(static_cast<PointerType>(nullptr));
33192|  16.4k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12get_impl_ptrEPKSA_:
33036|  16.4k|    {
33037|  16.4k|        return is_string() ? m_data.m_value.string : nullptr;
  ------------------
  |  Branch (33037:16): [True: 16.4k, False: 0]
  ------------------
33038|  16.4k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE2atEm:
33711|  20.1k|    {
33712|  20.1k|        return array_at(*this, idx);
33713|  20.1k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8array_atIKSE_EEDTixdedtdtdtfp_6m_data7m_value5arrayfp0_ERT_m:
33641|  20.1k|    {
33642|       |        // at only works for arrays
33643|  20.1k|        if (JSON_HEDLEY_UNLIKELY(!j.is_array()))
  ------------------
  |  | 1667|  20.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 20.1k]
  |  |  ------------------
  ------------------
33644|      0|        {
33645|      0|            detail::throw_cannot_use_with(detail::exception_id::at_wrong_type, "at()", j);
33646|      0|        }
33647|       |
33648|  20.1k|        if (JSON_HEDLEY_UNLIKELY(idx >= j.m_data.m_value.array->size()))
  ------------------
  |  | 1667|  20.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 20.1k]
  |  |  ------------------
  ------------------
33649|      0|        {
33650|      0|            throw_array_index_out_of_range(idx, j);
33651|      0|        }
33652|       |
33653|  20.1k|        return (*j.m_data.m_value.array)[idx];
33654|  20.1k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE17is_number_integerEv:
32914|  71.3k|    {
32915|  71.3k|        return m_data.m_type == value_t::number_integer || m_data.m_type == value_t::number_unsigned;
  ------------------
  |  Branch (32915:16): [True: 23.1k, False: 48.1k]
  |  Branch (32915:60): [True: 47.7k, False: 356]
  ------------------
32916|  71.3k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3getIllEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv:
33381|  38.3k|    {
33382|       |        // we cannot static_assert on ValueTypeCV being non-const, because
33383|       |        // there is support for get<const basic_json_t>(), which is why we
33384|       |        // still need the uncvref
33385|  38.3k|        static_assert(!std::is_reference<ValueTypeCV>::value,
33386|  38.3k|                      "get() cannot be used with reference types, you might want to use get_ref()");
33387|  38.3k|        return get_impl<ValueType>(detail::priority_tag<4> {});
33388|  38.3k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8get_implIlTnNS2_9enable_ifIXaasr6detail24is_default_constructibleIT_EE5valuesr6detail13has_from_jsonISE_SH_EE5valueEiE4typeELi0EEESH_NS0_6detail12priority_tagILj0EEE:
33240|  38.3k|    {
33241|  38.3k|        auto ret = ValueType();
33242|  38.3k|        JSONSerializer<ValueType>::from_json(*this, ret);
33243|       |        // false positive: ret is returned by value, not its address
33244|       |        // @infer-ignore STACK_VARIABLE_ADDRESS_ESCAPE
33245|  38.3k|        return ret;
33246|  38.3k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIlvE9from_jsonIRKNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEElEEDTcmclL_ZNS0_12_GLOBAL__N_19from_jsonEEclsr3stdE7forwardIT_Efp_Efp0_Ecvv_EEOSK_RT0_:
 7848|  38.3k|    {
 7849|  38.3k|        ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
 7850|  38.3k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12from_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERlEEDTcl9from_jsonfp_clsr3stdE7forwardIT0_Efp0_EEERKT_OSJ_:
 6519|  38.3k|    {
 6520|  38.3k|        return from_json(j, std::forward<T>(val));
 6521|  38.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9from_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRKT_RNSH_16number_integer_tE:
 6030|  38.3k|{
 6031|  38.3k|    get_arithmetic_value(j, val);
 6032|  38.3k|}
_ZN8nlohmann16json_abi_v3_12_06detail20get_arithmetic_valueINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEElTnNS4_9enable_ifIXaasr3std13is_arithmeticIT0_EE5valuentsr3std7is_sameISI_NT_9boolean_tEEE5valueEiE4typeELi0EEEvRKSJ_RSI_:
 5944|  38.3k|{
 5945|  38.3k|    switch (static_cast<value_t>(j))
 5946|  38.3k|    {
 5947|  7.76k|        case value_t::number_unsigned:
  ------------------
  |  Branch (5947:9): [True: 7.76k, False: 30.5k]
  ------------------
 5948|  7.76k|        {
 5949|       |            // never null: a basic_json whose number_unsigned_t is number_integer_t
 5950|       |            // stores no number_unsigned values (#2573)
 5951|  7.76k|            const auto* ptr = j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>();
 5952|  7.76k|            JSON_ASSERT(ptr != nullptr);
  ------------------
  |  | 2591|  7.76k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (5952:13): [True: 7.76k, False: 0]
  ------------------
 5953|  7.76k|            val = static_cast<ArithmeticType>(*ptr);
 5954|  7.76k|            break;
 5955|  7.76k|        }
 5956|  30.5k|        case value_t::number_integer:
  ------------------
  |  Branch (5956:9): [True: 30.5k, False: 7.76k]
  ------------------
 5957|  30.5k|        {
 5958|  30.5k|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
 5959|  30.5k|            break;
 5960|  7.76k|        }
 5961|      0|        case value_t::number_float:
  ------------------
  |  Branch (5961:9): [True: 0, False: 38.3k]
  ------------------
 5962|      0|        {
 5963|      0|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
 5964|      0|            break;
 5965|  7.76k|        }
 5966|       |
 5967|      0|        case value_t::null:
  ------------------
  |  Branch (5967:9): [True: 0, False: 38.3k]
  ------------------
 5968|      0|        case value_t::object:
  ------------------
  |  Branch (5968:9): [True: 0, False: 38.3k]
  ------------------
 5969|      0|        case value_t::array:
  ------------------
  |  Branch (5969:9): [True: 0, False: 38.3k]
  ------------------
 5970|      0|        case value_t::string:
  ------------------
  |  Branch (5970:9): [True: 0, False: 38.3k]
  ------------------
 5971|      0|        case value_t::boolean:
  ------------------
  |  Branch (5971:9): [True: 0, False: 38.3k]
  ------------------
 5972|      0|        case value_t::binary:
  ------------------
  |  Branch (5972:9): [True: 0, False: 38.3k]
  ------------------
 5973|      0|        case value_t::discarded:
  ------------------
  |  Branch (5973:9): [True: 0, False: 38.3k]
  ------------------
 5974|      0|        default:
  ------------------
  |  Branch (5974:9): [True: 0, False: 38.3k]
  ------------------
 5975|      0|            throw_type_must_be("number", j);
 5976|  38.3k|    }
 5977|  38.3k|}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEcvNS0_6detail7value_tEEv:
32977|   104k|    {
32978|   104k|        return m_data.m_type;
32979|   104k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE7get_ptrIPKmTnNS2_9enable_ifIXaasr3std10is_pointerIT_EE5valuesr3std8is_constINS2_14remove_pointerISJ_E4typeEEE5valueEiE4typeELi0EEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalISJ_ELi0EEEvEE12get_impl_ptrclsr3stdE7declvalISJ_EEEEv:
33189|  58.5k|    {
33190|       |        // delegate the call to get_impl_ptr<>() const
33191|  58.5k|        return get_impl_ptr(static_cast<PointerType>(nullptr));
33192|  58.5k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12get_impl_ptrEPKm:
33074|  58.5k|    {
33075|  58.5k|        return is_number_unsigned() ? &m_data.m_value.number_unsigned : nullptr;
  ------------------
  |  Branch (33075:16): [True: 58.5k, False: 0]
  ------------------
33076|  58.5k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE7get_ptrIPKlTnNS2_9enable_ifIXaasr3std10is_pointerIT_EE5valuesr3std8is_constINS2_14remove_pointerISJ_E4typeEEE5valueEiE4typeELi0EEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalISJ_ELi0EEEvEE12get_impl_ptrclsr3stdE7declvalISJ_EEEEv:
33189|  38.0k|    {
33190|       |        // delegate the call to get_impl_ptr<>() const
33191|  38.0k|        return get_impl_ptr(static_cast<PointerType>(nullptr));
33192|  38.0k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12get_impl_ptrEPKl:
33060|  38.0k|    {
33061|  38.0k|        return m_data.m_type == value_t::number_integer ? &m_data.m_value.number_integer : nullptr;
  ------------------
  |  Branch (33061:16): [True: 38.0k, False: 0]
  ------------------
33062|  38.0k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE7get_ptrIPKdTnNS2_9enable_ifIXaasr3std10is_pointerIT_EE5valuesr3std8is_constINS2_14remove_pointerISJ_E4typeEEE5valueEiE4typeELi0EEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalISJ_ELi0EEEvEE12get_impl_ptrclsr3stdE7declvalISJ_EEEEv:
33189|  8.09k|    {
33190|       |        // delegate the call to get_impl_ptr<>() const
33191|  8.09k|        return get_impl_ptr(static_cast<PointerType>(nullptr));
33192|  8.09k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE12get_impl_ptrEPKd:
33086|  8.09k|    {
33087|  8.09k|        return is_number_float() ? &m_data.m_value.number_float : nullptr;
  ------------------
  |  Branch (33087:16): [True: 8.09k, False: 0]
  ------------------
33088|  8.09k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE18is_number_unsignedEv:
32922|   118k|    {
32923|   118k|        return m_data.m_type == value_t::number_unsigned;
32924|   118k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3getImmEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv:
33381|  58.2k|    {
33382|       |        // we cannot static_assert on ValueTypeCV being non-const, because
33383|       |        // there is support for get<const basic_json_t>(), which is why we
33384|       |        // still need the uncvref
33385|  58.2k|        static_assert(!std::is_reference<ValueTypeCV>::value,
33386|  58.2k|                      "get() cannot be used with reference types, you might want to use get_ref()");
33387|  58.2k|        return get_impl<ValueType>(detail::priority_tag<4> {});
33388|  58.2k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8get_implImTnNS2_9enable_ifIXaasr6detail24is_default_constructibleIT_EE5valuesr6detail13has_from_jsonISE_SH_EE5valueEiE4typeELi0EEESH_NS0_6detail12priority_tagILj0EEE:
33240|  58.2k|    {
33241|  58.2k|        auto ret = ValueType();
33242|  58.2k|        JSONSerializer<ValueType>::from_json(*this, ret);
33243|       |        // false positive: ret is returned by value, not its address
33244|       |        // @infer-ignore STACK_VARIABLE_ADDRESS_ESCAPE
33245|  58.2k|        return ret;
33246|  58.2k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerImvE9from_jsonIRKNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEEmEEDTcmclL_ZNS0_12_GLOBAL__N_19from_jsonEEclsr3stdE7forwardIT_Efp_Efp0_Ecvv_EEOSK_RT0_:
 7848|  58.2k|    {
 7849|  58.2k|        ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
 7850|  58.2k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12from_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERmEEDTcl9from_jsonfp_clsr3stdE7forwardIT0_Efp0_EEERKT_OSJ_:
 6519|  58.2k|    {
 6520|  58.2k|        return from_json(j, std::forward<T>(val));
 6521|  58.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9from_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRKT_RNS4_11conditionalIXsr3std7is_sameINSH_16number_integer_tENSH_17number_unsigned_tEEE5valueENS1_27same_as_number_integer_typeESM_E4typeE:
 6024|  58.2k|{
 6025|  58.2k|    get_arithmetic_value(j, val);
 6026|  58.2k|}
_ZN8nlohmann16json_abi_v3_12_06detail20get_arithmetic_valueINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEmTnNS4_9enable_ifIXaasr3std13is_arithmeticIT0_EE5valuentsr3std7is_sameISI_NT_9boolean_tEEE5valueEiE4typeELi0EEEvRKSJ_RSI_:
 5944|  58.2k|{
 5945|  58.2k|    switch (static_cast<value_t>(j))
 5946|  58.2k|    {
 5947|  50.7k|        case value_t::number_unsigned:
  ------------------
  |  Branch (5947:9): [True: 50.7k, False: 7.52k]
  ------------------
 5948|  50.7k|        {
 5949|       |            // never null: a basic_json whose number_unsigned_t is number_integer_t
 5950|       |            // stores no number_unsigned values (#2573)
 5951|  50.7k|            const auto* ptr = j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>();
 5952|  50.7k|            JSON_ASSERT(ptr != nullptr);
  ------------------
  |  | 2591|  50.7k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (5952:13): [True: 50.7k, False: 0]
  ------------------
 5953|  50.7k|            val = static_cast<ArithmeticType>(*ptr);
 5954|  50.7k|            break;
 5955|  50.7k|        }
 5956|  7.52k|        case value_t::number_integer:
  ------------------
  |  Branch (5956:9): [True: 7.52k, False: 50.7k]
  ------------------
 5957|  7.52k|        {
 5958|  7.52k|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
 5959|  7.52k|            break;
 5960|  50.7k|        }
 5961|      0|        case value_t::number_float:
  ------------------
  |  Branch (5961:9): [True: 0, False: 58.2k]
  ------------------
 5962|      0|        {
 5963|      0|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
 5964|      0|            break;
 5965|  50.7k|        }
 5966|       |
 5967|      0|        case value_t::null:
  ------------------
  |  Branch (5967:9): [True: 0, False: 58.2k]
  ------------------
 5968|      0|        case value_t::object:
  ------------------
  |  Branch (5968:9): [True: 0, False: 58.2k]
  ------------------
 5969|      0|        case value_t::array:
  ------------------
  |  Branch (5969:9): [True: 0, False: 58.2k]
  ------------------
 5970|      0|        case value_t::string:
  ------------------
  |  Branch (5970:9): [True: 0, False: 58.2k]
  ------------------
 5971|      0|        case value_t::boolean:
  ------------------
  |  Branch (5971:9): [True: 0, False: 58.2k]
  ------------------
 5972|      0|        case value_t::binary:
  ------------------
  |  Branch (5972:9): [True: 0, False: 58.2k]
  ------------------
 5973|      0|        case value_t::discarded:
  ------------------
  |  Branch (5973:9): [True: 0, False: 58.2k]
  ------------------
 5974|      0|        default:
  ------------------
  |  Branch (5974:9): [True: 0, False: 58.2k]
  ------------------
 5975|      0|            throw_type_must_be("number", j);
 5976|  58.2k|    }
 5977|  58.2k|}
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE15is_number_floatEv:
32930|  12.7k|    {
32931|  12.7k|        return m_data.m_type == value_t::number_float;
32932|  12.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29write_bjdata_ndarray_elementsERKSG_hb:
25349|  21.0k|    {
25350|  21.0k|        for (const auto& el : array_data)
  ------------------
  |  Branch (25350:29): [True: 54.2k, False: 17.2k]
  ------------------
25351|  54.2k|        {
25352|  54.2k|            bool ok = true;
25353|  54.2k|            switch (dtype)
25354|  54.2k|            {
25355|  7.03k|                case 'U':
  ------------------
  |  Branch (25355:17): [True: 7.03k, False: 47.2k]
  ------------------
25356|  16.1k|                case 'C':
  ------------------
  |  Branch (25356:17): [True: 9.16k, False: 45.1k]
  ------------------
25357|  16.1k|                case 'B':
  ------------------
  |  Branch (25357:17): [True: 0, False: 54.2k]
  ------------------
25358|  16.1k|                    ok = write_bjdata_ndarray_element<std::uint8_t>(el, dry_run);
25359|  16.1k|                    break;
25360|  9.66k|                case 'i':
  ------------------
  |  Branch (25360:17): [True: 9.66k, False: 44.6k]
  ------------------
25361|  9.66k|                    ok = write_bjdata_ndarray_element<std::int8_t>(el, dry_run);
25362|  9.66k|                    break;
25363|  3.00k|                case 'u':
  ------------------
  |  Branch (25363:17): [True: 3.00k, False: 51.2k]
  ------------------
25364|  3.00k|                    ok = write_bjdata_ndarray_element<std::uint16_t>(el, dry_run);
25365|  3.00k|                    break;
25366|  5.31k|                case 'I':
  ------------------
  |  Branch (25366:17): [True: 5.31k, False: 48.9k]
  ------------------
25367|  5.31k|                    ok = write_bjdata_ndarray_element<std::int16_t>(el, dry_run);
25368|  5.31k|                    break;
25369|  1.95k|                case 'm':
  ------------------
  |  Branch (25369:17): [True: 1.95k, False: 52.3k]
  ------------------
25370|  1.95k|                    ok = write_bjdata_ndarray_element<std::uint32_t>(el, dry_run);
25371|  1.95k|                    break;
25372|  3.25k|                case 'l':
  ------------------
  |  Branch (25372:17): [True: 3.25k, False: 51.0k]
  ------------------
25373|  3.25k|                    ok = write_bjdata_ndarray_element<std::int32_t>(el, dry_run);
25374|  3.25k|                    break;
25375|  2.54k|                case 'M':
  ------------------
  |  Branch (25375:17): [True: 2.54k, False: 51.7k]
  ------------------
25376|  2.54k|                    ok = write_bjdata_ndarray_element<std::uint64_t>(el, dry_run);
25377|  2.54k|                    break;
25378|  3.08k|                case 'L':
  ------------------
  |  Branch (25378:17): [True: 3.08k, False: 51.1k]
  ------------------
25379|  3.08k|                    ok = write_bjdata_ndarray_element<std::int64_t>(el, dry_run);
25380|  3.08k|                    break;
25381|  6.91k|                case 'd':
  ------------------
  |  Branch (25381:17): [True: 6.91k, False: 47.3k]
  ------------------
25382|  6.91k|                    ok = write_bjdata_ndarray_float_element(el, dry_run);
25383|  6.91k|                    break;
25384|  2.35k|                case 'D':
  ------------------
  |  Branch (25384:17): [True: 2.35k, False: 51.9k]
  ------------------
25385|  2.35k|                default:
  ------------------
  |  Branch (25385:17): [True: 0, False: 54.2k]
  ------------------
25386|       |                    // 'D' (double) already spans the full range of number_float_t
25387|  2.35k|                    if (!dry_run)
  ------------------
  |  Branch (25387:25): [True: 1.17k, False: 1.17k]
  ------------------
25388|  1.17k|                    {
25389|  1.17k|                        write_number(el.template get<double>(), true);
25390|  1.17k|                    }
25391|  2.35k|                    break;
25392|  54.2k|            }
25393|  54.2k|            if (!ok)
  ------------------
  |  Branch (25393:17): [True: 3.76k, False: 50.5k]
  ------------------
25394|  3.76k|            {
25395|  3.76k|                return false;
25396|  3.76k|            }
25397|  54.2k|        }
25398|  17.2k|        return true;
25399|  21.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_bjdata_ndarray_elementIhEEbRKSG_b:
25299|  16.1k|    {
25300|  16.1k|        if (dry_run)
  ------------------
  |  Branch (25300:13): [True: 9.00k, False: 7.18k]
  ------------------
25301|  9.00k|        {
25302|  9.00k|            return bjdata_ndarray_value_in_range<T>(el);
25303|  9.00k|        }
25304|  7.18k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
25305|  7.18k|        write_number(static_cast<T>(el.template get<storage_type>()), true);
25306|  7.18k|        return true;
25307|  16.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIhEEbRKSG_:
25225|  9.00k|    {
25226|  9.00k|        return el.is_number_unsigned()
  ------------------
  |  Branch (25226:16): [True: 7.60k, False: 1.39k]
  ------------------
25227|  9.00k|               ? value_in_range_of<TargetType>(el.template get<std::uint64_t>())
25228|  9.00k|               : value_in_range_of<TargetType>(el.template get<std::int64_t>());
25229|  9.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_bjdata_ndarray_elementIaEEbRKSG_b:
25299|  9.66k|    {
25300|  9.66k|        if (dry_run)
  ------------------
  |  Branch (25300:13): [True: 5.91k, False: 3.75k]
  ------------------
25301|  5.91k|        {
25302|  5.91k|            return bjdata_ndarray_value_in_range<T>(el);
25303|  5.91k|        }
25304|  3.75k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
25305|  3.75k|        write_number(static_cast<T>(el.template get<storage_type>()), true);
25306|  3.75k|        return true;
25307|  9.66k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIaEEbRKSG_:
25225|  5.91k|    {
25226|  5.91k|        return el.is_number_unsigned()
  ------------------
  |  Branch (25226:16): [True: 880, False: 5.03k]
  ------------------
25227|  5.91k|               ? value_in_range_of<TargetType>(el.template get<std::uint64_t>())
25228|  5.91k|               : value_in_range_of<TargetType>(el.template get<std::int64_t>());
25229|  5.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_bjdata_ndarray_elementItEEbRKSG_b:
25299|  3.00k|    {
25300|  3.00k|        if (dry_run)
  ------------------
  |  Branch (25300:13): [True: 1.50k, False: 1.50k]
  ------------------
25301|  1.50k|        {
25302|  1.50k|            return bjdata_ndarray_value_in_range<T>(el);
25303|  1.50k|        }
25304|  1.50k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
25305|  1.50k|        write_number(static_cast<T>(el.template get<storage_type>()), true);
25306|  1.50k|        return true;
25307|  3.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeItEEbRKSG_:
25225|  1.50k|    {
25226|  1.50k|        return el.is_number_unsigned()
  ------------------
  |  Branch (25226:16): [True: 1.50k, False: 0]
  ------------------
25227|  1.50k|               ? value_in_range_of<TargetType>(el.template get<std::uint64_t>())
25228|  1.50k|               : value_in_range_of<TargetType>(el.template get<std::int64_t>());
25229|  1.50k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_bjdata_ndarray_elementIsEEbRKSG_b:
25299|  5.31k|    {
25300|  5.31k|        if (dry_run)
  ------------------
  |  Branch (25300:13): [True: 3.39k, False: 1.92k]
  ------------------
25301|  3.39k|        {
25302|  3.39k|            return bjdata_ndarray_value_in_range<T>(el);
25303|  3.39k|        }
25304|  1.92k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
25305|  1.92k|        write_number(static_cast<T>(el.template get<storage_type>()), true);
25306|  1.92k|        return true;
25307|  5.31k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIsEEbRKSG_:
25225|  3.39k|    {
25226|  3.39k|        return el.is_number_unsigned()
  ------------------
  |  Branch (25226:16): [True: 589, False: 2.80k]
  ------------------
25227|  3.39k|               ? value_in_range_of<TargetType>(el.template get<std::uint64_t>())
25228|  3.39k|               : value_in_range_of<TargetType>(el.template get<std::int64_t>());
25229|  3.39k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_bjdata_ndarray_elementIjEEbRKSG_b:
25299|  1.95k|    {
25300|  1.95k|        if (dry_run)
  ------------------
  |  Branch (25300:13): [True: 976, False: 976]
  ------------------
25301|    976|        {
25302|    976|            return bjdata_ndarray_value_in_range<T>(el);
25303|    976|        }
25304|    976|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
25305|    976|        write_number(static_cast<T>(el.template get<storage_type>()), true);
25306|    976|        return true;
25307|  1.95k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIjEEbRKSG_:
25225|    976|    {
25226|    976|        return el.is_number_unsigned()
  ------------------
  |  Branch (25226:16): [True: 976, False: 0]
  ------------------
25227|    976|               ? value_in_range_of<TargetType>(el.template get<std::uint64_t>())
25228|    976|               : value_in_range_of<TargetType>(el.template get<std::int64_t>());
25229|    976|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_bjdata_ndarray_elementIiEEbRKSG_b:
25299|  3.25k|    {
25300|  3.25k|        if (dry_run)
  ------------------
  |  Branch (25300:13): [True: 1.93k, False: 1.31k]
  ------------------
25301|  1.93k|        {
25302|  1.93k|            return bjdata_ndarray_value_in_range<T>(el);
25303|  1.93k|        }
25304|  1.31k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
25305|  1.31k|        write_number(static_cast<T>(el.template get<storage_type>()), true);
25306|  1.31k|        return true;
25307|  3.25k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIiEEbRKSG_:
25225|  1.93k|    {
25226|  1.93k|        return el.is_number_unsigned()
  ------------------
  |  Branch (25226:16): [True: 442, False: 1.49k]
  ------------------
25227|  1.93k|               ? value_in_range_of<TargetType>(el.template get<std::uint64_t>())
25228|  1.93k|               : value_in_range_of<TargetType>(el.template get<std::int64_t>());
25229|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_bjdata_ndarray_elementImEEbRKSG_b:
25299|  2.54k|    {
25300|  2.54k|        if (dry_run)
  ------------------
  |  Branch (25300:13): [True: 1.27k, False: 1.27k]
  ------------------
25301|  1.27k|        {
25302|  1.27k|            return bjdata_ndarray_value_in_range<T>(el);
25303|  1.27k|        }
25304|  1.27k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
25305|  1.27k|        write_number(static_cast<T>(el.template get<storage_type>()), true);
25306|  1.27k|        return true;
25307|  2.54k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeImEEbRKSG_:
25225|  1.27k|    {
25226|  1.27k|        return el.is_number_unsigned()
  ------------------
  |  Branch (25226:16): [True: 1.27k, False: 0]
  ------------------
25227|  1.27k|               ? value_in_range_of<TargetType>(el.template get<std::uint64_t>())
25228|  1.27k|               : value_in_range_of<TargetType>(el.template get<std::int64_t>());
25229|  1.27k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE28write_bjdata_ndarray_elementIlEEbRKSG_b:
25299|  3.08k|    {
25300|  3.08k|        if (dry_run)
  ------------------
  |  Branch (25300:13): [True: 1.76k, False: 1.32k]
  ------------------
25301|  1.76k|        {
25302|  1.76k|            return bjdata_ndarray_value_in_range<T>(el);
25303|  1.76k|        }
25304|  1.32k|        using storage_type = typename std::conditional<std::is_unsigned<T>::value, std::uint64_t, std::int64_t>::type;
25305|  1.32k|        write_number(static_cast<T>(el.template get<storage_type>()), true);
25306|  1.32k|        return true;
25307|  3.08k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE29bjdata_ndarray_value_in_rangeIlEEbRKSG_:
25225|  1.76k|    {
25226|  1.76k|        return el.is_number_unsigned()
  ------------------
  |  Branch (25226:16): [True: 443, False: 1.31k]
  ------------------
25227|  1.76k|               ? value_in_range_of<TargetType>(el.template get<std::uint64_t>())
25228|  1.76k|               : value_in_range_of<TargetType>(el.template get<std::int64_t>());
25229|  1.76k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE34write_bjdata_ndarray_float_elementERKSG_b:
25316|  6.91k|    {
25317|  6.91k|        const auto dval = el.template get<double>();
25318|  6.91k|        if (dry_run)
  ------------------
  |  Branch (25318:13): [True: 3.45k, False: 3.45k]
  ------------------
25319|  3.45k|        {
25320|  3.45k|#ifdef __GNUC__
25321|  3.45k|            JSON_HEDLEY_DIAGNOSTIC_PUSH
25322|  3.45k|            JSON_HEDLEY_PRAGMA(GCC diagnostic ignored "-Wfloat-equal")
25323|  3.45k|#endif
25324|       |            // a value that would be rounded (rather than exactly represented) by the
25325|       |            // narrowing to float is treated like an out-of-range integer element; this
25326|       |            // is the same criterion write_compact_float() uses for CBOR/MessagePack
25327|  3.45k|            const bool in_range = std::isnan(dval) ||
  ------------------
  |  Branch (25327:35): [True: 754, False: 2.70k]
  ------------------
25328|  2.70k|                                  (dval >= static_cast<double>(std::numeric_limits<float>::lowest()) &&
  ------------------
  |  Branch (25328:36): [True: 2.62k, False: 84]
  ------------------
25329|  2.62k|                                   dval <= static_cast<double>((std::numeric_limits<float>::max)()) &&
  ------------------
  |  Branch (25329:36): [True: 2.54k, False: 72]
  ------------------
25330|  2.54k|                                   static_cast<double>(static_cast<float>(dval)) == dval) ||
  ------------------
  |  Branch (25330:36): [True: 2.54k, False: 0]
  ------------------
25331|    156|                                  std::isinf(dval);
  ------------------
  |  Branch (25331:35): [True: 156, False: 0]
  ------------------
25332|  3.45k|#ifdef __GNUC__
25333|  3.45k|            JSON_HEDLEY_DIAGNOSTIC_POP
25334|  3.45k|#endif
25335|  3.45k|            return in_range;
25336|  3.45k|        }
25337|  3.45k|        write_number(static_cast<float>(dval), true);
25338|  3.45k|        return true;
25339|  6.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE12write_numberIfEEvT_b:
26103|  3.45k|    {
26104|       |        // step 1: write the number to an array of length NumberType
26105|  3.45k|        std::array<CharType, sizeof(NumberType)> vec{};
26106|  3.45k|        std::memcpy(vec.data(), &n, sizeof(NumberType));
26107|       |
26108|       |        // step 2: write the array to output (with possible reordering)
26109|  3.45k|        if (is_little_endian != OutputIsLittleEndian)
  ------------------
  |  Branch (26109:13): [True: 0, False: 3.45k]
  ------------------
26110|      0|        {
26111|       |            // reverse byte order prior to conversion if necessary
26112|      0|            reverse_bytes(vec);
26113|      0|        }
26114|       |
26115|  3.45k|        oa.write_characters(vec.data(), sizeof(NumberType));
26116|  3.45k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE3getIddEEDTcldtclL_ZNS2_7declvalB8ne220000IRKSE_EEDTclsr3stdE9__declvalIT_ELi0EEEvEE8get_implIT0_EtlNS0_6detail12priority_tagILj4EEEEEEv:
33381|  8.09k|    {
33382|       |        // we cannot static_assert on ValueTypeCV being non-const, because
33383|       |        // there is support for get<const basic_json_t>(), which is why we
33384|       |        // still need the uncvref
33385|  8.09k|        static_assert(!std::is_reference<ValueTypeCV>::value,
33386|  8.09k|                      "get() cannot be used with reference types, you might want to use get_ref()");
33387|  8.09k|        return get_impl<ValueType>(detail::priority_tag<4> {});
33388|  8.09k|    }
_ZNK8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE8get_implIdTnNS2_9enable_ifIXaasr6detail24is_default_constructibleIT_EE5valuesr6detail13has_from_jsonISE_SH_EE5valueEiE4typeELi0EEESH_NS0_6detail12priority_tagILj0EEE:
33240|  8.09k|    {
33241|  8.09k|        auto ret = ValueType();
33242|  8.09k|        JSONSerializer<ValueType>::from_json(*this, ret);
33243|       |        // false positive: ret is returned by value, not its address
33244|       |        // @infer-ignore STACK_VARIABLE_ADDRESS_ESCAPE
33245|  8.09k|        return ret;
33246|  8.09k|    }
_ZN8nlohmann16json_abi_v3_12_014adl_serializerIdvE9from_jsonIRKNS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_S1_NS7_IhNSB_IhEEEEvEEdEEDTcmclL_ZNS0_12_GLOBAL__N_19from_jsonEEclsr3stdE7forwardIT_Efp_Efp0_Ecvv_EEOSK_RT0_:
 7848|  8.09k|    {
 7849|  8.09k|        ::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
 7850|  8.09k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail12from_json_fnclINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEERdEEDTcl9from_jsonfp_clsr3stdE7forwardIT0_Efp0_EEERKT_OSJ_:
 6519|  8.09k|    {
 6520|  8.09k|        return from_json(j, std::forward<T>(val));
 6521|  8.09k|    }
_ZN8nlohmann16json_abi_v3_12_06detail9from_jsonINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEEEvRKT_RNSH_14number_float_tE:
 6018|  8.09k|{
 6019|  8.09k|    get_arithmetic_value(j, val);
 6020|  8.09k|}
_ZN8nlohmann16json_abi_v3_12_06detail20get_arithmetic_valueINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEdTnNS4_9enable_ifIXaasr3std13is_arithmeticIT0_EE5valuentsr3std7is_sameISI_NT_9boolean_tEEE5valueEiE4typeELi0EEEvRKSJ_RSI_:
 5944|  8.09k|{
 5945|  8.09k|    switch (static_cast<value_t>(j))
 5946|  8.09k|    {
 5947|      0|        case value_t::number_unsigned:
  ------------------
  |  Branch (5947:9): [True: 0, False: 8.09k]
  ------------------
 5948|      0|        {
 5949|       |            // never null: a basic_json whose number_unsigned_t is number_integer_t
 5950|       |            // stores no number_unsigned values (#2573)
 5951|      0|            const auto* ptr = j.template get_ptr<const typename BasicJsonType::number_unsigned_t*>();
 5952|      0|            JSON_ASSERT(ptr != nullptr);
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (5952:13): [True: 0, False: 0]
  ------------------
 5953|      0|            val = static_cast<ArithmeticType>(*ptr);
 5954|      0|            break;
 5955|      0|        }
 5956|      0|        case value_t::number_integer:
  ------------------
  |  Branch (5956:9): [True: 0, False: 8.09k]
  ------------------
 5957|      0|        {
 5958|      0|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_integer_t*>());
 5959|      0|            break;
 5960|      0|        }
 5961|  8.09k|        case value_t::number_float:
  ------------------
  |  Branch (5961:9): [True: 8.09k, False: 0]
  ------------------
 5962|  8.09k|        {
 5963|  8.09k|            val = static_cast<ArithmeticType>(*j.template get_ptr<const typename BasicJsonType::number_float_t*>());
 5964|  8.09k|            break;
 5965|      0|        }
 5966|       |
 5967|      0|        case value_t::null:
  ------------------
  |  Branch (5967:9): [True: 0, False: 8.09k]
  ------------------
 5968|      0|        case value_t::object:
  ------------------
  |  Branch (5968:9): [True: 0, False: 8.09k]
  ------------------
 5969|      0|        case value_t::array:
  ------------------
  |  Branch (5969:9): [True: 0, False: 8.09k]
  ------------------
 5970|      0|        case value_t::string:
  ------------------
  |  Branch (5970:9): [True: 0, False: 8.09k]
  ------------------
 5971|      0|        case value_t::boolean:
  ------------------
  |  Branch (5971:9): [True: 0, False: 8.09k]
  ------------------
 5972|      0|        case value_t::binary:
  ------------------
  |  Branch (5972:9): [True: 0, False: 8.09k]
  ------------------
 5973|      0|        case value_t::discarded:
  ------------------
  |  Branch (5973:9): [True: 0, False: 8.09k]
  ------------------
 5974|      0|        default:
  ------------------
  |  Branch (5974:9): [True: 0, False: 8.09k]
  ------------------
 5975|      0|            throw_type_must_be("number", j);
 5976|  8.09k|    }
 5977|  8.09k|}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE25write_ubjson_start_objectERKSG_bbbbRb:
24069|  27.2k|    {
24070|  27.2k|        prefix_required = true;
24071|  27.2k|        if (add_prefix)
  ------------------
  |  Branch (24071:13): [True: 27.2k, False: 0]
  ------------------
24072|  27.2k|        {
24073|  27.2k|            oa.write_character(to_char_type('{'));
24074|  27.2k|        }
24075|       |
24076|  27.2k|        if (use_type && !j.m_data.m_value.object->empty())
  ------------------
  |  Branch (24076:13): [True: 8.69k, False: 18.5k]
  |  Branch (24076:25): [True: 6.67k, False: 2.02k]
  ------------------
24077|  6.67k|        {
24078|  6.67k|            if (!use_count)
  ------------------
  |  Branch (24078:17): [True: 0, False: 6.67k]
  ------------------
24079|      0|            {
24080|      0|                JSON_THROW(other_error::create(exception_id::size_marker_required, "use_type requires use_size = true", &j));
  ------------------
  |  | 2556|      0|    #define JSON_THROW(exception) throw exception
  ------------------
24081|      0|            }
24082|  6.67k|            const CharType first_prefix = ubjson_prefix(j.front(), use_bjdata);
24083|  6.67k|            const bool same_prefix = std::all_of(j.begin(), j.end(),
24084|  6.67k|                                                 [this, first_prefix, use_bjdata](const BasicJsonType & v)
24085|  6.67k|            {
24086|  6.67k|                return ubjson_prefix(v, use_bjdata) == first_prefix;
24087|  6.67k|            });
24088|       |
24089|  6.67k|            if (same_prefix && !(use_bjdata && is_bjdata_excluded_type_marker(first_prefix)))
  ------------------
  |  Branch (24089:17): [True: 3.86k, False: 2.81k]
  |  Branch (24089:34): [True: 3.86k, False: 0]
  |  Branch (24089:48): [True: 3.10k, False: 764]
  ------------------
24090|    764|            {
24091|    764|                prefix_required = false;
24092|    764|                oa.write_character(to_char_type('$'));
24093|    764|                oa.write_character(first_prefix);
24094|    764|            }
24095|  6.67k|        }
24096|       |
24097|  27.2k|        if (use_count)
  ------------------
  |  Branch (24097:13): [True: 17.3k, False: 9.83k]
  ------------------
24098|  17.3k|        {
24099|  17.3k|            oa.write_character(to_char_type('#'));
24100|  17.3k|            write_number_with_ubjson_prefix(j.m_data.m_value.object->size(), true, use_bjdata);
24101|  17.3k|        }
24102|       |
24103|  27.2k|        return !use_count;
24104|  27.2k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_writerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEEhNS1_18output_vector_sinkIhSE_EEE25write_ubjson_start_objectERKSG_bbbbRbENKUlSL_E_clESL_:
24085|  16.2k|            {
24086|  16.2k|                return ubjson_prefix(v, use_bjdata) == first_prefix;
24087|  16.2k|            });
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataISD_EESE_OT_bbNS0_6detail15error_handler_tE:
36742|  15.4k|    {
36743|  15.4k|        return from_binary_impl(detail::input_adapter(std::forward<InputType>(i)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
36744|  15.4k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataIPKhSH_TnNS2_9enable_ifIXsr6detail14can_compare_neIT_T0_EE5valueEiE4typeELi0EEESE_SJ_SK_bbNS0_6detail15error_handler_tE:
36755|  10.9k|    {
36756|  10.9k|        return from_binary_impl(detail::input_adapter(std::move(first), std::move(last)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
36757|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataIRNS2_19basic_istringstreamIcS7_S9_EEEESE_OT_bbNS0_6detail15error_handler_tE:
36742|  10.9k|    {
36743|  10.9k|        return from_binary_impl(detail::input_adapter(std::forward<InputType>(i)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
36744|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16from_binary_implINS0_6detail20input_stream_adapterEEESE_T_NSG_14input_format_tEbbNSG_15error_handler_tENSG_18cbor_tag_handler_tE:
36385|  10.9k|    {
36386|  10.9k|        basic_json result;
36387|  10.9k|        detail::json_sax_dom_parser<basic_json, InputAdapterType> sdp(result, allow_exceptions);
36388|  10.9k|        binary_reader<InputAdapterType> reader(std::move(ia), format, error_handler);
36389|  10.9k|        if (!reader.sax_parse(&sdp, strict, tag_handler))
  ------------------
  |  Branch (36389:13): [True: 0, False: 10.9k]
  ------------------
36390|      0|        {
36391|      0|            result = value_t::discarded;
36392|      0|        }
36393|  10.9k|        return result;
36394|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEEC2ERSG_bPNS1_5lexerISG_SH_EE:
13873|  10.9k|        : root(r), allow_exceptions(allow_exceptions_), m_lexer_ref(lexer_)
13874|  10.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEEC2EOSH_NS1_14input_format_tENS1_15error_handler_tE:
14944|  10.9k|        : ia(std::move(adapter)), input_format(format), error_handler(error_handler_)
14945|  10.9k|    {
14946|  10.9k|        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
14947|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapterC2EOS2_:
 8481|  10.9k|        : is(rhs.is), sb(rhs.sb)
 8482|  10.9k|    {
 8483|  10.9k|        rhs.is = nullptr;
 8484|  10.9k|        rhs.sb = nullptr;
 8485|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9sax_parseEPSJ_bNS1_18cbor_tag_handler_tE:
14969|  10.9k|    {
14970|  10.9k|        sax = sax_;
14971|  10.9k|        container_stack.clear();
14972|  10.9k|        bon8_pushback_size = 0;
14973|  10.9k|        bool result = false;
14974|       |
14975|  10.9k|        switch (input_format)
14976|  10.9k|        {
14977|      0|            case input_format_t::bson:
  ------------------
  |  Branch (14977:13): [True: 0, False: 10.9k]
  ------------------
14978|      0|                result = parse_bson_internal();
14979|      0|                break;
14980|       |
14981|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (14981:13): [True: 0, False: 10.9k]
  ------------------
14982|      0|                result = parse_cbor_internal(tag_handler);
14983|      0|                break;
14984|       |
14985|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (14985:13): [True: 0, False: 10.9k]
  ------------------
14986|      0|                result = parse_msgpack_internal();
14987|      0|                break;
14988|       |
14989|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (14989:13): [True: 0, False: 10.9k]
  ------------------
14990|  10.9k|            case input_format_t::bjdata:
  ------------------
  |  Branch (14990:13): [True: 10.9k, False: 0]
  ------------------
14991|  10.9k|                result = parse_ubjson_internal();
14992|  10.9k|                break;
14993|       |
14994|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (14994:13): [True: 0, False: 10.9k]
  ------------------
14995|      0|                result = parse_bon8_internal();
14996|      0|                break;
14997|       |
14998|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (14998:13): [True: 0, False: 10.9k]
  ------------------
14999|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (14999:13): [True: 0, False: 10.9k]
  ------------------
15000|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (15000:17): [Folded, False: 0]
  ------------------
15001|  10.9k|        }
15002|       |
15003|       |        // strict mode: next byte must be EOF
15004|  5.79k|        if (result && strict)
  ------------------
  |  Branch (15004:13): [True: 5.79k, False: 0]
  |  Branch (15004:23): [True: 5.79k, False: 0]
  ------------------
15005|  5.79k|        {
15006|  5.79k|            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
  ------------------
  |  Branch (15006:17): [True: 0, False: 5.79k]
  |  Branch (15006:59): [True: 5.79k, False: 0]
  ------------------
15007|  5.79k|            {
15008|  5.79k|                get_ignore_noop();
15009|  5.79k|            }
15010|      0|            else if (input_format == input_format_t::bon8)
  ------------------
  |  Branch (15010:22): [True: 0, False: 0]
  ------------------
15011|      0|            {
15012|       |                // a string that ends a container hands back the byte after it
15013|      0|                get_bon8();
15014|      0|            }
15015|      0|            else
15016|      0|            {
15017|      0|                get();
15018|      0|            }
15019|       |
15020|  5.79k|            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
  ------------------
  |  | 1667|  5.79k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 75, False: 5.71k]
  |  |  ------------------
  ------------------
15021|     75|            {
15022|     75|                return last_byte_error(exception_id::unexpected_end_of_input, "expected end of input", "value", "");
15023|     75|            }
15024|  5.79k|        }
15025|       |
15026|  5.71k|        return result;
15027|  5.79k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIiEEbRT_PKc:
18667|  2.05k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  2.05k|        auto new_chars_read = ia.get_elements(&dest);
18671|  2.05k|        chars_read += new_chars_read;
18672|  2.05k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  2.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 51, False: 2.00k]
  |  |  ------------------
  ------------------
18673|     51|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     51|            ++chars_read;
18676|     51|            static_cast<void>(report_eof(context));
18677|     51|            return false;
18678|     51|        }
18679|  2.00k|        return true;
18680|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIiEEmPT_m:
 8507|  2.05k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  2.05k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  2.05k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  2.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 51, False: 2.00k]
  |  |  ------------------
  ------------------
 8513|     51|        {
 8514|     51|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     51|        }
 8516|  2.05k|        return res;
 8517|  2.05k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10report_eofEPKc:
19058|  2.09k|    {
19059|  2.09k|        return sax->parse_error(chars_read, "<end of file>",
19060|  2.09k|                                parse_error::create(exception_id::unexpected_end_of_input, chars_read, exception_message("unexpected end of input", context), nullptr));
19061|  2.09k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE11parse_errorINS1_11parse_errorEEEbmRKSC_RKT_:
14004|  4.84k|    {
14005|  4.84k|        errored = true;
14006|  4.84k|        static_cast<void>(ex);
14007|  4.84k|        if (allow_exceptions)
  ------------------
  |  Branch (14007:13): [True: 4.84k, False: 0]
  ------------------
14008|  4.84k|        {
14009|  4.84k|            JSON_THROW(ex);
  ------------------
  |  | 2556|  4.84k|    #define JSON_THROW(exception) throw exception
  ------------------
14010|  4.84k|        }
14011|      0|        return false;
14012|  4.84k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE17exception_messageERKSC_SM_:
19163|  4.91k|    {
19164|  4.91k|        std::string error_msg = "syntax error while parsing ";
19165|       |
19166|  4.91k|        switch (input_format)
19167|  4.91k|        {
19168|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (19168:13): [True: 0, False: 4.91k]
  ------------------
19169|      0|                error_msg += "CBOR";
19170|      0|                break;
19171|       |
19172|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (19172:13): [True: 0, False: 4.91k]
  ------------------
19173|      0|                error_msg += "MessagePack";
19174|      0|                break;
19175|       |
19176|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (19176:13): [True: 0, False: 4.91k]
  ------------------
19177|      0|                error_msg += "UBJSON";
19178|      0|                break;
19179|       |
19180|      0|            case input_format_t::bson:
  ------------------
  |  Branch (19180:13): [True: 0, False: 4.91k]
  ------------------
19181|      0|                error_msg += "BSON";
19182|      0|                break;
19183|       |
19184|  4.91k|            case input_format_t::bjdata:
  ------------------
  |  Branch (19184:13): [True: 4.91k, False: 0]
  ------------------
19185|  4.91k|                error_msg += "BJData";
19186|  4.91k|                break;
19187|       |
19188|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (19188:13): [True: 0, False: 4.91k]
  ------------------
19189|      0|                error_msg += "BON8";
19190|      0|                break;
19191|       |
19192|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (19192:13): [True: 0, False: 4.91k]
  ------------------
19193|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (19193:13): [True: 0, False: 4.91k]
  ------------------
19194|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19194:17): [Folded, False: 0]
  ------------------
19195|  4.91k|        }
19196|       |
19197|  4.91k|        return concat(error_msg, ' ', context, ": ", detail);
19198|  4.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE15enter_containerEbmi:
15082|  61.8k|    {
15083|  61.8k|        if (JSON_HEDLEY_UNLIKELY(is_object ? !sax->start_object(len) : !sax->start_array(len)))
  ------------------
  |  | 1667|   123k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 61.8k]
  |  |  |  Branch (1667:94): [True: 7.85k, False: 54.0k]
  |  |  ------------------
  ------------------
15084|      0|        {
15085|      0|            return false;
15086|      0|        }
15087|       |
15088|  61.8k|        container_stack.emplace_back(len, is_object, type_marker);
15089|  61.8k|        return true;
15090|  61.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12start_objectEm:
13930|  9.98k|    {
13931|  9.98k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
13932|       |
13933|       |#if JSON_DIAGNOSTIC_POSITIONS
13934|       |        // Ensure this is after the call to handle_value to ensure correct start position.
13935|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
13936|       |#endif
13937|       |
13938|  9.98k|        return check_container_size(*this, len, "object", ref_stack.back());
13939|  9.98k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueINS1_7value_tEEEPSG_OT_:
14030|  68.1k|    {
14031|  68.1k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 5.93k, False: 62.1k]
  ------------------
14032|  5.93k|        {
14033|  5.93k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  5.93k|            return &root;
14040|  5.93k|        }
14041|       |
14042|  62.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  62.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 54.6k, False: 7.52k]
  |  Branch (14042:9): [True: 7.52k, False: 0]
  |  Branch (14042:9): [True: 62.1k, False: 0]
  ------------------
14043|       |
14044|  62.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 54.6k, False: 7.52k]
  ------------------
14045|  54.6k|        {
14046|  54.6k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  54.6k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  54.6k|        }
14054|       |
14055|  7.52k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.52k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 7.52k, False: 0]
  ------------------
14056|  7.52k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  7.52k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 7.52k, False: 0]
  ------------------
14057|  7.52k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  7.52k|        return object_element;
14064|  7.52k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20check_container_sizeINS1_19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_20input_stream_adapterEEESH_EEbRT_mPKcPT0_:
13724|  68.1k|{
13725|  68.1k|    if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref->max_size()))
  ------------------
  |  | 1667|  76.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 229, False: 67.8k]
  |  |  |  Branch (1667:94): [True: 8.14k, False: 59.9k]
  |  |  |  Branch (1667:94): [True: 229, False: 7.92k]
  |  |  ------------------
  ------------------
13726|    229|    {
13727|    229|        return container_too_large_error(sax, len, kind, ref);
13728|    229|    }
13729|  67.8k|    return true;
13730|  68.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail25container_too_large_errorINS1_19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_20input_stream_adapterEEESH_EEbRT_mPKcPT0_:
13718|    229|{
13719|    229|    return sax.parse_error(0, "", out_of_range::create(exception_id::container_too_large, concat("excessive ", kind, " size: ", std::to_string(len)), ref));
13720|    229|}
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE11parse_errorINS1_12out_of_rangeEEEbmRKSC_RKT_:
14004|    351|    {
14005|    351|        errored = true;
14006|    351|        static_cast<void>(ex);
14007|    351|        if (allow_exceptions)
  ------------------
  |  Branch (14007:13): [True: 351, False: 0]
  ------------------
14008|    351|        {
14009|    351|            JSON_THROW(ex);
  ------------------
  |  | 2556|    351|    #define JSON_THROW(exception) throw exception
  ------------------
14010|    351|        }
14011|      0|        return false;
14012|    351|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE11start_arrayEm:
13966|  58.1k|    {
13967|  58.1k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
13968|       |
13969|       |#if JSON_DIAGNOSTIC_POSITIONS
13970|       |        // Ensure this is after the call to handle_value to ensure correct start position.
13971|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
13972|       |#endif
13973|       |
13974|  58.1k|        if (JSON_HEDLEY_UNLIKELY(!check_container_size(*this, len, "array", ref_stack.back())))
  ------------------
  |  | 1667|  58.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 58.1k]
  |  |  ------------------
  ------------------
13975|      0|        {
13976|      0|            return false;
13977|      0|        }
13978|       |
13979|  58.1k|        if (len != detail::unknown_size())
  ------------------
  |  Branch (13979:13): [True: 5.67k, False: 52.4k]
  ------------------
13980|  5.67k|        {
13981|  5.67k|            reserve_array(*ref_stack.back()->m_data.m_value.array, len, priority_tag<1> {});
13982|  5.67k|        }
13983|       |
13984|  58.1k|        return true;
13985|  58.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE15container_frameC2Embi:
15051|  61.6k|            : remaining(remaining_), type_marker(type_marker_), is_object(is_object_) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE15leave_containerEv:
15114|  43.0k|    {
15115|  43.0k|        const bool is_object = container_stack.back().is_object;
15116|  43.0k|        container_stack.pop_back();
15117|  43.0k|        return is_object ? sax->end_object() : sax->end_array();
  ------------------
  |  Branch (15117:16): [True: 5.97k, False: 37.1k]
  ------------------
15118|  43.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE10end_objectEv:
13952|  7.86k|    {
13953|  7.86k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  7.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13953:9): [True: 7.86k, False: 0]
  ------------------
13954|  7.86k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13954:9): [True: 7.86k, False: 0]
  ------------------
13955|       |
13956|       |#if JSON_DIAGNOSTIC_POSITIONS
13957|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
13958|       |#endif
13959|       |
13960|  7.86k|        ref_stack.back()->set_parents();
13961|  7.86k|        ref_stack.pop_back();
13962|  7.86k|        return true;
13963|  7.86k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE9end_arrayEv:
13988|  41.0k|    {
13989|  41.0k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  41.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13989:9): [True: 41.0k, False: 0]
  ------------------
13990|  41.0k|        JSON_ASSERT(ref_stack.back()->is_array());
  ------------------
  |  | 2591|  41.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13990:9): [True: 41.0k, False: 0]
  ------------------
13991|       |
13992|       |#if JSON_DIAGNOSTIC_POSITIONS
13993|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
13994|       |#endif
13995|       |
13996|  41.0k|        ref_stack.back()->set_parents();
13997|  41.0k|        ref_stack.pop_back();
13998|  41.0k|        return true;
13999|  41.0k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE12unexpect_eofEPKc:
19041|   144k|    {
19042|   144k|        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
  ------------------
  |  | 1667|   144k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1.74k, False: 143k]
  |  |  ------------------
  ------------------
19043|  1.74k|        {
19044|  1.74k|            return report_eof(context);
19045|  1.74k|        }
19046|   143k|        return true;
19047|   144k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE17check_string_utf8ERSC_PKc:
18941|  18.0k|    {
18942|  18.0k|        if (error_handler == error_handler_t::keep || is_valid_utf8(result))
  ------------------
  |  Branch (18942:13): [True: 18.0k, False: 0]
  |  Branch (18942:55): [True: 0, False: 0]
  ------------------
18943|  18.0k|        {
18944|  18.0k|            return true;
18945|  18.0k|        }
18946|       |
18947|      0|        if (error_handler == error_handler_t::strict)
  ------------------
  |  Branch (18947:13): [True: 0, False: 0]
  ------------------
18948|      0|        {
18949|      0|            return last_byte_error(exception_id::invalid_string_or_size, "invalid string: ill-formed UTF-8 byte", context);
18950|      0|        }
18951|       |
18952|      0|        result = sanitize_utf8(result, error_handler);
18953|      0|        return true;
18954|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE3keyERSC_:
13942|  21.0k|    {
13943|  21.0k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  21.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13943:9): [True: 21.0k, False: 0]
  ------------------
13944|  21.0k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  21.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13944:9): [True: 21.0k, False: 0]
  ------------------
13945|       |
13946|       |        // add null at the given key and store the reference for later
13947|  21.0k|        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));
13948|  21.0k|        return true;
13949|  21.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIdEEbRT_PKc:
18667|    877|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|    877|        auto new_chars_read = ia.get_elements(&dest);
18671|    877|        chars_read += new_chars_read;
18672|    877|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|    877|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 16, False: 861]
  |  |  ------------------
  ------------------
18673|     16|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     16|            ++chars_read;
18676|     16|            static_cast<void>(report_eof(context));
18677|     16|            return false;
18678|     16|        }
18679|    861|        return true;
18680|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIdEEmPT_m:
 8507|    877|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|    877|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|    877|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|    877|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 16, False: 861]
  |  |  ------------------
  ------------------
 8513|     16|        {
 8514|     16|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     16|        }
 8516|    877|        return res;
 8517|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10emit_floatIdEEbT_:
18825|    861|    {
18826|    861|        const auto result = static_cast<number_float_t>(number);
18827|    861|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1667|  1.71k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 861]
  |  |  |  Branch (1667:94): [True: 850, False: 11]
  |  |  |  Branch (1667:94): [True: 0, False: 850]
  |  |  ------------------
  ------------------
18828|      0|        {
18829|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
18830|      0|        }
18831|    861|        return sax->number_float(result, "");
18832|    861|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE18out_of_range_errorENS1_12exception_idEPKcSN_:
19068|     70|    {
19069|     70|        return sax->parse_error(chars_read, get_token_string(), out_of_range::create(id_, exception_message(detail, context), nullptr));
19070|     70|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE16get_token_stringEv:
19152|  1.77k|    {
19153|  1.77k|        return hex_byte(static_cast<std::uint8_t>(current));
19154|  1.77k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12number_floatEdRKSC_:
13908|  22.3k|    {
13909|  22.3k|        handle_value(val);
13910|  22.3k|        return true;
13911|  22.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIRdEEPSG_OT_:
14030|  22.3k|    {
14031|  22.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 1.07k, False: 21.3k]
  ------------------
14032|  1.07k|        {
14033|  1.07k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  1.07k|            return &root;
14040|  1.07k|        }
14041|       |
14042|  21.3k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  21.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 21.1k, False: 148]
  |  Branch (14042:9): [True: 148, False: 0]
  |  Branch (14042:9): [True: 21.3k, False: 0]
  ------------------
14043|       |
14044|  21.3k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 21.1k, False: 148]
  ------------------
14045|  21.1k|        {
14046|  21.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  21.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  21.1k|        }
14054|       |
14055|    148|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    148|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 148, False: 0]
  ------------------
14056|    148|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    148|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 148, False: 0]
  ------------------
14057|    148|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    148|        return object_element;
14064|    148|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIiEEbT_RSC_:
18910|    293|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    293|        return get_bytes(len, "string", result);
18921|    293|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIiSC_EEbT_PKcRT0_:
18998|    293|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    293|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    509|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 278, False: 231]
  ------------------
19003|    278|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    278|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 238, False: 40]
  ------------------
19007|    278|                                       ? static_cast<std::size_t>(len)
19008|    278|                                       : chunk_size;
19009|    278|            const std::size_t old_size = result.size();
19010|    278|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    278|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    278|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 278, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    278|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    278|            chars_read += bytes_read;
19018|    278|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    278|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 62, False: 216]
  |  |  ------------------
  ------------------
19019|     62|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     62|                result.resize(old_size + bytes_read);
19024|     62|                ++chars_read;
19025|     62|                current = char_traits<char_type>::eof();
19026|     62|                return unexpect_eof(context);
19027|     62|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    216|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    216|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 216, False: 0]
  ------------------
19030|    216|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    216|        }
19032|    231|        return true;
19033|    293|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIcEEmPT_m:
 8507|  14.3k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  14.3k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  14.3k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  14.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 526, False: 13.8k]
  |  |  ------------------
  ------------------
 8513|    526|        {
 8514|    526|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|    526|        }
 8516|  14.3k|        return res;
 8517|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE6stringERSC_:
13914|  10.5k|    {
13915|       |        // json_sax documents that the passed value may be moved from,
13916|       |        // so hand the buffer over instead of copying it
13917|  10.5k|        handle_value(std::move(val));
13918|  10.5k|        return true;
13919|  10.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueISC_EEPSG_OT_:
14030|  10.5k|    {
14031|  10.5k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 338, False: 10.1k]
  ------------------
14032|    338|        {
14033|    338|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    338|            return &root;
14040|    338|        }
14041|       |
14042|  10.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  10.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 6.13k, False: 4.04k]
  |  Branch (14042:9): [True: 4.04k, False: 0]
  |  Branch (14042:9): [True: 10.1k, False: 0]
  ------------------
14043|       |
14044|  10.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 6.13k, False: 4.04k]
  ------------------
14045|  6.13k|        {
14046|  6.13k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  6.13k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  6.13k|        }
14054|       |
14055|  4.04k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  4.04k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 4.04k, False: 0]
  ------------------
14056|  4.04k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  4.04k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 4.04k, False: 0]
  ------------------
14057|  4.04k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  4.04k|        return object_element;
14064|  4.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIhEEmPT_m:
 8507|  29.1k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  29.1k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  29.1k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  29.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 177, False: 28.9k]
  |  |  ------------------
  ------------------
 8513|    177|        {
 8514|    177|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|    177|        }
 8516|  29.1k|        return res;
 8517|  29.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE6binaryERNS0_27byte_container_with_subtypeISF_EE:
13922|  1.75k|    {
13923|       |        // json_sax documents that the passed value may be moved from,
13924|       |        // so hand the buffer over instead of copying it
13925|  1.75k|        handle_value(std::move(val));
13926|  1.75k|        return true;
13927|  1.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueINS0_27byte_container_with_subtypeISF_EEEEPSG_OT_:
14030|  1.75k|    {
14031|  1.75k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 55, False: 1.69k]
  ------------------
14032|     55|        {
14033|     55|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|     55|            return &root;
14040|     55|        }
14041|       |
14042|  1.69k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  1.69k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 1.52k, False: 173]
  |  Branch (14042:9): [True: 173, False: 0]
  |  Branch (14042:9): [True: 1.69k, False: 0]
  ------------------
14043|       |
14044|  1.69k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 1.52k, False: 173]
  ------------------
14045|  1.52k|        {
14046|  1.52k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  1.52k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  1.52k|        }
14054|       |
14055|    173|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    173|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 173, False: 0]
  ------------------
14056|    173|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    173|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 173, False: 0]
  ------------------
14057|    173|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    173|        return object_element;
14064|    173|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIhLb0EEEbRT_:
18739|  28.1k|    {
18740|       |        // read in the original format
18741|       |
18742|  28.1k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  28.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 28.1k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  28.1k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 28.1k]
  |  Branch (18746:34): [Folded, False: 28.0k]
  |  Branch (18746:57): [True: 28.0k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  28.1k|        return true;
18751|  28.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIhEEbRT_PKc:
18667|  28.1k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  28.1k|        auto new_chars_read = ia.get_elements(&dest);
18671|  28.1k|        chars_read += new_chars_read;
18672|  28.1k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  28.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 60, False: 28.0k]
  |  |  ------------------
  ------------------
18673|     60|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     60|            ++chars_read;
18676|     60|            static_cast<void>(report_eof(context));
18677|     60|            return false;
18678|     60|        }
18679|  28.0k|        return true;
18680|  28.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE7booleanEb:
13890|  14.8k|    {
13891|  14.8k|        handle_value(val);
13892|  14.8k|        return true;
13893|  14.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIRbEEPSG_OT_:
14030|  14.8k|    {
14031|  14.8k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 13, False: 14.8k]
  ------------------
14032|     13|        {
14033|     13|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|     13|            return &root;
14040|     13|        }
14041|       |
14042|  14.8k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  14.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 11.5k, False: 3.28k]
  |  Branch (14042:9): [True: 3.28k, False: 0]
  |  Branch (14042:9): [True: 14.8k, False: 0]
  ------------------
14043|       |
14044|  14.8k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 11.5k, False: 3.28k]
  ------------------
14045|  11.5k|        {
14046|  11.5k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  11.5k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  11.5k|        }
14054|       |
14055|  3.28k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  3.28k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 3.28k, False: 0]
  ------------------
14056|  3.28k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  3.28k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 3.28k, False: 0]
  ------------------
14057|  3.28k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  3.28k|        return object_element;
14064|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE4nullEv:
13884|  9.91k|    {
13885|  9.91k|        handle_value(nullptr);
13886|  9.91k|        return true;
13887|  9.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIDnEEPSG_OT_:
14030|  9.91k|    {
14031|  9.91k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 8, False: 9.90k]
  ------------------
14032|      8|        {
14033|      8|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|      8|            return &root;
14040|      8|        }
14041|       |
14042|  9.90k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  9.90k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 5.23k, False: 4.67k]
  |  Branch (14042:9): [True: 4.67k, False: 0]
  |  Branch (14042:9): [True: 9.90k, False: 0]
  ------------------
14043|       |
14044|  9.90k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 5.23k, False: 4.67k]
  ------------------
14045|  5.23k|        {
14046|  5.23k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  5.23k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  5.23k|        }
14054|       |
14055|  4.67k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  4.67k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 4.67k, False: 0]
  ------------------
14056|  4.67k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  4.67k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 4.67k, False: 0]
  ------------------
14057|  4.67k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  4.67k|        return object_element;
14064|  4.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE11emit_signedIiEEbT_:
18771|  1.14k|    {
18772|  1.14k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.14k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.14k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.14k|        {
18774|  1.14k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.14k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE14number_integerEl:
13896|  7.46k|    {
13897|  7.46k|        handle_value(val);
13898|  7.46k|        return true;
13899|  7.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIRlEEPSG_OT_:
14030|  7.46k|    {
14031|  7.46k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 294, False: 7.16k]
  ------------------
14032|    294|        {
14033|    294|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    294|            return &root;
14040|    294|        }
14041|       |
14042|  7.16k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.16k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 6.86k, False: 308]
  |  Branch (14042:9): [True: 308, False: 0]
  |  Branch (14042:9): [True: 7.16k, False: 0]
  ------------------
14043|       |
14044|  7.16k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 6.86k, False: 308]
  ------------------
14045|  6.86k|        {
14046|  6.86k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  6.86k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  6.86k|        }
14054|       |
14055|    308|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    308|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 308, False: 0]
  ------------------
14056|    308|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    308|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 308, False: 0]
  ------------------
14057|    308|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    308|        return object_element;
14064|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE15number_unsignedEm:
13902|  17.9k|    {
13903|  17.9k|        handle_value(val);
13904|  17.9k|        return true;
13905|  17.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEE12handle_valueIRmEEPSG_OT_:
14030|  17.9k|    {
14031|  17.9k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 457, False: 17.4k]
  ------------------
14032|    457|        {
14033|    457|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    457|            return &root;
14040|    457|        }
14041|       |
14042|  17.4k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  17.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 16.8k, False: 619]
  |  Branch (14042:9): [True: 619, False: 0]
  |  Branch (14042:9): [True: 17.4k, False: 0]
  ------------------
14043|       |
14044|  17.4k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 16.8k, False: 619]
  ------------------
14045|  16.8k|        {
14046|  16.8k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  16.8k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  16.8k|        }
14054|       |
14055|    619|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    619|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 619, False: 0]
  ------------------
14056|    619|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    619|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 619, False: 0]
  ------------------
14057|    619|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    619|        return object_element;
14064|    619|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIlEEbRT_PKc:
18667|  1.93k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.93k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.93k|        chars_read += new_chars_read;
18672|  1.93k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.93k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 55, False: 1.87k]
  |  |  ------------------
  ------------------
18673|     55|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     55|            ++chars_read;
18676|     55|            static_cast<void>(report_eof(context));
18677|     55|            return false;
18678|     55|        }
18679|  1.87k|        return true;
18680|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIlEEmPT_m:
 8507|  1.93k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  1.93k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  1.93k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  1.93k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 55, False: 1.87k]
  |  |  ------------------
  ------------------
 8513|     55|        {
 8514|     55|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     55|        }
 8516|  1.93k|        return res;
 8517|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE11emit_signedIlEEbT_:
18771|  1.18k|    {
18772|  1.18k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.18k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.18k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.18k|        {
18774|  1.18k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.18k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toImEEbRT_PKc:
18667|  3.75k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  3.75k|        auto new_chars_read = ia.get_elements(&dest);
18671|  3.75k|        chars_read += new_chars_read;
18672|  3.75k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  3.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 37, False: 3.72k]
  |  |  ------------------
  ------------------
18673|     37|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     37|            ++chars_read;
18676|     37|            static_cast<void>(report_eof(context));
18677|     37|            return false;
18678|     37|        }
18679|  3.72k|        return true;
18680|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsImEEmPT_m:
 8507|  3.75k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  3.75k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  3.75k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  3.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 37, False: 3.72k]
  |  |  ------------------
  ------------------
 8513|     37|        {
 8514|     37|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     37|        }
 8516|  3.75k|        return res;
 8517|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE13emit_unsignedImEEbT_:
18799|  8.40k|    {
18800|  8.40k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  8.40k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 8.40k, False: 0]
  |  |  ------------------
  ------------------
18801|  8.40k|        {
18802|  8.40k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  8.40k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  8.40k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIjEEbT_RSC_:
18910|    281|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    281|        return get_bytes(len, "string", result);
18921|    281|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIjSC_EEbT_PKcRT0_:
18998|    281|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    281|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    445|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 243, False: 202]
  ------------------
19003|    243|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    243|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 188, False: 55]
  ------------------
19007|    243|                                       ? static_cast<std::size_t>(len)
19008|    243|                                       : chunk_size;
19009|    243|            const std::size_t old_size = result.size();
19010|    243|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    243|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    243|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 243, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    243|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    243|            chars_read += bytes_read;
19018|    243|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    243|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 79, False: 164]
  |  |  ------------------
  ------------------
19019|     79|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     79|                result.resize(old_size + bytes_read);
19024|     79|                ++chars_read;
19025|     79|                current = char_traits<char_type>::eof();
19026|     79|                return unexpect_eof(context);
19027|     79|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    164|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    164|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 164, False: 0]
  ------------------
19030|    164|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    164|        }
19032|    202|        return true;
19033|    281|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIhEEbT_RSC_:
18910|  12.8k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  12.8k|        return get_bytes(len, "string", result);
18921|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIhSC_EEbT_PKcRT0_:
18998|  12.8k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  12.8k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  21.9k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 9.05k, False: 12.8k]
  ------------------
19003|  9.05k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  9.05k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 9.05k, False: 0]
  ------------------
19007|  9.05k|                                       ? static_cast<std::size_t>(len)
19008|  9.05k|                                       : chunk_size;
19009|  9.05k|            const std::size_t old_size = result.size();
19010|  9.05k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  9.05k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  9.05k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 9.05k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  9.05k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  9.05k|            chars_read += bytes_read;
19018|  9.05k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  9.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 34, False: 9.02k]
  |  |  ------------------
  ------------------
19019|     34|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     34|                result.resize(old_size + bytes_read);
19024|     34|                ++chars_read;
19025|     34|                current = char_traits<char_type>::eof();
19026|     34|                return unexpect_eof(context);
19027|     34|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  9.02k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  9.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 9.02k, False: 0]
  ------------------
19030|  9.02k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  9.02k|        }
19032|  12.8k|        return true;
19033|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberItLb0EEEbRT_:
18739|  2.94k|    {
18740|       |        // read in the original format
18741|       |
18742|  2.94k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  2.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.94k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  2.94k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 2.94k]
  |  Branch (18746:34): [Folded, False: 2.89k]
  |  Branch (18746:57): [True: 2.89k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  2.94k|        return true;
18751|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toItEEbRT_PKc:
18667|  2.94k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  2.94k|        auto new_chars_read = ia.get_elements(&dest);
18671|  2.94k|        chars_read += new_chars_read;
18672|  2.94k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  2.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 41, False: 2.89k]
  |  |  ------------------
  ------------------
18673|     41|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     41|            ++chars_read;
18676|     41|            static_cast<void>(report_eof(context));
18677|     41|            return false;
18678|     41|        }
18679|  2.89k|        return true;
18680|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsItEEmPT_m:
 8507|  2.94k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  2.94k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  2.94k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  2.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 41, False: 2.89k]
  |  |  ------------------
  ------------------
 8513|     41|        {
 8514|     41|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     41|        }
 8516|  2.94k|        return res;
 8517|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringItEEbT_RSC_:
18910|    439|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    439|        return get_bytes(len, "string", result);
18921|    439|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesItSC_EEbT_PKcRT0_:
18998|    439|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    439|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    624|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 237, False: 387]
  ------------------
19003|    237|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    237|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 218, False: 19]
  ------------------
19007|    237|                                       ? static_cast<std::size_t>(len)
19008|    237|                                       : chunk_size;
19009|    237|            const std::size_t old_size = result.size();
19010|    237|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    237|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    237|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 237, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    237|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    237|            chars_read += bytes_read;
19018|    237|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    237|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 52, False: 185]
  |  |  ------------------
  ------------------
19019|     52|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     52|                result.resize(old_size + bytes_read);
19024|     52|                ++chars_read;
19025|     52|                current = char_traits<char_type>::eof();
19026|     52|                return unexpect_eof(context);
19027|     52|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    185|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    185|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 185, False: 0]
  ------------------
19030|    185|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    185|        }
19032|    387|        return true;
19033|    439|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIjLb0EEEbRT_:
18739|  1.84k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.84k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.84k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.84k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.84k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.84k]
  |  Branch (18746:34): [Folded, False: 1.81k]
  |  Branch (18746:57): [True: 1.81k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.84k|        return true;
18751|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIjEEbRT_PKc:
18667|  1.84k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.84k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.84k|        chars_read += new_chars_read;
18672|  1.84k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.84k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 29, False: 1.81k]
  |  |  ------------------
  ------------------
18673|     29|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     29|            ++chars_read;
18676|     29|            static_cast<void>(report_eof(context));
18677|     29|            return false;
18678|     29|        }
18679|  1.81k|        return true;
18680|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIjEEmPT_m:
 8507|  1.84k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  1.84k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  1.84k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  1.84k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 29, False: 1.81k]
  |  |  ------------------
  ------------------
 8513|     29|        {
 8514|     29|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     29|        }
 8516|  1.84k|        return res;
 8517|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberImLb0EEEbRT_:
18739|  3.75k|    {
18740|       |        // read in the original format
18741|       |
18742|  3.75k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  3.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.75k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  3.75k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 3.75k]
  |  Branch (18746:34): [Folded, False: 3.72k]
  |  Branch (18746:57): [True: 3.72k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  3.75k|        return true;
18751|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringImEEbT_RSC_:
18910|    308|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    308|        return get_bytes(len, "string", result);
18921|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesImSC_EEbT_PKcRT0_:
18998|    308|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    308|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    446|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 268, False: 178]
  ------------------
19003|    268|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    268|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 164, False: 104]
  ------------------
19007|    268|                                       ? static_cast<std::size_t>(len)
19008|    268|                                       : chunk_size;
19009|    268|            const std::size_t old_size = result.size();
19010|    268|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    268|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    268|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 268, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    268|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    268|            chars_read += bytes_read;
19018|    268|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    268|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 130, False: 138]
  |  |  ------------------
  ------------------
19019|    130|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    130|                result.resize(old_size + bytes_read);
19024|    130|                ++chars_read;
19025|    130|                current = char_traits<char_type>::eof();
19026|    130|                return unexpect_eof(context);
19027|    130|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    138|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    138|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 138, False: 0]
  ------------------
19030|    138|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    138|        }
19032|    178|        return true;
19033|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE13emit_unsignedIhEEbT_:
18799|  5.15k|    {
18800|  5.15k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  5.15k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 5.15k, False: 0]
  |  |  ------------------
  ------------------
18801|  5.15k|        {
18802|  5.15k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  5.15k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  5.15k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE13emit_unsignedItEEbT_:
18799|  1.46k|    {
18800|  1.46k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  1.46k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.46k, False: 0]
  |  |  ------------------
  ------------------
18801|  1.46k|        {
18802|  1.46k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  1.46k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  1.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE13emit_unsignedIjEEbT_:
18799|  1.02k|    {
18800|  1.02k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  1.02k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.02k, False: 0]
  |  |  ------------------
  ------------------
18801|  1.02k|        {
18802|  1.02k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  1.02k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  1.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_binaryImEEbT_RNS0_27byte_container_with_subtypeISF_EE:
18972|  1.87k|    {
18973|  1.87k|        return get_bytes(len, "binary", result);
18974|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesImNS0_27byte_container_with_subtypeISF_EEEEbT_PKcRT0_:
18998|  1.87k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  1.87k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  2.77k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 1.01k, False: 1.75k]
  ------------------
19003|  1.01k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  1.01k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 923, False: 93]
  ------------------
19007|  1.01k|                                       ? static_cast<std::size_t>(len)
19008|  1.01k|                                       : chunk_size;
19009|  1.01k|            const std::size_t old_size = result.size();
19010|  1.01k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  1.01k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  1.01k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 1.01k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  1.01k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  1.01k|            chars_read += bytes_read;
19018|  1.01k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  1.01k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 117, False: 899]
  |  |  ------------------
  ------------------
19019|    117|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    117|                result.resize(old_size + bytes_read);
19024|    117|                ++chars_read;
19025|    117|                current = char_traits<char_type>::eof();
19026|    117|                return unexpect_eof(context);
19027|    117|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    899|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    899|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 899, False: 0]
  ------------------
19030|    899|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    899|        }
19032|  1.75k|        return true;
19033|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE11enter_arrayEmi:
15094|  54.0k|    {
15095|  54.0k|        return enter_container(/*is_object*/false, len, type_marker);
15096|  54.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE12enter_objectEmi:
15100|  7.85k|    {
15101|  7.85k|        return enter_container(/*is_object*/true, len, type_marker);
15102|  7.85k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE15unexpected_byteEPKcSM_:
19130|    184|    {
19131|    184|        return last_byte_error(exception_id::unexpected_byte, concat(detail, ": 0x", get_token_string()), context);
19132|    184|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE14get_half_floatEb:
18845|  17.8k|    {
18846|  17.8k|        const auto byte1_raw = get();
18847|  17.8k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  17.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 17.8k]
  |  |  ------------------
  ------------------
18848|      0|        {
18849|      0|            return false;
18850|      0|        }
18851|  17.8k|        const auto byte2_raw = get();
18852|  17.8k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  17.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 17.8k]
  |  |  ------------------
  ------------------
18853|      0|        {
18854|      0|            return false;
18855|      0|        }
18856|       |
18857|  17.8k|        const auto byte1 = static_cast<unsigned char>(byte1_raw);
18858|  17.8k|        const auto byte2 = static_cast<unsigned char>(byte2_raw);
18859|       |
18860|       |        // Code from RFC 8949, Appendix D, Figure 3:
18861|       |        // As half-precision floating-point numbers were only added
18862|       |        // to IEEE 754 in 2008, today's programming platforms often
18863|       |        // still only have limited support for them. It is very
18864|       |        // easy to include at least decoding support for them even
18865|       |        // without such support. An example of a small decoder for
18866|       |        // half-precision floating-point numbers in the C language
18867|       |        // is shown in Fig. 3.
18868|  17.8k|        const auto half = little_endian
  ------------------
  |  Branch (18868:27): [True: 17.8k, False: 50]
  ------------------
18869|  17.8k|                          ? static_cast<unsigned int>((byte2 << 8u) + byte1)
18870|  17.8k|                          : static_cast<unsigned int>((byte1 << 8u) + byte2);
18871|  17.8k|        const double val = [&half]
18872|  17.8k|        {
18873|  17.8k|            const int exp = (half >> 10u) & 0x1Fu;
18874|  17.8k|            const unsigned int mant = half & 0x3FFu;
18875|  17.8k|            JSON_ASSERT(exp <= 31);
18876|  17.8k|            JSON_ASSERT(mant <= 1023);
18877|  17.8k|            switch (exp)
18878|  17.8k|            {
18879|  17.8k|                case 0:
18880|  17.8k|                    return std::ldexp(mant, -24);
18881|  17.8k|                case 31:
18882|  17.8k|                    return (mant == 0)
18883|  17.8k|                    ? std::numeric_limits<double>::infinity()
18884|  17.8k|                    : std::numeric_limits<double>::quiet_NaN();
18885|  17.8k|                default:
18886|  17.8k|                    return std::ldexp(mant + 1024, exp - 25);
18887|  17.8k|            }
18888|  17.8k|        }();
18889|  17.8k|        return sax->number_float((half & 0x8000u) != 0
  ------------------
  |  Branch (18889:34): [True: 4.36k, False: 13.5k]
  ------------------
18890|  17.8k|                                 ? static_cast<number_float_t>(-val)
18891|  17.8k|                                 : static_cast<number_float_t>(val), "");
18892|  17.8k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE14get_half_floatEbENKUlvE_clEv:
18872|  17.8k|        {
18873|  17.8k|            const int exp = (half >> 10u) & 0x1Fu;
18874|  17.8k|            const unsigned int mant = half & 0x3FFu;
18875|  17.8k|            JSON_ASSERT(exp <= 31);
  ------------------
  |  | 2591|  17.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18875:13): [True: 17.8k, False: 0]
  ------------------
18876|  17.8k|            JSON_ASSERT(mant <= 1023);
  ------------------
  |  | 2591|  17.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18876:13): [True: 17.8k, False: 0]
  ------------------
18877|  17.8k|            switch (exp)
18878|  17.8k|            {
18879|  3.26k|                case 0:
  ------------------
  |  Branch (18879:17): [True: 3.26k, False: 14.5k]
  ------------------
18880|  3.26k|                    return std::ldexp(mant, -24);
18881|  1.74k|                case 31:
  ------------------
  |  Branch (18881:17): [True: 1.74k, False: 16.0k]
  ------------------
18882|  1.74k|                    return (mant == 0)
  ------------------
  |  Branch (18882:28): [True: 1, False: 1.74k]
  ------------------
18883|  1.74k|                    ? std::numeric_limits<double>::infinity()
18884|  1.74k|                    : std::numeric_limits<double>::quiet_NaN();
18885|  12.8k|                default:
  ------------------
  |  Branch (18885:17): [True: 12.8k, False: 5.00k]
  ------------------
18886|  12.8k|                    return std::ldexp(mant + 1024, exp - 25);
18887|  17.8k|            }
18888|  17.8k|        }();
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIfLb0EEEbRT_:
18739|  1.30k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.30k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.30k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.30k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.30k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.30k]
  |  Branch (18746:34): [Folded, False: 1.29k]
  |  Branch (18746:57): [True: 1.29k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.30k|        return true;
18751|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIfEEbRT_PKc:
18667|  1.30k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.30k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.30k|        chars_read += new_chars_read;
18672|  1.30k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.30k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 15, False: 1.29k]
  |  |  ------------------
  ------------------
18673|     15|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     15|            ++chars_read;
18676|     15|            static_cast<void>(report_eof(context));
18677|     15|            return false;
18678|     15|        }
18679|  1.29k|        return true;
18680|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIfEEmPT_m:
 8507|  1.30k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  1.30k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  1.30k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  1.30k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 15, False: 1.29k]
  |  |  ------------------
  ------------------
 8513|     15|        {
 8514|     15|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     15|        }
 8516|  1.30k|        return res;
 8517|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10emit_floatIfEEbT_:
18825|  1.29k|    {
18826|  1.29k|        const auto result = static_cast<number_float_t>(number);
18827|  1.29k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1667|  2.43k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.29k]
  |  |  |  Branch (1667:94): [True: 1.13k, False: 158]
  |  |  |  Branch (1667:94): [True: 0, False: 1.13k]
  |  |  ------------------
  ------------------
18828|      0|        {
18829|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
18830|      0|        }
18831|  1.29k|        return sax->number_float(result, "");
18832|  1.29k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIdLb0EEEbRT_:
18739|    877|    {
18740|       |        // read in the original format
18741|       |
18742|    877|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|    877|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 877]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|    877|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 877]
  |  Branch (18746:34): [Folded, False: 861]
  |  Branch (18746:57): [True: 861, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|    877|        return true;
18751|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIaLb0EEEbRT_:
18739|  15.0k|    {
18740|       |        // read in the original format
18741|       |
18742|  15.0k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  15.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 15.0k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  15.0k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 15.0k]
  |  Branch (18746:34): [Folded, False: 15.0k]
  |  Branch (18746:57): [True: 15.0k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  15.0k|        return true;
18751|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIaEEbRT_PKc:
18667|  15.0k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  15.0k|        auto new_chars_read = ia.get_elements(&dest);
18671|  15.0k|        chars_read += new_chars_read;
18672|  15.0k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  15.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 21, False: 15.0k]
  |  |  ------------------
  ------------------
18673|     21|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     21|            ++chars_read;
18676|     21|            static_cast<void>(report_eof(context));
18677|     21|            return false;
18678|     21|        }
18679|  15.0k|        return true;
18680|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIaEEmPT_m:
 8507|  15.0k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  15.0k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  15.0k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  15.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 21, False: 15.0k]
  |  |  ------------------
  ------------------
 8513|     21|        {
 8514|     21|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     21|        }
 8516|  15.0k|        return res;
 8517|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE11emit_signedIaEEbT_:
18771|  3.20k|    {
18772|  3.20k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  3.20k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 3.20k, False: 0]
  |  |  ------------------
  ------------------
18773|  3.20k|        {
18774|  3.20k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  3.20k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIsLb0EEEbRT_:
18739|  3.28k|    {
18740|       |        // read in the original format
18741|       |
18742|  3.28k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  3.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.28k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  3.28k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 3.28k]
  |  Branch (18746:34): [Folded, False: 3.25k]
  |  Branch (18746:57): [True: 3.25k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  3.28k|        return true;
18751|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIsEEbRT_PKc:
18667|  3.28k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  3.28k|        auto new_chars_read = ia.get_elements(&dest);
18671|  3.28k|        chars_read += new_chars_read;
18672|  3.28k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  3.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 30, False: 3.25k]
  |  |  ------------------
  ------------------
18673|     30|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     30|            ++chars_read;
18676|     30|            static_cast<void>(report_eof(context));
18677|     30|            return false;
18678|     30|        }
18679|  3.25k|        return true;
18680|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter12get_elementsIsEEmPT_m:
 8507|  3.28k|    {
 8508|       |#if JSON_PRECISE_STREAM_POSITION
 8509|       |        commit_lookahead();
 8510|       |#endif
 8511|  3.28k|        auto res = static_cast<std::size_t>(sb->sgetn(reinterpret_cast<char*>(dest), static_cast<std::streamsize>(count * sizeof(T))));
 8512|  3.28k|        if (JSON_HEDLEY_UNLIKELY(res < count * sizeof(T)))
  ------------------
  |  | 1667|  3.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 30, False: 3.25k]
  |  |  ------------------
  ------------------
 8513|     30|        {
 8514|     30|            is->clear(is->rdstate() | std::ios::eofbit);
 8515|     30|        }
 8516|  3.28k|        return res;
 8517|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE11emit_signedIsEEbT_:
18771|  1.68k|    {
18772|  1.68k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.68k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.68k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.68k|        {
18774|  1.68k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.68k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIiLb0EEEbRT_:
18739|  2.05k|    {
18740|       |        // read in the original format
18741|       |
18742|  2.05k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  2.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  2.05k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 2.05k]
  |  Branch (18746:34): [Folded, False: 2.00k]
  |  Branch (18746:57): [True: 2.00k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  2.05k|        return true;
18751|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIlLb0EEEbRT_:
18739|  1.93k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.93k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.93k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.93k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.93k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.93k]
  |  Branch (18746:34): [Folded, False: 1.87k]
  |  Branch (18746:57): [True: 1.87k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.93k|        return true;
18751|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE21parse_ubjson_internalEv:
17175|  10.9k|    {
17176|       |        // the key currently being read; hoisted out of the loop so that its
17177|       |        // capacity is reused across elements and across nesting levels
17178|  10.9k|        string_t key;
17179|       |
17180|       |        // the type marker of the value to read next
17181|  10.9k|        char_int_type prefix = get_ignore_noop();
17182|       |
17183|   144k|        while (true)
  ------------------
  |  Branch (17183:16): [True: 138k, Folded]
  ------------------
17184|   138k|        {
17185|   138k|            const std::size_t depth = container_stack.size();
17186|       |
17187|   138k|            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(prefix)))
  ------------------
  |  | 1667|   138k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 138k]
  |  |  ------------------
  ------------------
17188|      0|            {
17189|      0|                return false;
17190|      0|            }
17191|       |
17192|       |            // the value begun here is complete once it is not inside anything
17193|   138k|            if (container_stack.empty())
  ------------------
  |  Branch (17193:17): [True: 2.40k, False: 136k]
  ------------------
17194|  2.40k|            {
17195|  2.40k|                return true;
17196|  2.40k|            }
17197|       |
17198|       |            // a value was completed rather than a container opened; a
17199|       |            // container that ends at a marker needs the next byte to test
17200|   136k|            if (container_stack.size() == depth && container_stack.back().remaining == npos)
  ------------------
  |  Branch (17200:17): [True: 70.4k, False: 66.0k]
  |  Branch (17200:52): [True: 44.3k, False: 26.0k]
  ------------------
17201|  44.3k|            {
17202|  44.3k|                get_ignore_noop();
17203|  44.3k|            }
17204|       |
17205|       |            // advance to the next element, closing the containers that ended.
17206|       |            // top is a copy, not a reference: it must stay valid across the
17207|       |            // pop_back() below, which destroys the container_stack element it
17208|       |            // would otherwise alias.
17209|   136k|            for (;;)
17210|   171k|            {
17211|   171k|                const container_frame top = container_stack.back();
17212|       |
17213|   171k|                if (top.remaining != npos)
  ------------------
  |  Branch (17213:21): [True: 27.8k, False: 143k]
  ------------------
17214|  27.8k|                {
17215|  27.8k|                    if (top.remaining != 0)
  ------------------
  |  Branch (17215:25): [True: 26.9k, False: 972]
  ------------------
17216|  26.9k|                    {
17217|  26.9k|                        --container_stack.back().remaining;
17218|  26.9k|                        if (top.is_object)
  ------------------
  |  Branch (17218:29): [True: 213, False: 26.7k]
  ------------------
17219|    213|                        {
17220|    213|                            key.clear();
17221|    213|                            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, true, "key") || !sax->key(key)))
  ------------------
  |  | 1667|    375|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 213]
  |  |  |  Branch (1667:94): [True: 51, False: 162]
  |  |  |  Branch (1667:94): [True: 0, False: 162]
  |  |  ------------------
  ------------------
17222|      0|                            {
17223|      0|                                return false;
17224|      0|                            }
17225|    213|                        }
17226|       |                        // an optimized container gives its elements no marker
17227|  26.9k|                        prefix = (top.type_marker != 0) ? top.type_marker : get_ignore_noop();
  ------------------
  |  Branch (17227:34): [True: 25.8k, False: 1.05k]
  ------------------
17228|  26.9k|                        break;
17229|  26.9k|                    }
17230|  27.8k|                }
17231|       |                // the end marker is compared against a literal rather than
17232|       |                // against a conditional expression, because char_int_type is
17233|       |                // unsigned for some input adapters and MSVC then reports the
17234|       |                // comparison as a signed/unsigned mismatch
17235|   143k|                else if (top.is_object ? (current != '}') : (current != ']'))
  ------------------
  |  Branch (17235:26): [True: 21.2k, False: 122k]
  |  Branch (17235:26): [True: 101k, False: 42.1k]
  ------------------
17236|   101k|                {
17237|       |                    // a container that ends at a marker is never optimized, so
17238|       |                    // every element carries its own marker; for an object the
17239|       |                    // byte tested above is the first byte of the key
17240|   101k|                    if (top.is_object)
  ------------------
  |  Branch (17240:25): [True: 15.3k, False: 86.4k]
  ------------------
17241|  15.3k|                    {
17242|  15.3k|                        key.clear();
17243|  15.3k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false, "key") || !sax->key(key)))
  ------------------
  |  | 1667|  30.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 15.3k]
  |  |  |  Branch (1667:94): [True: 627, False: 14.7k]
  |  |  |  Branch (1667:94): [True: 0, False: 14.7k]
  |  |  ------------------
  ------------------
17244|      0|                        {
17245|      0|                            return false;
17246|      0|                        }
17247|  15.3k|                        prefix = get_ignore_noop();
17248|  15.3k|                    }
17249|  86.4k|                    else
17250|  86.4k|                    {
17251|  86.4k|                        prefix = current;
17252|  86.4k|                    }
17253|   101k|                    break;
17254|   101k|                }
17255|       |
17256|  43.0k|                if (JSON_HEDLEY_UNLIKELY(!leave_container()))
  ------------------
  |  | 1667|  43.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 43.0k]
  |  |  ------------------
  ------------------
17257|      0|                {
17258|      0|                    return false;
17259|      0|                }
17260|  43.0k|                if (container_stack.empty())
  ------------------
  |  Branch (17260:21): [True: 3.38k, False: 39.7k]
  ------------------
17261|  3.38k|                {
17262|  3.38k|                    return true;
17263|  3.38k|                }
17264|       |                // the container that just ended was an element of the one
17265|       |                // below it, which may need the next byte for its own test
17266|  39.7k|                if (container_stack.back().remaining == npos)
  ------------------
  |  Branch (17266:21): [True: 39.5k, False: 122]
  ------------------
17267|  39.5k|                {
17268|  39.5k|                    get_ignore_noop();
17269|  39.5k|                }
17270|  39.7k|            }
17271|   136k|        }
17272|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE16get_ubjson_valueEi:
17761|   145k|    {
17762|   145k|        switch (prefix)
17763|   145k|        {
17764|    727|            case char_traits<char_type>::eof():  // EOF
  ------------------
  |  Branch (17764:13): [True: 727, False: 144k]
  ------------------
17765|    727|                return unexpect_eof("value");
17766|       |
17767|  6.85k|            case 'T':  // true
  ------------------
  |  Branch (17767:13): [True: 6.85k, False: 138k]
  ------------------
17768|  6.85k|                return sax->boolean(true);
17769|  8.01k|            case 'F':  // false
  ------------------
  |  Branch (17769:13): [True: 8.01k, False: 137k]
  ------------------
17770|  8.01k|                return sax->boolean(false);
17771|       |
17772|  9.91k|            case 'Z':  // null
  ------------------
  |  Branch (17772:13): [True: 9.91k, False: 135k]
  ------------------
17773|  9.91k|                return sax->null();
17774|       |
17775|    649|            case 'B':  // byte
  ------------------
  |  Branch (17775:13): [True: 649, False: 144k]
  ------------------
17776|    649|            {
17777|    649|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17777:21): [True: 0, False: 649]
  ------------------
17778|      0|                {
17779|      0|                    break;
17780|      0|                }
17781|    649|                std::uint8_t number{};
17782|    649|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17782:24): [True: 647, False: 2]
  |  Branch (17782:46): [True: 647, False: 0]
  ------------------
17783|    649|            }
17784|       |
17785|  4.53k|            case 'U':
  ------------------
  |  Branch (17785:13): [True: 4.53k, False: 140k]
  ------------------
17786|  4.53k|            {
17787|  4.53k|                std::uint8_t number{};
17788|  4.53k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17788:24): [True: 4.50k, False: 32]
  |  Branch (17788:46): [True: 4.50k, False: 0]
  ------------------
17789|    649|            }
17790|       |
17791|  3.21k|            case 'i':
  ------------------
  |  Branch (17791:13): [True: 3.21k, False: 141k]
  ------------------
17792|  3.21k|            {
17793|  3.21k|                std::int8_t number{};
17794|  3.21k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17794:24): [True: 3.20k, False: 11]
  |  Branch (17794:46): [True: 3.20k, False: 0]
  ------------------
17795|    649|            }
17796|       |
17797|  1.69k|            case 'I':
  ------------------
  |  Branch (17797:13): [True: 1.69k, False: 143k]
  ------------------
17798|  1.69k|            {
17799|  1.69k|                std::int16_t number{};
17800|  1.69k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17800:24): [True: 1.68k, False: 9]
  |  Branch (17800:46): [True: 1.68k, False: 0]
  ------------------
17801|    649|            }
17802|       |
17803|  1.17k|            case 'l':
  ------------------
  |  Branch (17803:13): [True: 1.17k, False: 144k]
  ------------------
17804|  1.17k|            {
17805|  1.17k|                std::int32_t number{};
17806|  1.17k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17806:24): [True: 1.14k, False: 21]
  |  Branch (17806:46): [True: 1.14k, False: 0]
  ------------------
17807|    649|            }
17808|       |
17809|  1.19k|            case 'L':
  ------------------
  |  Branch (17809:13): [True: 1.19k, False: 143k]
  ------------------
17810|  1.19k|            {
17811|  1.19k|                std::int64_t number{};
17812|  1.19k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17812:24): [True: 1.18k, False: 13]
  |  Branch (17812:46): [True: 1.18k, False: 0]
  ------------------
17813|    649|            }
17814|       |
17815|  1.49k|            case 'u':
  ------------------
  |  Branch (17815:13): [True: 1.49k, False: 143k]
  ------------------
17816|  1.49k|            {
17817|  1.49k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17817:21): [True: 0, False: 1.49k]
  ------------------
17818|      0|                {
17819|      0|                    break;
17820|      0|                }
17821|  1.49k|                std::uint16_t number{};
17822|  1.49k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17822:24): [True: 1.46k, False: 27]
  |  Branch (17822:46): [True: 1.46k, False: 0]
  ------------------
17823|  1.49k|            }
17824|       |
17825|  1.03k|            case 'm':
  ------------------
  |  Branch (17825:13): [True: 1.03k, False: 144k]
  ------------------
17826|  1.03k|            {
17827|  1.03k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17827:21): [True: 0, False: 1.03k]
  ------------------
17828|      0|                {
17829|      0|                    break;
17830|      0|                }
17831|  1.03k|                std::uint32_t number{};
17832|  1.03k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17832:24): [True: 1.02k, False: 10]
  |  Branch (17832:46): [True: 1.02k, False: 0]
  ------------------
17833|  1.03k|            }
17834|       |
17835|  2.66k|            case 'M':
  ------------------
  |  Branch (17835:13): [True: 2.66k, False: 142k]
  ------------------
17836|  2.66k|            {
17837|  2.66k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17837:21): [True: 0, False: 2.66k]
  ------------------
17838|      0|                {
17839|      0|                    break;
17840|      0|                }
17841|  2.66k|                std::uint64_t number{};
17842|  2.66k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17842:24): [True: 2.64k, False: 13]
  |  Branch (17842:46): [True: 2.64k, False: 0]
  ------------------
17843|  2.66k|            }
17844|       |
17845|  17.8k|            case 'h':
  ------------------
  |  Branch (17845:13): [True: 17.8k, False: 127k]
  ------------------
17846|  17.8k|            {
17847|  17.8k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17847:21): [True: 0, False: 17.8k]
  ------------------
17848|      0|                {
17849|      0|                    break;
17850|      0|                }
17851|  17.8k|                return get_half_float(true);
17852|  17.8k|            }
17853|       |
17854|  1.30k|            case 'd':
  ------------------
  |  Branch (17854:13): [True: 1.30k, False: 143k]
  ------------------
17855|  1.30k|            {
17856|  1.30k|                float number{};
17857|  1.30k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (17857:24): [True: 1.29k, False: 15]
  |  Branch (17857:46): [True: 1.29k, False: 0]
  ------------------
17858|  17.8k|            }
17859|       |
17860|    877|            case 'D':
  ------------------
  |  Branch (17860:13): [True: 877, False: 144k]
  ------------------
17861|    877|            {
17862|    877|                double number{};
17863|    877|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (17863:24): [True: 861, False: 16]
  |  Branch (17863:46): [True: 861, False: 0]
  ------------------
17864|  17.8k|            }
17865|       |
17866|  6.70k|            case 'H':
  ------------------
  |  Branch (17866:13): [True: 6.70k, False: 138k]
  ------------------
17867|  6.70k|            {
17868|  6.70k|                return get_ubjson_high_precision_number();
17869|  17.8k|            }
17870|       |
17871|  5.35k|            case 'C':  // char
  ------------------
  |  Branch (17871:13): [True: 5.35k, False: 139k]
  ------------------
17872|  5.35k|            {
17873|  5.35k|                get();
17874|  5.35k|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1667|  5.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.35k]
  |  |  ------------------
  ------------------
17875|      0|                {
17876|      0|                    return false;
17877|      0|                }
17878|  5.35k|                if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1667|  5.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 5.34k]
  |  |  ------------------
  ------------------
17879|      8|                {
17880|      8|                    return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
17881|      8|                }
17882|  5.34k|                string_t s(1, static_cast<typename string_t::value_type>(current));
17883|  5.34k|                return sax->string(s);
17884|  5.35k|            }
17885|       |
17886|  3.39k|            case 'S':  // string
  ------------------
  |  Branch (17886:13): [True: 3.39k, False: 141k]
  ------------------
17887|  3.39k|            {
17888|  3.39k|                string_t s;
17889|  3.39k|                return get_ubjson_string(s) && sax->string(s);
  ------------------
  |  Branch (17889:24): [True: 3.19k, False: 204]
  |  Branch (17889:48): [True: 3.19k, False: 0]
  ------------------
17890|  5.35k|            }
17891|       |
17892|  58.3k|            case '[':  // array
  ------------------
  |  Branch (17892:13): [True: 58.3k, False: 86.8k]
  ------------------
17893|  58.3k|                return get_ubjson_array();
17894|       |
17895|  7.95k|            case '{':  // object
  ------------------
  |  Branch (17895:13): [True: 7.95k, False: 137k]
  ------------------
17896|  7.95k|                return get_ubjson_object();
17897|       |
17898|    181|            default: // anything else
  ------------------
  |  Branch (17898:13): [True: 181, False: 145k]
  ------------------
17899|    181|                break;
17900|   145k|        }
17901|    181|        return unexpected_byte("invalid byte", "value");
17902|   145k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE32get_ubjson_high_precision_numberEv:
18014|  6.70k|    {
18015|       |        // get the size of the following number string
18016|  6.70k|        std::size_t size{};
18017|  6.70k|        bool no_ndarray = true;
18018|  6.70k|        auto res = get_ubjson_size_value(size, no_ndarray);
18019|  6.70k|        if (JSON_HEDLEY_UNLIKELY(!res))
  ------------------
  |  | 1667|  6.70k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.70k]
  |  |  ------------------
  ------------------
18020|      0|        {
18021|      0|            return res;
18022|      0|        }
18023|       |
18024|       |        // get number string
18025|  6.70k|        std::vector<char> number_vector;
18026|  85.0k|        for (std::size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (18026:33): [True: 78.3k, False: 6.70k]
  ------------------
18027|  78.3k|        {
18028|  78.3k|            get();
18029|  78.3k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  78.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 78.3k]
  |  |  ------------------
  ------------------
18030|      0|            {
18031|      0|                return false;
18032|      0|            }
18033|       |            // the lexer would stop at a NUL and accept the digits before it
18034|  78.3k|            if (JSON_HEDLEY_UNLIKELY(current == '\0'))
  ------------------
  |  | 1667|  78.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 78.3k]
  |  |  ------------------
  ------------------
18035|      3|            {
18036|      3|                return sax->parse_error(chars_read, "00", parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18037|      3|                                        exception_message("invalid number text; last byte: 0x00", "high-precision number"), nullptr));
18038|      3|            }
18039|  78.3k|            number_vector.push_back(static_cast<char>(current));
18040|  78.3k|        }
18041|       |
18042|       |        // parse number string
18043|  6.70k|        using ia_type = decltype(detail::input_adapter(number_vector));
18044|  6.70k|        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
18045|  6.70k|        const auto result_number = number_lexer.scan();
18046|  6.70k|        const auto number_string = number_lexer.get_token_string();
18047|  6.70k|        const auto result_remainder = number_lexer.scan();
18048|       |
18049|  6.70k|        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
18050|       |
18051|  6.70k|        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
  ------------------
  |  | 1667|  6.70k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1.12k, False: 5.57k]
  |  |  ------------------
  ------------------
18052|  1.12k|        {
18053|  1.12k|            return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18054|  1.12k|                                    exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
18055|  1.12k|        }
18056|       |
18057|  5.57k|        switch (result_number)
18058|  5.57k|        {
18059|    244|            case token_type::value_integer:
  ------------------
  |  Branch (18059:13): [True: 244, False: 5.32k]
  ------------------
18060|    244|                return sax->number_integer(number_lexer.get_number_integer());
18061|  1.90k|            case token_type::value_unsigned:
  ------------------
  |  Branch (18061:13): [True: 1.90k, False: 3.66k]
  ------------------
18062|  1.90k|                return sax->number_unsigned(number_lexer.get_number_unsigned());
18063|  2.46k|            case token_type::value_float:
  ------------------
  |  Branch (18063:13): [True: 2.46k, False: 3.10k]
  ------------------
18064|  2.46k|            {
18065|  2.46k|                const auto parsed_float = number_lexer.get_number_float();
18066|  2.46k|                if (JSON_HEDLEY_UNLIKELY(!std::isfinite(parsed_float)))
  ------------------
  |  | 1667|  2.46k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 52, False: 2.41k]
  |  |  ------------------
  ------------------
18067|     52|                {
18068|     52|                    return sax->parse_error(
18069|     52|                               chars_read,
18070|     52|                               number_string,
18071|     52|                               out_of_range::create(exception_id::number_overflow, concat("number overflow parsing '", number_string, '\''), nullptr));
18072|     52|                }
18073|       |                // number_string is a std::string, while the SAX interface takes a
18074|       |                // string_t; convert explicitly, as the two are only implicitly
18075|       |                // convertible for some string types
18076|  2.41k|                return sax->number_float(parsed_float, string_t(number_string.data(), number_string.size()));
18077|  2.46k|            }
18078|      0|            case token_type::uninitialized:
  ------------------
  |  Branch (18078:13): [True: 0, False: 5.57k]
  ------------------
18079|      1|            case token_type::literal_true:
  ------------------
  |  Branch (18079:13): [True: 1, False: 5.57k]
  ------------------
18080|      1|            case token_type::literal_false:
  ------------------
  |  Branch (18080:13): [True: 0, False: 5.57k]
  ------------------
18081|      2|            case token_type::literal_null:
  ------------------
  |  Branch (18081:13): [True: 1, False: 5.57k]
  ------------------
18082|      4|            case token_type::value_string:
  ------------------
  |  Branch (18082:13): [True: 2, False: 5.56k]
  ------------------
18083|      6|            case token_type::begin_array:
  ------------------
  |  Branch (18083:13): [True: 2, False: 5.56k]
  ------------------
18084|      7|            case token_type::begin_object:
  ------------------
  |  Branch (18084:13): [True: 1, False: 5.57k]
  ------------------
18085|      8|            case token_type::end_array:
  ------------------
  |  Branch (18085:13): [True: 1, False: 5.57k]
  ------------------
18086|      9|            case token_type::end_object:
  ------------------
  |  Branch (18086:13): [True: 1, False: 5.57k]
  ------------------
18087|     10|            case token_type::name_separator:
  ------------------
  |  Branch (18087:13): [True: 1, False: 5.57k]
  ------------------
18088|     11|            case token_type::value_separator:
  ------------------
  |  Branch (18088:13): [True: 1, False: 5.57k]
  ------------------
18089|    573|            case token_type::parse_error:
  ------------------
  |  Branch (18089:13): [True: 562, False: 5.00k]
  ------------------
18090|    612|            case token_type::end_of_input:
  ------------------
  |  Branch (18090:13): [True: 39, False: 5.53k]
  ------------------
18091|    612|            case token_type::literal_or_value:
  ------------------
  |  Branch (18091:13): [True: 0, False: 5.57k]
  ------------------
18092|    612|            default:
  ------------------
  |  Branch (18092:13): [True: 0, False: 5.57k]
  ------------------
18093|    612|                return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18094|    612|                                        exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
18095|  5.57k|        }
18096|  5.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE21get_ubjson_size_valueERmRbii:
17503|  26.7k|    {
17504|  26.7k|        if (prefix == 0)
  ------------------
  |  Branch (17504:13): [True: 14.2k, False: 12.4k]
  ------------------
17505|  14.2k|        {
17506|  14.2k|            prefix = get_ignore_noop();
17507|  14.2k|        }
17508|       |
17509|  26.7k|        switch (prefix)
17510|  26.7k|        {
17511|  10.0k|            case 'U':
  ------------------
  |  Branch (17511:13): [True: 10.0k, False: 16.7k]
  ------------------
17512|  10.0k|            {
17513|  10.0k|                std::uint8_t number{};
17514|  10.0k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  10.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 10.0k]
  |  |  ------------------
  ------------------
17515|      0|                {
17516|      0|                    return false;
17517|      0|                }
17518|  10.0k|                result = static_cast<std::size_t>(number);
17519|  10.0k|                return true;
17520|  10.0k|            }
17521|       |
17522|  8.13k|            case 'i':
  ------------------
  |  Branch (17522:13): [True: 8.13k, False: 18.6k]
  ------------------
17523|  8.13k|                return get_ubjson_signed_count<std::int8_t>(result);
17524|       |
17525|  1.14k|            case 'I':
  ------------------
  |  Branch (17525:13): [True: 1.14k, False: 25.6k]
  ------------------
17526|  1.14k|                return get_ubjson_signed_count<std::int16_t>(result);
17527|       |
17528|    557|            case 'l':
  ------------------
  |  Branch (17528:13): [True: 557, False: 26.1k]
  ------------------
17529|    557|                return get_ubjson_signed_count<std::int32_t>(result);
17530|       |
17531|    363|            case 'L':
  ------------------
  |  Branch (17531:13): [True: 363, False: 26.3k]
  ------------------
17532|    363|                return get_ubjson_signed_count<std::int64_t>(result);
17533|       |
17534|  1.00k|            case 'u':
  ------------------
  |  Branch (17534:13): [True: 1.00k, False: 25.7k]
  ------------------
17535|  1.00k|            {
17536|  1.00k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17536:21): [True: 0, False: 1.00k]
  ------------------
17537|      0|                {
17538|      0|                    break;
17539|      0|                }
17540|  1.00k|                std::uint16_t number{};
17541|  1.00k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.00k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.00k]
  |  |  ------------------
  ------------------
17542|      0|                {
17543|      0|                    return false;
17544|      0|                }
17545|  1.00k|                result = static_cast<std::size_t>(number);
17546|  1.00k|                return true;
17547|  1.00k|            }
17548|       |
17549|    521|            case 'm':
  ------------------
  |  Branch (17549:13): [True: 521, False: 26.2k]
  ------------------
17550|    521|            {
17551|    521|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17551:21): [True: 0, False: 521]
  ------------------
17552|      0|                {
17553|      0|                    break;
17554|      0|                }
17555|    521|                std::uint32_t number{};
17556|    521|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    521|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 521]
  |  |  ------------------
  ------------------
17557|      0|                {
17558|      0|                    return false;
17559|      0|                }
17560|    521|                result = conditional_static_cast<std::size_t>(number);
17561|    521|                return true;
17562|    521|            }
17563|       |
17564|    781|            case 'M':
  ------------------
  |  Branch (17564:13): [True: 781, False: 25.9k]
  ------------------
17565|    781|            {
17566|    781|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17566:21): [True: 0, False: 781]
  ------------------
17567|      0|                {
17568|      0|                    break;
17569|      0|                }
17570|    781|                std::uint64_t number{};
17571|    781|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    781|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 781]
  |  |  ------------------
  ------------------
17572|      0|                {
17573|      0|                    return false;
17574|      0|                }
17575|    781|                if (!value_in_range_of<std::size_t>(number))
  ------------------
  |  Branch (17575:21): [True: 0, False: 781]
  ------------------
17576|      0|                {
17577|      0|                    return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17578|      0|                }
17579|    781|                result = detail::conditional_static_cast<std::size_t>(number);
17580|    781|                return true;
17581|    781|            }
17582|       |
17583|  3.88k|            case '[':
  ------------------
  |  Branch (17583:13): [True: 3.88k, False: 22.8k]
  ------------------
17584|  3.88k|            {
17585|  3.88k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17585:21): [True: 0, False: 3.88k]
  ------------------
17586|      0|                {
17587|      0|                    break;
17588|      0|                }
17589|  3.88k|                if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
  ------------------
  |  Branch (17589:21): [True: 6, False: 3.88k]
  ------------------
17590|      6|                {
17591|      6|                    return last_byte_error(exception_id::invalid_string_or_size, "ndarray dimensional vector is not allowed", "size");
17592|      6|                }
17593|  3.88k|                std::vector<size_t> dim;
17594|  3.88k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
  ------------------
  |  | 1667|  3.88k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.88k]
  |  |  ------------------
  ------------------
17595|      0|                {
17596|      0|                    return false;
17597|      0|                }
17598|  3.88k|                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
  ------------------
  |  Branch (17598:21): [True: 650, False: 3.23k]
  |  Branch (17598:41): [True: 1.54k, False: 1.68k]
  |  Branch (17598:60): [True: 37, False: 1.50k]
  ------------------
17599|    310|                {
17600|    310|                    result = dim.at(dim.size() - 1);
17601|    310|                    return true;
17602|    310|                }
17603|  3.57k|                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format
  ------------------
  |  Branch (17603:21): [True: 2.27k, False: 1.29k]
  ------------------
17604|  2.27k|                {
17605|  2.27k|                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
  ------------------
  |  Branch (17605:33): [True: 6.53k, False: 2.13k]
  ------------------
17606|  6.53k|                    {
17607|  6.53k|                        if ( i == 0 )
  ------------------
  |  Branch (17607:30): [True: 144, False: 6.38k]
  ------------------
17608|    144|                        {
17609|    144|                            result = 0;
17610|    144|                            return true;
17611|    144|                        }
17612|  6.53k|                    }
17613|       |
17614|  2.13k|                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3)))
  ------------------
  |  | 1667|  2.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.13k]
  |  |  ------------------
  ------------------
17615|      0|                    {
17616|      0|                        return false;
17617|      0|                    }
17618|       |
17619|       |                    // the element type precedes the dimension vector (see get_ubjson_size_type)
17620|       |                    // and is passed down as ndarray_dtype; emit it here so the annotation keys
17621|       |                    // follow the documented _ArrayType_, _ArraySize_, _ArrayData_ order
17622|  2.13k|                    if (ndarray_dtype != 0)
  ------------------
  |  Branch (17622:25): [True: 1.98k, False: 147]
  ------------------
17623|  1.98k|                    {
17624|  1.98k|                        const char* type_name = bjd_type_name(ndarray_dtype);
17625|  1.98k|                        if (JSON_HEDLEY_UNLIKELY(type_name == nullptr))
  ------------------
  |  | 1667|  1.98k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 1.98k]
  |  |  ------------------
  ------------------
17626|      3|                        {
17627|      3|                            return unexpected_byte("invalid byte", "type");
17628|      3|                        }
17629|       |
17630|  1.98k|                        string_t type_key = "_ArrayType_";
17631|  1.98k|                        string_t type = type_name; // sax->string() takes a reference
17632|  1.98k|                        if (JSON_HEDLEY_UNLIKELY(!sax->key(type_key) || !sax->string(type)))
  ------------------
  |  | 1667|  3.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  ------------------
  ------------------
17633|      0|                        {
17634|      0|                            return false;
17635|      0|                        }
17636|  1.98k|                    }
17637|       |
17638|  2.13k|                    string_t key = "_ArraySize_";
17639|  2.13k|                    if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(dim.size())))
  ------------------
  |  | 1667|  4.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.13k]
  |  |  |  Branch (1667:94): [True: 0, False: 2.13k]
  |  |  |  Branch (1667:94): [True: 0, False: 2.13k]
  |  |  ------------------
  ------------------
17640|      0|                    {
17641|      0|                        return false;
17642|      0|                    }
17643|  2.13k|                    result = 1;
17644|  2.13k|                    for (auto i : dim)
  ------------------
  |  Branch (17644:33): [True: 5.82k, False: 2.06k]
  ------------------
17645|  5.82k|                    {
17646|       |                        // Pre-multiplication overflow check: since the loop above
17647|       |                        // already rejected any zero dimension, i is always > 0
17648|       |                        // here, so result > SIZE_MAX/i means result*i would
17649|       |                        // overflow. This check must happen before multiplication
17650|       |                        // since overflow detection after the fact is unreliable,
17651|       |                        // as modular arithmetic can produce any value, not just 0
17652|       |                        // or SIZE_MAX.
17653|  5.82k|                        if (JSON_HEDLEY_UNLIKELY(result > (std::numeric_limits<std::size_t>::max)() / i))
  ------------------
  |  | 1667|  5.82k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 69, False: 5.75k]
  |  |  ------------------
  ------------------
17654|     69|                        {
17655|     69|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
17656|     69|                        }
17657|  5.75k|                        result *= i;
17658|       |                        // the pre-check above already rules out result becoming 0
17659|       |                        // by overflow; the only value it cannot rule out is an
17660|       |                        // exact match with npos, the sentinel reserved for an
17661|       |                        // unknown-size container (see get_ubjson_size_type())
17662|  5.75k|                        if (result == npos)
  ------------------
  |  Branch (17662:29): [True: 1, False: 5.75k]
  ------------------
17663|      1|                        {
17664|      1|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
17665|      1|                        }
17666|  5.75k|                        if (JSON_HEDLEY_UNLIKELY(!emit_unsigned(i)))
  ------------------
  |  | 1667|  5.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.75k]
  |  |  ------------------
  ------------------
17667|      0|                        {
17668|      0|                            return false;
17669|      0|                        }
17670|  5.75k|                    }
17671|  2.06k|                    is_ndarray = true;
17672|  2.06k|                    return sax->end_array();
17673|  2.13k|                }
17674|  1.29k|                result = 0;
17675|  1.29k|                return true;
17676|  3.57k|            }
17677|       |
17678|    304|            default:
  ------------------
  |  Branch (17678:13): [True: 304, False: 26.4k]
  ------------------
17679|    304|                break;
17680|  26.7k|        }
17681|    304|        return length_type_error(" after '#'", "size");
17682|  26.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_signed_countIaEEbRm:
17468|  8.13k|    {
17469|  8.13k|        SignedType number{};
17470|  8.13k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 8.13k]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|  8.13k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 8.13k]
  |  |  ------------------
  ------------------
17475|      8|        {
17476|      8|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|      8|        }
17478|  8.13k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 8.13k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|  8.13k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|  8.13k|        return true;
17484|  8.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_signed_countIsEEbRm:
17468|  1.14k|    {
17469|  1.14k|        SignedType number{};
17470|  1.14k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.14k]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|  1.14k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  1.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 1.13k]
  |  |  ------------------
  ------------------
17475|      8|        {
17476|      8|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|      8|        }
17478|  1.13k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|  1.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.13k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|  1.13k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|  1.13k|        return true;
17484|  1.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_signed_countIiEEbRm:
17468|    557|    {
17469|    557|        SignedType number{};
17470|    557|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    557|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 557]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|    557|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|    557|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 33, False: 524]
  |  |  ------------------
  ------------------
17475|     33|        {
17476|     33|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     33|        }
17478|    524|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|    524|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 524]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|    524|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|    524|        return true;
17484|    524|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_signed_countIlEEbRm:
17468|    363|    {
17469|    363|        SignedType number{};
17470|    363|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    363|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 363]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|    363|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|    363|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 68, False: 295]
  |  |  ------------------
  ------------------
17475|     68|        {
17476|     68|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     68|        }
17478|    295|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|    295|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 295]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|    295|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|    295|        return true;
17484|    295|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_ndarray_sizeERNS6_ImNSA_ImEEEE:
17399|  3.88k|    {
17400|  3.88k|        std::pair<std::size_t, char_int_type> size_and_type;
17401|  3.88k|        size_t dimlen = 0;
17402|  3.88k|        bool no_ndarray = true;
17403|       |
17404|  3.88k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
  ------------------
  |  | 1667|  3.88k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.88k]
  |  |  ------------------
  ------------------
17405|      0|        {
17406|      0|            return false;
17407|      0|        }
17408|       |
17409|  3.88k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (17409:13): [True: 708, False: 3.17k]
  ------------------
17410|    708|        {
17411|    708|            if (size_and_type.second != 0)
  ------------------
  |  Branch (17411:17): [True: 415, False: 293]
  ------------------
17412|    415|            {
17413|    415|                if (size_and_type.second != 'N')
  ------------------
  |  Branch (17413:21): [True: 415, False: 0]
  ------------------
17414|    415|                {
17415|  6.94k|                    for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17415:45): [True: 6.52k, False: 415]
  ------------------
17416|  6.52k|                    {
17417|  6.52k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
  ------------------
  |  | 1667|  6.52k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.52k]
  |  |  ------------------
  ------------------
17418|      0|                        {
17419|      0|                            return false;
17420|      0|                        }
17421|  6.52k|                        dim.push_back(dimlen);
17422|  6.52k|                    }
17423|    415|                }
17424|    415|            }
17425|    293|            else
17426|    293|            {
17427|    851|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17427:41): [True: 558, False: 293]
  ------------------
17428|    558|                {
17429|    558|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
  ------------------
  |  | 1667|    558|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 558]
  |  |  ------------------
  ------------------
17430|      0|                    {
17431|      0|                        return false;
17432|      0|                    }
17433|    558|                    dim.push_back(dimlen);
17434|    558|                }
17435|    293|            }
17436|    708|        }
17437|  3.17k|        else
17438|  3.17k|        {
17439|  9.12k|            while (current != ']')
  ------------------
  |  Branch (17439:20): [True: 5.94k, False: 3.17k]
  ------------------
17440|  5.94k|            {
17441|  5.94k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
  ------------------
  |  | 1667|  5.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.94k]
  |  |  ------------------
  ------------------
17442|      0|                {
17443|      0|                    return false;
17444|      0|                }
17445|  5.94k|                dim.push_back(dimlen);
17446|  5.94k|                get_ignore_noop();
17447|  5.94k|            }
17448|  3.17k|        }
17449|  3.88k|        return true;
17450|  3.88k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE20get_ubjson_size_typeERNS4_4pairImiEEb:
17696|  70.2k|    {
17697|  70.2k|        result.first = npos; // size
17698|  70.2k|        result.second = 0; // type
17699|       |        // seed the flag with the caller's context: inside an ndarray dimension
17700|       |        // vector another ndarray is not allowed, and get_ubjson_size_value()
17701|       |        // rejects it up front instead of reading it and reporting afterwards.
17702|       |        // Seeding it with `false` made every '#' of a "[#[#[..." chain descend
17703|       |        // another level, which overflowed the stack (see #5104).
17704|  70.2k|        bool is_ndarray = inside_ndarray;
17705|       |
17706|  70.2k|        get_ignore_noop();
17707|       |
17708|  70.2k|        if (current == '$')
  ------------------
  |  Branch (17708:13): [True: 4.97k, False: 65.2k]
  ------------------
17709|  4.97k|        {
17710|  4.97k|            result.second = get();  // must not ignore 'N', because 'N' maybe the type
17711|  4.97k|            if (input_format == input_format_t::bjdata
  ------------------
  |  Branch (17711:17): [True: 4.97k, False: 0]
  ------------------
17712|  4.97k|                    && JSON_HEDLEY_UNLIKELY(is_bjd_excluded_optimized_type(result.second)))
  ------------------
  |  | 1667|  4.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 9, False: 4.96k]
  |  |  ------------------
  ------------------
17713|      9|            {
17714|      9|                return optimized_type_error();
17715|      9|            }
17716|       |
17717|  4.96k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("type")))
  ------------------
  |  | 1667|  4.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 4.96k]
  |  |  ------------------
  ------------------
17718|      0|            {
17719|      0|                return false;
17720|      0|            }
17721|       |
17722|  4.96k|            get_ignore_noop();
17723|  4.96k|            if (JSON_HEDLEY_UNLIKELY(current != '#'))
  ------------------
  |  | 1667|  4.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 56, False: 4.90k]
  |  |  ------------------
  ------------------
17724|     56|            {
17725|     56|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1667|     56|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 56]
  |  |  ------------------
  ------------------
17726|      0|                {
17727|      0|                    return false;
17728|      0|                }
17729|     56|                return last_byte_error(exception_id::unexpected_byte, "expected '#' after type information", "size", "");
17730|     56|            }
17731|       |
17732|  4.90k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray, 0, result.second);
17733|       |            // an ndarray was read here only if the flag flipped; when it was
17734|       |            // seeded true, get_ubjson_size_value() already rejected the nested
17735|       |            // dimension vector
17736|  4.90k|            if (input_format == input_format_t::bjdata && is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (17736:17): [True: 4.86k, False: 40]
  |  Branch (17736:59): [True: 2.39k, False: 2.46k]
  |  Branch (17736:73): [True: 1.98k, False: 415]
  ------------------
17737|  1.98k|            {
17738|  1.98k|                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
17739|  1.98k|            }
17740|  4.90k|            return is_error;
17741|  4.96k|        }
17742|       |
17743|  65.2k|        if (current == '#')
  ------------------
  |  Branch (17743:13): [True: 2.11k, False: 63.1k]
  ------------------
17744|  2.11k|        {
17745|  2.11k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
17746|  2.11k|            if (input_format == input_format_t::bjdata && is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (17746:17): [True: 1.67k, False: 434]
  |  Branch (17746:59): [True: 372, False: 1.30k]
  |  Branch (17746:73): [True: 78, False: 294]
  ------------------
17747|     78|            {
17748|     78|                return last_byte_error(exception_id::unexpected_byte, "ndarray requires both type and size", "size");
17749|     78|            }
17750|  2.03k|            return is_error;
17751|  2.11k|        }
17752|       |
17753|  63.1k|        return true;
17754|  65.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE30is_bjd_excluded_optimized_typeEi:
19242|  4.97k|    {
19243|  4.97k|        return marker == '[' || marker == '{' || marker == 'S' || marker == 'H'
  ------------------
  |  Branch (19243:16): [True: 2, False: 4.97k]
  |  Branch (19243:33): [True: 1, False: 4.97k]
  |  Branch (19243:50): [True: 1, False: 4.96k]
  |  Branch (19243:67): [True: 1, False: 4.96k]
  ------------------
19244|  4.96k|               || marker == 'T' || marker == 'F' || marker == 'N' || marker == 'Z';
  ------------------
  |  Branch (19244:19): [True: 1, False: 4.96k]
  |  Branch (19244:36): [True: 1, False: 4.96k]
  |  Branch (19244:53): [True: 1, False: 4.96k]
  |  Branch (19244:70): [True: 1, False: 4.96k]
  ------------------
19245|  4.97k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE20optimized_type_errorEv:
19081|      9|    {
19082|      9|        return last_byte_error(exception_id::unexpected_byte, concat("marker 0x", get_token_string(), " is not a permitted optimized array type"), "type");
19083|      9|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE13bjd_type_nameEi:
19256|  1.98k|    {
19257|  1.98k|        switch (marker)
19258|  1.98k|        {
19259|    378|            case 'B':
  ------------------
  |  Branch (19259:13): [True: 378, False: 1.61k]
  ------------------
19260|    378|                return "byte";
19261|    218|            case 'C':
  ------------------
  |  Branch (19261:13): [True: 218, False: 1.77k]
  ------------------
19262|    218|                return "char";
19263|    121|            case 'D':
  ------------------
  |  Branch (19263:13): [True: 121, False: 1.86k]
  ------------------
19264|    121|                return "double";
19265|    108|            case 'I':
  ------------------
  |  Branch (19265:13): [True: 108, False: 1.88k]
  ------------------
19266|    108|                return "int16";
19267|     82|            case 'L':
  ------------------
  |  Branch (19267:13): [True: 82, False: 1.90k]
  ------------------
19268|     82|                return "int64";
19269|     80|            case 'M':
  ------------------
  |  Branch (19269:13): [True: 80, False: 1.90k]
  ------------------
19270|     80|                return "uint64";
19271|    220|            case 'U':
  ------------------
  |  Branch (19271:13): [True: 220, False: 1.76k]
  ------------------
19272|    220|                return "uint8";
19273|    114|            case 'd':
  ------------------
  |  Branch (19273:13): [True: 114, False: 1.87k]
  ------------------
19274|    114|                return "single";
19275|    319|            case 'i':
  ------------------
  |  Branch (19275:13): [True: 319, False: 1.66k]
  ------------------
19276|    319|                return "int8";
19277|    127|            case 'l':
  ------------------
  |  Branch (19277:13): [True: 127, False: 1.86k]
  ------------------
19278|    127|                return "int32";
19279|     92|            case 'm':
  ------------------
  |  Branch (19279:13): [True: 92, False: 1.89k]
  ------------------
19280|     92|                return "uint32";
19281|    126|            case 'u':
  ------------------
  |  Branch (19281:13): [True: 126, False: 1.86k]
  ------------------
19282|    126|                return "uint16";
19283|      3|            default:
  ------------------
  |  Branch (19283:13): [True: 3, False: 1.98k]
  ------------------
19284|      3|                return nullptr;
19285|  1.98k|        }
19286|  1.98k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE17length_type_errorEPKcSM_:
19142|    400|    {
19143|    400|        const char* types = input_format == input_format_t::bjdata ? "U, i, u, I, m, l, M, L" : "U, i, I, l, L";
  ------------------
  |  Branch (19143:29): [True: 400, False: 0]
  ------------------
19144|    400|        return last_byte_error(exception_id::invalid_string_or_size,
19145|    400|                               concat("expected length type specification (", types, ")", position, "; last byte: 0x", get_token_string()), context);
19146|    400|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE16get_ubjson_arrayEv:
17908|  58.3k|    {
17909|  58.3k|        std::pair<std::size_t, char_int_type> size_and_type;
17910|  58.3k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1667|  58.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 58.3k]
  |  |  ------------------
  ------------------
17911|      0|        {
17912|      0|            return false;
17913|      0|        }
17914|       |
17915|       |        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
17916|       |        // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
17917|       |
17918|  58.3k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (17918:13): [True: 57.8k, False: 510]
  |  Branch (17918:55): [True: 5.54k, False: 52.3k]
  |  Branch (17918:86): [True: 1.98k, False: 3.56k]
  ------------------
17919|  1.98k|        {
17920|  1.98k|            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
17921|       |
17922|       |            // the "_ArrayType_" and "_ArraySize_" annotation keys were already emitted by
17923|       |            // get_ubjson_size_value() (the type marker is known before the dimension vector
17924|       |            // that determines size_and_type.first is read, so it is emitted first there to
17925|       |            // match the documented _ArrayType_, _ArraySize_, _ArrayData_ key order)
17926|  1.98k|            if (size_and_type.second == 'C' || size_and_type.second == 'B')
  ------------------
  |  Branch (17926:17): [True: 217, False: 1.76k]
  |  Branch (17926:48): [True: 377, False: 1.38k]
  ------------------
17927|    594|            {
17928|    594|                size_and_type.second = 'U';
17929|    594|            }
17930|       |
17931|  1.98k|            string_t key = "_ArrayData_";
17932|  1.98k|            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
  ------------------
  |  | 1667|  3.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 1, False: 1.97k]
  |  |  ------------------
  ------------------
17933|      0|            {
17934|      0|                return false;
17935|      0|            }
17936|       |
17937|  8.23k|            for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17937:37): [True: 6.25k, False: 1.98k]
  ------------------
17938|  6.25k|            {
17939|  6.25k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
  ------------------
  |  | 1667|  6.25k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.25k]
  |  |  ------------------
  ------------------
17940|      0|                {
17941|      0|                    return false;
17942|      0|                }
17943|  6.25k|            }
17944|       |
17945|  1.98k|            return (sax->end_array() && sax->end_object());
  ------------------
  |  Branch (17945:21): [True: 1.89k, False: 89]
  |  Branch (17945:41): [True: 1.89k, False: 0]
  ------------------
17946|  1.98k|        }
17947|       |
17948|       |        // If BJData type marker is 'B' decode as binary
17949|  56.3k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && size_and_type.second == 'B')
  ------------------
  |  Branch (17949:13): [True: 55.8k, False: 510]
  |  Branch (17949:55): [True: 3.56k, False: 52.3k]
  |  Branch (17949:86): [True: 1.87k, False: 1.69k]
  ------------------
17950|  1.87k|        {
17951|  1.87k|            binary_t result;
17952|  1.87k|            return get_binary(size_and_type.first, result) && sax->binary(result);
  ------------------
  |  Branch (17952:20): [True: 1.75k, False: 117]
  |  Branch (17952:63): [True: 1.75k, False: 0]
  ------------------
17953|  1.87k|        }
17954|       |
17955|  54.5k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (17955:13): [True: 1.69k, False: 52.8k]
  ------------------
17956|  1.69k|        {
17957|       |            // reading an element of a valueless type consumes no input, so the
17958|       |            // declared count alone decides how much is allocated; the check is
17959|       |            // made before the start event so that no container is opened that
17960|       |            // is then abandoned. See @ref max_valueless_container_size.
17961|  1.69k|            if (JSON_HEDLEY_UNLIKELY((size_and_type.second == 'Z' || size_and_type.second == 'T' || size_and_type.second == 'F')
  ------------------
  |  | 1667|  8.45k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
17962|  1.69k|                                     && size_and_type.first > max_valueless_container_size))
17963|      0|            {
17964|      0|                return out_of_range_error(exception_id::container_too_large, "excessive array size", "size");
17965|      0|            }
17966|       |
17967|  1.69k|            if (JSON_HEDLEY_UNLIKELY(!enter_array(size_and_type.first, size_and_type.second)))
  ------------------
  |  | 1667|  1.69k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.69k]
  |  |  ------------------
  ------------------
17968|      0|            {
17969|      0|                return false;
17970|      0|            }
17971|       |
17972|  1.69k|            if (size_and_type.second == 'N')
  ------------------
  |  Branch (17972:17): [True: 0, False: 1.69k]
  ------------------
17973|      0|            {
17974|       |                // a no-op is not a value, so a container of them holds none;
17975|       |                // the declared size has already been passed to the SAX parser
17976|      0|                container_stack.back().remaining = 0;
17977|      0|            }
17978|       |
17979|  1.69k|            return true;
17980|  1.69k|        }
17981|       |
17982|  52.8k|        return enter_array(detail::unknown_size());
17983|  54.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE17get_ubjson_objectEv:
17989|  7.95k|    {
17990|  7.95k|        std::pair<std::size_t, char_int_type> size_and_type;
17991|  7.95k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1667|  7.95k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 7.95k]
  |  |  ------------------
  ------------------
17992|      0|        {
17993|      0|            return false;
17994|      0|        }
17995|       |
17996|       |        // do not accept ND-array size in objects in BJData
17997|  7.95k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (17997:13): [True: 7.85k, False: 99]
  |  Branch (17997:55): [True: 215, False: 7.64k]
  |  Branch (17997:86): [True: 4, False: 211]
  ------------------
17998|      4|        {
17999|      4|            return last_byte_error(exception_id::unexpected_byte, "BJData object does not support ND-array size in optimized format", "object");
18000|      4|        }
18001|       |
18002|  7.95k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (18002:13): [True: 211, False: 7.73k]
  ------------------
18003|    211|        {
18004|    211|            return enter_object(size_and_type.first, size_and_type.second);
18005|    211|        }
18006|       |
18007|  7.73k|        return enter_object(detail::unknown_size());
18008|  7.95k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE17get_ubjson_stringERSC_bPKc:
17311|  18.9k|    {
17312|  18.9k|        if (get_char)
  ------------------
  |  Branch (17312:13): [True: 3.61k, False: 15.3k]
  ------------------
17313|  3.61k|        {
17314|       |            // no get_ignore_noop() here: the byte read next must be a string
17315|       |            // length type specification, and a no-op ('N') is not valid in
17316|       |            // that position. No-ops at positions where a value may appear are
17317|       |            // already consumed by the callers via get_ignore_noop().
17318|  3.61k|            get();
17319|  3.61k|        }
17320|       |
17321|  18.9k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1667|  18.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 18.9k]
  |  |  ------------------
  ------------------
17322|      0|        {
17323|      0|            return false;
17324|      0|        }
17325|       |
17326|  18.9k|        switch (current)
17327|  18.9k|        {
17328|  12.8k|            case 'U':
  ------------------
  |  Branch (17328:13): [True: 12.8k, False: 6.08k]
  ------------------
17329|  12.8k|            {
17330|  12.8k|                std::uint8_t len{};
17331|  12.8k|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17331:24): [True: 12.8k, False: 4]
  |  Branch (17331:43): [True: 12.8k, False: 34]
  |  Branch (17331:70): [True: 12.8k, False: 0]
  ------------------
17332|      0|            }
17333|       |
17334|  3.67k|            case 'i':
  ------------------
  |  Branch (17334:13): [True: 3.67k, False: 15.3k]
  ------------------
17335|  3.67k|            {
17336|  3.67k|                std::int8_t len{};
17337|  3.67k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17337:24): [True: 3.67k, False: 1]
  |  Branch (17337:43): [True: 3.67k, False: 6]
  |  Branch (17337:78): [True: 3.64k, False: 27]
  |  Branch (17337:105): [True: 3.64k, False: 0]
  ------------------
17338|      0|            }
17339|       |
17340|    453|            case 'I':
  ------------------
  |  Branch (17340:13): [True: 453, False: 18.5k]
  ------------------
17341|    453|            {
17342|    453|                std::int16_t len{};
17343|    453|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17343:24): [True: 451, False: 2]
  |  Branch (17343:43): [True: 448, False: 3]
  |  Branch (17343:78): [True: 403, False: 45]
  |  Branch (17343:105): [True: 403, False: 0]
  ------------------
17344|      0|            }
17345|       |
17346|    329|            case 'l':
  ------------------
  |  Branch (17346:13): [True: 329, False: 18.6k]
  ------------------
17347|    329|            {
17348|    329|                std::int32_t len{};
17349|    329|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17349:24): [True: 324, False: 5]
  |  Branch (17349:43): [True: 293, False: 31]
  |  Branch (17349:78): [True: 231, False: 62]
  |  Branch (17349:105): [True: 231, False: 0]
  ------------------
17350|      0|            }
17351|       |
17352|    370|            case 'L':
  ------------------
  |  Branch (17352:13): [True: 370, False: 18.6k]
  ------------------
17353|    370|            {
17354|    370|                std::int64_t len{};
17355|    370|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17355:24): [True: 360, False: 10]
  |  Branch (17355:43): [True: 296, False: 64]
  |  Branch (17355:78): [True: 199, False: 97]
  |  Branch (17355:105): [True: 199, False: 0]
  ------------------
17356|      0|            }
17357|       |
17358|    442|            case 'u':
  ------------------
  |  Branch (17358:13): [True: 442, False: 18.5k]
  ------------------
17359|    442|            {
17360|    442|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17360:21): [True: 0, False: 442]
  ------------------
17361|      0|                {
17362|      0|                    break;
17363|      0|                }
17364|    442|                std::uint16_t len{};
17365|    442|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17365:24): [True: 439, False: 3]
  |  Branch (17365:43): [True: 387, False: 52]
  |  Branch (17365:70): [True: 387, False: 0]
  ------------------
17366|    442|            }
17367|       |
17368|    286|            case 'm':
  ------------------
  |  Branch (17368:13): [True: 286, False: 18.6k]
  ------------------
17369|    286|            {
17370|    286|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17370:21): [True: 0, False: 286]
  ------------------
17371|      0|                {
17372|      0|                    break;
17373|      0|                }
17374|    286|                std::uint32_t len{};
17375|    286|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17375:24): [True: 281, False: 5]
  |  Branch (17375:43): [True: 202, False: 79]
  |  Branch (17375:70): [True: 202, False: 0]
  ------------------
17376|    286|            }
17377|       |
17378|    316|            case 'M':
  ------------------
  |  Branch (17378:13): [True: 316, False: 18.6k]
  ------------------
17379|    316|            {
17380|    316|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17380:21): [True: 0, False: 316]
  ------------------
17381|      0|                {
17382|      0|                    break;
17383|      0|                }
17384|    316|                std::uint64_t len{};
17385|    316|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17385:24): [True: 308, False: 8]
  |  Branch (17385:43): [True: 178, False: 130]
  |  Branch (17385:70): [True: 178, False: 0]
  ------------------
17386|    316|            }
17387|       |
17388|     96|            default:
  ------------------
  |  Branch (17388:13): [True: 96, False: 18.8k]
  ------------------
17389|     96|                break;
17390|  18.9k|        }
17391|     96|        return length_type_error("", "string");
17392|  18.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE26check_ubjson_string_lengthIaEEbT_:
17288|  3.67k|    {
17289|  3.67k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|  3.67k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 6, False: 3.67k]
  |  |  ------------------
  ------------------
17290|      6|        {
17291|      6|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|      6|        }
17293|  3.67k|        return true;
17294|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIaEEbT_RSC_:
18910|  3.67k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  3.67k|        return get_bytes(len, "string", result);
18921|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIaSC_EEbT_PKcRT0_:
18998|  3.67k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  3.67k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  7.23k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 3.59k, False: 3.64k]
  ------------------
19003|  3.59k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  3.59k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 3.59k, False: 0]
  ------------------
19007|  3.59k|                                       ? static_cast<std::size_t>(len)
19008|  3.59k|                                       : chunk_size;
19009|  3.59k|            const std::size_t old_size = result.size();
19010|  3.59k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  3.59k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  3.59k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 3.59k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  3.59k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  3.59k|            chars_read += bytes_read;
19018|  3.59k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  3.59k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 27, False: 3.56k]
  |  |  ------------------
  ------------------
19019|     27|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     27|                result.resize(old_size + bytes_read);
19024|     27|                ++chars_read;
19025|     27|                current = char_traits<char_type>::eof();
19026|     27|                return unexpect_eof(context);
19027|     27|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  3.56k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  3.56k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 3.56k, False: 0]
  ------------------
19030|  3.56k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  3.56k|        }
19032|  3.64k|        return true;
19033|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE26check_ubjson_string_lengthIsEEbT_:
17288|    451|    {
17289|    451|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    451|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 448]
  |  |  ------------------
  ------------------
17290|      3|        {
17291|      3|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|      3|        }
17293|    448|        return true;
17294|    451|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIsEEbT_RSC_:
18910|    448|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    448|        return get_bytes(len, "string", result);
18921|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIsSC_EEbT_PKcRT0_:
18998|    448|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    448|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    820|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 417, False: 403]
  ------------------
19003|    417|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    417|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 396, False: 21]
  ------------------
19007|    417|                                       ? static_cast<std::size_t>(len)
19008|    417|                                       : chunk_size;
19009|    417|            const std::size_t old_size = result.size();
19010|    417|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    417|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    417|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 417, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    417|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    417|            chars_read += bytes_read;
19018|    417|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    417|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 45, False: 372]
  |  |  ------------------
  ------------------
19019|     45|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     45|                result.resize(old_size + bytes_read);
19024|     45|                ++chars_read;
19025|     45|                current = char_traits<char_type>::eof();
19026|     45|                return unexpect_eof(context);
19027|     45|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    372|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    372|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 372, False: 0]
  ------------------
19030|    372|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    372|        }
19032|    403|        return true;
19033|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE26check_ubjson_string_lengthIiEEbT_:
17288|    324|    {
17289|    324|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    324|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 31, False: 293]
  |  |  ------------------
  ------------------
17290|     31|        {
17291|     31|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|     31|        }
17293|    293|        return true;
17294|    324|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE26check_ubjson_string_lengthIlEEbT_:
17288|    360|    {
17289|    360|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    360|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 64, False: 296]
  |  |  ------------------
  ------------------
17290|     64|        {
17291|     64|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|     64|        }
17293|    296|        return true;
17294|    360|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIlEEbT_RSC_:
18910|    296|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    296|        return get_bytes(len, "string", result);
18921|    296|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIlSC_EEbT_PKcRT0_:
18998|    296|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    296|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    463|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 264, False: 199]
  ------------------
19003|    264|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    264|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 192, False: 72]
  ------------------
19007|    264|                                       ? static_cast<std::size_t>(len)
19008|    264|                                       : chunk_size;
19009|    264|            const std::size_t old_size = result.size();
19010|    264|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    264|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    264|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 264, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    264|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    264|            chars_read += bytes_read;
19018|    264|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    264|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 97, False: 167]
  |  |  ------------------
  ------------------
19019|     97|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     97|                result.resize(old_size + bytes_read);
19024|     97|                ++chars_read;
19025|     97|                current = char_traits<char_type>::eof();
19026|     97|                return unexpect_eof(context);
19027|     97|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    167|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    167|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 167, False: 0]
  ------------------
19030|    167|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    167|        }
19032|    199|        return true;
19033|    296|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE15get_ignore_noopEv:
18686|   211k|    {
18687|   211k|        do
18688|   217k|        {
18689|   217k|            get();
18690|   217k|        }
18691|   217k|        while (current == 'N');
  ------------------
  |  Branch (18691:16): [True: 5.52k, False: 211k]
  ------------------
18692|       |
18693|   211k|        return current;
18694|   211k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE3getEv:
18652|   345k|    {
18653|   345k|        ++chars_read;
18654|   345k|        return current = ia.get_character();
18655|   345k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapter13get_characterEv:
 8494|   345k|    {
 8495|   345k|        auto res = sb->sbumpc();
 8496|       |        // set eof manually, as we don't use the istream interface.
 8497|   345k|        if (JSON_HEDLEY_UNLIKELY(res == std::char_traits<char>::eof()))
  ------------------
  |  | 1667|   345k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 6.98k, False: 338k]
  |  |  ------------------
  ------------------
 8498|  6.98k|        {
 8499|  6.98k|            is->clear(is->rdstate() | std::ios::eofbit);
 8500|  6.98k|        }
 8501|   345k|        return res;
 8502|   345k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEE15last_byte_errorENS1_12exception_idERKSC_PKcSP_:
19116|  1.00k|    {
19117|       |        // with a tail, the message reads "<detail><tail>; last byte: 0x<token>"
19118|  1.00k|        return sax->parse_error(chars_read, get_token_string(), parse_error::create(id_, chars_read,
19119|  1.00k|                                exception_message(tail == nullptr ? detail : concat(detail, tail, "; last byte: 0x", get_token_string()), context), nullptr));
  ------------------
  |  Branch (19119:51): [True: 902, False: 107]
  ------------------
19120|  1.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterENS1_19json_sax_dom_parserISG_SH_EEED2Ev:
14954|  10.9k|    ~binary_reader() = default;
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_20input_stream_adapterEED2Ev:
13881|  10.9k|    ~json_sax_dom_parser() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterERNSt3__113basic_istreamIcNS2_11char_traitsIcEEEE:
 9123|  10.9k|{
 9124|  10.9k|    if (stream.rdbuf() == nullptr)
  ------------------
  |  Branch (9124:9): [True: 0, False: 10.9k]
  ------------------
 9125|      0|    {
 9126|      0|        JSON_THROW(parse_error::create(exception_id::syntax_error, 0, "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr));
  ------------------
  |  | 2556|      0|    #define JSON_THROW(exception) throw exception
  ------------------
 9127|      0|    }
 9128|  10.9k|    return input_stream_adapter(stream);
 9129|  10.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapterC2ERNSt3__113basic_istreamIcNS3_11char_traitsIcEEEE:
 8420|  10.9k|        : is(&i), sb(i.rdbuf())
 8421|  10.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail20input_stream_adapterD2Ev:
 8399|  21.8k|    {
 8400|       |        // clear stream flags; we use underlying streambuf I/O, do not
 8401|       |        // maintain ifstream flags, except eof
 8402|  21.8k|        if (is != nullptr)
  ------------------
  |  Branch (8402:13): [True: 10.9k, False: 10.9k]
  ------------------
 8403|  10.9k|        {
 8404|       |#if JSON_PRECISE_STREAM_POSITION
 8405|       |            // consume the character last returned by get_character() unless it
 8406|       |            // was given back with release_lookahead()
 8407|       |            commit_lookahead();
 8408|       |#endif
 8409|       |            // only call clear() if there is something to clear: it throws
 8410|       |            // std::ios_base::failure if the stream has exceptions() enabled
 8411|       |            // for a state bit that remains set, and a destructor must not throw
 8412|  10.9k|            if ((is->rdstate() & ~std::ios::eofbit) != 0)
  ------------------
  |  Branch (8412:17): [True: 0, False: 10.9k]
  ------------------
 8413|      0|            {
 8414|      0|                is->clear(is->rdstate() & std::ios::eofbit);
 8415|      0|            }
 8416|  10.9k|        }
 8417|  21.8k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataINS2_21__list_const_iteratorIhPvEESI_TnNS2_9enable_ifIXsr6detail14can_compare_neIT_T0_EE5valueEiE4typeELi0EEESE_SK_SL_bbNS0_6detail15error_handler_tE:
36755|  10.9k|    {
36756|  10.9k|        return from_binary_impl(detail::input_adapter(std::move(first), std::move(last)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
36757|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16from_binary_implINS0_6detail22iterator_input_adapterINS2_21__list_const_iteratorIhPvEESK_EEEESE_T_NSG_14input_format_tEbbNSG_15error_handler_tENSG_18cbor_tag_handler_tE:
36385|  10.9k|    {
36386|  10.9k|        basic_json result;
36387|  10.9k|        detail::json_sax_dom_parser<basic_json, InputAdapterType> sdp(result, allow_exceptions);
36388|  10.9k|        binary_reader<InputAdapterType> reader(std::move(ia), format, error_handler);
36389|  10.9k|        if (!reader.sax_parse(&sdp, strict, tag_handler))
  ------------------
  |  Branch (36389:13): [True: 0, False: 10.9k]
  ------------------
36390|      0|        {
36391|      0|            result = value_t::discarded;
36392|      0|        }
36393|  10.9k|        return result;
36394|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEEC2ERSG_bPNS1_5lexerISG_SL_EE:
13873|  10.9k|        : root(r), allow_exceptions(allow_exceptions_), m_lexer_ref(lexer_)
13874|  10.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEEC2EOSL_NS1_14input_format_tENS1_15error_handler_tE:
14944|  10.9k|        : ia(std::move(adapter)), input_format(format), error_handler(error_handler_)
14945|  10.9k|    {
14946|  10.9k|        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
14947|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9sax_parseEPSN_bNS1_18cbor_tag_handler_tE:
14969|  10.9k|    {
14970|  10.9k|        sax = sax_;
14971|  10.9k|        container_stack.clear();
14972|  10.9k|        bon8_pushback_size = 0;
14973|  10.9k|        bool result = false;
14974|       |
14975|  10.9k|        switch (input_format)
14976|  10.9k|        {
14977|      0|            case input_format_t::bson:
  ------------------
  |  Branch (14977:13): [True: 0, False: 10.9k]
  ------------------
14978|      0|                result = parse_bson_internal();
14979|      0|                break;
14980|       |
14981|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (14981:13): [True: 0, False: 10.9k]
  ------------------
14982|      0|                result = parse_cbor_internal(tag_handler);
14983|      0|                break;
14984|       |
14985|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (14985:13): [True: 0, False: 10.9k]
  ------------------
14986|      0|                result = parse_msgpack_internal();
14987|      0|                break;
14988|       |
14989|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (14989:13): [True: 0, False: 10.9k]
  ------------------
14990|  10.9k|            case input_format_t::bjdata:
  ------------------
  |  Branch (14990:13): [True: 10.9k, False: 0]
  ------------------
14991|  10.9k|                result = parse_ubjson_internal();
14992|  10.9k|                break;
14993|       |
14994|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (14994:13): [True: 0, False: 10.9k]
  ------------------
14995|      0|                result = parse_bon8_internal();
14996|      0|                break;
14997|       |
14998|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (14998:13): [True: 0, False: 10.9k]
  ------------------
14999|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (14999:13): [True: 0, False: 10.9k]
  ------------------
15000|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (15000:17): [Folded, False: 0]
  ------------------
15001|  10.9k|        }
15002|       |
15003|       |        // strict mode: next byte must be EOF
15004|  5.79k|        if (result && strict)
  ------------------
  |  Branch (15004:13): [True: 5.79k, False: 0]
  |  Branch (15004:23): [True: 5.79k, False: 0]
  ------------------
15005|  5.79k|        {
15006|  5.79k|            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
  ------------------
  |  Branch (15006:17): [True: 0, False: 5.79k]
  |  Branch (15006:59): [True: 5.79k, False: 0]
  ------------------
15007|  5.79k|            {
15008|  5.79k|                get_ignore_noop();
15009|  5.79k|            }
15010|      0|            else if (input_format == input_format_t::bon8)
  ------------------
  |  Branch (15010:22): [True: 0, False: 0]
  ------------------
15011|      0|            {
15012|       |                // a string that ends a container hands back the byte after it
15013|      0|                get_bon8();
15014|      0|            }
15015|      0|            else
15016|      0|            {
15017|      0|                get();
15018|      0|            }
15019|       |
15020|  5.79k|            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
  ------------------
  |  | 1667|  5.79k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 75, False: 5.71k]
  |  |  ------------------
  ------------------
15021|     75|            {
15022|     75|                return last_byte_error(exception_id::unexpected_end_of_input, "expected end of input", "value", "");
15023|     75|            }
15024|  5.79k|        }
15025|       |
15026|  5.71k|        return result;
15027|  5.79k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toIiEEbRT_PKc:
18667|  2.05k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  2.05k|        auto new_chars_read = ia.get_elements(&dest);
18671|  2.05k|        chars_read += new_chars_read;
18672|  2.05k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  2.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 51, False: 2.00k]
  |  |  ------------------
  ------------------
18673|     51|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     51|            ++chars_read;
18676|     51|            static_cast<void>(report_eof(context));
18677|     51|            return false;
18678|     51|        }
18679|  2.00k|        return true;
18680|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIiEEmPT_m:
 8644|  2.05k|    {
 8645|  2.05k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIiEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  2.05k|    {
 8725|  2.05k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  10.1k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 8.10k, False: 2.00k]
  ------------------
 8727|  8.10k|        {
 8728|  8.10k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  8.10k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 8.05k, False: 51]
  |  |  ------------------
  ------------------
 8729|  8.05k|            {
 8730|  8.05k|                ptr[read_index] = static_cast<char>(*current);
 8731|  8.05k|                std::advance(current, 1);
 8732|  8.05k|            }
 8733|     51|            else
 8734|     51|            {
 8735|     51|                return read_index;
 8736|     51|            }
 8737|  8.10k|        }
 8738|  2.00k|        return count * sizeof(T);
 8739|  2.05k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10report_eofEPKc:
19058|  2.09k|    {
19059|  2.09k|        return sax->parse_error(chars_read, "<end of file>",
19060|  2.09k|                                parse_error::create(exception_id::unexpected_end_of_input, chars_read, exception_message("unexpected end of input", context), nullptr));
19061|  2.09k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE11parse_errorINS1_11parse_errorEEEbmRKSC_RKT_:
14004|  4.84k|    {
14005|  4.84k|        errored = true;
14006|  4.84k|        static_cast<void>(ex);
14007|  4.84k|        if (allow_exceptions)
  ------------------
  |  Branch (14007:13): [True: 4.84k, False: 0]
  ------------------
14008|  4.84k|        {
14009|  4.84k|            JSON_THROW(ex);
  ------------------
  |  | 2556|  4.84k|    #define JSON_THROW(exception) throw exception
  ------------------
14010|  4.84k|        }
14011|      0|        return false;
14012|  4.84k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE17exception_messageERKSC_SQ_:
19163|  4.91k|    {
19164|  4.91k|        std::string error_msg = "syntax error while parsing ";
19165|       |
19166|  4.91k|        switch (input_format)
19167|  4.91k|        {
19168|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (19168:13): [True: 0, False: 4.91k]
  ------------------
19169|      0|                error_msg += "CBOR";
19170|      0|                break;
19171|       |
19172|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (19172:13): [True: 0, False: 4.91k]
  ------------------
19173|      0|                error_msg += "MessagePack";
19174|      0|                break;
19175|       |
19176|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (19176:13): [True: 0, False: 4.91k]
  ------------------
19177|      0|                error_msg += "UBJSON";
19178|      0|                break;
19179|       |
19180|      0|            case input_format_t::bson:
  ------------------
  |  Branch (19180:13): [True: 0, False: 4.91k]
  ------------------
19181|      0|                error_msg += "BSON";
19182|      0|                break;
19183|       |
19184|  4.91k|            case input_format_t::bjdata:
  ------------------
  |  Branch (19184:13): [True: 4.91k, False: 0]
  ------------------
19185|  4.91k|                error_msg += "BJData";
19186|  4.91k|                break;
19187|       |
19188|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (19188:13): [True: 0, False: 4.91k]
  ------------------
19189|      0|                error_msg += "BON8";
19190|      0|                break;
19191|       |
19192|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (19192:13): [True: 0, False: 4.91k]
  ------------------
19193|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (19193:13): [True: 0, False: 4.91k]
  ------------------
19194|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19194:17): [Folded, False: 0]
  ------------------
19195|  4.91k|        }
19196|       |
19197|  4.91k|        return concat(error_msg, ' ', context, ": ", detail);
19198|  4.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE15enter_containerEbmm:
15082|  61.8k|    {
15083|  61.8k|        if (JSON_HEDLEY_UNLIKELY(is_object ? !sax->start_object(len) : !sax->start_array(len)))
  ------------------
  |  | 1667|   123k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 61.8k]
  |  |  |  Branch (1667:94): [True: 7.85k, False: 54.0k]
  |  |  ------------------
  ------------------
15084|      0|        {
15085|      0|            return false;
15086|      0|        }
15087|       |
15088|  61.8k|        container_stack.emplace_back(len, is_object, type_marker);
15089|  61.8k|        return true;
15090|  61.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12start_objectEm:
13930|  9.98k|    {
13931|  9.98k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
13932|       |
13933|       |#if JSON_DIAGNOSTIC_POSITIONS
13934|       |        // Ensure this is after the call to handle_value to ensure correct start position.
13935|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
13936|       |#endif
13937|       |
13938|  9.98k|        return check_container_size(*this, len, "object", ref_stack.back());
13939|  9.98k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueINS1_7value_tEEEPSG_OT_:
14030|  68.1k|    {
14031|  68.1k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 5.93k, False: 62.1k]
  ------------------
14032|  5.93k|        {
14033|  5.93k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  5.93k|            return &root;
14040|  5.93k|        }
14041|       |
14042|  62.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  62.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 54.6k, False: 7.52k]
  |  Branch (14042:9): [True: 7.52k, False: 0]
  |  Branch (14042:9): [True: 62.1k, False: 0]
  ------------------
14043|       |
14044|  62.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 54.6k, False: 7.52k]
  ------------------
14045|  54.6k|        {
14046|  54.6k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  54.6k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  54.6k|        }
14054|       |
14055|  7.52k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.52k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 7.52k, False: 0]
  ------------------
14056|  7.52k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  7.52k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 7.52k, False: 0]
  ------------------
14057|  7.52k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  7.52k|        return object_element;
14064|  7.52k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20check_container_sizeINS1_19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterINS5_21__list_const_iteratorIhPvEESL_EEEESH_EEbRT_mPKcPT0_:
13724|  68.1k|{
13725|  68.1k|    if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref->max_size()))
  ------------------
  |  | 1667|  76.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 229, False: 67.8k]
  |  |  |  Branch (1667:94): [True: 8.14k, False: 59.9k]
  |  |  |  Branch (1667:94): [True: 229, False: 7.92k]
  |  |  ------------------
  ------------------
13726|    229|    {
13727|    229|        return container_too_large_error(sax, len, kind, ref);
13728|    229|    }
13729|  67.8k|    return true;
13730|  68.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail25container_too_large_errorINS1_19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_22iterator_input_adapterINS5_21__list_const_iteratorIhPvEESL_EEEESH_EEbRT_mPKcPT0_:
13718|    229|{
13719|    229|    return sax.parse_error(0, "", out_of_range::create(exception_id::container_too_large, concat("excessive ", kind, " size: ", std::to_string(len)), ref));
13720|    229|}
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE11parse_errorINS1_12out_of_rangeEEEbmRKSC_RKT_:
14004|    351|    {
14005|    351|        errored = true;
14006|    351|        static_cast<void>(ex);
14007|    351|        if (allow_exceptions)
  ------------------
  |  Branch (14007:13): [True: 351, False: 0]
  ------------------
14008|    351|        {
14009|    351|            JSON_THROW(ex);
  ------------------
  |  | 2556|    351|    #define JSON_THROW(exception) throw exception
  ------------------
14010|    351|        }
14011|      0|        return false;
14012|    351|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE11start_arrayEm:
13966|  58.1k|    {
13967|  58.1k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
13968|       |
13969|       |#if JSON_DIAGNOSTIC_POSITIONS
13970|       |        // Ensure this is after the call to handle_value to ensure correct start position.
13971|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
13972|       |#endif
13973|       |
13974|  58.1k|        if (JSON_HEDLEY_UNLIKELY(!check_container_size(*this, len, "array", ref_stack.back())))
  ------------------
  |  | 1667|  58.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 58.1k]
  |  |  ------------------
  ------------------
13975|      0|        {
13976|      0|            return false;
13977|      0|        }
13978|       |
13979|  58.1k|        if (len != detail::unknown_size())
  ------------------
  |  Branch (13979:13): [True: 5.67k, False: 52.4k]
  ------------------
13980|  5.67k|        {
13981|  5.67k|            reserve_array(*ref_stack.back()->m_data.m_value.array, len, priority_tag<1> {});
13982|  5.67k|        }
13983|       |
13984|  58.1k|        return true;
13985|  58.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE15container_frameC2Embm:
15051|  61.6k|            : remaining(remaining_), type_marker(type_marker_), is_object(is_object_) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE15leave_containerEv:
15114|  43.0k|    {
15115|  43.0k|        const bool is_object = container_stack.back().is_object;
15116|  43.0k|        container_stack.pop_back();
15117|  43.0k|        return is_object ? sax->end_object() : sax->end_array();
  ------------------
  |  Branch (15117:16): [True: 5.97k, False: 37.1k]
  ------------------
15118|  43.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE10end_objectEv:
13952|  7.86k|    {
13953|  7.86k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  7.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13953:9): [True: 7.86k, False: 0]
  ------------------
13954|  7.86k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13954:9): [True: 7.86k, False: 0]
  ------------------
13955|       |
13956|       |#if JSON_DIAGNOSTIC_POSITIONS
13957|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
13958|       |#endif
13959|       |
13960|  7.86k|        ref_stack.back()->set_parents();
13961|  7.86k|        ref_stack.pop_back();
13962|  7.86k|        return true;
13963|  7.86k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE9end_arrayEv:
13988|  41.0k|    {
13989|  41.0k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  41.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13989:9): [True: 41.0k, False: 0]
  ------------------
13990|  41.0k|        JSON_ASSERT(ref_stack.back()->is_array());
  ------------------
  |  | 2591|  41.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13990:9): [True: 41.0k, False: 0]
  ------------------
13991|       |
13992|       |#if JSON_DIAGNOSTIC_POSITIONS
13993|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
13994|       |#endif
13995|       |
13996|  41.0k|        ref_stack.back()->set_parents();
13997|  41.0k|        ref_stack.pop_back();
13998|  41.0k|        return true;
13999|  41.0k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE12unexpect_eofEPKc:
19041|   144k|    {
19042|   144k|        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
  ------------------
  |  | 1667|   144k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1.74k, False: 143k]
  |  |  ------------------
  ------------------
19043|  1.74k|        {
19044|  1.74k|            return report_eof(context);
19045|  1.74k|        }
19046|   143k|        return true;
19047|   144k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE17check_string_utf8ERSC_PKc:
18941|  18.0k|    {
18942|  18.0k|        if (error_handler == error_handler_t::keep || is_valid_utf8(result))
  ------------------
  |  Branch (18942:13): [True: 18.0k, False: 0]
  |  Branch (18942:55): [True: 0, False: 0]
  ------------------
18943|  18.0k|        {
18944|  18.0k|            return true;
18945|  18.0k|        }
18946|       |
18947|      0|        if (error_handler == error_handler_t::strict)
  ------------------
  |  Branch (18947:13): [True: 0, False: 0]
  ------------------
18948|      0|        {
18949|      0|            return last_byte_error(exception_id::invalid_string_or_size, "invalid string: ill-formed UTF-8 byte", context);
18950|      0|        }
18951|       |
18952|      0|        result = sanitize_utf8(result, error_handler);
18953|      0|        return true;
18954|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE3keyERSC_:
13942|  21.0k|    {
13943|  21.0k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  21.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13943:9): [True: 21.0k, False: 0]
  ------------------
13944|  21.0k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  21.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13944:9): [True: 21.0k, False: 0]
  ------------------
13945|       |
13946|       |        // add null at the given key and store the reference for later
13947|  21.0k|        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));
13948|  21.0k|        return true;
13949|  21.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toIdEEbRT_PKc:
18667|    877|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|    877|        auto new_chars_read = ia.get_elements(&dest);
18671|    877|        chars_read += new_chars_read;
18672|    877|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|    877|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 16, False: 861]
  |  |  ------------------
  ------------------
18673|     16|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     16|            ++chars_read;
18676|     16|            static_cast<void>(report_eof(context));
18677|     16|            return false;
18678|     16|        }
18679|    861|        return true;
18680|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIdEEmPT_m:
 8644|    877|    {
 8645|    877|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIdEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|    877|    {
 8725|    877|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  7.80k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 6.94k, False: 861]
  ------------------
 8727|  6.94k|        {
 8728|  6.94k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  6.94k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 6.93k, False: 16]
  |  |  ------------------
  ------------------
 8729|  6.93k|            {
 8730|  6.93k|                ptr[read_index] = static_cast<char>(*current);
 8731|  6.93k|                std::advance(current, 1);
 8732|  6.93k|            }
 8733|     16|            else
 8734|     16|            {
 8735|     16|                return read_index;
 8736|     16|            }
 8737|  6.94k|        }
 8738|    861|        return count * sizeof(T);
 8739|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10emit_floatIdEEbT_:
18825|    861|    {
18826|    861|        const auto result = static_cast<number_float_t>(number);
18827|    861|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1667|  1.71k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 861]
  |  |  |  Branch (1667:94): [True: 850, False: 11]
  |  |  |  Branch (1667:94): [True: 0, False: 850]
  |  |  ------------------
  ------------------
18828|      0|        {
18829|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
18830|      0|        }
18831|    861|        return sax->number_float(result, "");
18832|    861|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE18out_of_range_errorENS1_12exception_idEPKcSR_:
19068|     70|    {
19069|     70|        return sax->parse_error(chars_read, get_token_string(), out_of_range::create(id_, exception_message(detail, context), nullptr));
19070|     70|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE16get_token_stringEv:
19152|  1.77k|    {
19153|  1.77k|        return hex_byte(static_cast<std::uint8_t>(current));
19154|  1.77k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12number_floatEdRKSC_:
13908|  22.3k|    {
13909|  22.3k|        handle_value(val);
13910|  22.3k|        return true;
13911|  22.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIRdEEPSG_OT_:
14030|  22.3k|    {
14031|  22.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 1.07k, False: 21.3k]
  ------------------
14032|  1.07k|        {
14033|  1.07k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  1.07k|            return &root;
14040|  1.07k|        }
14041|       |
14042|  21.3k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  21.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 21.1k, False: 148]
  |  Branch (14042:9): [True: 148, False: 0]
  |  Branch (14042:9): [True: 21.3k, False: 0]
  ------------------
14043|       |
14044|  21.3k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 21.1k, False: 148]
  ------------------
14045|  21.1k|        {
14046|  21.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  21.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  21.1k|        }
14054|       |
14055|    148|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    148|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 148, False: 0]
  ------------------
14056|    148|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    148|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 148, False: 0]
  ------------------
14057|    148|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    148|        return object_element;
14064|    148|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_stringIiEEbT_RSC_:
18910|    293|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    293|        return get_bytes(len, "string", result);
18921|    293|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesIiSC_EEbT_PKcRT0_:
18998|    293|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    293|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    509|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 278, False: 231]
  ------------------
19003|    278|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    278|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 238, False: 40]
  ------------------
19007|    278|                                       ? static_cast<std::size_t>(len)
19008|    278|                                       : chunk_size;
19009|    278|            const std::size_t old_size = result.size();
19010|    278|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    278|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    278|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 278, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    278|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    278|            chars_read += bytes_read;
19018|    278|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    278|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 62, False: 216]
  |  |  ------------------
  ------------------
19019|     62|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     62|                result.resize(old_size + bytes_read);
19024|     62|                ++chars_read;
19025|     62|                current = char_traits<char_type>::eof();
19026|     62|                return unexpect_eof(context);
19027|     62|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    216|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    216|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 216, False: 0]
  ------------------
19030|    216|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    216|        }
19032|    231|        return true;
19033|    293|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIcEEmPT_m:
 8644|  14.3k|    {
 8645|  14.3k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIcEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  14.3k|    {
 8725|  14.3k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|   111k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 98.1k, False: 13.8k]
  ------------------
 8727|  98.1k|        {
 8728|  98.1k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  98.1k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 97.6k, False: 526]
  |  |  ------------------
  ------------------
 8729|  97.6k|            {
 8730|  97.6k|                ptr[read_index] = static_cast<char>(*current);
 8731|  97.6k|                std::advance(current, 1);
 8732|  97.6k|            }
 8733|    526|            else
 8734|    526|            {
 8735|    526|                return read_index;
 8736|    526|            }
 8737|  98.1k|        }
 8738|  13.8k|        return count * sizeof(T);
 8739|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE6stringERSC_:
13914|  10.5k|    {
13915|       |        // json_sax documents that the passed value may be moved from,
13916|       |        // so hand the buffer over instead of copying it
13917|  10.5k|        handle_value(std::move(val));
13918|  10.5k|        return true;
13919|  10.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueISC_EEPSG_OT_:
14030|  10.5k|    {
14031|  10.5k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 338, False: 10.1k]
  ------------------
14032|    338|        {
14033|    338|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    338|            return &root;
14040|    338|        }
14041|       |
14042|  10.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  10.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 6.13k, False: 4.04k]
  |  Branch (14042:9): [True: 4.04k, False: 0]
  |  Branch (14042:9): [True: 10.1k, False: 0]
  ------------------
14043|       |
14044|  10.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 6.13k, False: 4.04k]
  ------------------
14045|  6.13k|        {
14046|  6.13k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  6.13k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  6.13k|        }
14054|       |
14055|  4.04k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  4.04k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 4.04k, False: 0]
  ------------------
14056|  4.04k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  4.04k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 4.04k, False: 0]
  ------------------
14057|  4.04k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  4.04k|        return object_element;
14064|  4.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIhEEmPT_m:
 8644|  29.1k|    {
 8645|  29.1k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  29.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIhEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  29.1k|    {
 8725|  29.1k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  62.7k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 33.8k, False: 28.9k]
  ------------------
 8727|  33.8k|        {
 8728|  33.8k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  33.8k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 33.6k, False: 177]
  |  |  ------------------
  ------------------
 8729|  33.6k|            {
 8730|  33.6k|                ptr[read_index] = static_cast<char>(*current);
 8731|  33.6k|                std::advance(current, 1);
 8732|  33.6k|            }
 8733|    177|            else
 8734|    177|            {
 8735|    177|                return read_index;
 8736|    177|            }
 8737|  33.8k|        }
 8738|  28.9k|        return count * sizeof(T);
 8739|  29.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE6binaryERNS0_27byte_container_with_subtypeISF_EE:
13922|  1.75k|    {
13923|       |        // json_sax documents that the passed value may be moved from,
13924|       |        // so hand the buffer over instead of copying it
13925|  1.75k|        handle_value(std::move(val));
13926|  1.75k|        return true;
13927|  1.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueINS0_27byte_container_with_subtypeISF_EEEEPSG_OT_:
14030|  1.75k|    {
14031|  1.75k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 55, False: 1.69k]
  ------------------
14032|     55|        {
14033|     55|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|     55|            return &root;
14040|     55|        }
14041|       |
14042|  1.69k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  1.69k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 1.52k, False: 173]
  |  Branch (14042:9): [True: 173, False: 0]
  |  Branch (14042:9): [True: 1.69k, False: 0]
  ------------------
14043|       |
14044|  1.69k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 1.52k, False: 173]
  ------------------
14045|  1.52k|        {
14046|  1.52k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  1.52k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  1.52k|        }
14054|       |
14055|    173|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    173|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 173, False: 0]
  ------------------
14056|    173|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    173|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 173, False: 0]
  ------------------
14057|    173|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    173|        return object_element;
14064|    173|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberIhLb0EEEbRT_:
18739|  28.1k|    {
18740|       |        // read in the original format
18741|       |
18742|  28.1k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  28.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 28.1k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  28.1k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 28.1k]
  |  Branch (18746:34): [Folded, False: 28.0k]
  |  Branch (18746:57): [True: 28.0k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  28.1k|        return true;
18751|  28.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toIhEEbRT_PKc:
18667|  28.1k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  28.1k|        auto new_chars_read = ia.get_elements(&dest);
18671|  28.1k|        chars_read += new_chars_read;
18672|  28.1k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  28.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 60, False: 28.0k]
  |  |  ------------------
  ------------------
18673|     60|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     60|            ++chars_read;
18676|     60|            static_cast<void>(report_eof(context));
18677|     60|            return false;
18678|     60|        }
18679|  28.0k|        return true;
18680|  28.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE7booleanEb:
13890|  14.8k|    {
13891|  14.8k|        handle_value(val);
13892|  14.8k|        return true;
13893|  14.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIRbEEPSG_OT_:
14030|  14.8k|    {
14031|  14.8k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 13, False: 14.8k]
  ------------------
14032|     13|        {
14033|     13|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|     13|            return &root;
14040|     13|        }
14041|       |
14042|  14.8k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  14.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 11.5k, False: 3.28k]
  |  Branch (14042:9): [True: 3.28k, False: 0]
  |  Branch (14042:9): [True: 14.8k, False: 0]
  ------------------
14043|       |
14044|  14.8k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 11.5k, False: 3.28k]
  ------------------
14045|  11.5k|        {
14046|  11.5k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  11.5k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  11.5k|        }
14054|       |
14055|  3.28k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  3.28k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 3.28k, False: 0]
  ------------------
14056|  3.28k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  3.28k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 3.28k, False: 0]
  ------------------
14057|  3.28k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  3.28k|        return object_element;
14064|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE4nullEv:
13884|  9.91k|    {
13885|  9.91k|        handle_value(nullptr);
13886|  9.91k|        return true;
13887|  9.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIDnEEPSG_OT_:
14030|  9.91k|    {
14031|  9.91k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 8, False: 9.90k]
  ------------------
14032|      8|        {
14033|      8|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|      8|            return &root;
14040|      8|        }
14041|       |
14042|  9.90k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  9.90k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 5.23k, False: 4.67k]
  |  Branch (14042:9): [True: 4.67k, False: 0]
  |  Branch (14042:9): [True: 9.90k, False: 0]
  ------------------
14043|       |
14044|  9.90k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 5.23k, False: 4.67k]
  ------------------
14045|  5.23k|        {
14046|  5.23k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  5.23k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  5.23k|        }
14054|       |
14055|  4.67k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  4.67k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 4.67k, False: 0]
  ------------------
14056|  4.67k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  4.67k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 4.67k, False: 0]
  ------------------
14057|  4.67k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  4.67k|        return object_element;
14064|  4.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE11emit_signedIiEEbT_:
18771|  1.14k|    {
18772|  1.14k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.14k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.14k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.14k|        {
18774|  1.14k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.14k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE14number_integerEl:
13896|  7.46k|    {
13897|  7.46k|        handle_value(val);
13898|  7.46k|        return true;
13899|  7.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIRlEEPSG_OT_:
14030|  7.46k|    {
14031|  7.46k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 294, False: 7.16k]
  ------------------
14032|    294|        {
14033|    294|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    294|            return &root;
14040|    294|        }
14041|       |
14042|  7.16k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.16k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 6.86k, False: 308]
  |  Branch (14042:9): [True: 308, False: 0]
  |  Branch (14042:9): [True: 7.16k, False: 0]
  ------------------
14043|       |
14044|  7.16k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 6.86k, False: 308]
  ------------------
14045|  6.86k|        {
14046|  6.86k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  6.86k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  6.86k|        }
14054|       |
14055|    308|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    308|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 308, False: 0]
  ------------------
14056|    308|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    308|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 308, False: 0]
  ------------------
14057|    308|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    308|        return object_element;
14064|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE15number_unsignedEm:
13902|  17.9k|    {
13903|  17.9k|        handle_value(val);
13904|  17.9k|        return true;
13905|  17.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEE12handle_valueIRmEEPSG_OT_:
14030|  17.9k|    {
14031|  17.9k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 457, False: 17.4k]
  ------------------
14032|    457|        {
14033|    457|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    457|            return &root;
14040|    457|        }
14041|       |
14042|  17.4k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  17.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 16.8k, False: 619]
  |  Branch (14042:9): [True: 619, False: 0]
  |  Branch (14042:9): [True: 17.4k, False: 0]
  ------------------
14043|       |
14044|  17.4k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 16.8k, False: 619]
  ------------------
14045|  16.8k|        {
14046|  16.8k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  16.8k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  16.8k|        }
14054|       |
14055|    619|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    619|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 619, False: 0]
  ------------------
14056|    619|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    619|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 619, False: 0]
  ------------------
14057|    619|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    619|        return object_element;
14064|    619|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toIlEEbRT_PKc:
18667|  1.93k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.93k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.93k|        chars_read += new_chars_read;
18672|  1.93k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.93k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 55, False: 1.87k]
  |  |  ------------------
  ------------------
18673|     55|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     55|            ++chars_read;
18676|     55|            static_cast<void>(report_eof(context));
18677|     55|            return false;
18678|     55|        }
18679|  1.87k|        return true;
18680|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIlEEmPT_m:
 8644|  1.93k|    {
 8645|  1.93k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIlEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  1.93k|    {
 8725|  1.93k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  17.0k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 15.1k, False: 1.87k]
  ------------------
 8727|  15.1k|        {
 8728|  15.1k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  15.1k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 15.1k, False: 55]
  |  |  ------------------
  ------------------
 8729|  15.1k|            {
 8730|  15.1k|                ptr[read_index] = static_cast<char>(*current);
 8731|  15.1k|                std::advance(current, 1);
 8732|  15.1k|            }
 8733|     55|            else
 8734|     55|            {
 8735|     55|                return read_index;
 8736|     55|            }
 8737|  15.1k|        }
 8738|  1.87k|        return count * sizeof(T);
 8739|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE11emit_signedIlEEbT_:
18771|  1.18k|    {
18772|  1.18k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.18k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.18k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.18k|        {
18774|  1.18k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.18k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toImEEbRT_PKc:
18667|  3.75k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  3.75k|        auto new_chars_read = ia.get_elements(&dest);
18671|  3.75k|        chars_read += new_chars_read;
18672|  3.75k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  3.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 37, False: 3.72k]
  |  |  ------------------
  ------------------
18673|     37|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     37|            ++chars_read;
18676|     37|            static_cast<void>(report_eof(context));
18677|     37|            return false;
18678|     37|        }
18679|  3.72k|        return true;
18680|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsImEEmPT_m:
 8644|  3.75k|    {
 8645|  3.75k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implImEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  3.75k|    {
 8725|  3.75k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  33.6k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 29.8k, False: 3.72k]
  ------------------
 8727|  29.8k|        {
 8728|  29.8k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  29.8k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 29.8k, False: 37]
  |  |  ------------------
  ------------------
 8729|  29.8k|            {
 8730|  29.8k|                ptr[read_index] = static_cast<char>(*current);
 8731|  29.8k|                std::advance(current, 1);
 8732|  29.8k|            }
 8733|     37|            else
 8734|     37|            {
 8735|     37|                return read_index;
 8736|     37|            }
 8737|  29.8k|        }
 8738|  3.72k|        return count * sizeof(T);
 8739|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE13emit_unsignedImEEbT_:
18799|  8.40k|    {
18800|  8.40k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  8.40k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 8.40k, False: 0]
  |  |  ------------------
  ------------------
18801|  8.40k|        {
18802|  8.40k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  8.40k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  8.40k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_stringIjEEbT_RSC_:
18910|    281|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    281|        return get_bytes(len, "string", result);
18921|    281|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesIjSC_EEbT_PKcRT0_:
18998|    281|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    281|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    445|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 243, False: 202]
  ------------------
19003|    243|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    243|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 188, False: 55]
  ------------------
19007|    243|                                       ? static_cast<std::size_t>(len)
19008|    243|                                       : chunk_size;
19009|    243|            const std::size_t old_size = result.size();
19010|    243|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    243|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    243|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 243, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    243|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    243|            chars_read += bytes_read;
19018|    243|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    243|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 79, False: 164]
  |  |  ------------------
  ------------------
19019|     79|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     79|                result.resize(old_size + bytes_read);
19024|     79|                ++chars_read;
19025|     79|                current = char_traits<char_type>::eof();
19026|     79|                return unexpect_eof(context);
19027|     79|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    164|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    164|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 164, False: 0]
  ------------------
19030|    164|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    164|        }
19032|    202|        return true;
19033|    281|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_stringIhEEbT_RSC_:
18910|  12.8k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  12.8k|        return get_bytes(len, "string", result);
18921|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesIhSC_EEbT_PKcRT0_:
18998|  12.8k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  12.8k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  21.9k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 9.05k, False: 12.8k]
  ------------------
19003|  9.05k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  9.05k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 9.05k, False: 0]
  ------------------
19007|  9.05k|                                       ? static_cast<std::size_t>(len)
19008|  9.05k|                                       : chunk_size;
19009|  9.05k|            const std::size_t old_size = result.size();
19010|  9.05k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  9.05k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  9.05k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 9.05k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  9.05k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  9.05k|            chars_read += bytes_read;
19018|  9.05k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  9.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 34, False: 9.02k]
  |  |  ------------------
  ------------------
19019|     34|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     34|                result.resize(old_size + bytes_read);
19024|     34|                ++chars_read;
19025|     34|                current = char_traits<char_type>::eof();
19026|     34|                return unexpect_eof(context);
19027|     34|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  9.02k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  9.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 9.02k, False: 0]
  ------------------
19030|  9.02k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  9.02k|        }
19032|  12.8k|        return true;
19033|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberItLb0EEEbRT_:
18739|  2.94k|    {
18740|       |        // read in the original format
18741|       |
18742|  2.94k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  2.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.94k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  2.94k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 2.94k]
  |  Branch (18746:34): [Folded, False: 2.89k]
  |  Branch (18746:57): [True: 2.89k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  2.94k|        return true;
18751|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toItEEbRT_PKc:
18667|  2.94k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  2.94k|        auto new_chars_read = ia.get_elements(&dest);
18671|  2.94k|        chars_read += new_chars_read;
18672|  2.94k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  2.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 41, False: 2.89k]
  |  |  ------------------
  ------------------
18673|     41|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     41|            ++chars_read;
18676|     41|            static_cast<void>(report_eof(context));
18677|     41|            return false;
18678|     41|        }
18679|  2.89k|        return true;
18680|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsItEEmPT_m:
 8644|  2.94k|    {
 8645|  2.94k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implItEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  2.94k|    {
 8725|  2.94k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  8.74k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 5.84k, False: 2.89k]
  ------------------
 8727|  5.84k|        {
 8728|  5.84k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  5.84k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 5.80k, False: 41]
  |  |  ------------------
  ------------------
 8729|  5.80k|            {
 8730|  5.80k|                ptr[read_index] = static_cast<char>(*current);
 8731|  5.80k|                std::advance(current, 1);
 8732|  5.80k|            }
 8733|     41|            else
 8734|     41|            {
 8735|     41|                return read_index;
 8736|     41|            }
 8737|  5.84k|        }
 8738|  2.89k|        return count * sizeof(T);
 8739|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_stringItEEbT_RSC_:
18910|    439|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    439|        return get_bytes(len, "string", result);
18921|    439|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesItSC_EEbT_PKcRT0_:
18998|    439|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    439|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    624|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 237, False: 387]
  ------------------
19003|    237|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    237|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 218, False: 19]
  ------------------
19007|    237|                                       ? static_cast<std::size_t>(len)
19008|    237|                                       : chunk_size;
19009|    237|            const std::size_t old_size = result.size();
19010|    237|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    237|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    237|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 237, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    237|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    237|            chars_read += bytes_read;
19018|    237|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    237|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 52, False: 185]
  |  |  ------------------
  ------------------
19019|     52|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     52|                result.resize(old_size + bytes_read);
19024|     52|                ++chars_read;
19025|     52|                current = char_traits<char_type>::eof();
19026|     52|                return unexpect_eof(context);
19027|     52|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    185|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    185|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 185, False: 0]
  ------------------
19030|    185|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    185|        }
19032|    387|        return true;
19033|    439|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberIjLb0EEEbRT_:
18739|  1.84k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.84k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.84k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.84k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.84k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.84k]
  |  Branch (18746:34): [Folded, False: 1.81k]
  |  Branch (18746:57): [True: 1.81k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.84k|        return true;
18751|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toIjEEbRT_PKc:
18667|  1.84k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.84k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.84k|        chars_read += new_chars_read;
18672|  1.84k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.84k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 29, False: 1.81k]
  |  |  ------------------
  ------------------
18673|     29|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     29|            ++chars_read;
18676|     29|            static_cast<void>(report_eof(context));
18677|     29|            return false;
18678|     29|        }
18679|  1.81k|        return true;
18680|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIjEEmPT_m:
 8644|  1.84k|    {
 8645|  1.84k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIjEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  1.84k|    {
 8725|  1.84k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  9.14k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 7.32k, False: 1.81k]
  ------------------
 8727|  7.32k|        {
 8728|  7.32k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  7.32k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 7.30k, False: 29]
  |  |  ------------------
  ------------------
 8729|  7.30k|            {
 8730|  7.30k|                ptr[read_index] = static_cast<char>(*current);
 8731|  7.30k|                std::advance(current, 1);
 8732|  7.30k|            }
 8733|     29|            else
 8734|     29|            {
 8735|     29|                return read_index;
 8736|     29|            }
 8737|  7.32k|        }
 8738|  1.81k|        return count * sizeof(T);
 8739|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberImLb0EEEbRT_:
18739|  3.75k|    {
18740|       |        // read in the original format
18741|       |
18742|  3.75k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  3.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.75k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  3.75k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 3.75k]
  |  Branch (18746:34): [Folded, False: 3.72k]
  |  Branch (18746:57): [True: 3.72k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  3.75k|        return true;
18751|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_stringImEEbT_RSC_:
18910|    308|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    308|        return get_bytes(len, "string", result);
18921|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesImSC_EEbT_PKcRT0_:
18998|    308|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    308|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    446|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 268, False: 178]
  ------------------
19003|    268|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    268|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 164, False: 104]
  ------------------
19007|    268|                                       ? static_cast<std::size_t>(len)
19008|    268|                                       : chunk_size;
19009|    268|            const std::size_t old_size = result.size();
19010|    268|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    268|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    268|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 268, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    268|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    268|            chars_read += bytes_read;
19018|    268|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    268|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 130, False: 138]
  |  |  ------------------
  ------------------
19019|    130|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    130|                result.resize(old_size + bytes_read);
19024|    130|                ++chars_read;
19025|    130|                current = char_traits<char_type>::eof();
19026|    130|                return unexpect_eof(context);
19027|    130|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    138|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    138|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 138, False: 0]
  ------------------
19030|    138|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    138|        }
19032|    178|        return true;
19033|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE13emit_unsignedIhEEbT_:
18799|  5.15k|    {
18800|  5.15k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  5.15k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 5.15k, False: 0]
  |  |  ------------------
  ------------------
18801|  5.15k|        {
18802|  5.15k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  5.15k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  5.15k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE13emit_unsignedItEEbT_:
18799|  1.46k|    {
18800|  1.46k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  1.46k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.46k, False: 0]
  |  |  ------------------
  ------------------
18801|  1.46k|        {
18802|  1.46k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  1.46k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  1.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE13emit_unsignedIjEEbT_:
18799|  1.02k|    {
18800|  1.02k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  1.02k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.02k, False: 0]
  |  |  ------------------
  ------------------
18801|  1.02k|        {
18802|  1.02k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  1.02k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  1.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_binaryImEEbT_RNS0_27byte_container_with_subtypeISF_EE:
18972|  1.87k|    {
18973|  1.87k|        return get_bytes(len, "binary", result);
18974|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesImNS0_27byte_container_with_subtypeISF_EEEEbT_PKcRT0_:
18998|  1.87k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  1.87k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  2.77k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 1.01k, False: 1.75k]
  ------------------
19003|  1.01k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  1.01k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 923, False: 93]
  ------------------
19007|  1.01k|                                       ? static_cast<std::size_t>(len)
19008|  1.01k|                                       : chunk_size;
19009|  1.01k|            const std::size_t old_size = result.size();
19010|  1.01k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  1.01k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  1.01k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 1.01k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  1.01k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  1.01k|            chars_read += bytes_read;
19018|  1.01k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  1.01k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 117, False: 899]
  |  |  ------------------
  ------------------
19019|    117|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    117|                result.resize(old_size + bytes_read);
19024|    117|                ++chars_read;
19025|    117|                current = char_traits<char_type>::eof();
19026|    117|                return unexpect_eof(context);
19027|    117|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    899|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    899|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 899, False: 0]
  ------------------
19030|    899|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    899|        }
19032|  1.75k|        return true;
19033|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE11enter_arrayEmm:
15094|  54.0k|    {
15095|  54.0k|        return enter_container(/*is_object*/false, len, type_marker);
15096|  54.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE12enter_objectEmm:
15100|  7.85k|    {
15101|  7.85k|        return enter_container(/*is_object*/true, len, type_marker);
15102|  7.85k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE15unexpected_byteEPKcSQ_:
19130|    184|    {
19131|    184|        return last_byte_error(exception_id::unexpected_byte, concat(detail, ": 0x", get_token_string()), context);
19132|    184|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE14get_half_floatEb:
18845|  17.8k|    {
18846|  17.8k|        const auto byte1_raw = get();
18847|  17.8k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  17.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 17.8k]
  |  |  ------------------
  ------------------
18848|      0|        {
18849|      0|            return false;
18850|      0|        }
18851|  17.8k|        const auto byte2_raw = get();
18852|  17.8k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  17.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 17.8k]
  |  |  ------------------
  ------------------
18853|      0|        {
18854|      0|            return false;
18855|      0|        }
18856|       |
18857|  17.8k|        const auto byte1 = static_cast<unsigned char>(byte1_raw);
18858|  17.8k|        const auto byte2 = static_cast<unsigned char>(byte2_raw);
18859|       |
18860|       |        // Code from RFC 8949, Appendix D, Figure 3:
18861|       |        // As half-precision floating-point numbers were only added
18862|       |        // to IEEE 754 in 2008, today's programming platforms often
18863|       |        // still only have limited support for them. It is very
18864|       |        // easy to include at least decoding support for them even
18865|       |        // without such support. An example of a small decoder for
18866|       |        // half-precision floating-point numbers in the C language
18867|       |        // is shown in Fig. 3.
18868|  17.8k|        const auto half = little_endian
  ------------------
  |  Branch (18868:27): [True: 17.8k, False: 50]
  ------------------
18869|  17.8k|                          ? static_cast<unsigned int>((byte2 << 8u) + byte1)
18870|  17.8k|                          : static_cast<unsigned int>((byte1 << 8u) + byte2);
18871|  17.8k|        const double val = [&half]
18872|  17.8k|        {
18873|  17.8k|            const int exp = (half >> 10u) & 0x1Fu;
18874|  17.8k|            const unsigned int mant = half & 0x3FFu;
18875|  17.8k|            JSON_ASSERT(exp <= 31);
18876|  17.8k|            JSON_ASSERT(mant <= 1023);
18877|  17.8k|            switch (exp)
18878|  17.8k|            {
18879|  17.8k|                case 0:
18880|  17.8k|                    return std::ldexp(mant, -24);
18881|  17.8k|                case 31:
18882|  17.8k|                    return (mant == 0)
18883|  17.8k|                    ? std::numeric_limits<double>::infinity()
18884|  17.8k|                    : std::numeric_limits<double>::quiet_NaN();
18885|  17.8k|                default:
18886|  17.8k|                    return std::ldexp(mant + 1024, exp - 25);
18887|  17.8k|            }
18888|  17.8k|        }();
18889|  17.8k|        return sax->number_float((half & 0x8000u) != 0
  ------------------
  |  Branch (18889:34): [True: 4.36k, False: 13.5k]
  ------------------
18890|  17.8k|                                 ? static_cast<number_float_t>(-val)
18891|  17.8k|                                 : static_cast<number_float_t>(val), "");
18892|  17.8k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE14get_half_floatEbENKUlvE_clEv:
18872|  17.8k|        {
18873|  17.8k|            const int exp = (half >> 10u) & 0x1Fu;
18874|  17.8k|            const unsigned int mant = half & 0x3FFu;
18875|  17.8k|            JSON_ASSERT(exp <= 31);
  ------------------
  |  | 2591|  17.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18875:13): [True: 17.8k, False: 0]
  ------------------
18876|  17.8k|            JSON_ASSERT(mant <= 1023);
  ------------------
  |  | 2591|  17.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18876:13): [True: 17.8k, False: 0]
  ------------------
18877|  17.8k|            switch (exp)
18878|  17.8k|            {
18879|  3.26k|                case 0:
  ------------------
  |  Branch (18879:17): [True: 3.26k, False: 14.5k]
  ------------------
18880|  3.26k|                    return std::ldexp(mant, -24);
18881|  1.74k|                case 31:
  ------------------
  |  Branch (18881:17): [True: 1.74k, False: 16.0k]
  ------------------
18882|  1.74k|                    return (mant == 0)
  ------------------
  |  Branch (18882:28): [True: 1, False: 1.74k]
  ------------------
18883|  1.74k|                    ? std::numeric_limits<double>::infinity()
18884|  1.74k|                    : std::numeric_limits<double>::quiet_NaN();
18885|  12.8k|                default:
  ------------------
  |  Branch (18885:17): [True: 12.8k, False: 5.00k]
  ------------------
18886|  12.8k|                    return std::ldexp(mant + 1024, exp - 25);
18887|  17.8k|            }
18888|  17.8k|        }();
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberIfLb0EEEbRT_:
18739|  1.30k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.30k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.30k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.30k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.30k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.30k]
  |  Branch (18746:34): [Folded, False: 1.29k]
  |  Branch (18746:57): [True: 1.29k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.30k|        return true;
18751|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toIfEEbRT_PKc:
18667|  1.30k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.30k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.30k|        chars_read += new_chars_read;
18672|  1.30k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.30k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 15, False: 1.29k]
  |  |  ------------------
  ------------------
18673|     15|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     15|            ++chars_read;
18676|     15|            static_cast<void>(report_eof(context));
18677|     15|            return false;
18678|     15|        }
18679|  1.29k|        return true;
18680|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIfEEmPT_m:
 8644|  1.30k|    {
 8645|  1.30k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIfEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  1.30k|    {
 8725|  1.30k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  6.50k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 5.20k, False: 1.29k]
  ------------------
 8727|  5.20k|        {
 8728|  5.20k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  5.20k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 5.19k, False: 15]
  |  |  ------------------
  ------------------
 8729|  5.19k|            {
 8730|  5.19k|                ptr[read_index] = static_cast<char>(*current);
 8731|  5.19k|                std::advance(current, 1);
 8732|  5.19k|            }
 8733|     15|            else
 8734|     15|            {
 8735|     15|                return read_index;
 8736|     15|            }
 8737|  5.20k|        }
 8738|  1.29k|        return count * sizeof(T);
 8739|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10emit_floatIfEEbT_:
18825|  1.29k|    {
18826|  1.29k|        const auto result = static_cast<number_float_t>(number);
18827|  1.29k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1667|  2.43k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.29k]
  |  |  |  Branch (1667:94): [True: 1.13k, False: 158]
  |  |  |  Branch (1667:94): [True: 0, False: 1.13k]
  |  |  ------------------
  ------------------
18828|      0|        {
18829|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
18830|      0|        }
18831|  1.29k|        return sax->number_float(result, "");
18832|  1.29k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberIdLb0EEEbRT_:
18739|    877|    {
18740|       |        // read in the original format
18741|       |
18742|    877|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|    877|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 877]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|    877|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 877]
  |  Branch (18746:34): [Folded, False: 861]
  |  Branch (18746:57): [True: 861, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|    877|        return true;
18751|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberIaLb0EEEbRT_:
18739|  15.0k|    {
18740|       |        // read in the original format
18741|       |
18742|  15.0k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  15.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 15.0k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  15.0k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 15.0k]
  |  Branch (18746:34): [Folded, False: 15.0k]
  |  Branch (18746:57): [True: 15.0k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  15.0k|        return true;
18751|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toIaEEbRT_PKc:
18667|  15.0k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  15.0k|        auto new_chars_read = ia.get_elements(&dest);
18671|  15.0k|        chars_read += new_chars_read;
18672|  15.0k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  15.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 21, False: 15.0k]
  |  |  ------------------
  ------------------
18673|     21|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     21|            ++chars_read;
18676|     21|            static_cast<void>(report_eof(context));
18677|     21|            return false;
18678|     21|        }
18679|  15.0k|        return true;
18680|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIaEEmPT_m:
 8644|  15.0k|    {
 8645|  15.0k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIaEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  15.0k|    {
 8725|  15.0k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  30.0k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 15.0k, False: 15.0k]
  ------------------
 8727|  15.0k|        {
 8728|  15.0k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  15.0k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 15.0k, False: 21]
  |  |  ------------------
  ------------------
 8729|  15.0k|            {
 8730|  15.0k|                ptr[read_index] = static_cast<char>(*current);
 8731|  15.0k|                std::advance(current, 1);
 8732|  15.0k|            }
 8733|     21|            else
 8734|     21|            {
 8735|     21|                return read_index;
 8736|     21|            }
 8737|  15.0k|        }
 8738|  15.0k|        return count * sizeof(T);
 8739|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE11emit_signedIaEEbT_:
18771|  3.20k|    {
18772|  3.20k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  3.20k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 3.20k, False: 0]
  |  |  ------------------
  ------------------
18773|  3.20k|        {
18774|  3.20k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  3.20k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberIsLb0EEEbRT_:
18739|  3.28k|    {
18740|       |        // read in the original format
18741|       |
18742|  3.28k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  3.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.28k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  3.28k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 3.28k]
  |  Branch (18746:34): [Folded, False: 3.25k]
  |  Branch (18746:57): [True: 3.25k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  3.28k|        return true;
18751|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE6get_toIsEEbRT_PKc:
18667|  3.28k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  3.28k|        auto new_chars_read = ia.get_elements(&dest);
18671|  3.28k|        chars_read += new_chars_read;
18672|  3.28k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  3.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 30, False: 3.25k]
  |  |  ------------------
  ------------------
18673|     30|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     30|            ++chars_read;
18676|     30|            static_cast<void>(report_eof(context));
18677|     30|            return false;
18678|     30|        }
18679|  3.25k|        return true;
18680|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E12get_elementsIsEEmPT_m:
 8644|  3.28k|    {
 8645|  3.28k|        return get_elements_impl(dest, count, std::integral_constant<bool, iterator_is_contiguous> {});
 8646|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E17get_elements_implIsEEmPT_mNS3_17integral_constantIbLb0EEE:
 8724|  3.28k|    {
 8725|  3.28k|        auto* ptr = reinterpret_cast<char*>(dest);
 8726|  9.80k|        for (std::size_t read_index = 0; read_index < count * sizeof(T); ++read_index)
  ------------------
  |  Branch (8726:42): [True: 6.55k, False: 3.25k]
  ------------------
 8727|  6.55k|        {
 8728|  6.55k|            if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|  6.55k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 6.52k, False: 30]
  |  |  ------------------
  ------------------
 8729|  6.52k|            {
 8730|  6.52k|                ptr[read_index] = static_cast<char>(*current);
 8731|  6.52k|                std::advance(current, 1);
 8732|  6.52k|            }
 8733|     30|            else
 8734|     30|            {
 8735|     30|                return read_index;
 8736|     30|            }
 8737|  6.55k|        }
 8738|  3.25k|        return count * sizeof(T);
 8739|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE11emit_signedIsEEbT_:
18771|  1.68k|    {
18772|  1.68k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.68k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.68k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.68k|        {
18774|  1.68k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.68k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberIiLb0EEEbRT_:
18739|  2.05k|    {
18740|       |        // read in the original format
18741|       |
18742|  2.05k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  2.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  2.05k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 2.05k]
  |  Branch (18746:34): [Folded, False: 2.00k]
  |  Branch (18746:57): [True: 2.00k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  2.05k|        return true;
18751|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_numberIlLb0EEEbRT_:
18739|  1.93k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.93k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.93k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.93k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.93k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.93k]
  |  Branch (18746:34): [Folded, False: 1.87k]
  |  Branch (18746:57): [True: 1.87k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.93k|        return true;
18751|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE21parse_ubjson_internalEv:
17175|  10.9k|    {
17176|       |        // the key currently being read; hoisted out of the loop so that its
17177|       |        // capacity is reused across elements and across nesting levels
17178|  10.9k|        string_t key;
17179|       |
17180|       |        // the type marker of the value to read next
17181|  10.9k|        char_int_type prefix = get_ignore_noop();
17182|       |
17183|   144k|        while (true)
  ------------------
  |  Branch (17183:16): [True: 138k, Folded]
  ------------------
17184|   138k|        {
17185|   138k|            const std::size_t depth = container_stack.size();
17186|       |
17187|   138k|            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(prefix)))
  ------------------
  |  | 1667|   138k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 138k]
  |  |  ------------------
  ------------------
17188|      0|            {
17189|      0|                return false;
17190|      0|            }
17191|       |
17192|       |            // the value begun here is complete once it is not inside anything
17193|   138k|            if (container_stack.empty())
  ------------------
  |  Branch (17193:17): [True: 2.40k, False: 136k]
  ------------------
17194|  2.40k|            {
17195|  2.40k|                return true;
17196|  2.40k|            }
17197|       |
17198|       |            // a value was completed rather than a container opened; a
17199|       |            // container that ends at a marker needs the next byte to test
17200|   136k|            if (container_stack.size() == depth && container_stack.back().remaining == npos)
  ------------------
  |  Branch (17200:17): [True: 70.4k, False: 66.0k]
  |  Branch (17200:52): [True: 44.3k, False: 26.0k]
  ------------------
17201|  44.3k|            {
17202|  44.3k|                get_ignore_noop();
17203|  44.3k|            }
17204|       |
17205|       |            // advance to the next element, closing the containers that ended.
17206|       |            // top is a copy, not a reference: it must stay valid across the
17207|       |            // pop_back() below, which destroys the container_stack element it
17208|       |            // would otherwise alias.
17209|   136k|            for (;;)
17210|   171k|            {
17211|   171k|                const container_frame top = container_stack.back();
17212|       |
17213|   171k|                if (top.remaining != npos)
  ------------------
  |  Branch (17213:21): [True: 27.8k, False: 143k]
  ------------------
17214|  27.8k|                {
17215|  27.8k|                    if (top.remaining != 0)
  ------------------
  |  Branch (17215:25): [True: 26.9k, False: 972]
  ------------------
17216|  26.9k|                    {
17217|  26.9k|                        --container_stack.back().remaining;
17218|  26.9k|                        if (top.is_object)
  ------------------
  |  Branch (17218:29): [True: 213, False: 26.7k]
  ------------------
17219|    213|                        {
17220|    213|                            key.clear();
17221|    213|                            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, true, "key") || !sax->key(key)))
  ------------------
  |  | 1667|    375|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 213]
  |  |  |  Branch (1667:94): [True: 51, False: 162]
  |  |  |  Branch (1667:94): [True: 0, False: 162]
  |  |  ------------------
  ------------------
17222|      0|                            {
17223|      0|                                return false;
17224|      0|                            }
17225|    213|                        }
17226|       |                        // an optimized container gives its elements no marker
17227|  26.9k|                        prefix = (top.type_marker != 0) ? top.type_marker : get_ignore_noop();
  ------------------
  |  Branch (17227:34): [True: 25.8k, False: 1.05k]
  ------------------
17228|  26.9k|                        break;
17229|  26.9k|                    }
17230|  27.8k|                }
17231|       |                // the end marker is compared against a literal rather than
17232|       |                // against a conditional expression, because char_int_type is
17233|       |                // unsigned for some input adapters and MSVC then reports the
17234|       |                // comparison as a signed/unsigned mismatch
17235|   143k|                else if (top.is_object ? (current != '}') : (current != ']'))
  ------------------
  |  Branch (17235:26): [True: 21.2k, False: 122k]
  |  Branch (17235:26): [True: 101k, False: 42.1k]
  ------------------
17236|   101k|                {
17237|       |                    // a container that ends at a marker is never optimized, so
17238|       |                    // every element carries its own marker; for an object the
17239|       |                    // byte tested above is the first byte of the key
17240|   101k|                    if (top.is_object)
  ------------------
  |  Branch (17240:25): [True: 15.3k, False: 86.4k]
  ------------------
17241|  15.3k|                    {
17242|  15.3k|                        key.clear();
17243|  15.3k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false, "key") || !sax->key(key)))
  ------------------
  |  | 1667|  30.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 15.3k]
  |  |  |  Branch (1667:94): [True: 627, False: 14.7k]
  |  |  |  Branch (1667:94): [True: 0, False: 14.7k]
  |  |  ------------------
  ------------------
17244|      0|                        {
17245|      0|                            return false;
17246|      0|                        }
17247|  15.3k|                        prefix = get_ignore_noop();
17248|  15.3k|                    }
17249|  86.4k|                    else
17250|  86.4k|                    {
17251|  86.4k|                        prefix = current;
17252|  86.4k|                    }
17253|   101k|                    break;
17254|   101k|                }
17255|       |
17256|  43.0k|                if (JSON_HEDLEY_UNLIKELY(!leave_container()))
  ------------------
  |  | 1667|  43.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 43.0k]
  |  |  ------------------
  ------------------
17257|      0|                {
17258|      0|                    return false;
17259|      0|                }
17260|  43.0k|                if (container_stack.empty())
  ------------------
  |  Branch (17260:21): [True: 3.38k, False: 39.7k]
  ------------------
17261|  3.38k|                {
17262|  3.38k|                    return true;
17263|  3.38k|                }
17264|       |                // the container that just ended was an element of the one
17265|       |                // below it, which may need the next byte for its own test
17266|  39.7k|                if (container_stack.back().remaining == npos)
  ------------------
  |  Branch (17266:21): [True: 39.5k, False: 122]
  ------------------
17267|  39.5k|                {
17268|  39.5k|                    get_ignore_noop();
17269|  39.5k|                }
17270|  39.7k|            }
17271|   136k|        }
17272|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE16get_ubjson_valueEm:
17761|   145k|    {
17762|   145k|        switch (prefix)
17763|   145k|        {
17764|    727|            case char_traits<char_type>::eof():  // EOF
  ------------------
  |  Branch (17764:13): [True: 727, False: 144k]
  ------------------
17765|    727|                return unexpect_eof("value");
17766|       |
17767|  6.85k|            case 'T':  // true
  ------------------
  |  Branch (17767:13): [True: 6.85k, False: 138k]
  ------------------
17768|  6.85k|                return sax->boolean(true);
17769|  8.01k|            case 'F':  // false
  ------------------
  |  Branch (17769:13): [True: 8.01k, False: 137k]
  ------------------
17770|  8.01k|                return sax->boolean(false);
17771|       |
17772|  9.91k|            case 'Z':  // null
  ------------------
  |  Branch (17772:13): [True: 9.91k, False: 135k]
  ------------------
17773|  9.91k|                return sax->null();
17774|       |
17775|    649|            case 'B':  // byte
  ------------------
  |  Branch (17775:13): [True: 649, False: 144k]
  ------------------
17776|    649|            {
17777|    649|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17777:21): [True: 0, False: 649]
  ------------------
17778|      0|                {
17779|      0|                    break;
17780|      0|                }
17781|    649|                std::uint8_t number{};
17782|    649|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17782:24): [True: 647, False: 2]
  |  Branch (17782:46): [True: 647, False: 0]
  ------------------
17783|    649|            }
17784|       |
17785|  4.53k|            case 'U':
  ------------------
  |  Branch (17785:13): [True: 4.53k, False: 140k]
  ------------------
17786|  4.53k|            {
17787|  4.53k|                std::uint8_t number{};
17788|  4.53k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17788:24): [True: 4.50k, False: 32]
  |  Branch (17788:46): [True: 4.50k, False: 0]
  ------------------
17789|    649|            }
17790|       |
17791|  3.21k|            case 'i':
  ------------------
  |  Branch (17791:13): [True: 3.21k, False: 141k]
  ------------------
17792|  3.21k|            {
17793|  3.21k|                std::int8_t number{};
17794|  3.21k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17794:24): [True: 3.20k, False: 11]
  |  Branch (17794:46): [True: 3.20k, False: 0]
  ------------------
17795|    649|            }
17796|       |
17797|  1.69k|            case 'I':
  ------------------
  |  Branch (17797:13): [True: 1.69k, False: 143k]
  ------------------
17798|  1.69k|            {
17799|  1.69k|                std::int16_t number{};
17800|  1.69k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17800:24): [True: 1.68k, False: 9]
  |  Branch (17800:46): [True: 1.68k, False: 0]
  ------------------
17801|    649|            }
17802|       |
17803|  1.17k|            case 'l':
  ------------------
  |  Branch (17803:13): [True: 1.17k, False: 144k]
  ------------------
17804|  1.17k|            {
17805|  1.17k|                std::int32_t number{};
17806|  1.17k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17806:24): [True: 1.14k, False: 21]
  |  Branch (17806:46): [True: 1.14k, False: 0]
  ------------------
17807|    649|            }
17808|       |
17809|  1.19k|            case 'L':
  ------------------
  |  Branch (17809:13): [True: 1.19k, False: 143k]
  ------------------
17810|  1.19k|            {
17811|  1.19k|                std::int64_t number{};
17812|  1.19k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17812:24): [True: 1.18k, False: 13]
  |  Branch (17812:46): [True: 1.18k, False: 0]
  ------------------
17813|    649|            }
17814|       |
17815|  1.49k|            case 'u':
  ------------------
  |  Branch (17815:13): [True: 1.49k, False: 143k]
  ------------------
17816|  1.49k|            {
17817|  1.49k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17817:21): [True: 0, False: 1.49k]
  ------------------
17818|      0|                {
17819|      0|                    break;
17820|      0|                }
17821|  1.49k|                std::uint16_t number{};
17822|  1.49k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17822:24): [True: 1.46k, False: 27]
  |  Branch (17822:46): [True: 1.46k, False: 0]
  ------------------
17823|  1.49k|            }
17824|       |
17825|  1.03k|            case 'm':
  ------------------
  |  Branch (17825:13): [True: 1.03k, False: 144k]
  ------------------
17826|  1.03k|            {
17827|  1.03k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17827:21): [True: 0, False: 1.03k]
  ------------------
17828|      0|                {
17829|      0|                    break;
17830|      0|                }
17831|  1.03k|                std::uint32_t number{};
17832|  1.03k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17832:24): [True: 1.02k, False: 10]
  |  Branch (17832:46): [True: 1.02k, False: 0]
  ------------------
17833|  1.03k|            }
17834|       |
17835|  2.66k|            case 'M':
  ------------------
  |  Branch (17835:13): [True: 2.66k, False: 142k]
  ------------------
17836|  2.66k|            {
17837|  2.66k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17837:21): [True: 0, False: 2.66k]
  ------------------
17838|      0|                {
17839|      0|                    break;
17840|      0|                }
17841|  2.66k|                std::uint64_t number{};
17842|  2.66k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17842:24): [True: 2.64k, False: 13]
  |  Branch (17842:46): [True: 2.64k, False: 0]
  ------------------
17843|  2.66k|            }
17844|       |
17845|  17.8k|            case 'h':
  ------------------
  |  Branch (17845:13): [True: 17.8k, False: 127k]
  ------------------
17846|  17.8k|            {
17847|  17.8k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17847:21): [True: 0, False: 17.8k]
  ------------------
17848|      0|                {
17849|      0|                    break;
17850|      0|                }
17851|  17.8k|                return get_half_float(true);
17852|  17.8k|            }
17853|       |
17854|  1.30k|            case 'd':
  ------------------
  |  Branch (17854:13): [True: 1.30k, False: 143k]
  ------------------
17855|  1.30k|            {
17856|  1.30k|                float number{};
17857|  1.30k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (17857:24): [True: 1.29k, False: 15]
  |  Branch (17857:46): [True: 1.29k, False: 0]
  ------------------
17858|  17.8k|            }
17859|       |
17860|    877|            case 'D':
  ------------------
  |  Branch (17860:13): [True: 877, False: 144k]
  ------------------
17861|    877|            {
17862|    877|                double number{};
17863|    877|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (17863:24): [True: 861, False: 16]
  |  Branch (17863:46): [True: 861, False: 0]
  ------------------
17864|  17.8k|            }
17865|       |
17866|  6.70k|            case 'H':
  ------------------
  |  Branch (17866:13): [True: 6.70k, False: 138k]
  ------------------
17867|  6.70k|            {
17868|  6.70k|                return get_ubjson_high_precision_number();
17869|  17.8k|            }
17870|       |
17871|  5.35k|            case 'C':  // char
  ------------------
  |  Branch (17871:13): [True: 5.35k, False: 139k]
  ------------------
17872|  5.35k|            {
17873|  5.35k|                get();
17874|  5.35k|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1667|  5.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.35k]
  |  |  ------------------
  ------------------
17875|      0|                {
17876|      0|                    return false;
17877|      0|                }
17878|  5.35k|                if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1667|  5.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 5.34k]
  |  |  ------------------
  ------------------
17879|      8|                {
17880|      8|                    return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
17881|      8|                }
17882|  5.34k|                string_t s(1, static_cast<typename string_t::value_type>(current));
17883|  5.34k|                return sax->string(s);
17884|  5.35k|            }
17885|       |
17886|  3.39k|            case 'S':  // string
  ------------------
  |  Branch (17886:13): [True: 3.39k, False: 141k]
  ------------------
17887|  3.39k|            {
17888|  3.39k|                string_t s;
17889|  3.39k|                return get_ubjson_string(s) && sax->string(s);
  ------------------
  |  Branch (17889:24): [True: 3.19k, False: 204]
  |  Branch (17889:48): [True: 3.19k, False: 0]
  ------------------
17890|  5.35k|            }
17891|       |
17892|  58.3k|            case '[':  // array
  ------------------
  |  Branch (17892:13): [True: 58.3k, False: 86.8k]
  ------------------
17893|  58.3k|                return get_ubjson_array();
17894|       |
17895|  7.95k|            case '{':  // object
  ------------------
  |  Branch (17895:13): [True: 7.95k, False: 137k]
  ------------------
17896|  7.95k|                return get_ubjson_object();
17897|       |
17898|    181|            default: // anything else
  ------------------
  |  Branch (17898:13): [True: 181, False: 145k]
  ------------------
17899|    181|                break;
17900|   145k|        }
17901|    181|        return unexpected_byte("invalid byte", "value");
17902|   145k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE32get_ubjson_high_precision_numberEv:
18014|  6.70k|    {
18015|       |        // get the size of the following number string
18016|  6.70k|        std::size_t size{};
18017|  6.70k|        bool no_ndarray = true;
18018|  6.70k|        auto res = get_ubjson_size_value(size, no_ndarray);
18019|  6.70k|        if (JSON_HEDLEY_UNLIKELY(!res))
  ------------------
  |  | 1667|  6.70k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.70k]
  |  |  ------------------
  ------------------
18020|      0|        {
18021|      0|            return res;
18022|      0|        }
18023|       |
18024|       |        // get number string
18025|  6.70k|        std::vector<char> number_vector;
18026|  85.0k|        for (std::size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (18026:33): [True: 78.3k, False: 6.70k]
  ------------------
18027|  78.3k|        {
18028|  78.3k|            get();
18029|  78.3k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  78.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 78.3k]
  |  |  ------------------
  ------------------
18030|      0|            {
18031|      0|                return false;
18032|      0|            }
18033|       |            // the lexer would stop at a NUL and accept the digits before it
18034|  78.3k|            if (JSON_HEDLEY_UNLIKELY(current == '\0'))
  ------------------
  |  | 1667|  78.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 78.3k]
  |  |  ------------------
  ------------------
18035|      3|            {
18036|      3|                return sax->parse_error(chars_read, "00", parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18037|      3|                                        exception_message("invalid number text; last byte: 0x00", "high-precision number"), nullptr));
18038|      3|            }
18039|  78.3k|            number_vector.push_back(static_cast<char>(current));
18040|  78.3k|        }
18041|       |
18042|       |        // parse number string
18043|  6.70k|        using ia_type = decltype(detail::input_adapter(number_vector));
18044|  6.70k|        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
18045|  6.70k|        const auto result_number = number_lexer.scan();
18046|  6.70k|        const auto number_string = number_lexer.get_token_string();
18047|  6.70k|        const auto result_remainder = number_lexer.scan();
18048|       |
18049|  6.70k|        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
18050|       |
18051|  6.70k|        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
  ------------------
  |  | 1667|  6.70k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1.12k, False: 5.57k]
  |  |  ------------------
  ------------------
18052|  1.12k|        {
18053|  1.12k|            return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18054|  1.12k|                                    exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
18055|  1.12k|        }
18056|       |
18057|  5.57k|        switch (result_number)
18058|  5.57k|        {
18059|    244|            case token_type::value_integer:
  ------------------
  |  Branch (18059:13): [True: 244, False: 5.32k]
  ------------------
18060|    244|                return sax->number_integer(number_lexer.get_number_integer());
18061|  1.90k|            case token_type::value_unsigned:
  ------------------
  |  Branch (18061:13): [True: 1.90k, False: 3.66k]
  ------------------
18062|  1.90k|                return sax->number_unsigned(number_lexer.get_number_unsigned());
18063|  2.46k|            case token_type::value_float:
  ------------------
  |  Branch (18063:13): [True: 2.46k, False: 3.10k]
  ------------------
18064|  2.46k|            {
18065|  2.46k|                const auto parsed_float = number_lexer.get_number_float();
18066|  2.46k|                if (JSON_HEDLEY_UNLIKELY(!std::isfinite(parsed_float)))
  ------------------
  |  | 1667|  2.46k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 52, False: 2.41k]
  |  |  ------------------
  ------------------
18067|     52|                {
18068|     52|                    return sax->parse_error(
18069|     52|                               chars_read,
18070|     52|                               number_string,
18071|     52|                               out_of_range::create(exception_id::number_overflow, concat("number overflow parsing '", number_string, '\''), nullptr));
18072|     52|                }
18073|       |                // number_string is a std::string, while the SAX interface takes a
18074|       |                // string_t; convert explicitly, as the two are only implicitly
18075|       |                // convertible for some string types
18076|  2.41k|                return sax->number_float(parsed_float, string_t(number_string.data(), number_string.size()));
18077|  2.46k|            }
18078|      0|            case token_type::uninitialized:
  ------------------
  |  Branch (18078:13): [True: 0, False: 5.57k]
  ------------------
18079|      1|            case token_type::literal_true:
  ------------------
  |  Branch (18079:13): [True: 1, False: 5.57k]
  ------------------
18080|      1|            case token_type::literal_false:
  ------------------
  |  Branch (18080:13): [True: 0, False: 5.57k]
  ------------------
18081|      2|            case token_type::literal_null:
  ------------------
  |  Branch (18081:13): [True: 1, False: 5.57k]
  ------------------
18082|      4|            case token_type::value_string:
  ------------------
  |  Branch (18082:13): [True: 2, False: 5.56k]
  ------------------
18083|      6|            case token_type::begin_array:
  ------------------
  |  Branch (18083:13): [True: 2, False: 5.56k]
  ------------------
18084|      7|            case token_type::begin_object:
  ------------------
  |  Branch (18084:13): [True: 1, False: 5.57k]
  ------------------
18085|      8|            case token_type::end_array:
  ------------------
  |  Branch (18085:13): [True: 1, False: 5.57k]
  ------------------
18086|      9|            case token_type::end_object:
  ------------------
  |  Branch (18086:13): [True: 1, False: 5.57k]
  ------------------
18087|     10|            case token_type::name_separator:
  ------------------
  |  Branch (18087:13): [True: 1, False: 5.57k]
  ------------------
18088|     11|            case token_type::value_separator:
  ------------------
  |  Branch (18088:13): [True: 1, False: 5.57k]
  ------------------
18089|    573|            case token_type::parse_error:
  ------------------
  |  Branch (18089:13): [True: 562, False: 5.00k]
  ------------------
18090|    612|            case token_type::end_of_input:
  ------------------
  |  Branch (18090:13): [True: 39, False: 5.53k]
  ------------------
18091|    612|            case token_type::literal_or_value:
  ------------------
  |  Branch (18091:13): [True: 0, False: 5.57k]
  ------------------
18092|    612|            default:
  ------------------
  |  Branch (18092:13): [True: 0, False: 5.57k]
  ------------------
18093|    612|                return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18094|    612|                                        exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
18095|  5.57k|        }
18096|  5.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE21get_ubjson_size_valueERmRbmm:
17503|  26.7k|    {
17504|  26.7k|        if (prefix == 0)
  ------------------
  |  Branch (17504:13): [True: 14.2k, False: 12.4k]
  ------------------
17505|  14.2k|        {
17506|  14.2k|            prefix = get_ignore_noop();
17507|  14.2k|        }
17508|       |
17509|  26.7k|        switch (prefix)
17510|  26.7k|        {
17511|  10.0k|            case 'U':
  ------------------
  |  Branch (17511:13): [True: 10.0k, False: 16.7k]
  ------------------
17512|  10.0k|            {
17513|  10.0k|                std::uint8_t number{};
17514|  10.0k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  10.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 10.0k]
  |  |  ------------------
  ------------------
17515|      0|                {
17516|      0|                    return false;
17517|      0|                }
17518|  10.0k|                result = static_cast<std::size_t>(number);
17519|  10.0k|                return true;
17520|  10.0k|            }
17521|       |
17522|  8.13k|            case 'i':
  ------------------
  |  Branch (17522:13): [True: 8.13k, False: 18.6k]
  ------------------
17523|  8.13k|                return get_ubjson_signed_count<std::int8_t>(result);
17524|       |
17525|  1.14k|            case 'I':
  ------------------
  |  Branch (17525:13): [True: 1.14k, False: 25.6k]
  ------------------
17526|  1.14k|                return get_ubjson_signed_count<std::int16_t>(result);
17527|       |
17528|    557|            case 'l':
  ------------------
  |  Branch (17528:13): [True: 557, False: 26.1k]
  ------------------
17529|    557|                return get_ubjson_signed_count<std::int32_t>(result);
17530|       |
17531|    363|            case 'L':
  ------------------
  |  Branch (17531:13): [True: 363, False: 26.3k]
  ------------------
17532|    363|                return get_ubjson_signed_count<std::int64_t>(result);
17533|       |
17534|  1.00k|            case 'u':
  ------------------
  |  Branch (17534:13): [True: 1.00k, False: 25.7k]
  ------------------
17535|  1.00k|            {
17536|  1.00k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17536:21): [True: 0, False: 1.00k]
  ------------------
17537|      0|                {
17538|      0|                    break;
17539|      0|                }
17540|  1.00k|                std::uint16_t number{};
17541|  1.00k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.00k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.00k]
  |  |  ------------------
  ------------------
17542|      0|                {
17543|      0|                    return false;
17544|      0|                }
17545|  1.00k|                result = static_cast<std::size_t>(number);
17546|  1.00k|                return true;
17547|  1.00k|            }
17548|       |
17549|    521|            case 'm':
  ------------------
  |  Branch (17549:13): [True: 521, False: 26.2k]
  ------------------
17550|    521|            {
17551|    521|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17551:21): [True: 0, False: 521]
  ------------------
17552|      0|                {
17553|      0|                    break;
17554|      0|                }
17555|    521|                std::uint32_t number{};
17556|    521|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    521|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 521]
  |  |  ------------------
  ------------------
17557|      0|                {
17558|      0|                    return false;
17559|      0|                }
17560|    521|                result = conditional_static_cast<std::size_t>(number);
17561|    521|                return true;
17562|    521|            }
17563|       |
17564|    781|            case 'M':
  ------------------
  |  Branch (17564:13): [True: 781, False: 25.9k]
  ------------------
17565|    781|            {
17566|    781|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17566:21): [True: 0, False: 781]
  ------------------
17567|      0|                {
17568|      0|                    break;
17569|      0|                }
17570|    781|                std::uint64_t number{};
17571|    781|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    781|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 781]
  |  |  ------------------
  ------------------
17572|      0|                {
17573|      0|                    return false;
17574|      0|                }
17575|    781|                if (!value_in_range_of<std::size_t>(number))
  ------------------
  |  Branch (17575:21): [True: 0, False: 781]
  ------------------
17576|      0|                {
17577|      0|                    return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17578|      0|                }
17579|    781|                result = detail::conditional_static_cast<std::size_t>(number);
17580|    781|                return true;
17581|    781|            }
17582|       |
17583|  3.88k|            case '[':
  ------------------
  |  Branch (17583:13): [True: 3.88k, False: 22.8k]
  ------------------
17584|  3.88k|            {
17585|  3.88k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17585:21): [True: 0, False: 3.88k]
  ------------------
17586|      0|                {
17587|      0|                    break;
17588|      0|                }
17589|  3.88k|                if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
  ------------------
  |  Branch (17589:21): [True: 6, False: 3.88k]
  ------------------
17590|      6|                {
17591|      6|                    return last_byte_error(exception_id::invalid_string_or_size, "ndarray dimensional vector is not allowed", "size");
17592|      6|                }
17593|  3.88k|                std::vector<size_t> dim;
17594|  3.88k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
  ------------------
  |  | 1667|  3.88k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.88k]
  |  |  ------------------
  ------------------
17595|      0|                {
17596|      0|                    return false;
17597|      0|                }
17598|  3.88k|                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
  ------------------
  |  Branch (17598:21): [True: 650, False: 3.23k]
  |  Branch (17598:41): [True: 1.54k, False: 1.68k]
  |  Branch (17598:60): [True: 37, False: 1.50k]
  ------------------
17599|    310|                {
17600|    310|                    result = dim.at(dim.size() - 1);
17601|    310|                    return true;
17602|    310|                }
17603|  3.57k|                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format
  ------------------
  |  Branch (17603:21): [True: 2.27k, False: 1.29k]
  ------------------
17604|  2.27k|                {
17605|  2.27k|                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
  ------------------
  |  Branch (17605:33): [True: 6.53k, False: 2.13k]
  ------------------
17606|  6.53k|                    {
17607|  6.53k|                        if ( i == 0 )
  ------------------
  |  Branch (17607:30): [True: 144, False: 6.38k]
  ------------------
17608|    144|                        {
17609|    144|                            result = 0;
17610|    144|                            return true;
17611|    144|                        }
17612|  6.53k|                    }
17613|       |
17614|  2.13k|                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3)))
  ------------------
  |  | 1667|  2.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.13k]
  |  |  ------------------
  ------------------
17615|      0|                    {
17616|      0|                        return false;
17617|      0|                    }
17618|       |
17619|       |                    // the element type precedes the dimension vector (see get_ubjson_size_type)
17620|       |                    // and is passed down as ndarray_dtype; emit it here so the annotation keys
17621|       |                    // follow the documented _ArrayType_, _ArraySize_, _ArrayData_ order
17622|  2.13k|                    if (ndarray_dtype != 0)
  ------------------
  |  Branch (17622:25): [True: 1.98k, False: 147]
  ------------------
17623|  1.98k|                    {
17624|  1.98k|                        const char* type_name = bjd_type_name(ndarray_dtype);
17625|  1.98k|                        if (JSON_HEDLEY_UNLIKELY(type_name == nullptr))
  ------------------
  |  | 1667|  1.98k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 1.98k]
  |  |  ------------------
  ------------------
17626|      3|                        {
17627|      3|                            return unexpected_byte("invalid byte", "type");
17628|      3|                        }
17629|       |
17630|  1.98k|                        string_t type_key = "_ArrayType_";
17631|  1.98k|                        string_t type = type_name; // sax->string() takes a reference
17632|  1.98k|                        if (JSON_HEDLEY_UNLIKELY(!sax->key(type_key) || !sax->string(type)))
  ------------------
  |  | 1667|  3.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  ------------------
  ------------------
17633|      0|                        {
17634|      0|                            return false;
17635|      0|                        }
17636|  1.98k|                    }
17637|       |
17638|  2.13k|                    string_t key = "_ArraySize_";
17639|  2.13k|                    if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(dim.size())))
  ------------------
  |  | 1667|  4.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.13k]
  |  |  |  Branch (1667:94): [True: 0, False: 2.13k]
  |  |  |  Branch (1667:94): [True: 0, False: 2.13k]
  |  |  ------------------
  ------------------
17640|      0|                    {
17641|      0|                        return false;
17642|      0|                    }
17643|  2.13k|                    result = 1;
17644|  2.13k|                    for (auto i : dim)
  ------------------
  |  Branch (17644:33): [True: 5.82k, False: 2.06k]
  ------------------
17645|  5.82k|                    {
17646|       |                        // Pre-multiplication overflow check: since the loop above
17647|       |                        // already rejected any zero dimension, i is always > 0
17648|       |                        // here, so result > SIZE_MAX/i means result*i would
17649|       |                        // overflow. This check must happen before multiplication
17650|       |                        // since overflow detection after the fact is unreliable,
17651|       |                        // as modular arithmetic can produce any value, not just 0
17652|       |                        // or SIZE_MAX.
17653|  5.82k|                        if (JSON_HEDLEY_UNLIKELY(result > (std::numeric_limits<std::size_t>::max)() / i))
  ------------------
  |  | 1667|  5.82k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 69, False: 5.75k]
  |  |  ------------------
  ------------------
17654|     69|                        {
17655|     69|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
17656|     69|                        }
17657|  5.75k|                        result *= i;
17658|       |                        // the pre-check above already rules out result becoming 0
17659|       |                        // by overflow; the only value it cannot rule out is an
17660|       |                        // exact match with npos, the sentinel reserved for an
17661|       |                        // unknown-size container (see get_ubjson_size_type())
17662|  5.75k|                        if (result == npos)
  ------------------
  |  Branch (17662:29): [True: 1, False: 5.75k]
  ------------------
17663|      1|                        {
17664|      1|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
17665|      1|                        }
17666|  5.75k|                        if (JSON_HEDLEY_UNLIKELY(!emit_unsigned(i)))
  ------------------
  |  | 1667|  5.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.75k]
  |  |  ------------------
  ------------------
17667|      0|                        {
17668|      0|                            return false;
17669|      0|                        }
17670|  5.75k|                    }
17671|  2.06k|                    is_ndarray = true;
17672|  2.06k|                    return sax->end_array();
17673|  2.13k|                }
17674|  1.29k|                result = 0;
17675|  1.29k|                return true;
17676|  3.57k|            }
17677|       |
17678|    304|            default:
  ------------------
  |  Branch (17678:13): [True: 304, False: 26.4k]
  ------------------
17679|    304|                break;
17680|  26.7k|        }
17681|    304|        return length_type_error(" after '#'", "size");
17682|  26.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE23get_ubjson_signed_countIaEEbRm:
17468|  8.13k|    {
17469|  8.13k|        SignedType number{};
17470|  8.13k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 8.13k]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|  8.13k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 8.13k]
  |  |  ------------------
  ------------------
17475|      8|        {
17476|      8|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|      8|        }
17478|  8.13k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 8.13k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|  8.13k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|  8.13k|        return true;
17484|  8.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE23get_ubjson_signed_countIsEEbRm:
17468|  1.14k|    {
17469|  1.14k|        SignedType number{};
17470|  1.14k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.14k]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|  1.14k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  1.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 1.13k]
  |  |  ------------------
  ------------------
17475|      8|        {
17476|      8|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|      8|        }
17478|  1.13k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|  1.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.13k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|  1.13k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|  1.13k|        return true;
17484|  1.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE23get_ubjson_signed_countIiEEbRm:
17468|    557|    {
17469|    557|        SignedType number{};
17470|    557|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    557|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 557]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|    557|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|    557|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 33, False: 524]
  |  |  ------------------
  ------------------
17475|     33|        {
17476|     33|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     33|        }
17478|    524|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|    524|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 524]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|    524|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|    524|        return true;
17484|    524|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE23get_ubjson_signed_countIlEEbRm:
17468|    363|    {
17469|    363|        SignedType number{};
17470|    363|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    363|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 363]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|    363|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|    363|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 68, False: 295]
  |  |  ------------------
  ------------------
17475|     68|        {
17476|     68|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     68|        }
17478|    295|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|    295|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 295]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|    295|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|    295|        return true;
17484|    295|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE23get_ubjson_ndarray_sizeERNS6_ImNSA_ImEEEE:
17399|  3.88k|    {
17400|  3.88k|        std::pair<std::size_t, char_int_type> size_and_type;
17401|  3.88k|        size_t dimlen = 0;
17402|  3.88k|        bool no_ndarray = true;
17403|       |
17404|  3.88k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
  ------------------
  |  | 1667|  3.88k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.88k]
  |  |  ------------------
  ------------------
17405|      0|        {
17406|      0|            return false;
17407|      0|        }
17408|       |
17409|  3.88k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (17409:13): [True: 708, False: 3.17k]
  ------------------
17410|    708|        {
17411|    708|            if (size_and_type.second != 0)
  ------------------
  |  Branch (17411:17): [True: 415, False: 293]
  ------------------
17412|    415|            {
17413|    415|                if (size_and_type.second != 'N')
  ------------------
  |  Branch (17413:21): [True: 415, False: 0]
  ------------------
17414|    415|                {
17415|  6.94k|                    for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17415:45): [True: 6.52k, False: 415]
  ------------------
17416|  6.52k|                    {
17417|  6.52k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
  ------------------
  |  | 1667|  6.52k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.52k]
  |  |  ------------------
  ------------------
17418|      0|                        {
17419|      0|                            return false;
17420|      0|                        }
17421|  6.52k|                        dim.push_back(dimlen);
17422|  6.52k|                    }
17423|    415|                }
17424|    415|            }
17425|    293|            else
17426|    293|            {
17427|    851|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17427:41): [True: 558, False: 293]
  ------------------
17428|    558|                {
17429|    558|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
  ------------------
  |  | 1667|    558|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 558]
  |  |  ------------------
  ------------------
17430|      0|                    {
17431|      0|                        return false;
17432|      0|                    }
17433|    558|                    dim.push_back(dimlen);
17434|    558|                }
17435|    293|            }
17436|    708|        }
17437|  3.17k|        else
17438|  3.17k|        {
17439|  9.12k|            while (current != ']')
  ------------------
  |  Branch (17439:20): [True: 5.94k, False: 3.17k]
  ------------------
17440|  5.94k|            {
17441|  5.94k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
  ------------------
  |  | 1667|  5.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.94k]
  |  |  ------------------
  ------------------
17442|      0|                {
17443|      0|                    return false;
17444|      0|                }
17445|  5.94k|                dim.push_back(dimlen);
17446|  5.94k|                get_ignore_noop();
17447|  5.94k|            }
17448|  3.17k|        }
17449|  3.88k|        return true;
17450|  3.88k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE20get_ubjson_size_typeERNS4_4pairImmEEb:
17696|  70.2k|    {
17697|  70.2k|        result.first = npos; // size
17698|  70.2k|        result.second = 0; // type
17699|       |        // seed the flag with the caller's context: inside an ndarray dimension
17700|       |        // vector another ndarray is not allowed, and get_ubjson_size_value()
17701|       |        // rejects it up front instead of reading it and reporting afterwards.
17702|       |        // Seeding it with `false` made every '#' of a "[#[#[..." chain descend
17703|       |        // another level, which overflowed the stack (see #5104).
17704|  70.2k|        bool is_ndarray = inside_ndarray;
17705|       |
17706|  70.2k|        get_ignore_noop();
17707|       |
17708|  70.2k|        if (current == '$')
  ------------------
  |  Branch (17708:13): [True: 4.97k, False: 65.2k]
  ------------------
17709|  4.97k|        {
17710|  4.97k|            result.second = get();  // must not ignore 'N', because 'N' maybe the type
17711|  4.97k|            if (input_format == input_format_t::bjdata
  ------------------
  |  Branch (17711:17): [True: 4.97k, False: 0]
  ------------------
17712|  4.97k|                    && JSON_HEDLEY_UNLIKELY(is_bjd_excluded_optimized_type(result.second)))
  ------------------
  |  | 1667|  4.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 9, False: 4.96k]
  |  |  ------------------
  ------------------
17713|      9|            {
17714|      9|                return optimized_type_error();
17715|      9|            }
17716|       |
17717|  4.96k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("type")))
  ------------------
  |  | 1667|  4.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 4.96k]
  |  |  ------------------
  ------------------
17718|      0|            {
17719|      0|                return false;
17720|      0|            }
17721|       |
17722|  4.96k|            get_ignore_noop();
17723|  4.96k|            if (JSON_HEDLEY_UNLIKELY(current != '#'))
  ------------------
  |  | 1667|  4.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 56, False: 4.90k]
  |  |  ------------------
  ------------------
17724|     56|            {
17725|     56|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1667|     56|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 56]
  |  |  ------------------
  ------------------
17726|      0|                {
17727|      0|                    return false;
17728|      0|                }
17729|     56|                return last_byte_error(exception_id::unexpected_byte, "expected '#' after type information", "size", "");
17730|     56|            }
17731|       |
17732|  4.90k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray, 0, result.second);
17733|       |            // an ndarray was read here only if the flag flipped; when it was
17734|       |            // seeded true, get_ubjson_size_value() already rejected the nested
17735|       |            // dimension vector
17736|  4.90k|            if (input_format == input_format_t::bjdata && is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (17736:17): [True: 4.86k, False: 40]
  |  Branch (17736:59): [True: 2.39k, False: 2.46k]
  |  Branch (17736:73): [True: 1.98k, False: 415]
  ------------------
17737|  1.98k|            {
17738|  1.98k|                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
17739|  1.98k|            }
17740|  4.90k|            return is_error;
17741|  4.96k|        }
17742|       |
17743|  65.2k|        if (current == '#')
  ------------------
  |  Branch (17743:13): [True: 2.11k, False: 63.1k]
  ------------------
17744|  2.11k|        {
17745|  2.11k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
17746|  2.11k|            if (input_format == input_format_t::bjdata && is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (17746:17): [True: 1.67k, False: 434]
  |  Branch (17746:59): [True: 372, False: 1.30k]
  |  Branch (17746:73): [True: 78, False: 294]
  ------------------
17747|     78|            {
17748|     78|                return last_byte_error(exception_id::unexpected_byte, "ndarray requires both type and size", "size");
17749|     78|            }
17750|  2.03k|            return is_error;
17751|  2.11k|        }
17752|       |
17753|  63.1k|        return true;
17754|  65.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE30is_bjd_excluded_optimized_typeEm:
19242|  4.97k|    {
19243|  4.97k|        return marker == '[' || marker == '{' || marker == 'S' || marker == 'H'
  ------------------
  |  Branch (19243:16): [True: 2, False: 4.97k]
  |  Branch (19243:33): [True: 1, False: 4.97k]
  |  Branch (19243:50): [True: 1, False: 4.96k]
  |  Branch (19243:67): [True: 1, False: 4.96k]
  ------------------
19244|  4.96k|               || marker == 'T' || marker == 'F' || marker == 'N' || marker == 'Z';
  ------------------
  |  Branch (19244:19): [True: 1, False: 4.96k]
  |  Branch (19244:36): [True: 1, False: 4.96k]
  |  Branch (19244:53): [True: 1, False: 4.96k]
  |  Branch (19244:70): [True: 1, False: 4.96k]
  ------------------
19245|  4.97k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE20optimized_type_errorEv:
19081|      9|    {
19082|      9|        return last_byte_error(exception_id::unexpected_byte, concat("marker 0x", get_token_string(), " is not a permitted optimized array type"), "type");
19083|      9|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE13bjd_type_nameEm:
19256|  1.98k|    {
19257|  1.98k|        switch (marker)
19258|  1.98k|        {
19259|    378|            case 'B':
  ------------------
  |  Branch (19259:13): [True: 378, False: 1.61k]
  ------------------
19260|    378|                return "byte";
19261|    218|            case 'C':
  ------------------
  |  Branch (19261:13): [True: 218, False: 1.77k]
  ------------------
19262|    218|                return "char";
19263|    121|            case 'D':
  ------------------
  |  Branch (19263:13): [True: 121, False: 1.86k]
  ------------------
19264|    121|                return "double";
19265|    108|            case 'I':
  ------------------
  |  Branch (19265:13): [True: 108, False: 1.88k]
  ------------------
19266|    108|                return "int16";
19267|     82|            case 'L':
  ------------------
  |  Branch (19267:13): [True: 82, False: 1.90k]
  ------------------
19268|     82|                return "int64";
19269|     80|            case 'M':
  ------------------
  |  Branch (19269:13): [True: 80, False: 1.90k]
  ------------------
19270|     80|                return "uint64";
19271|    220|            case 'U':
  ------------------
  |  Branch (19271:13): [True: 220, False: 1.76k]
  ------------------
19272|    220|                return "uint8";
19273|    114|            case 'd':
  ------------------
  |  Branch (19273:13): [True: 114, False: 1.87k]
  ------------------
19274|    114|                return "single";
19275|    319|            case 'i':
  ------------------
  |  Branch (19275:13): [True: 319, False: 1.66k]
  ------------------
19276|    319|                return "int8";
19277|    127|            case 'l':
  ------------------
  |  Branch (19277:13): [True: 127, False: 1.86k]
  ------------------
19278|    127|                return "int32";
19279|     92|            case 'm':
  ------------------
  |  Branch (19279:13): [True: 92, False: 1.89k]
  ------------------
19280|     92|                return "uint32";
19281|    126|            case 'u':
  ------------------
  |  Branch (19281:13): [True: 126, False: 1.86k]
  ------------------
19282|    126|                return "uint16";
19283|      3|            default:
  ------------------
  |  Branch (19283:13): [True: 3, False: 1.98k]
  ------------------
19284|      3|                return nullptr;
19285|  1.98k|        }
19286|  1.98k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE17length_type_errorEPKcSQ_:
19142|    400|    {
19143|    400|        const char* types = input_format == input_format_t::bjdata ? "U, i, u, I, m, l, M, L" : "U, i, I, l, L";
  ------------------
  |  Branch (19143:29): [True: 400, False: 0]
  ------------------
19144|    400|        return last_byte_error(exception_id::invalid_string_or_size,
19145|    400|                               concat("expected length type specification (", types, ")", position, "; last byte: 0x", get_token_string()), context);
19146|    400|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE16get_ubjson_arrayEv:
17908|  58.3k|    {
17909|  58.3k|        std::pair<std::size_t, char_int_type> size_and_type;
17910|  58.3k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1667|  58.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 58.3k]
  |  |  ------------------
  ------------------
17911|      0|        {
17912|      0|            return false;
17913|      0|        }
17914|       |
17915|       |        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
17916|       |        // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
17917|       |
17918|  58.3k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (17918:13): [True: 57.8k, False: 510]
  |  Branch (17918:55): [True: 5.54k, False: 52.3k]
  |  Branch (17918:86): [True: 1.98k, False: 3.56k]
  ------------------
17919|  1.98k|        {
17920|  1.98k|            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
17921|       |
17922|       |            // the "_ArrayType_" and "_ArraySize_" annotation keys were already emitted by
17923|       |            // get_ubjson_size_value() (the type marker is known before the dimension vector
17924|       |            // that determines size_and_type.first is read, so it is emitted first there to
17925|       |            // match the documented _ArrayType_, _ArraySize_, _ArrayData_ key order)
17926|  1.98k|            if (size_and_type.second == 'C' || size_and_type.second == 'B')
  ------------------
  |  Branch (17926:17): [True: 217, False: 1.76k]
  |  Branch (17926:48): [True: 377, False: 1.38k]
  ------------------
17927|    594|            {
17928|    594|                size_and_type.second = 'U';
17929|    594|            }
17930|       |
17931|  1.98k|            string_t key = "_ArrayData_";
17932|  1.98k|            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
  ------------------
  |  | 1667|  3.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 1, False: 1.97k]
  |  |  ------------------
  ------------------
17933|      0|            {
17934|      0|                return false;
17935|      0|            }
17936|       |
17937|  8.23k|            for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17937:37): [True: 6.25k, False: 1.98k]
  ------------------
17938|  6.25k|            {
17939|  6.25k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
  ------------------
  |  | 1667|  6.25k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.25k]
  |  |  ------------------
  ------------------
17940|      0|                {
17941|      0|                    return false;
17942|      0|                }
17943|  6.25k|            }
17944|       |
17945|  1.98k|            return (sax->end_array() && sax->end_object());
  ------------------
  |  Branch (17945:21): [True: 1.89k, False: 89]
  |  Branch (17945:41): [True: 1.89k, False: 0]
  ------------------
17946|  1.98k|        }
17947|       |
17948|       |        // If BJData type marker is 'B' decode as binary
17949|  56.3k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && size_and_type.second == 'B')
  ------------------
  |  Branch (17949:13): [True: 55.8k, False: 510]
  |  Branch (17949:55): [True: 3.56k, False: 52.3k]
  |  Branch (17949:86): [True: 1.87k, False: 1.69k]
  ------------------
17950|  1.87k|        {
17951|  1.87k|            binary_t result;
17952|  1.87k|            return get_binary(size_and_type.first, result) && sax->binary(result);
  ------------------
  |  Branch (17952:20): [True: 1.75k, False: 117]
  |  Branch (17952:63): [True: 1.75k, False: 0]
  ------------------
17953|  1.87k|        }
17954|       |
17955|  54.5k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (17955:13): [True: 1.69k, False: 52.8k]
  ------------------
17956|  1.69k|        {
17957|       |            // reading an element of a valueless type consumes no input, so the
17958|       |            // declared count alone decides how much is allocated; the check is
17959|       |            // made before the start event so that no container is opened that
17960|       |            // is then abandoned. See @ref max_valueless_container_size.
17961|  1.69k|            if (JSON_HEDLEY_UNLIKELY((size_and_type.second == 'Z' || size_and_type.second == 'T' || size_and_type.second == 'F')
  ------------------
  |  | 1667|  8.45k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
17962|  1.69k|                                     && size_and_type.first > max_valueless_container_size))
17963|      0|            {
17964|      0|                return out_of_range_error(exception_id::container_too_large, "excessive array size", "size");
17965|      0|            }
17966|       |
17967|  1.69k|            if (JSON_HEDLEY_UNLIKELY(!enter_array(size_and_type.first, size_and_type.second)))
  ------------------
  |  | 1667|  1.69k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.69k]
  |  |  ------------------
  ------------------
17968|      0|            {
17969|      0|                return false;
17970|      0|            }
17971|       |
17972|  1.69k|            if (size_and_type.second == 'N')
  ------------------
  |  Branch (17972:17): [True: 0, False: 1.69k]
  ------------------
17973|      0|            {
17974|       |                // a no-op is not a value, so a container of them holds none;
17975|       |                // the declared size has already been passed to the SAX parser
17976|      0|                container_stack.back().remaining = 0;
17977|      0|            }
17978|       |
17979|  1.69k|            return true;
17980|  1.69k|        }
17981|       |
17982|  52.8k|        return enter_array(detail::unknown_size());
17983|  54.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE17get_ubjson_objectEv:
17989|  7.95k|    {
17990|  7.95k|        std::pair<std::size_t, char_int_type> size_and_type;
17991|  7.95k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1667|  7.95k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 7.95k]
  |  |  ------------------
  ------------------
17992|      0|        {
17993|      0|            return false;
17994|      0|        }
17995|       |
17996|       |        // do not accept ND-array size in objects in BJData
17997|  7.95k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (17997:13): [True: 7.85k, False: 99]
  |  Branch (17997:55): [True: 215, False: 7.64k]
  |  Branch (17997:86): [True: 4, False: 211]
  ------------------
17998|      4|        {
17999|      4|            return last_byte_error(exception_id::unexpected_byte, "BJData object does not support ND-array size in optimized format", "object");
18000|      4|        }
18001|       |
18002|  7.95k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (18002:13): [True: 211, False: 7.73k]
  ------------------
18003|    211|        {
18004|    211|            return enter_object(size_and_type.first, size_and_type.second);
18005|    211|        }
18006|       |
18007|  7.73k|        return enter_object(detail::unknown_size());
18008|  7.95k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE17get_ubjson_stringERSC_bPKc:
17311|  18.9k|    {
17312|  18.9k|        if (get_char)
  ------------------
  |  Branch (17312:13): [True: 3.61k, False: 15.3k]
  ------------------
17313|  3.61k|        {
17314|       |            // no get_ignore_noop() here: the byte read next must be a string
17315|       |            // length type specification, and a no-op ('N') is not valid in
17316|       |            // that position. No-ops at positions where a value may appear are
17317|       |            // already consumed by the callers via get_ignore_noop().
17318|  3.61k|            get();
17319|  3.61k|        }
17320|       |
17321|  18.9k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1667|  18.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 18.9k]
  |  |  ------------------
  ------------------
17322|      0|        {
17323|      0|            return false;
17324|      0|        }
17325|       |
17326|  18.9k|        switch (current)
17327|  18.9k|        {
17328|  12.8k|            case 'U':
  ------------------
  |  Branch (17328:13): [True: 12.8k, False: 6.08k]
  ------------------
17329|  12.8k|            {
17330|  12.8k|                std::uint8_t len{};
17331|  12.8k|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17331:24): [True: 12.8k, False: 4]
  |  Branch (17331:43): [True: 12.8k, False: 34]
  |  Branch (17331:70): [True: 12.8k, False: 0]
  ------------------
17332|      0|            }
17333|       |
17334|  3.67k|            case 'i':
  ------------------
  |  Branch (17334:13): [True: 3.67k, False: 15.3k]
  ------------------
17335|  3.67k|            {
17336|  3.67k|                std::int8_t len{};
17337|  3.67k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17337:24): [True: 3.67k, False: 1]
  |  Branch (17337:43): [True: 3.67k, False: 6]
  |  Branch (17337:78): [True: 3.64k, False: 27]
  |  Branch (17337:105): [True: 3.64k, False: 0]
  ------------------
17338|      0|            }
17339|       |
17340|    453|            case 'I':
  ------------------
  |  Branch (17340:13): [True: 453, False: 18.5k]
  ------------------
17341|    453|            {
17342|    453|                std::int16_t len{};
17343|    453|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17343:24): [True: 451, False: 2]
  |  Branch (17343:43): [True: 448, False: 3]
  |  Branch (17343:78): [True: 403, False: 45]
  |  Branch (17343:105): [True: 403, False: 0]
  ------------------
17344|      0|            }
17345|       |
17346|    329|            case 'l':
  ------------------
  |  Branch (17346:13): [True: 329, False: 18.6k]
  ------------------
17347|    329|            {
17348|    329|                std::int32_t len{};
17349|    329|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17349:24): [True: 324, False: 5]
  |  Branch (17349:43): [True: 293, False: 31]
  |  Branch (17349:78): [True: 231, False: 62]
  |  Branch (17349:105): [True: 231, False: 0]
  ------------------
17350|      0|            }
17351|       |
17352|    370|            case 'L':
  ------------------
  |  Branch (17352:13): [True: 370, False: 18.6k]
  ------------------
17353|    370|            {
17354|    370|                std::int64_t len{};
17355|    370|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17355:24): [True: 360, False: 10]
  |  Branch (17355:43): [True: 296, False: 64]
  |  Branch (17355:78): [True: 199, False: 97]
  |  Branch (17355:105): [True: 199, False: 0]
  ------------------
17356|      0|            }
17357|       |
17358|    442|            case 'u':
  ------------------
  |  Branch (17358:13): [True: 442, False: 18.5k]
  ------------------
17359|    442|            {
17360|    442|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17360:21): [True: 0, False: 442]
  ------------------
17361|      0|                {
17362|      0|                    break;
17363|      0|                }
17364|    442|                std::uint16_t len{};
17365|    442|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17365:24): [True: 439, False: 3]
  |  Branch (17365:43): [True: 387, False: 52]
  |  Branch (17365:70): [True: 387, False: 0]
  ------------------
17366|    442|            }
17367|       |
17368|    286|            case 'm':
  ------------------
  |  Branch (17368:13): [True: 286, False: 18.6k]
  ------------------
17369|    286|            {
17370|    286|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17370:21): [True: 0, False: 286]
  ------------------
17371|      0|                {
17372|      0|                    break;
17373|      0|                }
17374|    286|                std::uint32_t len{};
17375|    286|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17375:24): [True: 281, False: 5]
  |  Branch (17375:43): [True: 202, False: 79]
  |  Branch (17375:70): [True: 202, False: 0]
  ------------------
17376|    286|            }
17377|       |
17378|    316|            case 'M':
  ------------------
  |  Branch (17378:13): [True: 316, False: 18.6k]
  ------------------
17379|    316|            {
17380|    316|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17380:21): [True: 0, False: 316]
  ------------------
17381|      0|                {
17382|      0|                    break;
17383|      0|                }
17384|    316|                std::uint64_t len{};
17385|    316|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17385:24): [True: 308, False: 8]
  |  Branch (17385:43): [True: 178, False: 130]
  |  Branch (17385:70): [True: 178, False: 0]
  ------------------
17386|    316|            }
17387|       |
17388|     96|            default:
  ------------------
  |  Branch (17388:13): [True: 96, False: 18.8k]
  ------------------
17389|     96|                break;
17390|  18.9k|        }
17391|     96|        return length_type_error("", "string");
17392|  18.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE26check_ubjson_string_lengthIaEEbT_:
17288|  3.67k|    {
17289|  3.67k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|  3.67k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 6, False: 3.67k]
  |  |  ------------------
  ------------------
17290|      6|        {
17291|      6|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|      6|        }
17293|  3.67k|        return true;
17294|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_stringIaEEbT_RSC_:
18910|  3.67k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  3.67k|        return get_bytes(len, "string", result);
18921|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesIaSC_EEbT_PKcRT0_:
18998|  3.67k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  3.67k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  7.23k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 3.59k, False: 3.64k]
  ------------------
19003|  3.59k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  3.59k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 3.59k, False: 0]
  ------------------
19007|  3.59k|                                       ? static_cast<std::size_t>(len)
19008|  3.59k|                                       : chunk_size;
19009|  3.59k|            const std::size_t old_size = result.size();
19010|  3.59k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  3.59k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  3.59k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 3.59k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  3.59k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  3.59k|            chars_read += bytes_read;
19018|  3.59k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  3.59k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 27, False: 3.56k]
  |  |  ------------------
  ------------------
19019|     27|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     27|                result.resize(old_size + bytes_read);
19024|     27|                ++chars_read;
19025|     27|                current = char_traits<char_type>::eof();
19026|     27|                return unexpect_eof(context);
19027|     27|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  3.56k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  3.56k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 3.56k, False: 0]
  ------------------
19030|  3.56k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  3.56k|        }
19032|  3.64k|        return true;
19033|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE26check_ubjson_string_lengthIsEEbT_:
17288|    451|    {
17289|    451|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    451|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 448]
  |  |  ------------------
  ------------------
17290|      3|        {
17291|      3|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|      3|        }
17293|    448|        return true;
17294|    451|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_stringIsEEbT_RSC_:
18910|    448|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    448|        return get_bytes(len, "string", result);
18921|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesIsSC_EEbT_PKcRT0_:
18998|    448|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    448|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    820|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 417, False: 403]
  ------------------
19003|    417|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    417|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 396, False: 21]
  ------------------
19007|    417|                                       ? static_cast<std::size_t>(len)
19008|    417|                                       : chunk_size;
19009|    417|            const std::size_t old_size = result.size();
19010|    417|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    417|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    417|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 417, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    417|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    417|            chars_read += bytes_read;
19018|    417|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    417|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 45, False: 372]
  |  |  ------------------
  ------------------
19019|     45|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     45|                result.resize(old_size + bytes_read);
19024|     45|                ++chars_read;
19025|     45|                current = char_traits<char_type>::eof();
19026|     45|                return unexpect_eof(context);
19027|     45|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    372|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    372|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 372, False: 0]
  ------------------
19030|    372|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    372|        }
19032|    403|        return true;
19033|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE26check_ubjson_string_lengthIiEEbT_:
17288|    324|    {
17289|    324|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    324|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 31, False: 293]
  |  |  ------------------
  ------------------
17290|     31|        {
17291|     31|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|     31|        }
17293|    293|        return true;
17294|    324|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE26check_ubjson_string_lengthIlEEbT_:
17288|    360|    {
17289|    360|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    360|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 64, False: 296]
  |  |  ------------------
  ------------------
17290|     64|        {
17291|     64|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|     64|        }
17293|    296|        return true;
17294|    360|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE10get_stringIlEEbT_RSC_:
18910|    296|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    296|        return get_bytes(len, "string", result);
18921|    296|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE9get_bytesIlSC_EEbT_PKcRT0_:
18998|    296|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    296|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    463|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 264, False: 199]
  ------------------
19003|    264|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    264|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 192, False: 72]
  ------------------
19007|    264|                                       ? static_cast<std::size_t>(len)
19008|    264|                                       : chunk_size;
19009|    264|            const std::size_t old_size = result.size();
19010|    264|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    264|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    264|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 264, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    264|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    264|            chars_read += bytes_read;
19018|    264|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    264|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 97, False: 167]
  |  |  ------------------
  ------------------
19019|     97|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     97|                result.resize(old_size + bytes_read);
19024|     97|                ++chars_read;
19025|     97|                current = char_traits<char_type>::eof();
19026|     97|                return unexpect_eof(context);
19027|     97|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    167|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    167|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 167, False: 0]
  ------------------
19030|    167|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    167|        }
19032|    199|        return true;
19033|    296|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE15get_ignore_noopEv:
18686|   211k|    {
18687|   211k|        do
18688|   217k|        {
18689|   217k|            get();
18690|   217k|        }
18691|   217k|        while (current == 'N');
  ------------------
  |  Branch (18691:16): [True: 5.52k, False: 211k]
  ------------------
18692|       |
18693|   211k|        return current;
18694|   211k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE3getEv:
18652|   345k|    {
18653|   345k|        ++chars_read;
18654|   345k|        return current = ia.get_character();
18655|   345k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_E13get_characterEv:
 8590|   345k|    {
 8591|   345k|        if (JSON_HEDLEY_LIKELY(current != end))
  ------------------
  |  | 1666|   345k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 338k, False: 6.98k]
  |  |  ------------------
  ------------------
 8592|   338k|        {
 8593|   338k|            auto result = char_traits<char_type>::to_int_type(*current);
 8594|   338k|            std::advance(current, 1);
 8595|   338k|            return result;
 8596|   338k|        }
 8597|       |
 8598|  6.98k|        ++eof_reads;
 8599|  6.98k|        return char_traits<char_type>::eof();
 8600|   345k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEE15last_byte_errorENS1_12exception_idERKSC_PKcST_:
19116|  1.00k|    {
19117|       |        // with a tail, the message reads "<detail><tail>; last byte: 0x<token>"
19118|  1.00k|        return sax->parse_error(chars_read, get_token_string(), parse_error::create(id_, chars_read,
19119|  1.00k|                                exception_message(tail == nullptr ? detail : concat(detail, tail, "; last byte: 0x", get_token_string()), context), nullptr));
  ------------------
  |  Branch (19119:51): [True: 902, False: 107]
  ------------------
19120|  1.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EENS1_19json_sax_dom_parserISG_SL_EEED2Ev:
14954|  10.9k|    ~binary_reader() = default;
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_22iterator_input_adapterINS4_21__list_const_iteratorIhPvEESK_EEED2Ev:
13881|  10.9k|    ~json_sax_dom_parser() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterINSt3__121__list_const_iteratorIhPvEES6_vEENS1_30iterator_input_adapter_factoryIT_T0_vE12adapter_typeES8_S9_:
 9007|  10.9k|{
 9008|  10.9k|    using factory_type = iterator_input_adapter_factory<IteratorType, SentinelType>;
 9009|  10.9k|    return factory_type::create(first, last);
 9010|  10.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail30iterator_input_adapter_factoryINSt3__121__list_const_iteratorIhPvEES6_vE6createES6_S6_:
 8935|  10.9k|    {
 8936|  10.9k|        return adapter_type(std::move(first), std::move(last));
 8937|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail22iterator_input_adapterINSt3__121__list_const_iteratorIhPvEES6_EC2ES6_S6_:
 8586|  10.9k|        : begin(first), current(std::move(first)), end(std::move(last))
 8587|  10.9k|    {}
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE11from_bjdataIRP8_IO_FILEEESE_OT_bbNS0_6detail15error_handler_tE:
36742|  10.9k|    {
36743|  10.9k|        return from_binary_impl(detail::input_adapter(std::forward<InputType>(i)), input_format_t::bjdata, strict, allow_exceptions, error_handler);
36744|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvE16from_binary_implINS0_6detail18file_input_adapterEEESE_T_NSG_14input_format_tEbbNSG_15error_handler_tENSG_18cbor_tag_handler_tE:
36385|  10.9k|    {
36386|  10.9k|        basic_json result;
36387|  10.9k|        detail::json_sax_dom_parser<basic_json, InputAdapterType> sdp(result, allow_exceptions);
36388|  10.9k|        binary_reader<InputAdapterType> reader(std::move(ia), format, error_handler);
36389|  10.9k|        if (!reader.sax_parse(&sdp, strict, tag_handler))
  ------------------
  |  Branch (36389:13): [True: 0, False: 10.9k]
  ------------------
36390|      0|        {
36391|      0|            result = value_t::discarded;
36392|      0|        }
36393|  10.9k|        return result;
36394|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEEC2ERSG_bPNS1_5lexerISG_SH_EE:
13873|  10.9k|        : root(r), allow_exceptions(allow_exceptions_), m_lexer_ref(lexer_)
13874|  10.9k|    {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEEC2EOSH_NS1_14input_format_tENS1_15error_handler_tE:
14944|  10.9k|        : ia(std::move(adapter)), input_format(format), error_handler(error_handler_)
14945|  10.9k|    {
14946|  10.9k|        (void)detail::is_sax_static_asserts<SAX, BasicJsonType> {};
14947|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9sax_parseEPSJ_bNS1_18cbor_tag_handler_tE:
14969|  10.9k|    {
14970|  10.9k|        sax = sax_;
14971|  10.9k|        container_stack.clear();
14972|  10.9k|        bon8_pushback_size = 0;
14973|  10.9k|        bool result = false;
14974|       |
14975|  10.9k|        switch (input_format)
14976|  10.9k|        {
14977|      0|            case input_format_t::bson:
  ------------------
  |  Branch (14977:13): [True: 0, False: 10.9k]
  ------------------
14978|      0|                result = parse_bson_internal();
14979|      0|                break;
14980|       |
14981|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (14981:13): [True: 0, False: 10.9k]
  ------------------
14982|      0|                result = parse_cbor_internal(tag_handler);
14983|      0|                break;
14984|       |
14985|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (14985:13): [True: 0, False: 10.9k]
  ------------------
14986|      0|                result = parse_msgpack_internal();
14987|      0|                break;
14988|       |
14989|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (14989:13): [True: 0, False: 10.9k]
  ------------------
14990|  10.9k|            case input_format_t::bjdata:
  ------------------
  |  Branch (14990:13): [True: 10.9k, False: 0]
  ------------------
14991|  10.9k|                result = parse_ubjson_internal();
14992|  10.9k|                break;
14993|       |
14994|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (14994:13): [True: 0, False: 10.9k]
  ------------------
14995|      0|                result = parse_bon8_internal();
14996|      0|                break;
14997|       |
14998|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (14998:13): [True: 0, False: 10.9k]
  ------------------
14999|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (14999:13): [True: 0, False: 10.9k]
  ------------------
15000|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (15000:17): [Folded, False: 0]
  ------------------
15001|  10.9k|        }
15002|       |
15003|       |        // strict mode: next byte must be EOF
15004|  5.79k|        if (result && strict)
  ------------------
  |  Branch (15004:13): [True: 5.79k, False: 0]
  |  Branch (15004:23): [True: 5.79k, False: 0]
  ------------------
15005|  5.79k|        {
15006|  5.79k|            if (input_format == input_format_t::ubjson || input_format == input_format_t::bjdata)
  ------------------
  |  Branch (15006:17): [True: 0, False: 5.79k]
  |  Branch (15006:59): [True: 5.79k, False: 0]
  ------------------
15007|  5.79k|            {
15008|  5.79k|                get_ignore_noop();
15009|  5.79k|            }
15010|      0|            else if (input_format == input_format_t::bon8)
  ------------------
  |  Branch (15010:22): [True: 0, False: 0]
  ------------------
15011|      0|            {
15012|       |                // a string that ends a container hands back the byte after it
15013|      0|                get_bon8();
15014|      0|            }
15015|      0|            else
15016|      0|            {
15017|      0|                get();
15018|      0|            }
15019|       |
15020|  5.79k|            if (JSON_HEDLEY_UNLIKELY(current != char_traits<char_type>::eof()))
  ------------------
  |  | 1667|  5.79k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 75, False: 5.71k]
  |  |  ------------------
  ------------------
15021|     75|            {
15022|     75|                return last_byte_error(exception_id::unexpected_end_of_input, "expected end of input", "value", "");
15023|     75|            }
15024|  5.79k|        }
15025|       |
15026|  5.71k|        return result;
15027|  5.79k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIiEEbRT_PKc:
18667|  2.05k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  2.05k|        auto new_chars_read = ia.get_elements(&dest);
18671|  2.05k|        chars_read += new_chars_read;
18672|  2.05k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  2.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 51, False: 2.00k]
  |  |  ------------------
  ------------------
18673|     51|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     51|            ++chars_read;
18676|     51|            static_cast<void>(report_eof(context));
18677|     51|            return false;
18678|     51|        }
18679|  2.00k|        return true;
18680|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIiEEmPT_m:
 8374|  2.05k|    {
 8375|  2.05k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  2.05k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10report_eofEPKc:
19058|  2.09k|    {
19059|  2.09k|        return sax->parse_error(chars_read, "<end of file>",
19060|  2.09k|                                parse_error::create(exception_id::unexpected_end_of_input, chars_read, exception_message("unexpected end of input", context), nullptr));
19061|  2.09k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE11parse_errorINS1_11parse_errorEEEbmRKSC_RKT_:
14004|  4.84k|    {
14005|  4.84k|        errored = true;
14006|  4.84k|        static_cast<void>(ex);
14007|  4.84k|        if (allow_exceptions)
  ------------------
  |  Branch (14007:13): [True: 4.84k, False: 0]
  ------------------
14008|  4.84k|        {
14009|  4.84k|            JSON_THROW(ex);
  ------------------
  |  | 2556|  4.84k|    #define JSON_THROW(exception) throw exception
  ------------------
14010|  4.84k|        }
14011|      0|        return false;
14012|  4.84k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE17exception_messageERKSC_SM_:
19163|  4.91k|    {
19164|  4.91k|        std::string error_msg = "syntax error while parsing ";
19165|       |
19166|  4.91k|        switch (input_format)
19167|  4.91k|        {
19168|      0|            case input_format_t::cbor:
  ------------------
  |  Branch (19168:13): [True: 0, False: 4.91k]
  ------------------
19169|      0|                error_msg += "CBOR";
19170|      0|                break;
19171|       |
19172|      0|            case input_format_t::msgpack:
  ------------------
  |  Branch (19172:13): [True: 0, False: 4.91k]
  ------------------
19173|      0|                error_msg += "MessagePack";
19174|      0|                break;
19175|       |
19176|      0|            case input_format_t::ubjson:
  ------------------
  |  Branch (19176:13): [True: 0, False: 4.91k]
  ------------------
19177|      0|                error_msg += "UBJSON";
19178|      0|                break;
19179|       |
19180|      0|            case input_format_t::bson:
  ------------------
  |  Branch (19180:13): [True: 0, False: 4.91k]
  ------------------
19181|      0|                error_msg += "BSON";
19182|      0|                break;
19183|       |
19184|  4.91k|            case input_format_t::bjdata:
  ------------------
  |  Branch (19184:13): [True: 4.91k, False: 0]
  ------------------
19185|  4.91k|                error_msg += "BJData";
19186|  4.91k|                break;
19187|       |
19188|      0|            case input_format_t::bon8:
  ------------------
  |  Branch (19188:13): [True: 0, False: 4.91k]
  ------------------
19189|      0|                error_msg += "BON8";
19190|      0|                break;
19191|       |
19192|      0|            case input_format_t::json: // LCOV_EXCL_LINE
  ------------------
  |  Branch (19192:13): [True: 0, False: 4.91k]
  ------------------
19193|      0|            default:            // LCOV_EXCL_LINE
  ------------------
  |  Branch (19193:13): [True: 0, False: 4.91k]
  ------------------
19194|      0|                JSON_ASSERT(false); // NOLINT(cert-dcl03-c,hicpp-static-assert,misc-static-assert) LCOV_EXCL_LINE
  ------------------
  |  | 2591|      0|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19194:17): [Folded, False: 0]
  ------------------
19195|  4.91k|        }
19196|       |
19197|  4.91k|        return concat(error_msg, ' ', context, ": ", detail);
19198|  4.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE15enter_containerEbmi:
15082|  61.8k|    {
15083|  61.8k|        if (JSON_HEDLEY_UNLIKELY(is_object ? !sax->start_object(len) : !sax->start_array(len)))
  ------------------
  |  | 1667|   123k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 61.8k]
  |  |  |  Branch (1667:94): [True: 7.85k, False: 54.0k]
  |  |  ------------------
  ------------------
15084|      0|        {
15085|      0|            return false;
15086|      0|        }
15087|       |
15088|  61.8k|        container_stack.emplace_back(len, is_object, type_marker);
15089|  61.8k|        return true;
15090|  61.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12start_objectEm:
13930|  9.98k|    {
13931|  9.98k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::object));
13932|       |
13933|       |#if JSON_DIAGNOSTIC_POSITIONS
13934|       |        // Ensure this is after the call to handle_value to ensure correct start position.
13935|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
13936|       |#endif
13937|       |
13938|  9.98k|        return check_container_size(*this, len, "object", ref_stack.back());
13939|  9.98k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueINS1_7value_tEEEPSG_OT_:
14030|  68.1k|    {
14031|  68.1k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 5.93k, False: 62.1k]
  ------------------
14032|  5.93k|        {
14033|  5.93k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  5.93k|            return &root;
14040|  5.93k|        }
14041|       |
14042|  62.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  62.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 54.6k, False: 7.52k]
  |  Branch (14042:9): [True: 7.52k, False: 0]
  |  Branch (14042:9): [True: 62.1k, False: 0]
  ------------------
14043|       |
14044|  62.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 54.6k, False: 7.52k]
  ------------------
14045|  54.6k|        {
14046|  54.6k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  54.6k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  54.6k|        }
14054|       |
14055|  7.52k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.52k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 7.52k, False: 0]
  ------------------
14056|  7.52k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  7.52k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 7.52k, False: 0]
  ------------------
14057|  7.52k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  7.52k|        return object_element;
14064|  7.52k|    }
_ZN8nlohmann16json_abi_v3_12_06detail20check_container_sizeINS1_19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_18file_input_adapterEEESH_EEbRT_mPKcPT0_:
13724|  68.1k|{
13725|  68.1k|    if (JSON_HEDLEY_UNLIKELY(len != detail::unknown_size() && len > ref->max_size()))
  ------------------
  |  | 1667|  76.2k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 229, False: 67.8k]
  |  |  |  Branch (1667:94): [True: 8.14k, False: 59.9k]
  |  |  |  Branch (1667:94): [True: 229, False: 7.92k]
  |  |  ------------------
  ------------------
13726|    229|    {
13727|    229|        return container_too_large_error(sax, len, kind, ref);
13728|    229|    }
13729|  67.8k|    return true;
13730|  68.1k|}
_ZN8nlohmann16json_abi_v3_12_06detail25container_too_large_errorINS1_19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS5_6vectorENS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEblmdSB_NS0_14adl_serializerENS7_IhNSB_IhEEEEvEENS1_18file_input_adapterEEESH_EEbRT_mPKcPT0_:
13718|    229|{
13719|    229|    return sax.parse_error(0, "", out_of_range::create(exception_id::container_too_large, concat("excessive ", kind, " size: ", std::to_string(len)), ref));
13720|    229|}
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE11parse_errorINS1_12out_of_rangeEEEbmRKSC_RKT_:
14004|    351|    {
14005|    351|        errored = true;
14006|    351|        static_cast<void>(ex);
14007|    351|        if (allow_exceptions)
  ------------------
  |  Branch (14007:13): [True: 351, False: 0]
  ------------------
14008|    351|        {
14009|    351|            JSON_THROW(ex);
  ------------------
  |  | 2556|    351|    #define JSON_THROW(exception) throw exception
  ------------------
14010|    351|        }
14011|      0|        return false;
14012|    351|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE11start_arrayEm:
13966|  58.1k|    {
13967|  58.1k|        ref_stack.push_back(handle_value(BasicJsonType::value_t::array));
13968|       |
13969|       |#if JSON_DIAGNOSTIC_POSITIONS
13970|       |        // Ensure this is after the call to handle_value to ensure correct start position.
13971|       |        diagnostic_positions::set_container_start(*ref_stack.back(), m_lexer_ref);
13972|       |#endif
13973|       |
13974|  58.1k|        if (JSON_HEDLEY_UNLIKELY(!check_container_size(*this, len, "array", ref_stack.back())))
  ------------------
  |  | 1667|  58.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 58.1k]
  |  |  ------------------
  ------------------
13975|      0|        {
13976|      0|            return false;
13977|      0|        }
13978|       |
13979|  58.1k|        if (len != detail::unknown_size())
  ------------------
  |  Branch (13979:13): [True: 5.67k, False: 52.4k]
  ------------------
13980|  5.67k|        {
13981|  5.67k|            reserve_array(*ref_stack.back()->m_data.m_value.array, len, priority_tag<1> {});
13982|  5.67k|        }
13983|       |
13984|  58.1k|        return true;
13985|  58.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE15container_frameC2Embi:
15051|  61.6k|            : remaining(remaining_), type_marker(type_marker_), is_object(is_object_) {}
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE15leave_containerEv:
15114|  43.0k|    {
15115|  43.0k|        const bool is_object = container_stack.back().is_object;
15116|  43.0k|        container_stack.pop_back();
15117|  43.0k|        return is_object ? sax->end_object() : sax->end_array();
  ------------------
  |  Branch (15117:16): [True: 5.97k, False: 37.1k]
  ------------------
15118|  43.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE10end_objectEv:
13952|  7.86k|    {
13953|  7.86k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  7.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13953:9): [True: 7.86k, False: 0]
  ------------------
13954|  7.86k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.86k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13954:9): [True: 7.86k, False: 0]
  ------------------
13955|       |
13956|       |#if JSON_DIAGNOSTIC_POSITIONS
13957|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
13958|       |#endif
13959|       |
13960|  7.86k|        ref_stack.back()->set_parents();
13961|  7.86k|        ref_stack.pop_back();
13962|  7.86k|        return true;
13963|  7.86k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE9end_arrayEv:
13988|  41.0k|    {
13989|  41.0k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  41.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13989:9): [True: 41.0k, False: 0]
  ------------------
13990|  41.0k|        JSON_ASSERT(ref_stack.back()->is_array());
  ------------------
  |  | 2591|  41.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13990:9): [True: 41.0k, False: 0]
  ------------------
13991|       |
13992|       |#if JSON_DIAGNOSTIC_POSITIONS
13993|       |        diagnostic_positions::set_container_end(*ref_stack.back(), m_lexer_ref);
13994|       |#endif
13995|       |
13996|  41.0k|        ref_stack.back()->set_parents();
13997|  41.0k|        ref_stack.pop_back();
13998|  41.0k|        return true;
13999|  41.0k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE12unexpect_eofEPKc:
19041|   144k|    {
19042|   144k|        if (JSON_HEDLEY_UNLIKELY(current == char_traits<char_type>::eof()))
  ------------------
  |  | 1667|   144k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1.74k, False: 143k]
  |  |  ------------------
  ------------------
19043|  1.74k|        {
19044|  1.74k|            return report_eof(context);
19045|  1.74k|        }
19046|   143k|        return true;
19047|   144k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE17check_string_utf8ERSC_PKc:
18941|  18.0k|    {
18942|  18.0k|        if (error_handler == error_handler_t::keep || is_valid_utf8(result))
  ------------------
  |  Branch (18942:13): [True: 18.0k, False: 0]
  |  Branch (18942:55): [True: 0, False: 0]
  ------------------
18943|  18.0k|        {
18944|  18.0k|            return true;
18945|  18.0k|        }
18946|       |
18947|      0|        if (error_handler == error_handler_t::strict)
  ------------------
  |  Branch (18947:13): [True: 0, False: 0]
  ------------------
18948|      0|        {
18949|      0|            return last_byte_error(exception_id::invalid_string_or_size, "invalid string: ill-formed UTF-8 byte", context);
18950|      0|        }
18951|       |
18952|      0|        result = sanitize_utf8(result, error_handler);
18953|      0|        return true;
18954|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE3keyERSC_:
13942|  21.0k|    {
13943|  21.0k|        JSON_ASSERT(!ref_stack.empty());
  ------------------
  |  | 2591|  21.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13943:9): [True: 21.0k, False: 0]
  ------------------
13944|  21.0k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  21.0k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (13944:9): [True: 21.0k, False: 0]
  ------------------
13945|       |
13946|       |        // add null at the given key and store the reference for later
13947|  21.0k|        object_element = &(ref_stack.back()->m_data.m_value.object->operator[](val));
13948|  21.0k|        return true;
13949|  21.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIdEEbRT_PKc:
18667|    877|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|    877|        auto new_chars_read = ia.get_elements(&dest);
18671|    877|        chars_read += new_chars_read;
18672|    877|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|    877|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 16, False: 861]
  |  |  ------------------
  ------------------
18673|     16|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     16|            ++chars_read;
18676|     16|            static_cast<void>(report_eof(context));
18677|     16|            return false;
18678|     16|        }
18679|    861|        return true;
18680|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIdEEmPT_m:
 8374|    877|    {
 8375|    877|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10emit_floatIdEEbT_:
18825|    861|    {
18826|    861|        const auto result = static_cast<number_float_t>(number);
18827|    861|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1667|  1.71k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 861]
  |  |  |  Branch (1667:94): [True: 850, False: 11]
  |  |  |  Branch (1667:94): [True: 0, False: 850]
  |  |  ------------------
  ------------------
18828|      0|        {
18829|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
18830|      0|        }
18831|    861|        return sax->number_float(result, "");
18832|    861|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE18out_of_range_errorENS1_12exception_idEPKcSN_:
19068|     70|    {
19069|     70|        return sax->parse_error(chars_read, get_token_string(), out_of_range::create(id_, exception_message(detail, context), nullptr));
19070|     70|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE16get_token_stringEv:
19152|  1.77k|    {
19153|  1.77k|        return hex_byte(static_cast<std::uint8_t>(current));
19154|  1.77k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12number_floatEdRKSC_:
13908|  22.3k|    {
13909|  22.3k|        handle_value(val);
13910|  22.3k|        return true;
13911|  22.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIRdEEPSG_OT_:
14030|  22.3k|    {
14031|  22.3k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 1.07k, False: 21.3k]
  ------------------
14032|  1.07k|        {
14033|  1.07k|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|  1.07k|            return &root;
14040|  1.07k|        }
14041|       |
14042|  21.3k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  21.3k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 21.1k, False: 148]
  |  Branch (14042:9): [True: 148, False: 0]
  |  Branch (14042:9): [True: 21.3k, False: 0]
  ------------------
14043|       |
14044|  21.3k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 21.1k, False: 148]
  ------------------
14045|  21.1k|        {
14046|  21.1k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  21.1k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  21.1k|        }
14054|       |
14055|    148|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    148|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 148, False: 0]
  ------------------
14056|    148|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    148|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 148, False: 0]
  ------------------
14057|    148|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    148|        return object_element;
14064|    148|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIiEEbT_RSC_:
18910|    293|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    293|        return get_bytes(len, "string", result);
18921|    293|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIiSC_EEbT_PKcRT0_:
18998|    293|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    293|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    509|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 278, False: 231]
  ------------------
19003|    278|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    278|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 238, False: 40]
  ------------------
19007|    278|                                       ? static_cast<std::size_t>(len)
19008|    278|                                       : chunk_size;
19009|    278|            const std::size_t old_size = result.size();
19010|    278|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    278|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    278|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 278, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    278|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    278|            chars_read += bytes_read;
19018|    278|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    278|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 62, False: 216]
  |  |  ------------------
  ------------------
19019|     62|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     62|                result.resize(old_size + bytes_read);
19024|     62|                ++chars_read;
19025|     62|                current = char_traits<char_type>::eof();
19026|     62|                return unexpect_eof(context);
19027|     62|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    216|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    216|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 216, False: 0]
  ------------------
19030|    216|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    216|        }
19032|    231|        return true;
19033|    293|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIcEEmPT_m:
 8374|  14.3k|    {
 8375|  14.3k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  14.3k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE6stringERSC_:
13914|  10.5k|    {
13915|       |        // json_sax documents that the passed value may be moved from,
13916|       |        // so hand the buffer over instead of copying it
13917|  10.5k|        handle_value(std::move(val));
13918|  10.5k|        return true;
13919|  10.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueISC_EEPSG_OT_:
14030|  10.5k|    {
14031|  10.5k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 338, False: 10.1k]
  ------------------
14032|    338|        {
14033|    338|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    338|            return &root;
14040|    338|        }
14041|       |
14042|  10.1k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  10.1k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 6.13k, False: 4.04k]
  |  Branch (14042:9): [True: 4.04k, False: 0]
  |  Branch (14042:9): [True: 10.1k, False: 0]
  ------------------
14043|       |
14044|  10.1k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 6.13k, False: 4.04k]
  ------------------
14045|  6.13k|        {
14046|  6.13k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  6.13k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  6.13k|        }
14054|       |
14055|  4.04k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  4.04k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 4.04k, False: 0]
  ------------------
14056|  4.04k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  4.04k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 4.04k, False: 0]
  ------------------
14057|  4.04k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  4.04k|        return object_element;
14064|  4.04k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIhEEmPT_m:
 8374|  29.1k|    {
 8375|  29.1k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  29.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE6binaryERNS0_27byte_container_with_subtypeISF_EE:
13922|  1.75k|    {
13923|       |        // json_sax documents that the passed value may be moved from,
13924|       |        // so hand the buffer over instead of copying it
13925|  1.75k|        handle_value(std::move(val));
13926|  1.75k|        return true;
13927|  1.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueINS0_27byte_container_with_subtypeISF_EEEEPSG_OT_:
14030|  1.75k|    {
14031|  1.75k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 55, False: 1.69k]
  ------------------
14032|     55|        {
14033|     55|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|     55|            return &root;
14040|     55|        }
14041|       |
14042|  1.69k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  1.69k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 1.52k, False: 173]
  |  Branch (14042:9): [True: 173, False: 0]
  |  Branch (14042:9): [True: 1.69k, False: 0]
  ------------------
14043|       |
14044|  1.69k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 1.52k, False: 173]
  ------------------
14045|  1.52k|        {
14046|  1.52k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  1.52k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  1.52k|        }
14054|       |
14055|    173|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    173|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 173, False: 0]
  ------------------
14056|    173|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    173|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 173, False: 0]
  ------------------
14057|    173|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    173|        return object_element;
14064|    173|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIhLb0EEEbRT_:
18739|  28.1k|    {
18740|       |        // read in the original format
18741|       |
18742|  28.1k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  28.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 28.1k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  28.1k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 28.1k]
  |  Branch (18746:34): [Folded, False: 28.0k]
  |  Branch (18746:57): [True: 28.0k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  28.1k|        return true;
18751|  28.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIhEEbRT_PKc:
18667|  28.1k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  28.1k|        auto new_chars_read = ia.get_elements(&dest);
18671|  28.1k|        chars_read += new_chars_read;
18672|  28.1k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  28.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 60, False: 28.0k]
  |  |  ------------------
  ------------------
18673|     60|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     60|            ++chars_read;
18676|     60|            static_cast<void>(report_eof(context));
18677|     60|            return false;
18678|     60|        }
18679|  28.0k|        return true;
18680|  28.1k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE7booleanEb:
13890|  14.8k|    {
13891|  14.8k|        handle_value(val);
13892|  14.8k|        return true;
13893|  14.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIRbEEPSG_OT_:
14030|  14.8k|    {
14031|  14.8k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 13, False: 14.8k]
  ------------------
14032|     13|        {
14033|     13|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|     13|            return &root;
14040|     13|        }
14041|       |
14042|  14.8k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  14.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 11.5k, False: 3.28k]
  |  Branch (14042:9): [True: 3.28k, False: 0]
  |  Branch (14042:9): [True: 14.8k, False: 0]
  ------------------
14043|       |
14044|  14.8k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 11.5k, False: 3.28k]
  ------------------
14045|  11.5k|        {
14046|  11.5k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  11.5k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  11.5k|        }
14054|       |
14055|  3.28k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  3.28k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 3.28k, False: 0]
  ------------------
14056|  3.28k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  3.28k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 3.28k, False: 0]
  ------------------
14057|  3.28k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  3.28k|        return object_element;
14064|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE4nullEv:
13884|  9.91k|    {
13885|  9.91k|        handle_value(nullptr);
13886|  9.91k|        return true;
13887|  9.91k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIDnEEPSG_OT_:
14030|  9.91k|    {
14031|  9.91k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 8, False: 9.90k]
  ------------------
14032|      8|        {
14033|      8|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|      8|            return &root;
14040|      8|        }
14041|       |
14042|  9.90k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  9.90k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 5.23k, False: 4.67k]
  |  Branch (14042:9): [True: 4.67k, False: 0]
  |  Branch (14042:9): [True: 9.90k, False: 0]
  ------------------
14043|       |
14044|  9.90k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 5.23k, False: 4.67k]
  ------------------
14045|  5.23k|        {
14046|  5.23k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  5.23k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  5.23k|        }
14054|       |
14055|  4.67k|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|  4.67k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 4.67k, False: 0]
  ------------------
14056|  4.67k|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|  4.67k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 4.67k, False: 0]
  ------------------
14057|  4.67k|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|  4.67k|        return object_element;
14064|  4.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE11emit_signedIiEEbT_:
18771|  1.14k|    {
18772|  1.14k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.14k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.14k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.14k|        {
18774|  1.14k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.14k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE14number_integerEl:
13896|  7.46k|    {
13897|  7.46k|        handle_value(val);
13898|  7.46k|        return true;
13899|  7.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIRlEEPSG_OT_:
14030|  7.46k|    {
14031|  7.46k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 294, False: 7.16k]
  ------------------
14032|    294|        {
14033|    294|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    294|            return &root;
14040|    294|        }
14041|       |
14042|  7.16k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  7.16k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 6.86k, False: 308]
  |  Branch (14042:9): [True: 308, False: 0]
  |  Branch (14042:9): [True: 7.16k, False: 0]
  ------------------
14043|       |
14044|  7.16k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 6.86k, False: 308]
  ------------------
14045|  6.86k|        {
14046|  6.86k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  6.86k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  6.86k|        }
14054|       |
14055|    308|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    308|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 308, False: 0]
  ------------------
14056|    308|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    308|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 308, False: 0]
  ------------------
14057|    308|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    308|        return object_element;
14064|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE15number_unsignedEm:
13902|  17.9k|    {
13903|  17.9k|        handle_value(val);
13904|  17.9k|        return true;
13905|  17.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEE12handle_valueIRmEEPSG_OT_:
14030|  17.9k|    {
14031|  17.9k|        if (ref_stack.empty())
  ------------------
  |  Branch (14031:13): [True: 457, False: 17.4k]
  ------------------
14032|    457|        {
14033|    457|            root = BasicJsonType(std::forward<Value>(v));
14034|       |
14035|       |#if JSON_DIAGNOSTIC_POSITIONS
14036|       |            diagnostic_positions::set_from_lexer(root, m_lexer_ref);
14037|       |#endif
14038|       |
14039|    457|            return &root;
14040|    457|        }
14041|       |
14042|  17.4k|        JSON_ASSERT(ref_stack.back()->is_array() || ref_stack.back()->is_object());
  ------------------
  |  | 2591|  17.4k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14042:9): [True: 16.8k, False: 619]
  |  Branch (14042:9): [True: 619, False: 0]
  |  Branch (14042:9): [True: 17.4k, False: 0]
  ------------------
14043|       |
14044|  17.4k|        if (ref_stack.back()->is_array())
  ------------------
  |  Branch (14044:13): [True: 16.8k, False: 619]
  ------------------
14045|  16.8k|        {
14046|  16.8k|            ref_stack.back()->m_data.m_value.array->emplace_back(std::forward<Value>(v));
14047|       |
14048|       |#if JSON_DIAGNOSTIC_POSITIONS
14049|       |            diagnostic_positions::set_from_lexer(ref_stack.back()->m_data.m_value.array->back(), m_lexer_ref);
14050|       |#endif
14051|       |
14052|  16.8k|            return &(ref_stack.back()->m_data.m_value.array->back());
14053|  16.8k|        }
14054|       |
14055|    619|        JSON_ASSERT(ref_stack.back()->is_object());
  ------------------
  |  | 2591|    619|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14055:9): [True: 619, False: 0]
  ------------------
14056|    619|        JSON_ASSERT(object_element);
  ------------------
  |  | 2591|    619|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (14056:9): [True: 619, False: 0]
  ------------------
14057|    619|        *object_element = BasicJsonType(std::forward<Value>(v));
14058|       |
14059|       |#if JSON_DIAGNOSTIC_POSITIONS
14060|       |        diagnostic_positions::set_from_lexer(*object_element, m_lexer_ref);
14061|       |#endif
14062|       |
14063|    619|        return object_element;
14064|    619|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIlEEbRT_PKc:
18667|  1.93k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.93k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.93k|        chars_read += new_chars_read;
18672|  1.93k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.93k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 55, False: 1.87k]
  |  |  ------------------
  ------------------
18673|     55|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     55|            ++chars_read;
18676|     55|            static_cast<void>(report_eof(context));
18677|     55|            return false;
18678|     55|        }
18679|  1.87k|        return true;
18680|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIlEEmPT_m:
 8374|  1.93k|    {
 8375|  1.93k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE11emit_signedIlEEbT_:
18771|  1.18k|    {
18772|  1.18k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.18k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.18k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.18k|        {
18774|  1.18k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.18k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toImEEbRT_PKc:
18667|  3.75k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  3.75k|        auto new_chars_read = ia.get_elements(&dest);
18671|  3.75k|        chars_read += new_chars_read;
18672|  3.75k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  3.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 37, False: 3.72k]
  |  |  ------------------
  ------------------
18673|     37|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     37|            ++chars_read;
18676|     37|            static_cast<void>(report_eof(context));
18677|     37|            return false;
18678|     37|        }
18679|  3.72k|        return true;
18680|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsImEEmPT_m:
 8374|  3.75k|    {
 8375|  3.75k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE13emit_unsignedImEEbT_:
18799|  8.40k|    {
18800|  8.40k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  8.40k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 8.40k, False: 0]
  |  |  ------------------
  ------------------
18801|  8.40k|        {
18802|  8.40k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  8.40k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  8.40k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIjEEbT_RSC_:
18910|    281|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    281|        return get_bytes(len, "string", result);
18921|    281|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIjSC_EEbT_PKcRT0_:
18998|    281|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    281|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    445|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 243, False: 202]
  ------------------
19003|    243|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    243|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 188, False: 55]
  ------------------
19007|    243|                                       ? static_cast<std::size_t>(len)
19008|    243|                                       : chunk_size;
19009|    243|            const std::size_t old_size = result.size();
19010|    243|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    243|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    243|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 243, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    243|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    243|            chars_read += bytes_read;
19018|    243|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    243|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 79, False: 164]
  |  |  ------------------
  ------------------
19019|     79|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     79|                result.resize(old_size + bytes_read);
19024|     79|                ++chars_read;
19025|     79|                current = char_traits<char_type>::eof();
19026|     79|                return unexpect_eof(context);
19027|     79|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    164|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    164|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 164, False: 0]
  ------------------
19030|    164|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    164|        }
19032|    202|        return true;
19033|    281|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIhEEbT_RSC_:
18910|  12.8k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  12.8k|        return get_bytes(len, "string", result);
18921|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIhSC_EEbT_PKcRT0_:
18998|  12.8k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  12.8k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  21.9k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 9.05k, False: 12.8k]
  ------------------
19003|  9.05k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  9.05k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 9.05k, False: 0]
  ------------------
19007|  9.05k|                                       ? static_cast<std::size_t>(len)
19008|  9.05k|                                       : chunk_size;
19009|  9.05k|            const std::size_t old_size = result.size();
19010|  9.05k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  9.05k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  9.05k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 9.05k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  9.05k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  9.05k|            chars_read += bytes_read;
19018|  9.05k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  9.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 34, False: 9.02k]
  |  |  ------------------
  ------------------
19019|     34|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     34|                result.resize(old_size + bytes_read);
19024|     34|                ++chars_read;
19025|     34|                current = char_traits<char_type>::eof();
19026|     34|                return unexpect_eof(context);
19027|     34|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  9.02k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  9.02k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 9.02k, False: 0]
  ------------------
19030|  9.02k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  9.02k|        }
19032|  12.8k|        return true;
19033|  12.8k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberItLb0EEEbRT_:
18739|  2.94k|    {
18740|       |        // read in the original format
18741|       |
18742|  2.94k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  2.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.94k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  2.94k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 2.94k]
  |  Branch (18746:34): [Folded, False: 2.89k]
  |  Branch (18746:57): [True: 2.89k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  2.94k|        return true;
18751|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toItEEbRT_PKc:
18667|  2.94k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  2.94k|        auto new_chars_read = ia.get_elements(&dest);
18671|  2.94k|        chars_read += new_chars_read;
18672|  2.94k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  2.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 41, False: 2.89k]
  |  |  ------------------
  ------------------
18673|     41|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     41|            ++chars_read;
18676|     41|            static_cast<void>(report_eof(context));
18677|     41|            return false;
18678|     41|        }
18679|  2.89k|        return true;
18680|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsItEEmPT_m:
 8374|  2.94k|    {
 8375|  2.94k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  2.94k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringItEEbT_RSC_:
18910|    439|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    439|        return get_bytes(len, "string", result);
18921|    439|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesItSC_EEbT_PKcRT0_:
18998|    439|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    439|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    624|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 237, False: 387]
  ------------------
19003|    237|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    237|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 218, False: 19]
  ------------------
19007|    237|                                       ? static_cast<std::size_t>(len)
19008|    237|                                       : chunk_size;
19009|    237|            const std::size_t old_size = result.size();
19010|    237|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    237|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    237|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 237, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    237|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    237|            chars_read += bytes_read;
19018|    237|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    237|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 52, False: 185]
  |  |  ------------------
  ------------------
19019|     52|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     52|                result.resize(old_size + bytes_read);
19024|     52|                ++chars_read;
19025|     52|                current = char_traits<char_type>::eof();
19026|     52|                return unexpect_eof(context);
19027|     52|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    185|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    185|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 185, False: 0]
  ------------------
19030|    185|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    185|        }
19032|    387|        return true;
19033|    439|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIjLb0EEEbRT_:
18739|  1.84k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.84k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.84k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.84k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.84k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.84k]
  |  Branch (18746:34): [Folded, False: 1.81k]
  |  Branch (18746:57): [True: 1.81k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.84k|        return true;
18751|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIjEEbRT_PKc:
18667|  1.84k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.84k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.84k|        chars_read += new_chars_read;
18672|  1.84k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.84k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 29, False: 1.81k]
  |  |  ------------------
  ------------------
18673|     29|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     29|            ++chars_read;
18676|     29|            static_cast<void>(report_eof(context));
18677|     29|            return false;
18678|     29|        }
18679|  1.81k|        return true;
18680|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIjEEmPT_m:
 8374|  1.84k|    {
 8375|  1.84k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  1.84k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberImLb0EEEbRT_:
18739|  3.75k|    {
18740|       |        // read in the original format
18741|       |
18742|  3.75k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  3.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.75k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  3.75k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 3.75k]
  |  Branch (18746:34): [Folded, False: 3.72k]
  |  Branch (18746:57): [True: 3.72k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  3.75k|        return true;
18751|  3.75k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringImEEbT_RSC_:
18910|    308|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    308|        return get_bytes(len, "string", result);
18921|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesImSC_EEbT_PKcRT0_:
18998|    308|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    308|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    446|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 268, False: 178]
  ------------------
19003|    268|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    268|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 164, False: 104]
  ------------------
19007|    268|                                       ? static_cast<std::size_t>(len)
19008|    268|                                       : chunk_size;
19009|    268|            const std::size_t old_size = result.size();
19010|    268|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    268|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    268|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 268, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    268|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    268|            chars_read += bytes_read;
19018|    268|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    268|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 130, False: 138]
  |  |  ------------------
  ------------------
19019|    130|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    130|                result.resize(old_size + bytes_read);
19024|    130|                ++chars_read;
19025|    130|                current = char_traits<char_type>::eof();
19026|    130|                return unexpect_eof(context);
19027|    130|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    138|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    138|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 138, False: 0]
  ------------------
19030|    138|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    138|        }
19032|    178|        return true;
19033|    308|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE13emit_unsignedIhEEbT_:
18799|  5.15k|    {
18800|  5.15k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  5.15k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 5.15k, False: 0]
  |  |  ------------------
  ------------------
18801|  5.15k|        {
18802|  5.15k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  5.15k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  5.15k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE13emit_unsignedItEEbT_:
18799|  1.46k|    {
18800|  1.46k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  1.46k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.46k, False: 0]
  |  |  ------------------
  ------------------
18801|  1.46k|        {
18802|  1.46k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  1.46k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  1.46k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE13emit_unsignedIjEEbT_:
18799|  1.02k|    {
18800|  1.02k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_unsigned_t>(number)))
  ------------------
  |  | 1666|  1.02k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.02k, False: 0]
  |  |  ------------------
  ------------------
18801|  1.02k|        {
18802|  1.02k|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18803|  1.02k|        }
18804|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18805|      0|        return emit_float(static_cast<long double>(number));
18806|  1.02k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_binaryImEEbT_RNS0_27byte_container_with_subtypeISF_EE:
18972|  1.87k|    {
18973|  1.87k|        return get_bytes(len, "binary", result);
18974|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesImNS0_27byte_container_with_subtypeISF_EEEEbT_PKcRT0_:
18998|  1.87k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  1.87k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  2.77k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 1.01k, False: 1.75k]
  ------------------
19003|  1.01k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  1.01k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 923, False: 93]
  ------------------
19007|  1.01k|                                       ? static_cast<std::size_t>(len)
19008|  1.01k|                                       : chunk_size;
19009|  1.01k|            const std::size_t old_size = result.size();
19010|  1.01k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  1.01k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  1.01k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 1.01k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  1.01k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  1.01k|            chars_read += bytes_read;
19018|  1.01k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  1.01k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 117, False: 899]
  |  |  ------------------
  ------------------
19019|    117|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|    117|                result.resize(old_size + bytes_read);
19024|    117|                ++chars_read;
19025|    117|                current = char_traits<char_type>::eof();
19026|    117|                return unexpect_eof(context);
19027|    117|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    899|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    899|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 899, False: 0]
  ------------------
19030|    899|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    899|        }
19032|  1.75k|        return true;
19033|  1.87k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE11enter_arrayEmi:
15094|  54.0k|    {
15095|  54.0k|        return enter_container(/*is_object*/false, len, type_marker);
15096|  54.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE12enter_objectEmi:
15100|  7.85k|    {
15101|  7.85k|        return enter_container(/*is_object*/true, len, type_marker);
15102|  7.85k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE15unexpected_byteEPKcSM_:
19130|    184|    {
19131|    184|        return last_byte_error(exception_id::unexpected_byte, concat(detail, ": 0x", get_token_string()), context);
19132|    184|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE14get_half_floatEb:
18845|  17.8k|    {
18846|  17.8k|        const auto byte1_raw = get();
18847|  17.8k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  17.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 17.8k]
  |  |  ------------------
  ------------------
18848|      0|        {
18849|      0|            return false;
18850|      0|        }
18851|  17.8k|        const auto byte2_raw = get();
18852|  17.8k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  17.8k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 17.8k]
  |  |  ------------------
  ------------------
18853|      0|        {
18854|      0|            return false;
18855|      0|        }
18856|       |
18857|  17.8k|        const auto byte1 = static_cast<unsigned char>(byte1_raw);
18858|  17.8k|        const auto byte2 = static_cast<unsigned char>(byte2_raw);
18859|       |
18860|       |        // Code from RFC 8949, Appendix D, Figure 3:
18861|       |        // As half-precision floating-point numbers were only added
18862|       |        // to IEEE 754 in 2008, today's programming platforms often
18863|       |        // still only have limited support for them. It is very
18864|       |        // easy to include at least decoding support for them even
18865|       |        // without such support. An example of a small decoder for
18866|       |        // half-precision floating-point numbers in the C language
18867|       |        // is shown in Fig. 3.
18868|  17.8k|        const auto half = little_endian
  ------------------
  |  Branch (18868:27): [True: 17.8k, False: 50]
  ------------------
18869|  17.8k|                          ? static_cast<unsigned int>((byte2 << 8u) + byte1)
18870|  17.8k|                          : static_cast<unsigned int>((byte1 << 8u) + byte2);
18871|  17.8k|        const double val = [&half]
18872|  17.8k|        {
18873|  17.8k|            const int exp = (half >> 10u) & 0x1Fu;
18874|  17.8k|            const unsigned int mant = half & 0x3FFu;
18875|  17.8k|            JSON_ASSERT(exp <= 31);
18876|  17.8k|            JSON_ASSERT(mant <= 1023);
18877|  17.8k|            switch (exp)
18878|  17.8k|            {
18879|  17.8k|                case 0:
18880|  17.8k|                    return std::ldexp(mant, -24);
18881|  17.8k|                case 31:
18882|  17.8k|                    return (mant == 0)
18883|  17.8k|                    ? std::numeric_limits<double>::infinity()
18884|  17.8k|                    : std::numeric_limits<double>::quiet_NaN();
18885|  17.8k|                default:
18886|  17.8k|                    return std::ldexp(mant + 1024, exp - 25);
18887|  17.8k|            }
18888|  17.8k|        }();
18889|  17.8k|        return sax->number_float((half & 0x8000u) != 0
  ------------------
  |  Branch (18889:34): [True: 4.36k, False: 13.5k]
  ------------------
18890|  17.8k|                                 ? static_cast<number_float_t>(-val)
18891|  17.8k|                                 : static_cast<number_float_t>(val), "");
18892|  17.8k|    }
_ZZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE14get_half_floatEbENKUlvE_clEv:
18872|  17.8k|        {
18873|  17.8k|            const int exp = (half >> 10u) & 0x1Fu;
18874|  17.8k|            const unsigned int mant = half & 0x3FFu;
18875|  17.8k|            JSON_ASSERT(exp <= 31);
  ------------------
  |  | 2591|  17.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18875:13): [True: 17.8k, False: 0]
  ------------------
18876|  17.8k|            JSON_ASSERT(mant <= 1023);
  ------------------
  |  | 2591|  17.8k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (18876:13): [True: 17.8k, False: 0]
  ------------------
18877|  17.8k|            switch (exp)
18878|  17.8k|            {
18879|  3.26k|                case 0:
  ------------------
  |  Branch (18879:17): [True: 3.26k, False: 14.5k]
  ------------------
18880|  3.26k|                    return std::ldexp(mant, -24);
18881|  1.74k|                case 31:
  ------------------
  |  Branch (18881:17): [True: 1.74k, False: 16.0k]
  ------------------
18882|  1.74k|                    return (mant == 0)
  ------------------
  |  Branch (18882:28): [True: 1, False: 1.74k]
  ------------------
18883|  1.74k|                    ? std::numeric_limits<double>::infinity()
18884|  1.74k|                    : std::numeric_limits<double>::quiet_NaN();
18885|  12.8k|                default:
  ------------------
  |  Branch (18885:17): [True: 12.8k, False: 5.00k]
  ------------------
18886|  12.8k|                    return std::ldexp(mant + 1024, exp - 25);
18887|  17.8k|            }
18888|  17.8k|        }();
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIfLb0EEEbRT_:
18739|  1.30k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.30k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.30k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.30k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.30k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.30k]
  |  Branch (18746:34): [Folded, False: 1.29k]
  |  Branch (18746:57): [True: 1.29k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.30k|        return true;
18751|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIfEEbRT_PKc:
18667|  1.30k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  1.30k|        auto new_chars_read = ia.get_elements(&dest);
18671|  1.30k|        chars_read += new_chars_read;
18672|  1.30k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  1.30k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 15, False: 1.29k]
  |  |  ------------------
  ------------------
18673|     15|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     15|            ++chars_read;
18676|     15|            static_cast<void>(report_eof(context));
18677|     15|            return false;
18678|     15|        }
18679|  1.29k|        return true;
18680|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIfEEmPT_m:
 8374|  1.30k|    {
 8375|  1.30k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  1.30k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10emit_floatIfEEbT_:
18825|  1.29k|    {
18826|  1.29k|        const auto result = static_cast<number_float_t>(number);
18827|  1.29k|        if (JSON_HEDLEY_UNLIKELY(std::isfinite(number) && !std::isfinite(result)))
  ------------------
  |  | 1667|  2.43k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.29k]
  |  |  |  Branch (1667:94): [True: 1.13k, False: 158]
  |  |  |  Branch (1667:94): [True: 0, False: 1.13k]
  |  |  ------------------
  ------------------
18828|      0|        {
18829|      0|            return out_of_range_error(exception_id::number_overflow, "number overflow", "value");
18830|      0|        }
18831|  1.29k|        return sax->number_float(result, "");
18832|  1.29k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIdLb0EEEbRT_:
18739|    877|    {
18740|       |        // read in the original format
18741|       |
18742|    877|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|    877|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 877]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|    877|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 877]
  |  Branch (18746:34): [Folded, False: 861]
  |  Branch (18746:57): [True: 861, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|    877|        return true;
18751|    877|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIaLb0EEEbRT_:
18739|  15.0k|    {
18740|       |        // read in the original format
18741|       |
18742|  15.0k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  15.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 15.0k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  15.0k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 15.0k]
  |  Branch (18746:34): [Folded, False: 15.0k]
  |  Branch (18746:57): [True: 15.0k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  15.0k|        return true;
18751|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIaEEbRT_PKc:
18667|  15.0k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  15.0k|        auto new_chars_read = ia.get_elements(&dest);
18671|  15.0k|        chars_read += new_chars_read;
18672|  15.0k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  15.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 21, False: 15.0k]
  |  |  ------------------
  ------------------
18673|     21|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     21|            ++chars_read;
18676|     21|            static_cast<void>(report_eof(context));
18677|     21|            return false;
18678|     21|        }
18679|  15.0k|        return true;
18680|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIaEEmPT_m:
 8374|  15.0k|    {
 8375|  15.0k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  15.0k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE11emit_signedIaEEbT_:
18771|  3.20k|    {
18772|  3.20k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  3.20k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 3.20k, False: 0]
  |  |  ------------------
  ------------------
18773|  3.20k|        {
18774|  3.20k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  3.20k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIsLb0EEEbRT_:
18739|  3.28k|    {
18740|       |        // read in the original format
18741|       |
18742|  3.28k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  3.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.28k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  3.28k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 3.28k]
  |  Branch (18746:34): [Folded, False: 3.25k]
  |  Branch (18746:57): [True: 3.25k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  3.28k|        return true;
18751|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE6get_toIsEEbRT_PKc:
18667|  3.28k|    {
18668|       |        // false positive: new_chars_read is read on the next lines
18669|       |        // @infer-ignore DEAD_STORE
18670|  3.28k|        auto new_chars_read = ia.get_elements(&dest);
18671|  3.28k|        chars_read += new_chars_read;
18672|  3.28k|        if (JSON_HEDLEY_UNLIKELY(new_chars_read < sizeof(T)))
  ------------------
  |  | 1667|  3.28k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 30, False: 3.25k]
  |  |  ------------------
  ------------------
18673|     30|        {
18674|       |            // in case of failure, advance position by 1 to report the failing location
18675|     30|            ++chars_read;
18676|     30|            static_cast<void>(report_eof(context));
18677|     30|            return false;
18678|     30|        }
18679|  3.25k|        return true;
18680|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter12get_elementsIsEEmPT_m:
 8374|  3.28k|    {
 8375|  3.28k|        return fread(dest, 1, sizeof(T) * count, m_file);
 8376|  3.28k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE11emit_signedIsEEbT_:
18771|  1.68k|    {
18772|  1.68k|        if (JSON_HEDLEY_LIKELY(value_in_range_of<number_integer_t>(number)))
  ------------------
  |  | 1666|  1.68k|#  define JSON_HEDLEY_LIKELY(expr)                      __builtin_expect                 (!!(expr),    1                  )
  |  |  ------------------
  |  |  |  Branch (1666:57): [True: 1.68k, False: 0]
  |  |  ------------------
  ------------------
18773|  1.68k|        {
18774|  1.68k|            return sax->number_integer(static_cast<number_integer_t>(number));
18775|  1.68k|        }
18776|      0|        if (value_in_range_of<number_unsigned_t>(number))
  ------------------
  |  Branch (18776:13): [True: 0, False: 0]
  ------------------
18777|      0|        {
18778|      0|            return sax->number_unsigned(static_cast<number_unsigned_t>(number));
18779|      0|        }
18780|       |        // std::isfinite has no integer overloads in MSVC's <cmath>
18781|      0|        return emit_float(static_cast<long double>(number));
18782|      0|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIiLb0EEEbRT_:
18739|  2.05k|    {
18740|       |        // read in the original format
18741|       |
18742|  2.05k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  2.05k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.05k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  2.05k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 2.05k]
  |  Branch (18746:34): [Folded, False: 2.00k]
  |  Branch (18746:57): [True: 2.00k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  2.05k|        return true;
18751|  2.05k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_numberIlLb0EEEbRT_:
18739|  1.93k|    {
18740|       |        // read in the original format
18741|       |
18742|  1.93k|        if (JSON_HEDLEY_UNLIKELY(!get_to(result, "number")))
  ------------------
  |  | 1667|  1.93k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.93k]
  |  |  ------------------
  ------------------
18743|      0|        {
18744|      0|            return false;
18745|      0|        }
18746|  1.93k|        if (is_little_endian != (InputIsLittleEndian || input_format == input_format_t::bjdata))
  ------------------
  |  Branch (18746:13): [True: 0, False: 1.93k]
  |  Branch (18746:34): [Folded, False: 1.87k]
  |  Branch (18746:57): [True: 1.87k, False: 0]
  ------------------
18747|      0|        {
18748|      0|            byte_swap(result);
18749|      0|        }
18750|  1.93k|        return true;
18751|  1.93k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE21parse_ubjson_internalEv:
17175|  10.9k|    {
17176|       |        // the key currently being read; hoisted out of the loop so that its
17177|       |        // capacity is reused across elements and across nesting levels
17178|  10.9k|        string_t key;
17179|       |
17180|       |        // the type marker of the value to read next
17181|  10.9k|        char_int_type prefix = get_ignore_noop();
17182|       |
17183|   144k|        while (true)
  ------------------
  |  Branch (17183:16): [True: 138k, Folded]
  ------------------
17184|   138k|        {
17185|   138k|            const std::size_t depth = container_stack.size();
17186|       |
17187|   138k|            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(prefix)))
  ------------------
  |  | 1667|   138k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 138k]
  |  |  ------------------
  ------------------
17188|      0|            {
17189|      0|                return false;
17190|      0|            }
17191|       |
17192|       |            // the value begun here is complete once it is not inside anything
17193|   138k|            if (container_stack.empty())
  ------------------
  |  Branch (17193:17): [True: 2.40k, False: 136k]
  ------------------
17194|  2.40k|            {
17195|  2.40k|                return true;
17196|  2.40k|            }
17197|       |
17198|       |            // a value was completed rather than a container opened; a
17199|       |            // container that ends at a marker needs the next byte to test
17200|   136k|            if (container_stack.size() == depth && container_stack.back().remaining == npos)
  ------------------
  |  Branch (17200:17): [True: 70.4k, False: 66.0k]
  |  Branch (17200:52): [True: 44.3k, False: 26.0k]
  ------------------
17201|  44.3k|            {
17202|  44.3k|                get_ignore_noop();
17203|  44.3k|            }
17204|       |
17205|       |            // advance to the next element, closing the containers that ended.
17206|       |            // top is a copy, not a reference: it must stay valid across the
17207|       |            // pop_back() below, which destroys the container_stack element it
17208|       |            // would otherwise alias.
17209|   136k|            for (;;)
17210|   171k|            {
17211|   171k|                const container_frame top = container_stack.back();
17212|       |
17213|   171k|                if (top.remaining != npos)
  ------------------
  |  Branch (17213:21): [True: 27.8k, False: 143k]
  ------------------
17214|  27.8k|                {
17215|  27.8k|                    if (top.remaining != 0)
  ------------------
  |  Branch (17215:25): [True: 26.9k, False: 972]
  ------------------
17216|  26.9k|                    {
17217|  26.9k|                        --container_stack.back().remaining;
17218|  26.9k|                        if (top.is_object)
  ------------------
  |  Branch (17218:29): [True: 213, False: 26.7k]
  ------------------
17219|    213|                        {
17220|    213|                            key.clear();
17221|    213|                            if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, true, "key") || !sax->key(key)))
  ------------------
  |  | 1667|    375|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 213]
  |  |  |  Branch (1667:94): [True: 51, False: 162]
  |  |  |  Branch (1667:94): [True: 0, False: 162]
  |  |  ------------------
  ------------------
17222|      0|                            {
17223|      0|                                return false;
17224|      0|                            }
17225|    213|                        }
17226|       |                        // an optimized container gives its elements no marker
17227|  26.9k|                        prefix = (top.type_marker != 0) ? top.type_marker : get_ignore_noop();
  ------------------
  |  Branch (17227:34): [True: 25.8k, False: 1.05k]
  ------------------
17228|  26.9k|                        break;
17229|  26.9k|                    }
17230|  27.8k|                }
17231|       |                // the end marker is compared against a literal rather than
17232|       |                // against a conditional expression, because char_int_type is
17233|       |                // unsigned for some input adapters and MSVC then reports the
17234|       |                // comparison as a signed/unsigned mismatch
17235|   143k|                else if (top.is_object ? (current != '}') : (current != ']'))
  ------------------
  |  Branch (17235:26): [True: 21.2k, False: 122k]
  |  Branch (17235:26): [True: 101k, False: 42.1k]
  ------------------
17236|   101k|                {
17237|       |                    // a container that ends at a marker is never optimized, so
17238|       |                    // every element carries its own marker; for an object the
17239|       |                    // byte tested above is the first byte of the key
17240|   101k|                    if (top.is_object)
  ------------------
  |  Branch (17240:25): [True: 15.3k, False: 86.4k]
  ------------------
17241|  15.3k|                    {
17242|  15.3k|                        key.clear();
17243|  15.3k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_string(key, false, "key") || !sax->key(key)))
  ------------------
  |  | 1667|  30.1k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 15.3k]
  |  |  |  Branch (1667:94): [True: 627, False: 14.7k]
  |  |  |  Branch (1667:94): [True: 0, False: 14.7k]
  |  |  ------------------
  ------------------
17244|      0|                        {
17245|      0|                            return false;
17246|      0|                        }
17247|  15.3k|                        prefix = get_ignore_noop();
17248|  15.3k|                    }
17249|  86.4k|                    else
17250|  86.4k|                    {
17251|  86.4k|                        prefix = current;
17252|  86.4k|                    }
17253|   101k|                    break;
17254|   101k|                }
17255|       |
17256|  43.0k|                if (JSON_HEDLEY_UNLIKELY(!leave_container()))
  ------------------
  |  | 1667|  43.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 43.0k]
  |  |  ------------------
  ------------------
17257|      0|                {
17258|      0|                    return false;
17259|      0|                }
17260|  43.0k|                if (container_stack.empty())
  ------------------
  |  Branch (17260:21): [True: 3.38k, False: 39.7k]
  ------------------
17261|  3.38k|                {
17262|  3.38k|                    return true;
17263|  3.38k|                }
17264|       |                // the container that just ended was an element of the one
17265|       |                // below it, which may need the next byte for its own test
17266|  39.7k|                if (container_stack.back().remaining == npos)
  ------------------
  |  Branch (17266:21): [True: 39.5k, False: 122]
  ------------------
17267|  39.5k|                {
17268|  39.5k|                    get_ignore_noop();
17269|  39.5k|                }
17270|  39.7k|            }
17271|   136k|        }
17272|  10.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE16get_ubjson_valueEi:
17761|   145k|    {
17762|   145k|        switch (prefix)
17763|   145k|        {
17764|    727|            case char_traits<char_type>::eof():  // EOF
  ------------------
  |  Branch (17764:13): [True: 727, False: 144k]
  ------------------
17765|    727|                return unexpect_eof("value");
17766|       |
17767|  6.85k|            case 'T':  // true
  ------------------
  |  Branch (17767:13): [True: 6.85k, False: 138k]
  ------------------
17768|  6.85k|                return sax->boolean(true);
17769|  8.01k|            case 'F':  // false
  ------------------
  |  Branch (17769:13): [True: 8.01k, False: 137k]
  ------------------
17770|  8.01k|                return sax->boolean(false);
17771|       |
17772|  9.91k|            case 'Z':  // null
  ------------------
  |  Branch (17772:13): [True: 9.91k, False: 135k]
  ------------------
17773|  9.91k|                return sax->null();
17774|       |
17775|    649|            case 'B':  // byte
  ------------------
  |  Branch (17775:13): [True: 649, False: 144k]
  ------------------
17776|    649|            {
17777|    649|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17777:21): [True: 0, False: 649]
  ------------------
17778|      0|                {
17779|      0|                    break;
17780|      0|                }
17781|    649|                std::uint8_t number{};
17782|    649|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17782:24): [True: 647, False: 2]
  |  Branch (17782:46): [True: 647, False: 0]
  ------------------
17783|    649|            }
17784|       |
17785|  4.53k|            case 'U':
  ------------------
  |  Branch (17785:13): [True: 4.53k, False: 140k]
  ------------------
17786|  4.53k|            {
17787|  4.53k|                std::uint8_t number{};
17788|  4.53k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17788:24): [True: 4.50k, False: 32]
  |  Branch (17788:46): [True: 4.50k, False: 0]
  ------------------
17789|    649|            }
17790|       |
17791|  3.21k|            case 'i':
  ------------------
  |  Branch (17791:13): [True: 3.21k, False: 141k]
  ------------------
17792|  3.21k|            {
17793|  3.21k|                std::int8_t number{};
17794|  3.21k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17794:24): [True: 3.20k, False: 11]
  |  Branch (17794:46): [True: 3.20k, False: 0]
  ------------------
17795|    649|            }
17796|       |
17797|  1.69k|            case 'I':
  ------------------
  |  Branch (17797:13): [True: 1.69k, False: 143k]
  ------------------
17798|  1.69k|            {
17799|  1.69k|                std::int16_t number{};
17800|  1.69k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17800:24): [True: 1.68k, False: 9]
  |  Branch (17800:46): [True: 1.68k, False: 0]
  ------------------
17801|    649|            }
17802|       |
17803|  1.17k|            case 'l':
  ------------------
  |  Branch (17803:13): [True: 1.17k, False: 144k]
  ------------------
17804|  1.17k|            {
17805|  1.17k|                std::int32_t number{};
17806|  1.17k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17806:24): [True: 1.14k, False: 21]
  |  Branch (17806:46): [True: 1.14k, False: 0]
  ------------------
17807|    649|            }
17808|       |
17809|  1.19k|            case 'L':
  ------------------
  |  Branch (17809:13): [True: 1.19k, False: 143k]
  ------------------
17810|  1.19k|            {
17811|  1.19k|                std::int64_t number{};
17812|  1.19k|                return get_number(number) && emit_signed(number);
  ------------------
  |  Branch (17812:24): [True: 1.18k, False: 13]
  |  Branch (17812:46): [True: 1.18k, False: 0]
  ------------------
17813|    649|            }
17814|       |
17815|  1.49k|            case 'u':
  ------------------
  |  Branch (17815:13): [True: 1.49k, False: 143k]
  ------------------
17816|  1.49k|            {
17817|  1.49k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17817:21): [True: 0, False: 1.49k]
  ------------------
17818|      0|                {
17819|      0|                    break;
17820|      0|                }
17821|  1.49k|                std::uint16_t number{};
17822|  1.49k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17822:24): [True: 1.46k, False: 27]
  |  Branch (17822:46): [True: 1.46k, False: 0]
  ------------------
17823|  1.49k|            }
17824|       |
17825|  1.03k|            case 'm':
  ------------------
  |  Branch (17825:13): [True: 1.03k, False: 144k]
  ------------------
17826|  1.03k|            {
17827|  1.03k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17827:21): [True: 0, False: 1.03k]
  ------------------
17828|      0|                {
17829|      0|                    break;
17830|      0|                }
17831|  1.03k|                std::uint32_t number{};
17832|  1.03k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17832:24): [True: 1.02k, False: 10]
  |  Branch (17832:46): [True: 1.02k, False: 0]
  ------------------
17833|  1.03k|            }
17834|       |
17835|  2.66k|            case 'M':
  ------------------
  |  Branch (17835:13): [True: 2.66k, False: 142k]
  ------------------
17836|  2.66k|            {
17837|  2.66k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17837:21): [True: 0, False: 2.66k]
  ------------------
17838|      0|                {
17839|      0|                    break;
17840|      0|                }
17841|  2.66k|                std::uint64_t number{};
17842|  2.66k|                return get_number(number) && emit_unsigned(number);
  ------------------
  |  Branch (17842:24): [True: 2.64k, False: 13]
  |  Branch (17842:46): [True: 2.64k, False: 0]
  ------------------
17843|  2.66k|            }
17844|       |
17845|  17.8k|            case 'h':
  ------------------
  |  Branch (17845:13): [True: 17.8k, False: 127k]
  ------------------
17846|  17.8k|            {
17847|  17.8k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17847:21): [True: 0, False: 17.8k]
  ------------------
17848|      0|                {
17849|      0|                    break;
17850|      0|                }
17851|  17.8k|                return get_half_float(true);
17852|  17.8k|            }
17853|       |
17854|  1.30k|            case 'd':
  ------------------
  |  Branch (17854:13): [True: 1.30k, False: 143k]
  ------------------
17855|  1.30k|            {
17856|  1.30k|                float number{};
17857|  1.30k|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (17857:24): [True: 1.29k, False: 15]
  |  Branch (17857:46): [True: 1.29k, False: 0]
  ------------------
17858|  17.8k|            }
17859|       |
17860|    877|            case 'D':
  ------------------
  |  Branch (17860:13): [True: 877, False: 144k]
  ------------------
17861|    877|            {
17862|    877|                double number{};
17863|    877|                return get_number(number) && emit_float(number);
  ------------------
  |  Branch (17863:24): [True: 861, False: 16]
  |  Branch (17863:46): [True: 861, False: 0]
  ------------------
17864|  17.8k|            }
17865|       |
17866|  6.70k|            case 'H':
  ------------------
  |  Branch (17866:13): [True: 6.70k, False: 138k]
  ------------------
17867|  6.70k|            {
17868|  6.70k|                return get_ubjson_high_precision_number();
17869|  17.8k|            }
17870|       |
17871|  5.35k|            case 'C':  // char
  ------------------
  |  Branch (17871:13): [True: 5.35k, False: 139k]
  ------------------
17872|  5.35k|            {
17873|  5.35k|                get();
17874|  5.35k|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("char")))
  ------------------
  |  | 1667|  5.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.35k]
  |  |  ------------------
  ------------------
17875|      0|                {
17876|      0|                    return false;
17877|      0|                }
17878|  5.35k|                if (JSON_HEDLEY_UNLIKELY(current > 127))
  ------------------
  |  | 1667|  5.35k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 5.34k]
  |  |  ------------------
  ------------------
17879|      8|                {
17880|      8|                    return last_byte_error(exception_id::invalid_string_or_size, "byte after 'C' must be in range 0x00..0x7F", "char", "");
17881|      8|                }
17882|  5.34k|                string_t s(1, static_cast<typename string_t::value_type>(current));
17883|  5.34k|                return sax->string(s);
17884|  5.35k|            }
17885|       |
17886|  3.39k|            case 'S':  // string
  ------------------
  |  Branch (17886:13): [True: 3.39k, False: 141k]
  ------------------
17887|  3.39k|            {
17888|  3.39k|                string_t s;
17889|  3.39k|                return get_ubjson_string(s) && sax->string(s);
  ------------------
  |  Branch (17889:24): [True: 3.19k, False: 204]
  |  Branch (17889:48): [True: 3.19k, False: 0]
  ------------------
17890|  5.35k|            }
17891|       |
17892|  58.3k|            case '[':  // array
  ------------------
  |  Branch (17892:13): [True: 58.3k, False: 86.8k]
  ------------------
17893|  58.3k|                return get_ubjson_array();
17894|       |
17895|  7.95k|            case '{':  // object
  ------------------
  |  Branch (17895:13): [True: 7.95k, False: 137k]
  ------------------
17896|  7.95k|                return get_ubjson_object();
17897|       |
17898|    181|            default: // anything else
  ------------------
  |  Branch (17898:13): [True: 181, False: 145k]
  ------------------
17899|    181|                break;
17900|   145k|        }
17901|    181|        return unexpected_byte("invalid byte", "value");
17902|   145k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE32get_ubjson_high_precision_numberEv:
18014|  6.70k|    {
18015|       |        // get the size of the following number string
18016|  6.70k|        std::size_t size{};
18017|  6.70k|        bool no_ndarray = true;
18018|  6.70k|        auto res = get_ubjson_size_value(size, no_ndarray);
18019|  6.70k|        if (JSON_HEDLEY_UNLIKELY(!res))
  ------------------
  |  | 1667|  6.70k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.70k]
  |  |  ------------------
  ------------------
18020|      0|        {
18021|      0|            return res;
18022|      0|        }
18023|       |
18024|       |        // get number string
18025|  6.70k|        std::vector<char> number_vector;
18026|  85.0k|        for (std::size_t i = 0; i < size; ++i)
  ------------------
  |  Branch (18026:33): [True: 78.3k, False: 6.70k]
  ------------------
18027|  78.3k|        {
18028|  78.3k|            get();
18029|  78.3k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("number")))
  ------------------
  |  | 1667|  78.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 78.3k]
  |  |  ------------------
  ------------------
18030|      0|            {
18031|      0|                return false;
18032|      0|            }
18033|       |            // the lexer would stop at a NUL and accept the digits before it
18034|  78.3k|            if (JSON_HEDLEY_UNLIKELY(current == '\0'))
  ------------------
  |  | 1667|  78.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 78.3k]
  |  |  ------------------
  ------------------
18035|      3|            {
18036|      3|                return sax->parse_error(chars_read, "00", parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18037|      3|                                        exception_message("invalid number text; last byte: 0x00", "high-precision number"), nullptr));
18038|      3|            }
18039|  78.3k|            number_vector.push_back(static_cast<char>(current));
18040|  78.3k|        }
18041|       |
18042|       |        // parse number string
18043|  6.70k|        using ia_type = decltype(detail::input_adapter(number_vector));
18044|  6.70k|        auto number_lexer = detail::lexer<BasicJsonType, ia_type>(detail::input_adapter(number_vector), false);
18045|  6.70k|        const auto result_number = number_lexer.scan();
18046|  6.70k|        const auto number_string = number_lexer.get_token_string();
18047|  6.70k|        const auto result_remainder = number_lexer.scan();
18048|       |
18049|  6.70k|        using token_type = typename detail::lexer_base<BasicJsonType>::token_type;
18050|       |
18051|  6.70k|        if (JSON_HEDLEY_UNLIKELY(result_remainder != token_type::end_of_input))
  ------------------
  |  | 1667|  6.70k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 1.12k, False: 5.57k]
  |  |  ------------------
  ------------------
18052|  1.12k|        {
18053|  1.12k|            return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18054|  1.12k|                                    exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
18055|  1.12k|        }
18056|       |
18057|  5.57k|        switch (result_number)
18058|  5.57k|        {
18059|    244|            case token_type::value_integer:
  ------------------
  |  Branch (18059:13): [True: 244, False: 5.32k]
  ------------------
18060|    244|                return sax->number_integer(number_lexer.get_number_integer());
18061|  1.90k|            case token_type::value_unsigned:
  ------------------
  |  Branch (18061:13): [True: 1.90k, False: 3.66k]
  ------------------
18062|  1.90k|                return sax->number_unsigned(number_lexer.get_number_unsigned());
18063|  2.46k|            case token_type::value_float:
  ------------------
  |  Branch (18063:13): [True: 2.46k, False: 3.10k]
  ------------------
18064|  2.46k|            {
18065|  2.46k|                const auto parsed_float = number_lexer.get_number_float();
18066|  2.46k|                if (JSON_HEDLEY_UNLIKELY(!std::isfinite(parsed_float)))
  ------------------
  |  | 1667|  2.46k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 52, False: 2.41k]
  |  |  ------------------
  ------------------
18067|     52|                {
18068|     52|                    return sax->parse_error(
18069|     52|                               chars_read,
18070|     52|                               number_string,
18071|     52|                               out_of_range::create(exception_id::number_overflow, concat("number overflow parsing '", number_string, '\''), nullptr));
18072|     52|                }
18073|       |                // number_string is a std::string, while the SAX interface takes a
18074|       |                // string_t; convert explicitly, as the two are only implicitly
18075|       |                // convertible for some string types
18076|  2.41k|                return sax->number_float(parsed_float, string_t(number_string.data(), number_string.size()));
18077|  2.46k|            }
18078|      0|            case token_type::uninitialized:
  ------------------
  |  Branch (18078:13): [True: 0, False: 5.57k]
  ------------------
18079|      1|            case token_type::literal_true:
  ------------------
  |  Branch (18079:13): [True: 1, False: 5.57k]
  ------------------
18080|      1|            case token_type::literal_false:
  ------------------
  |  Branch (18080:13): [True: 0, False: 5.57k]
  ------------------
18081|      2|            case token_type::literal_null:
  ------------------
  |  Branch (18081:13): [True: 1, False: 5.57k]
  ------------------
18082|      4|            case token_type::value_string:
  ------------------
  |  Branch (18082:13): [True: 2, False: 5.56k]
  ------------------
18083|      6|            case token_type::begin_array:
  ------------------
  |  Branch (18083:13): [True: 2, False: 5.56k]
  ------------------
18084|      7|            case token_type::begin_object:
  ------------------
  |  Branch (18084:13): [True: 1, False: 5.57k]
  ------------------
18085|      8|            case token_type::end_array:
  ------------------
  |  Branch (18085:13): [True: 1, False: 5.57k]
  ------------------
18086|      9|            case token_type::end_object:
  ------------------
  |  Branch (18086:13): [True: 1, False: 5.57k]
  ------------------
18087|     10|            case token_type::name_separator:
  ------------------
  |  Branch (18087:13): [True: 1, False: 5.57k]
  ------------------
18088|     11|            case token_type::value_separator:
  ------------------
  |  Branch (18088:13): [True: 1, False: 5.57k]
  ------------------
18089|    573|            case token_type::parse_error:
  ------------------
  |  Branch (18089:13): [True: 562, False: 5.00k]
  ------------------
18090|    612|            case token_type::end_of_input:
  ------------------
  |  Branch (18090:13): [True: 39, False: 5.53k]
  ------------------
18091|    612|            case token_type::literal_or_value:
  ------------------
  |  Branch (18091:13): [True: 0, False: 5.57k]
  ------------------
18092|    612|            default:
  ------------------
  |  Branch (18092:13): [True: 0, False: 5.57k]
  ------------------
18093|    612|                return sax->parse_error(chars_read, number_string, parse_error::create(exception_id::invalid_high_precision_number, chars_read,
18094|    612|                                        exception_message(concat("invalid number text: ", number_lexer.get_token_string()), "high-precision number"), nullptr));
18095|  5.57k|        }
18096|  5.57k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE21get_ubjson_size_valueERmRbii:
17503|  26.7k|    {
17504|  26.7k|        if (prefix == 0)
  ------------------
  |  Branch (17504:13): [True: 14.2k, False: 12.4k]
  ------------------
17505|  14.2k|        {
17506|  14.2k|            prefix = get_ignore_noop();
17507|  14.2k|        }
17508|       |
17509|  26.7k|        switch (prefix)
17510|  26.7k|        {
17511|  10.0k|            case 'U':
  ------------------
  |  Branch (17511:13): [True: 10.0k, False: 16.7k]
  ------------------
17512|  10.0k|            {
17513|  10.0k|                std::uint8_t number{};
17514|  10.0k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  10.0k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 10.0k]
  |  |  ------------------
  ------------------
17515|      0|                {
17516|      0|                    return false;
17517|      0|                }
17518|  10.0k|                result = static_cast<std::size_t>(number);
17519|  10.0k|                return true;
17520|  10.0k|            }
17521|       |
17522|  8.13k|            case 'i':
  ------------------
  |  Branch (17522:13): [True: 8.13k, False: 18.6k]
  ------------------
17523|  8.13k|                return get_ubjson_signed_count<std::int8_t>(result);
17524|       |
17525|  1.14k|            case 'I':
  ------------------
  |  Branch (17525:13): [True: 1.14k, False: 25.6k]
  ------------------
17526|  1.14k|                return get_ubjson_signed_count<std::int16_t>(result);
17527|       |
17528|    557|            case 'l':
  ------------------
  |  Branch (17528:13): [True: 557, False: 26.1k]
  ------------------
17529|    557|                return get_ubjson_signed_count<std::int32_t>(result);
17530|       |
17531|    363|            case 'L':
  ------------------
  |  Branch (17531:13): [True: 363, False: 26.3k]
  ------------------
17532|    363|                return get_ubjson_signed_count<std::int64_t>(result);
17533|       |
17534|  1.00k|            case 'u':
  ------------------
  |  Branch (17534:13): [True: 1.00k, False: 25.7k]
  ------------------
17535|  1.00k|            {
17536|  1.00k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17536:21): [True: 0, False: 1.00k]
  ------------------
17537|      0|                {
17538|      0|                    break;
17539|      0|                }
17540|  1.00k|                std::uint16_t number{};
17541|  1.00k|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.00k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.00k]
  |  |  ------------------
  ------------------
17542|      0|                {
17543|      0|                    return false;
17544|      0|                }
17545|  1.00k|                result = static_cast<std::size_t>(number);
17546|  1.00k|                return true;
17547|  1.00k|            }
17548|       |
17549|    521|            case 'm':
  ------------------
  |  Branch (17549:13): [True: 521, False: 26.2k]
  ------------------
17550|    521|            {
17551|    521|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17551:21): [True: 0, False: 521]
  ------------------
17552|      0|                {
17553|      0|                    break;
17554|      0|                }
17555|    521|                std::uint32_t number{};
17556|    521|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    521|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 521]
  |  |  ------------------
  ------------------
17557|      0|                {
17558|      0|                    return false;
17559|      0|                }
17560|    521|                result = conditional_static_cast<std::size_t>(number);
17561|    521|                return true;
17562|    521|            }
17563|       |
17564|    781|            case 'M':
  ------------------
  |  Branch (17564:13): [True: 781, False: 25.9k]
  ------------------
17565|    781|            {
17566|    781|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17566:21): [True: 0, False: 781]
  ------------------
17567|      0|                {
17568|      0|                    break;
17569|      0|                }
17570|    781|                std::uint64_t number{};
17571|    781|                if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    781|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 781]
  |  |  ------------------
  ------------------
17572|      0|                {
17573|      0|                    return false;
17574|      0|                }
17575|    781|                if (!value_in_range_of<std::size_t>(number))
  ------------------
  |  Branch (17575:21): [True: 0, False: 781]
  ------------------
17576|      0|                {
17577|      0|                    return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17578|      0|                }
17579|    781|                result = detail::conditional_static_cast<std::size_t>(number);
17580|    781|                return true;
17581|    781|            }
17582|       |
17583|  3.88k|            case '[':
  ------------------
  |  Branch (17583:13): [True: 3.88k, False: 22.8k]
  ------------------
17584|  3.88k|            {
17585|  3.88k|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17585:21): [True: 0, False: 3.88k]
  ------------------
17586|      0|                {
17587|      0|                    break;
17588|      0|                }
17589|  3.88k|                if (is_ndarray) // ndarray dimensional vector can only contain integers and cannot embed another array
  ------------------
  |  Branch (17589:21): [True: 6, False: 3.88k]
  ------------------
17590|      6|                {
17591|      6|                    return last_byte_error(exception_id::invalid_string_or_size, "ndarray dimensional vector is not allowed", "size");
17592|      6|                }
17593|  3.88k|                std::vector<size_t> dim;
17594|  3.88k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_ndarray_size(dim)))
  ------------------
  |  | 1667|  3.88k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.88k]
  |  |  ------------------
  ------------------
17595|      0|                {
17596|      0|                    return false;
17597|      0|                }
17598|  3.88k|                if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
  ------------------
  |  Branch (17598:21): [True: 650, False: 3.23k]
  |  Branch (17598:41): [True: 1.54k, False: 1.68k]
  |  Branch (17598:60): [True: 37, False: 1.50k]
  ------------------
17599|    310|                {
17600|    310|                    result = dim.at(dim.size() - 1);
17601|    310|                    return true;
17602|    310|                }
17603|  3.57k|                if (!dim.empty())  // if ndarray, convert to an object in JData annotated array format
  ------------------
  |  Branch (17603:21): [True: 2.27k, False: 1.29k]
  ------------------
17604|  2.27k|                {
17605|  2.27k|                    for (auto i : dim) // test if any dimension in an ndarray is 0, if so, return a 1D empty container
  ------------------
  |  Branch (17605:33): [True: 6.53k, False: 2.13k]
  ------------------
17606|  6.53k|                    {
17607|  6.53k|                        if ( i == 0 )
  ------------------
  |  Branch (17607:30): [True: 144, False: 6.38k]
  ------------------
17608|    144|                        {
17609|    144|                            result = 0;
17610|    144|                            return true;
17611|    144|                        }
17612|  6.53k|                    }
17613|       |
17614|  2.13k|                    if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3)))
  ------------------
  |  | 1667|  2.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.13k]
  |  |  ------------------
  ------------------
17615|      0|                    {
17616|      0|                        return false;
17617|      0|                    }
17618|       |
17619|       |                    // the element type precedes the dimension vector (see get_ubjson_size_type)
17620|       |                    // and is passed down as ndarray_dtype; emit it here so the annotation keys
17621|       |                    // follow the documented _ArrayType_, _ArraySize_, _ArrayData_ order
17622|  2.13k|                    if (ndarray_dtype != 0)
  ------------------
  |  Branch (17622:25): [True: 1.98k, False: 147]
  ------------------
17623|  1.98k|                    {
17624|  1.98k|                        const char* type_name = bjd_type_name(ndarray_dtype);
17625|  1.98k|                        if (JSON_HEDLEY_UNLIKELY(type_name == nullptr))
  ------------------
  |  | 1667|  1.98k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 1.98k]
  |  |  ------------------
  ------------------
17626|      3|                        {
17627|      3|                            return unexpected_byte("invalid byte", "type");
17628|      3|                        }
17629|       |
17630|  1.98k|                        string_t type_key = "_ArrayType_";
17631|  1.98k|                        string_t type = type_name; // sax->string() takes a reference
17632|  1.98k|                        if (JSON_HEDLEY_UNLIKELY(!sax->key(type_key) || !sax->string(type)))
  ------------------
  |  | 1667|  3.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  ------------------
  ------------------
17633|      0|                        {
17634|      0|                            return false;
17635|      0|                        }
17636|  1.98k|                    }
17637|       |
17638|  2.13k|                    string_t key = "_ArraySize_";
17639|  2.13k|                    if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(dim.size())))
  ------------------
  |  | 1667|  4.26k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 2.13k]
  |  |  |  Branch (1667:94): [True: 0, False: 2.13k]
  |  |  |  Branch (1667:94): [True: 0, False: 2.13k]
  |  |  ------------------
  ------------------
17640|      0|                    {
17641|      0|                        return false;
17642|      0|                    }
17643|  2.13k|                    result = 1;
17644|  2.13k|                    for (auto i : dim)
  ------------------
  |  Branch (17644:33): [True: 5.82k, False: 2.06k]
  ------------------
17645|  5.82k|                    {
17646|       |                        // Pre-multiplication overflow check: since the loop above
17647|       |                        // already rejected any zero dimension, i is always > 0
17648|       |                        // here, so result > SIZE_MAX/i means result*i would
17649|       |                        // overflow. This check must happen before multiplication
17650|       |                        // since overflow detection after the fact is unreliable,
17651|       |                        // as modular arithmetic can produce any value, not just 0
17652|       |                        // or SIZE_MAX.
17653|  5.82k|                        if (JSON_HEDLEY_UNLIKELY(result > (std::numeric_limits<std::size_t>::max)() / i))
  ------------------
  |  | 1667|  5.82k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 69, False: 5.75k]
  |  |  ------------------
  ------------------
17654|     69|                        {
17655|     69|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
17656|     69|                        }
17657|  5.75k|                        result *= i;
17658|       |                        // the pre-check above already rules out result becoming 0
17659|       |                        // by overflow; the only value it cannot rule out is an
17660|       |                        // exact match with npos, the sentinel reserved for an
17661|       |                        // unknown-size container (see get_ubjson_size_type())
17662|  5.75k|                        if (result == npos)
  ------------------
  |  Branch (17662:29): [True: 1, False: 5.75k]
  ------------------
17663|      1|                        {
17664|      1|                            return out_of_range_error(exception_id::container_too_large, "excessive ndarray size caused overflow", "size");
17665|      1|                        }
17666|  5.75k|                        if (JSON_HEDLEY_UNLIKELY(!emit_unsigned(i)))
  ------------------
  |  | 1667|  5.75k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.75k]
  |  |  ------------------
  ------------------
17667|      0|                        {
17668|      0|                            return false;
17669|      0|                        }
17670|  5.75k|                    }
17671|  2.06k|                    is_ndarray = true;
17672|  2.06k|                    return sax->end_array();
17673|  2.13k|                }
17674|  1.29k|                result = 0;
17675|  1.29k|                return true;
17676|  3.57k|            }
17677|       |
17678|    304|            default:
  ------------------
  |  Branch (17678:13): [True: 304, False: 26.4k]
  ------------------
17679|    304|                break;
17680|  26.7k|        }
17681|    304|        return length_type_error(" after '#'", "size");
17682|  26.7k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_signed_countIaEEbRm:
17468|  8.13k|    {
17469|  8.13k|        SignedType number{};
17470|  8.13k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 8.13k]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|  8.13k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 8.13k]
  |  |  ------------------
  ------------------
17475|      8|        {
17476|      8|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|      8|        }
17478|  8.13k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|  8.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 8.13k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|  8.13k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|  8.13k|        return true;
17484|  8.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_signed_countIsEEbRm:
17468|  1.14k|    {
17469|  1.14k|        SignedType number{};
17470|  1.14k|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|  1.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.14k]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|  1.14k|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|  1.14k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 8, False: 1.13k]
  |  |  ------------------
  ------------------
17475|      8|        {
17476|      8|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|      8|        }
17478|  1.13k|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|  1.13k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.13k]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|  1.13k|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|  1.13k|        return true;
17484|  1.13k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_signed_countIiEEbRm:
17468|    557|    {
17469|    557|        SignedType number{};
17470|    557|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    557|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 557]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|    557|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|    557|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 33, False: 524]
  |  |  ------------------
  ------------------
17475|     33|        {
17476|     33|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     33|        }
17478|    524|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|    524|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 524]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|    524|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|    524|        return true;
17484|    524|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_signed_countIlEEbRm:
17468|    363|    {
17469|    363|        SignedType number{};
17470|    363|        if (JSON_HEDLEY_UNLIKELY(!get_number(number)))
  ------------------
  |  | 1667|    363|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 363]
  |  |  ------------------
  ------------------
17471|      0|        {
17472|      0|            return false;
17473|      0|        }
17474|    363|        if (JSON_HEDLEY_UNLIKELY(number < 0))
  ------------------
  |  | 1667|    363|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 68, False: 295]
  |  |  ------------------
  ------------------
17475|     68|        {
17476|     68|            return last_byte_error(exception_id::invalid_string_or_size, "count in an optimized container must be positive", "size");
17477|     68|        }
17478|    295|        if (JSON_HEDLEY_UNLIKELY(!value_in_range_of<std::size_t>(number)))
  ------------------
  |  | 1667|    295|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 295]
  |  |  ------------------
  ------------------
17479|      0|        {
17480|      0|            return out_of_range_error(exception_id::container_too_large, "integer value overflow", "size");
17481|      0|        }
17482|    295|        result = static_cast<std::size_t>(number); // NOLINT(bugprone-signed-char-misuse,cert-str34-c): number is not a char
17483|    295|        return true;
17484|    295|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE23get_ubjson_ndarray_sizeERNS6_ImNSA_ImEEEE:
17399|  3.88k|    {
17400|  3.88k|        std::pair<std::size_t, char_int_type> size_and_type;
17401|  3.88k|        size_t dimlen = 0;
17402|  3.88k|        bool no_ndarray = true;
17403|       |
17404|  3.88k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type, no_ndarray)))
  ------------------
  |  | 1667|  3.88k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 3.88k]
  |  |  ------------------
  ------------------
17405|      0|        {
17406|      0|            return false;
17407|      0|        }
17408|       |
17409|  3.88k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (17409:13): [True: 708, False: 3.17k]
  ------------------
17410|    708|        {
17411|    708|            if (size_and_type.second != 0)
  ------------------
  |  Branch (17411:17): [True: 415, False: 293]
  ------------------
17412|    415|            {
17413|    415|                if (size_and_type.second != 'N')
  ------------------
  |  Branch (17413:21): [True: 415, False: 0]
  ------------------
17414|    415|                {
17415|  6.94k|                    for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17415:45): [True: 6.52k, False: 415]
  ------------------
17416|  6.52k|                    {
17417|  6.52k|                        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, size_and_type.second)))
  ------------------
  |  | 1667|  6.52k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.52k]
  |  |  ------------------
  ------------------
17418|      0|                        {
17419|      0|                            return false;
17420|      0|                        }
17421|  6.52k|                        dim.push_back(dimlen);
17422|  6.52k|                    }
17423|    415|                }
17424|    415|            }
17425|    293|            else
17426|    293|            {
17427|    851|                for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17427:41): [True: 558, False: 293]
  ------------------
17428|    558|                {
17429|    558|                    if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray)))
  ------------------
  |  | 1667|    558|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 558]
  |  |  ------------------
  ------------------
17430|      0|                    {
17431|      0|                        return false;
17432|      0|                    }
17433|    558|                    dim.push_back(dimlen);
17434|    558|                }
17435|    293|            }
17436|    708|        }
17437|  3.17k|        else
17438|  3.17k|        {
17439|  9.12k|            while (current != ']')
  ------------------
  |  Branch (17439:20): [True: 5.94k, False: 3.17k]
  ------------------
17440|  5.94k|            {
17441|  5.94k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_value(dimlen, no_ndarray, current)))
  ------------------
  |  | 1667|  5.94k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 5.94k]
  |  |  ------------------
  ------------------
17442|      0|                {
17443|      0|                    return false;
17444|      0|                }
17445|  5.94k|                dim.push_back(dimlen);
17446|  5.94k|                get_ignore_noop();
17447|  5.94k|            }
17448|  3.17k|        }
17449|  3.88k|        return true;
17450|  3.88k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE20get_ubjson_size_typeERNS4_4pairImiEEb:
17696|  70.2k|    {
17697|  70.2k|        result.first = npos; // size
17698|  70.2k|        result.second = 0; // type
17699|       |        // seed the flag with the caller's context: inside an ndarray dimension
17700|       |        // vector another ndarray is not allowed, and get_ubjson_size_value()
17701|       |        // rejects it up front instead of reading it and reporting afterwards.
17702|       |        // Seeding it with `false` made every '#' of a "[#[#[..." chain descend
17703|       |        // another level, which overflowed the stack (see #5104).
17704|  70.2k|        bool is_ndarray = inside_ndarray;
17705|       |
17706|  70.2k|        get_ignore_noop();
17707|       |
17708|  70.2k|        if (current == '$')
  ------------------
  |  Branch (17708:13): [True: 4.97k, False: 65.2k]
  ------------------
17709|  4.97k|        {
17710|  4.97k|            result.second = get();  // must not ignore 'N', because 'N' maybe the type
17711|  4.97k|            if (input_format == input_format_t::bjdata
  ------------------
  |  Branch (17711:17): [True: 4.97k, False: 0]
  ------------------
17712|  4.97k|                    && JSON_HEDLEY_UNLIKELY(is_bjd_excluded_optimized_type(result.second)))
  ------------------
  |  | 1667|  4.97k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 9, False: 4.96k]
  |  |  ------------------
  ------------------
17713|      9|            {
17714|      9|                return optimized_type_error();
17715|      9|            }
17716|       |
17717|  4.96k|            if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("type")))
  ------------------
  |  | 1667|  4.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 4.96k]
  |  |  ------------------
  ------------------
17718|      0|            {
17719|      0|                return false;
17720|      0|            }
17721|       |
17722|  4.96k|            get_ignore_noop();
17723|  4.96k|            if (JSON_HEDLEY_UNLIKELY(current != '#'))
  ------------------
  |  | 1667|  4.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 56, False: 4.90k]
  |  |  ------------------
  ------------------
17724|     56|            {
17725|     56|                if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1667|     56|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 56]
  |  |  ------------------
  ------------------
17726|      0|                {
17727|      0|                    return false;
17728|      0|                }
17729|     56|                return last_byte_error(exception_id::unexpected_byte, "expected '#' after type information", "size", "");
17730|     56|            }
17731|       |
17732|  4.90k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray, 0, result.second);
17733|       |            // an ndarray was read here only if the flag flipped; when it was
17734|       |            // seeded true, get_ubjson_size_value() already rejected the nested
17735|       |            // dimension vector
17736|  4.90k|            if (input_format == input_format_t::bjdata && is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (17736:17): [True: 4.86k, False: 40]
  |  Branch (17736:59): [True: 2.39k, False: 2.46k]
  |  Branch (17736:73): [True: 1.98k, False: 415]
  ------------------
17737|  1.98k|            {
17738|  1.98k|                result.second |= (1 << 8); // use bit 8 to indicate ndarray, all UBJSON and BJData markers should be ASCII letters
17739|  1.98k|            }
17740|  4.90k|            return is_error;
17741|  4.96k|        }
17742|       |
17743|  65.2k|        if (current == '#')
  ------------------
  |  Branch (17743:13): [True: 2.11k, False: 63.1k]
  ------------------
17744|  2.11k|        {
17745|  2.11k|            const bool is_error = get_ubjson_size_value(result.first, is_ndarray);
17746|  2.11k|            if (input_format == input_format_t::bjdata && is_ndarray && !inside_ndarray)
  ------------------
  |  Branch (17746:17): [True: 1.67k, False: 434]
  |  Branch (17746:59): [True: 372, False: 1.30k]
  |  Branch (17746:73): [True: 78, False: 294]
  ------------------
17747|     78|            {
17748|     78|                return last_byte_error(exception_id::unexpected_byte, "ndarray requires both type and size", "size");
17749|     78|            }
17750|  2.03k|            return is_error;
17751|  2.11k|        }
17752|       |
17753|  63.1k|        return true;
17754|  65.2k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE30is_bjd_excluded_optimized_typeEi:
19242|  4.97k|    {
19243|  4.97k|        return marker == '[' || marker == '{' || marker == 'S' || marker == 'H'
  ------------------
  |  Branch (19243:16): [True: 2, False: 4.97k]
  |  Branch (19243:33): [True: 1, False: 4.97k]
  |  Branch (19243:50): [True: 1, False: 4.96k]
  |  Branch (19243:67): [True: 1, False: 4.96k]
  ------------------
19244|  4.96k|               || marker == 'T' || marker == 'F' || marker == 'N' || marker == 'Z';
  ------------------
  |  Branch (19244:19): [True: 1, False: 4.96k]
  |  Branch (19244:36): [True: 1, False: 4.96k]
  |  Branch (19244:53): [True: 1, False: 4.96k]
  |  Branch (19244:70): [True: 1, False: 4.96k]
  ------------------
19245|  4.97k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE20optimized_type_errorEv:
19081|      9|    {
19082|      9|        return last_byte_error(exception_id::unexpected_byte, concat("marker 0x", get_token_string(), " is not a permitted optimized array type"), "type");
19083|      9|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE13bjd_type_nameEi:
19256|  1.98k|    {
19257|  1.98k|        switch (marker)
19258|  1.98k|        {
19259|    378|            case 'B':
  ------------------
  |  Branch (19259:13): [True: 378, False: 1.61k]
  ------------------
19260|    378|                return "byte";
19261|    218|            case 'C':
  ------------------
  |  Branch (19261:13): [True: 218, False: 1.77k]
  ------------------
19262|    218|                return "char";
19263|    121|            case 'D':
  ------------------
  |  Branch (19263:13): [True: 121, False: 1.86k]
  ------------------
19264|    121|                return "double";
19265|    108|            case 'I':
  ------------------
  |  Branch (19265:13): [True: 108, False: 1.88k]
  ------------------
19266|    108|                return "int16";
19267|     82|            case 'L':
  ------------------
  |  Branch (19267:13): [True: 82, False: 1.90k]
  ------------------
19268|     82|                return "int64";
19269|     80|            case 'M':
  ------------------
  |  Branch (19269:13): [True: 80, False: 1.90k]
  ------------------
19270|     80|                return "uint64";
19271|    220|            case 'U':
  ------------------
  |  Branch (19271:13): [True: 220, False: 1.76k]
  ------------------
19272|    220|                return "uint8";
19273|    114|            case 'd':
  ------------------
  |  Branch (19273:13): [True: 114, False: 1.87k]
  ------------------
19274|    114|                return "single";
19275|    319|            case 'i':
  ------------------
  |  Branch (19275:13): [True: 319, False: 1.66k]
  ------------------
19276|    319|                return "int8";
19277|    127|            case 'l':
  ------------------
  |  Branch (19277:13): [True: 127, False: 1.86k]
  ------------------
19278|    127|                return "int32";
19279|     92|            case 'm':
  ------------------
  |  Branch (19279:13): [True: 92, False: 1.89k]
  ------------------
19280|     92|                return "uint32";
19281|    126|            case 'u':
  ------------------
  |  Branch (19281:13): [True: 126, False: 1.86k]
  ------------------
19282|    126|                return "uint16";
19283|      3|            default:
  ------------------
  |  Branch (19283:13): [True: 3, False: 1.98k]
  ------------------
19284|      3|                return nullptr;
19285|  1.98k|        }
19286|  1.98k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE17length_type_errorEPKcSM_:
19142|    400|    {
19143|    400|        const char* types = input_format == input_format_t::bjdata ? "U, i, u, I, m, l, M, L" : "U, i, I, l, L";
  ------------------
  |  Branch (19143:29): [True: 400, False: 0]
  ------------------
19144|    400|        return last_byte_error(exception_id::invalid_string_or_size,
19145|    400|                               concat("expected length type specification (", types, ")", position, "; last byte: 0x", get_token_string()), context);
19146|    400|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE16get_ubjson_arrayEv:
17908|  58.3k|    {
17909|  58.3k|        std::pair<std::size_t, char_int_type> size_and_type;
17910|  58.3k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1667|  58.3k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 58.3k]
  |  |  ------------------
  ------------------
17911|      0|        {
17912|      0|            return false;
17913|      0|        }
17914|       |
17915|       |        // if bit-8 of size_and_type.second is set to 1, encode bjdata ndarray as an object in JData annotated array format (https://github.com/NeuroJSON/jdata):
17916|       |        // {"_ArrayType_" : "typeid", "_ArraySize_" : [n1, n2, ...], "_ArrayData_" : [v1, v2, ...]}
17917|       |
17918|  58.3k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (17918:13): [True: 57.8k, False: 510]
  |  Branch (17918:55): [True: 5.54k, False: 52.3k]
  |  Branch (17918:86): [True: 1.98k, False: 3.56k]
  ------------------
17919|  1.98k|        {
17920|  1.98k|            size_and_type.second &= ~(static_cast<char_int_type>(1) << 8);  // use bit 8 to indicate ndarray, here we remove the bit to restore the type marker
17921|       |
17922|       |            // the "_ArrayType_" and "_ArraySize_" annotation keys were already emitted by
17923|       |            // get_ubjson_size_value() (the type marker is known before the dimension vector
17924|       |            // that determines size_and_type.first is read, so it is emitted first there to
17925|       |            // match the documented _ArrayType_, _ArraySize_, _ArrayData_ key order)
17926|  1.98k|            if (size_and_type.second == 'C' || size_and_type.second == 'B')
  ------------------
  |  Branch (17926:17): [True: 217, False: 1.76k]
  |  Branch (17926:48): [True: 377, False: 1.38k]
  ------------------
17927|    594|            {
17928|    594|                size_and_type.second = 'U';
17929|    594|            }
17930|       |
17931|  1.98k|            string_t key = "_ArrayData_";
17932|  1.98k|            if (JSON_HEDLEY_UNLIKELY(!sax->key(key) || !sax->start_array(size_and_type.first) ))
  ------------------
  |  | 1667|  3.96k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.98k]
  |  |  |  Branch (1667:94): [True: 1, False: 1.97k]
  |  |  ------------------
  ------------------
17933|      0|            {
17934|      0|                return false;
17935|      0|            }
17936|       |
17937|  8.23k|            for (std::size_t i = 0; i < size_and_type.first; ++i)
  ------------------
  |  Branch (17937:37): [True: 6.25k, False: 1.98k]
  ------------------
17938|  6.25k|            {
17939|  6.25k|                if (JSON_HEDLEY_UNLIKELY(!get_ubjson_value(size_and_type.second)))
  ------------------
  |  | 1667|  6.25k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 6.25k]
  |  |  ------------------
  ------------------
17940|      0|                {
17941|      0|                    return false;
17942|      0|                }
17943|  6.25k|            }
17944|       |
17945|  1.98k|            return (sax->end_array() && sax->end_object());
  ------------------
  |  Branch (17945:21): [True: 1.89k, False: 89]
  |  Branch (17945:41): [True: 1.89k, False: 0]
  ------------------
17946|  1.98k|        }
17947|       |
17948|       |        // If BJData type marker is 'B' decode as binary
17949|  56.3k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && size_and_type.second == 'B')
  ------------------
  |  Branch (17949:13): [True: 55.8k, False: 510]
  |  Branch (17949:55): [True: 3.56k, False: 52.3k]
  |  Branch (17949:86): [True: 1.87k, False: 1.69k]
  ------------------
17950|  1.87k|        {
17951|  1.87k|            binary_t result;
17952|  1.87k|            return get_binary(size_and_type.first, result) && sax->binary(result);
  ------------------
  |  Branch (17952:20): [True: 1.75k, False: 117]
  |  Branch (17952:63): [True: 1.75k, False: 0]
  ------------------
17953|  1.87k|        }
17954|       |
17955|  54.5k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (17955:13): [True: 1.69k, False: 52.8k]
  ------------------
17956|  1.69k|        {
17957|       |            // reading an element of a valueless type consumes no input, so the
17958|       |            // declared count alone decides how much is allocated; the check is
17959|       |            // made before the start event so that no container is opened that
17960|       |            // is then abandoned. See @ref max_valueless_container_size.
17961|  1.69k|            if (JSON_HEDLEY_UNLIKELY((size_and_type.second == 'Z' || size_and_type.second == 'T' || size_and_type.second == 'F')
  ------------------
  |  | 1667|  8.45k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 1.69k]
  |  |  |  Branch (1667:94): [True: 0, False: 0]
  |  |  ------------------
  ------------------
17962|  1.69k|                                     && size_and_type.first > max_valueless_container_size))
17963|      0|            {
17964|      0|                return out_of_range_error(exception_id::container_too_large, "excessive array size", "size");
17965|      0|            }
17966|       |
17967|  1.69k|            if (JSON_HEDLEY_UNLIKELY(!enter_array(size_and_type.first, size_and_type.second)))
  ------------------
  |  | 1667|  1.69k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 1.69k]
  |  |  ------------------
  ------------------
17968|      0|            {
17969|      0|                return false;
17970|      0|            }
17971|       |
17972|  1.69k|            if (size_and_type.second == 'N')
  ------------------
  |  Branch (17972:17): [True: 0, False: 1.69k]
  ------------------
17973|      0|            {
17974|       |                // a no-op is not a value, so a container of them holds none;
17975|       |                // the declared size has already been passed to the SAX parser
17976|      0|                container_stack.back().remaining = 0;
17977|      0|            }
17978|       |
17979|  1.69k|            return true;
17980|  1.69k|        }
17981|       |
17982|  52.8k|        return enter_array(detail::unknown_size());
17983|  54.5k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE17get_ubjson_objectEv:
17989|  7.95k|    {
17990|  7.95k|        std::pair<std::size_t, char_int_type> size_and_type;
17991|  7.95k|        if (JSON_HEDLEY_UNLIKELY(!get_ubjson_size_type(size_and_type)))
  ------------------
  |  | 1667|  7.95k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 7.95k]
  |  |  ------------------
  ------------------
17992|      0|        {
17993|      0|            return false;
17994|      0|        }
17995|       |
17996|       |        // do not accept ND-array size in objects in BJData
17997|  7.95k|        if (input_format == input_format_t::bjdata && size_and_type.first != npos && (size_and_type.second & (1 << 8)) != 0)
  ------------------
  |  Branch (17997:13): [True: 7.85k, False: 99]
  |  Branch (17997:55): [True: 215, False: 7.64k]
  |  Branch (17997:86): [True: 4, False: 211]
  ------------------
17998|      4|        {
17999|      4|            return last_byte_error(exception_id::unexpected_byte, "BJData object does not support ND-array size in optimized format", "object");
18000|      4|        }
18001|       |
18002|  7.95k|        if (size_and_type.first != npos)
  ------------------
  |  Branch (18002:13): [True: 211, False: 7.73k]
  ------------------
18003|    211|        {
18004|    211|            return enter_object(size_and_type.first, size_and_type.second);
18005|    211|        }
18006|       |
18007|  7.73k|        return enter_object(detail::unknown_size());
18008|  7.95k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE17get_ubjson_stringERSC_bPKc:
17311|  18.9k|    {
17312|  18.9k|        if (get_char)
  ------------------
  |  Branch (17312:13): [True: 3.61k, False: 15.3k]
  ------------------
17313|  3.61k|        {
17314|       |            // no get_ignore_noop() here: the byte read next must be a string
17315|       |            // length type specification, and a no-op ('N') is not valid in
17316|       |            // that position. No-ops at positions where a value may appear are
17317|       |            // already consumed by the callers via get_ignore_noop().
17318|  3.61k|            get();
17319|  3.61k|        }
17320|       |
17321|  18.9k|        if (JSON_HEDLEY_UNLIKELY(!unexpect_eof("value")))
  ------------------
  |  | 1667|  18.9k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 0, False: 18.9k]
  |  |  ------------------
  ------------------
17322|      0|        {
17323|      0|            return false;
17324|      0|        }
17325|       |
17326|  18.9k|        switch (current)
17327|  18.9k|        {
17328|  12.8k|            case 'U':
  ------------------
  |  Branch (17328:13): [True: 12.8k, False: 6.08k]
  ------------------
17329|  12.8k|            {
17330|  12.8k|                std::uint8_t len{};
17331|  12.8k|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17331:24): [True: 12.8k, False: 4]
  |  Branch (17331:43): [True: 12.8k, False: 34]
  |  Branch (17331:70): [True: 12.8k, False: 0]
  ------------------
17332|      0|            }
17333|       |
17334|  3.67k|            case 'i':
  ------------------
  |  Branch (17334:13): [True: 3.67k, False: 15.3k]
  ------------------
17335|  3.67k|            {
17336|  3.67k|                std::int8_t len{};
17337|  3.67k|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17337:24): [True: 3.67k, False: 1]
  |  Branch (17337:43): [True: 3.67k, False: 6]
  |  Branch (17337:78): [True: 3.64k, False: 27]
  |  Branch (17337:105): [True: 3.64k, False: 0]
  ------------------
17338|      0|            }
17339|       |
17340|    453|            case 'I':
  ------------------
  |  Branch (17340:13): [True: 453, False: 18.5k]
  ------------------
17341|    453|            {
17342|    453|                std::int16_t len{};
17343|    453|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17343:24): [True: 451, False: 2]
  |  Branch (17343:43): [True: 448, False: 3]
  |  Branch (17343:78): [True: 403, False: 45]
  |  Branch (17343:105): [True: 403, False: 0]
  ------------------
17344|      0|            }
17345|       |
17346|    329|            case 'l':
  ------------------
  |  Branch (17346:13): [True: 329, False: 18.6k]
  ------------------
17347|    329|            {
17348|    329|                std::int32_t len{};
17349|    329|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17349:24): [True: 324, False: 5]
  |  Branch (17349:43): [True: 293, False: 31]
  |  Branch (17349:78): [True: 231, False: 62]
  |  Branch (17349:105): [True: 231, False: 0]
  ------------------
17350|      0|            }
17351|       |
17352|    370|            case 'L':
  ------------------
  |  Branch (17352:13): [True: 370, False: 18.6k]
  ------------------
17353|    370|            {
17354|    370|                std::int64_t len{};
17355|    370|                return get_number(len) && check_ubjson_string_length(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17355:24): [True: 360, False: 10]
  |  Branch (17355:43): [True: 296, False: 64]
  |  Branch (17355:78): [True: 199, False: 97]
  |  Branch (17355:105): [True: 199, False: 0]
  ------------------
17356|      0|            }
17357|       |
17358|    442|            case 'u':
  ------------------
  |  Branch (17358:13): [True: 442, False: 18.5k]
  ------------------
17359|    442|            {
17360|    442|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17360:21): [True: 0, False: 442]
  ------------------
17361|      0|                {
17362|      0|                    break;
17363|      0|                }
17364|    442|                std::uint16_t len{};
17365|    442|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17365:24): [True: 439, False: 3]
  |  Branch (17365:43): [True: 387, False: 52]
  |  Branch (17365:70): [True: 387, False: 0]
  ------------------
17366|    442|            }
17367|       |
17368|    286|            case 'm':
  ------------------
  |  Branch (17368:13): [True: 286, False: 18.6k]
  ------------------
17369|    286|            {
17370|    286|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17370:21): [True: 0, False: 286]
  ------------------
17371|      0|                {
17372|      0|                    break;
17373|      0|                }
17374|    286|                std::uint32_t len{};
17375|    286|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17375:24): [True: 281, False: 5]
  |  Branch (17375:43): [True: 202, False: 79]
  |  Branch (17375:70): [True: 202, False: 0]
  ------------------
17376|    286|            }
17377|       |
17378|    316|            case 'M':
  ------------------
  |  Branch (17378:13): [True: 316, False: 18.6k]
  ------------------
17379|    316|            {
17380|    316|                if (input_format != input_format_t::bjdata)
  ------------------
  |  Branch (17380:21): [True: 0, False: 316]
  ------------------
17381|      0|                {
17382|      0|                    break;
17383|      0|                }
17384|    316|                std::uint64_t len{};
17385|    316|                return get_number(len) && get_string(len, result) && check_string_utf8(result, context);
  ------------------
  |  Branch (17385:24): [True: 308, False: 8]
  |  Branch (17385:43): [True: 178, False: 130]
  |  Branch (17385:70): [True: 178, False: 0]
  ------------------
17386|    316|            }
17387|       |
17388|     96|            default:
  ------------------
  |  Branch (17388:13): [True: 96, False: 18.8k]
  ------------------
17389|     96|                break;
17390|  18.9k|        }
17391|     96|        return length_type_error("", "string");
17392|  18.9k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE26check_ubjson_string_lengthIaEEbT_:
17288|  3.67k|    {
17289|  3.67k|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|  3.67k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 6, False: 3.67k]
  |  |  ------------------
  ------------------
17290|      6|        {
17291|      6|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|      6|        }
17293|  3.67k|        return true;
17294|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIaEEbT_RSC_:
18910|  3.67k|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|  3.67k|        return get_bytes(len, "string", result);
18921|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIaSC_EEbT_PKcRT0_:
18998|  3.67k|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|  3.67k|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|  7.23k|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 3.59k, False: 3.64k]
  ------------------
19003|  3.59k|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|  3.59k|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 3.59k, False: 0]
  ------------------
19007|  3.59k|                                       ? static_cast<std::size_t>(len)
19008|  3.59k|                                       : chunk_size;
19009|  3.59k|            const std::size_t old_size = result.size();
19010|  3.59k|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|  3.59k|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|  3.59k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 3.59k, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|  3.59k|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|  3.59k|            chars_read += bytes_read;
19018|  3.59k|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|  3.59k|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 27, False: 3.56k]
  |  |  ------------------
  ------------------
19019|     27|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     27|                result.resize(old_size + bytes_read);
19024|     27|                ++chars_read;
19025|     27|                current = char_traits<char_type>::eof();
19026|     27|                return unexpect_eof(context);
19027|     27|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|  3.56k|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|  3.56k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 3.56k, False: 0]
  ------------------
19030|  3.56k|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|  3.56k|        }
19032|  3.64k|        return true;
19033|  3.67k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE26check_ubjson_string_lengthIsEEbT_:
17288|    451|    {
17289|    451|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    451|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 3, False: 448]
  |  |  ------------------
  ------------------
17290|      3|        {
17291|      3|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|      3|        }
17293|    448|        return true;
17294|    451|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIsEEbT_RSC_:
18910|    448|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    448|        return get_bytes(len, "string", result);
18921|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIsSC_EEbT_PKcRT0_:
18998|    448|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    448|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    820|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 417, False: 403]
  ------------------
19003|    417|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    417|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 396, False: 21]
  ------------------
19007|    417|                                       ? static_cast<std::size_t>(len)
19008|    417|                                       : chunk_size;
19009|    417|            const std::size_t old_size = result.size();
19010|    417|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    417|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    417|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 417, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    417|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    417|            chars_read += bytes_read;
19018|    417|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    417|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 45, False: 372]
  |  |  ------------------
  ------------------
19019|     45|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     45|                result.resize(old_size + bytes_read);
19024|     45|                ++chars_read;
19025|     45|                current = char_traits<char_type>::eof();
19026|     45|                return unexpect_eof(context);
19027|     45|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    372|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    372|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 372, False: 0]
  ------------------
19030|    372|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    372|        }
19032|    403|        return true;
19033|    448|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE26check_ubjson_string_lengthIiEEbT_:
17288|    324|    {
17289|    324|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    324|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 31, False: 293]
  |  |  ------------------
  ------------------
17290|     31|        {
17291|     31|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|     31|        }
17293|    293|        return true;
17294|    324|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE26check_ubjson_string_lengthIlEEbT_:
17288|    360|    {
17289|    360|        if (JSON_HEDLEY_UNLIKELY(len < 0))
  ------------------
  |  | 1667|    360|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 64, False: 296]
  |  |  ------------------
  ------------------
17290|     64|        {
17291|     64|            return last_byte_error(exception_id::invalid_string_or_size, "string length must not be negative", "string");
17292|     64|        }
17293|    296|        return true;
17294|    360|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE10get_stringIlEEbT_RSC_:
18910|    296|    {
18911|       |        // Strings are taken as is by default: none of CBOR (RFC 8949 §3.1
18912|       |        // leaves the choice to the decoder), MessagePack (whose spec
18913|       |        // explicitly allows a str object to contain an invalid byte
18914|       |        // sequence), UBJSON, BJData, or BSON requires a decoder to reject
18915|       |        // ill-formed UTF-8. Checking (and, with @ref error_handler_t::strict,
18916|       |        // rejecting, or with `replace`/`ignore`, sanitizing) is opt-in via
18917|       |        // @ref error_handler, applied once the whole string (all chunks of
18918|       |        // an indefinite-length CBOR string included) has been assembled, by
18919|       |        // @ref check_string_utf8 at the call site.
18920|    296|        return get_bytes(len, "string", result);
18921|    296|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE9get_bytesIlSC_EEbT_PKcRT0_:
18998|    296|    {
18999|       |        // upper bound on the number of bytes read (and allocated) per chunk
19000|    296|        constexpr std::size_t chunk_size = 4096;
19001|       |
19002|    463|        while (len > 0)
  ------------------
  |  Branch (19002:16): [True: 264, False: 199]
  ------------------
19003|    264|        {
19004|       |            // number of bytes to read this iteration: min(chunk_size, len),
19005|       |            // computed without truncating chunk_size to a narrow NumberType
19006|    264|            const std::size_t wanted = (static_cast<std::uintmax_t>(len) < static_cast<std::uintmax_t>(chunk_size))
  ------------------
  |  Branch (19006:40): [True: 192, False: 72]
  ------------------
19007|    264|                                       ? static_cast<std::size_t>(len)
19008|    264|                                       : chunk_size;
19009|    264|            const std::size_t old_size = result.size();
19010|    264|            result.resize(old_size + wanted);
19011|       |            // resize() is required to make size() exactly old_size + wanted;
19012|       |            // that is the room get_elements() is allowed to write into
19013|    264|            JSON_ASSERT(result.size() == old_size + wanted);
  ------------------
  |  | 2591|    264|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19013:13): [True: 264, False: 0]
  ------------------
19014|       |            // false positive: bytes_read is read on the next lines
19015|       |            // @infer-ignore DEAD_STORE
19016|    264|            const std::size_t bytes_read = ia.get_elements(&result[old_size], wanted);
19017|    264|            chars_read += bytes_read;
19018|    264|            if (JSON_HEDLEY_UNLIKELY(bytes_read < wanted))
  ------------------
  |  | 1667|    264|#  define JSON_HEDLEY_UNLIKELY(expr)                    __builtin_expect                 (!!(expr),    0                  )
  |  |  ------------------
  |  |  |  Branch (1667:57): [True: 97, False: 167]
  |  |  ------------------
  ------------------
19019|     97|            {
19020|       |                // premature end of input: shrink to what was actually read and
19021|       |                // report the failure at the first missing byte (same position
19022|       |                // accounting as get_to() for partial number reads)
19023|     97|                result.resize(old_size + bytes_read);
19024|     97|                ++chars_read;
19025|     97|                current = char_traits<char_type>::eof();
19026|     97|                return unexpect_eof(context);
19027|     97|            }
19028|       |            // a full chunk was read; get_elements() never returns more than requested
19029|    167|            JSON_ASSERT(bytes_read == wanted);
  ------------------
  |  | 2591|    167|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (19029:13): [True: 167, False: 0]
  ------------------
19030|    167|            len = static_cast<NumberType>(len - static_cast<NumberType>(wanted));
19031|    167|        }
19032|    199|        return true;
19033|    296|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE15get_ignore_noopEv:
18686|   211k|    {
18687|   211k|        do
18688|   217k|        {
18689|   217k|            get();
18690|   217k|        }
18691|   217k|        while (current == 'N');
  ------------------
  |  Branch (18691:16): [True: 5.52k, False: 211k]
  ------------------
18692|       |
18693|   211k|        return current;
18694|   211k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE3getEv:
18652|   345k|    {
18653|   345k|        ++chars_read;
18654|   345k|        return current = ia.get_character();
18655|   345k|    }
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapter13get_characterEv:
 8367|   345k|    {
 8368|   345k|        return std::fgetc(m_file);
 8369|   345k|    }
_ZNK8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEE15last_byte_errorENS1_12exception_idERKSC_PKcSP_:
19116|  1.00k|    {
19117|       |        // with a tail, the message reads "<detail><tail>; last byte: 0x<token>"
19118|  1.00k|        return sax->parse_error(chars_read, get_token_string(), parse_error::create(id_, chars_read,
19119|  1.00k|                                exception_message(tail == nullptr ? detail : concat(detail, tail, "; last byte: 0x", get_token_string()), context), nullptr));
  ------------------
  |  Branch (19119:51): [True: 902, False: 107]
  ------------------
19120|  1.00k|    }
_ZN8nlohmann16json_abi_v3_12_06detail13binary_readerINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterENS1_19json_sax_dom_parserISG_SH_EEED2Ev:
14954|  10.9k|    ~binary_reader() = default;
_ZN8nlohmann16json_abi_v3_12_06detail19json_sax_dom_parserINS0_10basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS0_14adl_serializerENS6_IhNSA_IhEEEEvEENS1_18file_input_adapterEED2Ev:
13881|  10.9k|    ~json_sax_dom_parser() = default;
_ZN8nlohmann16json_abi_v3_12_06detail13input_adapterEP8_IO_FILE:
 9114|  10.9k|{
 9115|  10.9k|    if (file == nullptr)
  ------------------
  |  Branch (9115:9): [True: 0, False: 10.9k]
  ------------------
 9116|      0|    {
 9117|      0|        JSON_THROW(parse_error::create(exception_id::syntax_error, 0, "attempting to parse an empty input; check that your input string or stream contains the expected JSON", nullptr));
  ------------------
  |  | 2556|      0|    #define JSON_THROW(exception) throw exception
  ------------------
 9118|      0|    }
 9119|  10.9k|    return file_input_adapter(file);
 9120|  10.9k|}
_ZN8nlohmann16json_abi_v3_12_06detail18file_input_adapterC2EP8_IO_FILE:
 8354|  10.9k|        : m_file(f)
 8355|  10.9k|    {
 8356|       |        JSON_ASSERT(m_file != nullptr);
  ------------------
  |  | 2591|  10.9k|    #define JSON_ASSERT(x) assert(x)
  ------------------
  |  Branch (8356:9): [True: 10.9k, False: 0]
  ------------------
 8357|  10.9k|    }

LLVMFuzzerTestOneInput:
   83|  10.9k|{
   84|  10.9k|    std::vector<uint8_t> const vec1(data, data + size);
   85|       |
   86|       |    // step 0: parse input without exceptions
   87|  10.9k|    bool noexcept_threw = false;
   88|  10.9k|    json const j_noexcept = parse_without_exceptions([&] { return json::from_bjdata(vec1, true, false); }, noexcept_threw);
   89|       |    // whether step 1 succeeded; if not, the catch blocks below check that
   90|       |    // step 0 failed, too
   91|  10.9k|    bool parsed = false;
   92|       |
   93|  10.9k|    try
   94|  10.9k|    {
   95|       |        // step 1: parse input
   96|  10.9k|        json const j1 = json::from_bjdata(vec1);
   97|  10.9k|        parsed = true;
   98|       |
   99|       |        // without exceptions, the same input must give the same value
  100|  10.9k|        assert(!noexcept_threw && !j_noexcept.is_discarded() && same_value(j_noexcept, j1));
  ------------------
  |  Branch (100:9): [True: 5.71k, False: 5.19k]
  |  Branch (100:9): [True: 5.71k, False: 0]
  |  Branch (100:9): [True: 5.71k, False: 0]
  |  Branch (100:9): [True: 5.71k, False: 5.19k]
  ------------------
  101|       |
  102|  5.71k|        try
  103|  5.71k|        {
  104|       |            // step 2.1: round trip without adding size annotations to container types
  105|  5.71k|            std::vector<uint8_t> const vec2 = json::to_bjdata(j1, false, false);
  106|       |
  107|       |            // step 2.2: round trip with adding size annotations but without adding type annotations to container types
  108|  5.71k|            std::vector<uint8_t> const vec3 = json::to_bjdata(j1, true, false);
  109|       |
  110|       |            // step 2.3: round trip with adding size as well as type annotations to container types
  111|  5.71k|            std::vector<uint8_t> const vec4 = json::to_bjdata(j1, true, true);
  112|       |
  113|       |            // parse serialization
  114|  5.71k|            json const j2 = json::from_bjdata(vec2);
  115|  5.71k|            json const j3 = json::from_bjdata(vec3);
  116|  5.71k|            json const j4 = json::from_bjdata(vec4);
  117|       |
  118|       |            // re-serializing must be value-stable (see the notes above on
  119|       |            // why byte-exact stability is not guaranteed in general, and
  120|       |            // why this compares dump()s rather than the values directly)
  121|  5.71k|            assert(is_value_stable(json::from_bjdata(json::to_bjdata(j2, false, false)), j2));
  ------------------
  |  Branch (121:13): [True: 4.85k, False: 865]
  ------------------
  122|  5.71k|            assert(is_value_stable(json::from_bjdata(json::to_bjdata(j3, true, false)), j3));
  ------------------
  |  Branch (122:13): [True: 4.85k, False: 0]
  ------------------
  123|  4.85k|            assert(is_value_stable(json::from_bjdata(json::to_bjdata(j4, true, true)), j4));
  ------------------
  |  Branch (123:13): [True: 4.85k, False: 0]
  ------------------
  124|  4.85k|        }
  125|  5.71k|        catch (const json::parse_error&)
  126|  5.71k|        {
  127|       |            // parsing a BJData serialization must not fail
  128|      0|            assert(false);
  ------------------
  |  Branch (128:13): [Folded, False: 0]
  ------------------
  129|      0|        }
  130|  5.71k|    }
  131|  10.9k|    catch (const json::parse_error&)
  132|  10.9k|    {
  133|       |        // parse errors are ok, because input may be random bytes
  134|  4.84k|        assert(parsed || noexcept_threw || j_noexcept.is_discarded());
  ------------------
  |  Branch (134:9): [True: 0, False: 4.84k]
  |  Branch (134:9): [True: 0, False: 4.84k]
  |  Branch (134:9): [True: 4.84k, False: 0]
  |  Branch (134:9): [True: 4.84k, False: 0]
  ------------------
  135|  4.84k|    }
  136|  10.9k|    catch (const json::type_error&)
  137|  10.9k|    {
  138|       |        // type errors can occur during parsing, too
  139|    865|        assert(parsed || noexcept_threw || j_noexcept.is_discarded());
  ------------------
  |  Branch (139:9): [True: 865, False: 0]
  |  Branch (139:9): [True: 0, False: 0]
  |  Branch (139:9): [True: 0, False: 0]
  |  Branch (139:9): [True: 865, False: 0]
  ------------------
  140|    865|    }
  141|  10.9k|    catch (const json::out_of_range&)
  142|  10.9k|    {
  143|       |        // out of range errors may happen if provided sizes are excessive
  144|    351|        assert(parsed || noexcept_threw || j_noexcept.is_discarded());
  ------------------
  |  Branch (144:9): [True: 0, False: 351]
  |  Branch (144:9): [True: 0, False: 351]
  |  Branch (144:9): [True: 351, False: 0]
  |  Branch (144:9): [True: 351, False: 0]
  ------------------
  145|    351|    }
  146|       |
  147|       |    // step 3: the other input adapters must read the data alike
  148|  10.9k|    check_input_adapters(data, size, read_bjdata());
  149|       |
  150|       |    // return 0 - non-zero return values are reserved for future use
  151|  10.9k|    return 0;
  152|  10.9k|}
fuzzer-parse_bjdata.cpp:_ZL15is_value_stableRKN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEESG_:
   77|  15.4k|{
   78|  15.4k|    return lhs.dump() == rhs.dump();
   79|  15.4k|}
fuzzer-parse_bjdata.cpp:_ZZ22LLVMFuzzerTestOneInputENK3$_0clEv:
   88|  10.9k|    json const j_noexcept = parse_without_exceptions([&] { return json::from_bjdata(vec1, true, false); }, noexcept_threw);
fuzzer-parse_bjdata.cpp:_ZNK12_GLOBAL__N_111read_bjdataclIJRPKhS3_EEEN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS8_6vectorENS8_12basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEblmdSE_NS6_14adl_serializerENSA_IhNSE_IhEEEEvEEDpOT_:
   68|  10.9k|    {
   69|  10.9k|        return json::from_bjdata(std::forward<Args>(args)...);
   70|  10.9k|    }
fuzzer-parse_bjdata.cpp:_ZNK12_GLOBAL__N_111read_bjdataclIJRNSt3__119basic_istringstreamIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEEEN8nlohmann16json_abi_v3_12_010basic_jsonINS2_3mapENS2_6vectorENS2_12basic_stringIcS5_S7_EEblmdS6_NSB_14adl_serializerENSE_IhNS6_IhEEEEvEEDpOT_:
   68|  10.9k|    {
   69|  10.9k|        return json::from_bjdata(std::forward<Args>(args)...);
   70|  10.9k|    }
fuzzer-parse_bjdata.cpp:_ZNK12_GLOBAL__N_111read_bjdataclIJNSt3__121__list_const_iteratorIhPvEES5_EEEN8nlohmann16json_abi_v3_12_010basic_jsonINS2_3mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdSE_NS7_14adl_serializerENSA_IhNSE_IhEEEEvEEDpOT_:
   68|  10.9k|    {
   69|  10.9k|        return json::from_bjdata(std::forward<Args>(args)...);
   70|  10.9k|    }
fuzzer-parse_bjdata.cpp:_ZNK12_GLOBAL__N_111read_bjdataclIJRP8_IO_FILEEEEN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS8_6vectorENS8_12basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEEblmdSE_NS6_14adl_serializerENSA_IhNSE_IhEEEEvEEDpOT_:
   68|  10.9k|    {
   69|  10.9k|        return json::from_bjdata(std::forward<Args>(args)...);
   70|  10.9k|    }

_Z10same_valueRKN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEESG_:
   34|  5.71k|{
   35|  5.71k|    return lhs.dump(-1, ' ', false, json::error_handler_t::keep) == rhs.dump(-1, ' ', false, json::error_handler_t::keep);
   36|  5.71k|}
fuzzer-parse_bjdata.cpp:_Z24parse_without_exceptionsIZ22LLVMFuzzerTestOneInputE3$_0EN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS4_6vectorENS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEblmdSA_NS2_14adl_serializerENS6_IhNSA_IhEEEEvEET_Rb:
   44|  10.9k|{
   45|  10.9k|    threw = false;
   46|  10.9k|    try
   47|  10.9k|    {
   48|  10.9k|        return parse();
   49|  10.9k|    }
   50|  10.9k|    catch (const json::parse_error&)
   51|  10.9k|    {
   52|      0|        assert(false);
  ------------------
  |  Branch (52:9): [Folded, False: 0]
  ------------------
   53|      0|    }
   54|  10.9k|    catch (const json::exception&)
   55|  10.9k|    {
   56|      0|        threw = true;
   57|      0|    }
   58|      0|    return {};
   59|  10.9k|}
fuzzer-parse_bjdata.cpp:_Z20check_input_adaptersIN12_GLOBAL__N_111read_bjdataEEvPKhmRKT_:
  117|  10.9k|{
  118|  10.9k|    const read_outcome expected = read_with(parse, data, data + size);
  119|       |
  120|       |    // stream adapter
  121|  10.9k|    {
  122|  10.9k|        std::istringstream stream(std::string(reinterpret_cast<const char*>(data), size));
  123|  10.9k|        assert(read_with(parse, stream) == expected);
  ------------------
  |  Branch (123:9): [True: 10.9k, False: 0]
  ------------------
  124|  10.9k|    }
  125|       |
  126|       |    // iterator adapter on a non-contiguous range
  127|  10.9k|    {
  128|  10.9k|        const std::list<std::uint8_t> list(data, data + size);
  129|  10.9k|        assert(read_with(parse, list.begin(), list.end()) == expected);
  ------------------
  |  Branch (129:9): [True: 10.9k, False: 0]
  ------------------
  130|  10.9k|    }
  131|       |
  132|  10.9k|#if defined(__unix__) || defined(__APPLE__)
  133|       |    // FILE* adapter; fmemopen may refuse an empty buffer
  134|  10.9k|    {
  135|  10.9k|        std::vector<std::uint8_t> buffer(data, data + size);
  136|  10.9k|        std::FILE* file = buffer.empty() ? nullptr : fmemopen(buffer.data(), buffer.size(), "rb");
  ------------------
  |  Branch (136:27): [True: 0, False: 10.9k]
  ------------------
  137|  10.9k|        if (file != nullptr)
  ------------------
  |  Branch (137:13): [True: 10.9k, False: 0]
  ------------------
  138|  10.9k|        {
  139|  10.9k|            const read_outcome actual = read_with(parse, file);
  140|  10.9k|            std::fclose(file);
  141|       |            assert(actual == expected);
  ------------------
  |  Branch (141:13): [True: 10.9k, False: 0]
  ------------------
  142|  10.9k|        }
  143|  10.9k|    }
  144|  10.9k|#endif
  145|  10.9k|}
fuzzer-parse_bjdata.cpp:_Z9read_withIN12_GLOBAL__N_111read_bjdataEJRPKhS3_EE12read_outcomeRKT_DpOT0_:
   88|  10.9k|{
   89|  10.9k|    read_outcome result;
   90|  10.9k|    try
   91|  10.9k|    {
   92|  10.9k|        result.value = outcome_value(parse(std::forward<Args>(args)...));
   93|  10.9k|    }
   94|  10.9k|    catch (const json::parse_error& e)
   95|  10.9k|    {
   96|  4.84k|        result.id = e.id;
   97|  4.84k|        result.what = e.what();
   98|  4.84k|        result.byte = e.byte;
   99|  4.84k|    }
  100|  10.9k|    catch (const json::exception& e)
  101|  10.9k|    {
  102|    351|        result.id = e.id;
  103|    351|        result.what = e.what();
  104|    351|    }
  105|  10.9k|    return result;
  106|  10.9k|}
_Z13outcome_valueRKN8nlohmann16json_abi_v3_12_010basic_jsonINSt3__13mapENS2_6vectorENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEblmdS8_NS0_14adl_serializerENS4_IhNS8_IhEEEEvEE:
   77|  22.8k|{
   78|  22.8k|    return j.dump(-1, ' ', false, json::error_handler_t::keep);
   79|  22.8k|}
fuzzer-parse_bjdata.cpp:_Z9read_withIN12_GLOBAL__N_111read_bjdataEJRNSt3__119basic_istringstreamIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEEE12read_outcomeRKT_DpOT0_:
   88|  10.9k|{
   89|  10.9k|    read_outcome result;
   90|  10.9k|    try
   91|  10.9k|    {
   92|  10.9k|        result.value = outcome_value(parse(std::forward<Args>(args)...));
   93|  10.9k|    }
   94|  10.9k|    catch (const json::parse_error& e)
   95|  10.9k|    {
   96|  4.84k|        result.id = e.id;
   97|  4.84k|        result.what = e.what();
   98|  4.84k|        result.byte = e.byte;
   99|  4.84k|    }
  100|  10.9k|    catch (const json::exception& e)
  101|  10.9k|    {
  102|    351|        result.id = e.id;
  103|    351|        result.what = e.what();
  104|    351|    }
  105|  10.9k|    return result;
  106|  10.9k|}
_ZNK12read_outcomeeqERKS_:
   71|  32.7k|    {
   72|  32.7k|        return value == rhs.value && id == rhs.id && what == rhs.what && byte == rhs.byte;
  ------------------
  |  Branch (72:16): [True: 32.7k, False: 0]
  |  Branch (72:38): [True: 32.7k, False: 0]
  |  Branch (72:54): [True: 32.7k, False: 0]
  |  Branch (72:74): [True: 32.7k, False: 0]
  ------------------
   73|  32.7k|    }
fuzzer-parse_bjdata.cpp:_Z9read_withIN12_GLOBAL__N_111read_bjdataEJNSt3__121__list_const_iteratorIhPvEES5_EE12read_outcomeRKT_DpOT0_:
   88|  10.9k|{
   89|  10.9k|    read_outcome result;
   90|  10.9k|    try
   91|  10.9k|    {
   92|  10.9k|        result.value = outcome_value(parse(std::forward<Args>(args)...));
   93|  10.9k|    }
   94|  10.9k|    catch (const json::parse_error& e)
   95|  10.9k|    {
   96|  4.84k|        result.id = e.id;
   97|  4.84k|        result.what = e.what();
   98|  4.84k|        result.byte = e.byte;
   99|  4.84k|    }
  100|  10.9k|    catch (const json::exception& e)
  101|  10.9k|    {
  102|    351|        result.id = e.id;
  103|    351|        result.what = e.what();
  104|    351|    }
  105|  10.9k|    return result;
  106|  10.9k|}
fuzzer-parse_bjdata.cpp:_Z9read_withIN12_GLOBAL__N_111read_bjdataEJRP8_IO_FILEEE12read_outcomeRKT_DpOT0_:
   88|  10.9k|{
   89|  10.9k|    read_outcome result;
   90|  10.9k|    try
   91|  10.9k|    {
   92|  10.9k|        result.value = outcome_value(parse(std::forward<Args>(args)...));
   93|  10.9k|    }
   94|  10.9k|    catch (const json::parse_error& e)
   95|  10.9k|    {
   96|  4.84k|        result.id = e.id;
   97|  4.84k|        result.what = e.what();
   98|  4.84k|        result.byte = e.byte;
   99|  4.84k|    }
  100|  10.9k|    catch (const json::exception& e)
  101|  10.9k|    {
  102|    351|        result.id = e.id;
  103|    351|        result.what = e.what();
  104|    351|    }
  105|  10.9k|    return result;
  106|  10.9k|}

