LLVMFuzzerTestOneInput:
   19|  2.57k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
   20|       |
   21|  2.57k|    if (Size < kMinInputLength || Size > kMaxInputLength) {
  ------------------
  |  |   16|  5.15k|#define kMinInputLength 10
  ------------------
                  if (Size < kMinInputLength || Size > kMaxInputLength) {
  ------------------
  |  |   17|  2.57k|#define kMaxInputLength 5120
  ------------------
  |  Branch (21:9): [True: 6, False: 2.57k]
  |  Branch (21:35): [True: 8, False: 2.56k]
  ------------------
   22|     14|        return 1;
   23|     14|    }
   24|       |
   25|  2.56k|    std::string data(Data, Data + Size);
   26|  2.56k|    std::vector<char> text(data.begin(), data.end());
   27|  2.56k|    text.push_back('\0');
   28|       |
   29|  2.56k|    try {
   30|  2.56k|        Wt::rapidxml::xml_document<> doc;
   31|  2.56k|        doc.parse<0>(&text[0]);
   32|  2.56k|        Wt::Utils::fixSelfClosingTags(&doc);
   33|  2.56k|    } catch( ... ) {/*...*/}
   34|       |
   35|  2.56k|    return 0;
   36|  2.56k|}

_ZN2Wt4Json5ArrayC2Ev:
   15|      2|  : Impl()
   16|      2|{ }

_ZN2Wt4Json6ObjectC2Ev:
   17|      2|{ }

_ZN2Wt4Json5ValueC2Ev:
   87|      2|{ }
_ZN2Wt4Json5ValueC2Eb:
   90|      4|  : v_(value)
   91|      4|{ }

_ZN2WtorENS_11OrientationES0_:
  370|    346|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    346|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    346|  retval |= r;                                                          \
  373|    346|  return retval;                                                        \
  374|    346|}                                                                       \
_ZN2Wt6WFlagsINS_11OrientationEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_11OrientationEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_ZN2WtorENS_4SideES0_:
  370|    346|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    346|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    346|  retval |= r;                                                          \
  373|    346|  return retval;                                                        \
  374|    346|}                                                                       \
_ZN2Wt6WFlagsINS_4SideEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_4SideEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_ZN2WtorENS_13AlignmentFlagES0_:
  370|    692|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    692|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    692|  retval |= r;                                                          \
  373|    692|  return retval;                                                        \
  374|    692|}                                                                       \
_ZN2Wt6WFlagsINS_13AlignmentFlagEEC2ES1_:
  187|    692|  flags_(static_cast<unsigned int>(flag))
  188|    692|{
  189|    692|}
_ZN2Wt6WFlagsINS_13AlignmentFlagEEoRES1_:
  327|    692|{
  328|    692|  flags_ |= static_cast<unsigned int>(other);
  329|    692|  return *this;
  330|    692|}
_ZN2WtorENS_9MatchFlagES0_:
  370|    346|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|    346|  Wt::WFlags<EnumType> retval(l);                                       \
  372|    346|  retval |= r;                                                          \
  373|    346|  return retval;                                                        \
  374|    346|}                                                                       \
_ZN2Wt6WFlagsINS_9MatchFlagEEC2ES1_:
  187|    346|  flags_(static_cast<unsigned int>(flag))
  188|    346|{
  189|    346|}
_ZN2Wt6WFlagsINS_9MatchFlagEEoRES1_:
  327|    346|{
  328|    346|  flags_ |= static_cast<unsigned int>(other);
  329|    346|  return *this;
  330|    346|}
_ZNK2Wt6WFlagsINS_4SideEEorES1_:
  313|    692|{
  314|    692|  return WFlags<EnumType>::createFromInt
  315|    692|    (flags_ | static_cast<unsigned int>(other));
  316|    692|}
_ZN2Wt6WFlagsINS_4SideEE13createFromIntEi:
  173|    692|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|    692|    return WFlags(flags, false);
  175|    692|  }
_ZN2Wt6WFlagsINS_4SideEEC2Eib:
  172|    692|  WFlags(int flags, bool): flags_(flags) {}
_ZNK2Wt6WFlagsINS_13AlignmentFlagEEorES1_:
  313|  2.76k|{
  314|  2.76k|  return WFlags<EnumType>::createFromInt
  315|  2.76k|    (flags_ | static_cast<unsigned int>(other));
  316|  2.76k|}
_ZN2Wt6WFlagsINS_13AlignmentFlagEE13createFromIntEi:
  173|  2.76k|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|  2.76k|    return WFlags(flags, false);
  175|  2.76k|  }
_ZN2Wt6WFlagsINS_13AlignmentFlagEEC2Eib:
  172|  2.76k|  WFlags(int flags, bool): flags_(flags) {}
_ZNK2Wt6WFlagsINS_9MatchFlagEEorES1_:
  313|  1.38k|{
  314|  1.38k|  return WFlags<EnumType>::createFromInt
  315|  1.38k|    (flags_ | static_cast<unsigned int>(other));
  316|  1.38k|}
_ZN2Wt6WFlagsINS_9MatchFlagEE13createFromIntEi:
  173|  1.38k|  inline static WFlags<EnumType> createFromInt(int flags) {
  174|  1.38k|    return WFlags(flags, false);
  175|  1.38k|  }
_ZN2Wt6WFlagsINS_9MatchFlagEEC2Eib:
  172|  1.38k|  WFlags(int flags, bool): flags_(flags) {}
_ZN2WtorENS_19ValidationStyleFlagES0_:
  370|     58|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|     58|  Wt::WFlags<EnumType> retval(l);                                       \
  372|     58|  retval |= r;                                                          \
  373|     58|  return retval;                                                        \
  374|     58|}                                                                       \
_ZN2Wt6WFlagsINS_19ValidationStyleFlagEEC2ES1_:
  187|     58|  flags_(static_cast<unsigned int>(flag))
  188|     58|{
  189|     58|}
_ZN2Wt6WFlagsINS_19ValidationStyleFlagEEoRES1_:
  327|     58|{
  328|     58|  flags_ |= static_cast<unsigned int>(other);
  329|     58|  return *this;
  330|     58|}
_ZN2WtorENS_7WSlider12TickPositionES1_:
  370|      2|inline Wt::WFlags<EnumType> operator|(EnumType l, EnumType r) {         \
  371|      2|  Wt::WFlags<EnumType> retval(l);                                       \
  372|      2|  retval |= r;                                                          \
  373|      2|  return retval;                                                        \
  374|      2|}                                                                       \
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEoRES2_:
  327|      2|{
  328|      2|  flags_ |= static_cast<unsigned int>(other);
  329|      2|  return *this;
  330|      2|}
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEC2ES2_:
  187|      2|  flags_(static_cast<unsigned int>(flag))
  188|      2|{
  189|      2|}
_ZN2Wt6WFlagsINS_7WSlider12TickPositionEEC2ENS_11NoFlagsTypeE:
  193|      2|  : flags_(0)
  194|      2|{ }

_ZN2Wt26WJavaScriptExposableObjectC2Ev:
   17|      2|  : clientBinding_(nullptr)
   18|      2|{ }
_ZNK2Wt26WJavaScriptExposableObject17isJavaScriptBoundEv:
   46|      2|{
   47|      2|  return clientBinding_;
   48|      2|}
_ZNK2Wt26WJavaScriptExposableObject15checkModifiableEv:
   93|      2|{
   94|      2|  if (isJavaScriptBound()) {
  ------------------
  |  Branch (94:7): [True: 0, False: 2]
  ------------------
   95|      0|    throw WException("Trying to modify a JavaScript bound object!");
   96|      0|  }
   97|      2|}

_ZN2Wt7WLengthC2Ev:
   24|      2|  : auto_(true),
   25|      2|    unit_(LengthUnit::Pixel),
   26|      2|    value_(-1)
   27|      2|{ }

_ZN2Wt7WLocaleC2Ev:
   16|      2|  : decimalPoint_("."),
   17|      2|    groupSeparator_(""),
   18|      2|    dateFormat_("yyyy-MM-dd"),
   19|      2|    timeFormat_("HH:mm:ss"),
   20|      2|    dateTimeFormat_("yyyy-MM-dd HH:mm:ss"),
   21|      2|    timeZone_(nullptr)
   22|      2|{ }

_ZN2Wt7WLoggerC2Ev:
  236|      2|  : o_(&std::cerr),
  237|      2|    ownStream_(false),
  238|      2|    useLock_(true)
  239|      2|{
  240|      2|  Rule r;
  241|      2|  r.type = "*";
  242|      2|  r.scope = "*";
  243|      2|  r.include = true;
  244|      2|  rules_.push_back(r);
  245|      2|  r.type = "debug";
  246|      2|  r.include = false;
  247|      2|  rules_.push_back(r);
  248|      2|}

_ZN2Wt7WStringC2Ev:
   28|      2|  : impl_(nullptr)
   29|      2|{ }
_ZN2Wt7WStringC2EPKcNS_12CharEncodingE:
   71|      6|  : impl_(nullptr)
   72|      6|{
   73|      6|  if (value) {
  ------------------
  |  Branch (73:7): [True: 6, False: 0]
  ------------------
   74|      6|    if (realEncoding(encoding) == CharEncoding::UTF8)
  ------------------
  |  Branch (74:9): [True: 6, False: 0]
  ------------------
   75|      6|      utf8_ = value;
   76|      0|    else
   77|      0|      utf8_ = Wt::toUTF8(value);
   78|      6|  }
   79|      6|}
_ZN2Wt7WString12realEncodingENS_12CharEncodingE:
  611|      6|{
  612|      6|  return encoding == CharEncoding::Default
  ------------------
  |  Branch (612:10): [True: 6, False: 0]
  ------------------
  613|      6|    ? defaultEncoding_ : encoding;
  614|      6|}

_ZN2Wt10WTransformC2Ev:
   29|      2|{
   30|      2|  reset();
   31|      2|}
_ZN2Wt10WTransform5resetEv:
  105|      2|{
  106|      2|  checkModifiable();
  107|      2|  m_[M11] = m_[M22] = 1;
  108|      2|  m_[M21] = m_[M12] = m_[M13] = m_[M23] = 0;
  109|      2|}

_ZN4linb3anyC2Ev:
   40|      2|        vtable(nullptr)
   41|      2|    {
   42|      2|    }
_ZN4linb3any15vtable_for_typeIbEEPNS0_11vtable_typeEv:
  285|      4|    {
  286|      4|        using VTableType = typename std::conditional<requires_allocation<T>::value, vtable_dynamic<T>, vtable_stack<T>>::type;
  287|      4|        static vtable_type table = {
  288|      4|            VTableType::type, VTableType::destroy,
  289|      4|            VTableType::copy, VTableType::move,
  290|      4|            VTableType::swap,
  291|      4|        };
  292|      4|        return &table;
  293|      4|    }
_ZN4linb3anyC2IRbvEEOT_:
   78|      4|    {
   79|      4|        static_assert(std::is_copy_constructible<typename std::decay<ValueType>::type>::value,
   80|      4|            "T shall satisfy the CopyConstructible requirements.");
   81|      4|        this->construct(std::forward<ValueType>(value));
   82|      4|    }
_ZN4linb3any9constructIRbEEvOT_:
  362|      4|    {
  363|      4|        using T = typename std::decay<ValueType>::type;
  364|       |
  365|      4|        this->vtable = vtable_for_type<T>();
  366|       |
  367|      4|        do_construct<ValueType, T>(std::forward<ValueType>(value));
  368|      4|    }
_ZN4linb3any12do_constructIRbbEENSt9enable_ifIXntsr19requires_allocationIT0_EE5valueEvE4typeEOT_:
  354|      4|    {
  355|      4|        new (&storage.stack) T(std::forward<ValueType>(value));
  356|      4|    }

_ZN2Wt8rapidxml11memory_poolIcED2Ev:
  416|  2.56k|        {
  417|  2.56k|            clear();
  418|  2.56k|        }
_ZN2Wt8rapidxml11memory_poolIcE5clearEv:
  541|  2.56k|        {
  542|  2.61k|            while (m_begin != m_static_memory)
  ------------------
  |  Branch (542:20): [True: 48, False: 2.56k]
  ------------------
  543|     48|            {
  544|     48|                char *previous_begin = reinterpret_cast<header *>(align(m_begin))->previous_begin;
  545|     48|                if (m_free_func)
  ------------------
  |  Branch (545:21): [True: 0, False: 48]
  ------------------
  546|      0|                    m_free_func(m_begin);
  547|     48|                else
  548|     48|                    delete[] m_begin;
  549|     48|                m_begin = previous_begin;
  550|     48|            }
  551|  2.56k|            init();
  552|  2.56k|        }
_ZN2Wt8rapidxml11memory_poolIcE5alignEPc:
  589|  58.7k|        {
  590|  58.7k|            std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  58.7k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
                          std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  58.7k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
                          std::size_t alignment = ((RAPIDXML_ALIGNMENT - (std::size_t(ptr) & (RAPIDXML_ALIGNMENT - 1))) & (RAPIDXML_ALIGNMENT - 1));
  ------------------
  |  |  138|  58.7k|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
  591|  58.7k|            return ptr + alignment;
  592|  58.7k|        }
_ZN2Wt8rapidxml11memory_poolIcE4initEv:
  582|  5.13k|        {
  583|  5.13k|            m_begin = m_static_memory;
  584|  5.13k|            m_ptr = align(m_begin);
  585|  5.13k|            m_end = m_static_memory + sizeof(m_static_memory);
  586|  5.13k|        }
_ZN2Wt8rapidxml12xml_documentIcEC2Ev:
 1380|  2.56k|            : xml_node<Ch>(node_document)
 1381|  2.56k|        {
 1382|  2.56k|        }
_ZN2Wt8rapidxml8xml_nodeIcEC2ENS0_9node_typeE:
  917|  53.8k|            : m_type(type)
  918|  53.8k|            , m_first_node(0)
  919|  53.8k|            , m_first_attribute(0)
  920|  53.8k|        {
  921|  53.8k|        }
_ZN2Wt8rapidxml8xml_baseIcEC2Ev:
  673|  55.9k|            : m_name(0)
  674|  55.9k|            , m_value(0)
  675|  55.9k|            , m_parent(0)
  676|  55.9k|        {
  677|  55.9k|        }
_ZN2Wt8rapidxml11memory_poolIcEC2Ev:
  406|  2.56k|            : m_alloc_func(0)
  407|  2.56k|            , m_free_func(0)
  408|  2.56k|        {
  409|  2.56k|            init();
  410|  2.56k|        }
_ZN2Wt8rapidxml12xml_documentIcE5parseILi0EEEvPc:
 1397|  2.56k|        {
 1398|  2.56k|            assert(text);
 1399|       |            
 1400|       |            // Remove current contents
 1401|  2.56k|            this->remove_all_nodes();
 1402|  2.56k|            this->remove_all_attributes();
 1403|       |            
 1404|       |            // Parse BOM, if any
 1405|  2.56k|            parse_bom<Flags>(text);
 1406|       |            
 1407|       |            // Parse children
 1408|  12.9k|            while (1)
  ------------------
  |  Branch (1408:20): [True: 10.7k, Folded]
  ------------------
 1409|  10.7k|            {
 1410|       |                // Skip whitespace before node
 1411|  10.7k|                skip<whitespace_pred, Flags>(text);
 1412|  10.7k|                if (*text == 0)
  ------------------
  |  Branch (1412:21): [True: 349, False: 10.4k]
  ------------------
 1413|    349|                    break;
 1414|       |
 1415|       |                // Parse and append new child
 1416|  10.4k|                if (*text == Ch('<'))
  ------------------
  |  Branch (1416:21): [True: 10.3k, False: 58]
  ------------------
 1417|  10.3k|                {
 1418|  10.3k|                    ++text;     // Skip '<'
 1419|  10.3k|                    if (xml_node<Ch> *node = parse_node<Flags>(text))
  ------------------
  |  Branch (1419:39): [True: 3.12k, False: 7.22k]
  ------------------
 1420|  3.12k|                        this->append_node(node);
 1421|  10.3k|                }
 1422|     58|                else
 1423|     58|                    RAPIDXML_PARSE_ERROR("expected <", text);
  ------------------
  |  |   60|     58|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1424|  10.4k|            }
 1425|       |
 1426|  2.56k|        }
_ZN2Wt8rapidxml8xml_nodeIcE16remove_all_nodesEv:
 1204|  2.56k|        {
 1205|  2.56k|            for (xml_node<Ch> *node = first_node(); node; node = node->m_next_sibling)
  ------------------
  |  Branch (1205:53): [True: 0, False: 2.56k]
  ------------------
 1206|      0|                node->m_parent = 0;
 1207|  2.56k|            m_first_node = 0;
 1208|  2.56k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE10first_nodeEPKcmb:
  952|  45.9k|        {
  953|  45.9k|            if (name)
  ------------------
  |  Branch (953:17): [True: 0, False: 45.9k]
  ------------------
  954|      0|            {
  955|      0|                if (name_size == 0)
  ------------------
  |  Branch (955:21): [True: 0, False: 0]
  ------------------
  956|      0|                    name_size = internal::measure(name);
  957|      0|                for (xml_node<Ch> *child = m_first_node; child; child = child->next_sibling())
  ------------------
  |  Branch (957:58): [True: 0, False: 0]
  ------------------
  958|      0|                    if (internal::compare(child->name(), child->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (958:25): [True: 0, False: 0]
  ------------------
  959|      0|                        return child;
  960|      0|                return 0;
  961|      0|            }
  962|  45.9k|            else
  963|  45.9k|                return m_first_node;
  964|  45.9k|        }
_ZNK2Wt8rapidxml8xml_baseIcE4nameEv:
  689|  14.3k|        {
  690|  14.3k|            return m_name ? m_name : nullstr();
  ------------------
  |  Branch (690:20): [True: 14.0k, False: 344]
  ------------------
  691|  14.3k|        }
_ZN2Wt8rapidxml8xml_baseIcE7nullstrEv:
  794|  10.1k|        {
  795|  10.1k|            static Ch zero = Ch('\0');
  796|  10.1k|            return &zero;
  797|  10.1k|        }
_ZNK2Wt8rapidxml8xml_baseIcE9name_sizeEv:
  697|  14.3k|        {
  698|  14.3k|            return m_name ? m_name_size : 0;
  ------------------
  |  Branch (698:20): [True: 14.0k, False: 344]
  ------------------
  699|  14.3k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE12next_siblingEPKcmb:
 1020|  9.17k|        {
 1021|  9.17k|            assert(this->m_parent);     // Cannot query for siblings if node has no parent
 1022|  9.17k|            if (name)
  ------------------
  |  Branch (1022:17): [True: 0, False: 9.17k]
  ------------------
 1023|      0|            {
 1024|      0|                if (name_size == 0)
  ------------------
  |  Branch (1024:21): [True: 0, False: 0]
  ------------------
 1025|      0|                    name_size = internal::measure(name);
 1026|      0|                for (xml_node<Ch> *sibling = m_next_sibling; sibling; sibling = sibling->m_next_sibling)
  ------------------
  |  Branch (1026:62): [True: 0, False: 0]
  ------------------
 1027|      0|                    if (internal::compare(sibling->name(), sibling->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (1027:25): [True: 0, False: 0]
  ------------------
 1028|      0|                        return sibling;
 1029|      0|                return 0;
 1030|      0|            }
 1031|  9.17k|            else
 1032|  9.17k|                return m_next_sibling;
 1033|  9.17k|        }
_ZN2Wt8rapidxml8xml_nodeIcE21remove_all_attributesEv:
 1325|  2.56k|        {
 1326|  2.56k|            for (xml_attribute<Ch> *attribute = first_attribute(); attribute; attribute = attribute->m_next_attribute)
  ------------------
  |  Branch (1326:68): [True: 0, False: 2.56k]
  ------------------
 1327|      0|                attribute->m_parent = 0;
 1328|  2.56k|            m_first_attribute = 0;
 1329|  2.56k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE15first_attributeEPKcmb:
 1041|  4.73k|        {
 1042|  4.73k|            if (name)
  ------------------
  |  Branch (1042:17): [True: 0, False: 4.73k]
  ------------------
 1043|      0|            {
 1044|      0|                if (name_size == 0)
  ------------------
  |  Branch (1044:21): [True: 0, False: 0]
  ------------------
 1045|      0|                    name_size = internal::measure(name);
 1046|      0|                for (xml_attribute<Ch> *attribute = m_first_attribute; attribute; attribute = attribute->m_next_attribute)
  ------------------
  |  Branch (1046:72): [True: 0, False: 0]
  ------------------
 1047|      0|                    if (internal::compare(attribute->name(), attribute->name_size(), name, name_size, case_sensitive))
  ------------------
  |  Branch (1047:25): [True: 0, False: 0]
  ------------------
 1048|      0|                        return attribute;
 1049|      0|                return 0;
 1050|      0|            }
 1051|  4.73k|            else
 1052|  4.73k|                return m_first_attribute;
 1053|  4.73k|        }
_ZN2Wt8rapidxml12xml_documentIcE9parse_bomILi0EEEvRPc:
 1883|  2.56k|        {
 1884|       |            // UTF-8?
 1885|  2.56k|            if (static_cast<unsigned char>(text[0]) == 0xEF && 
  ------------------
  |  Branch (1885:17): [True: 28, False: 2.53k]
  ------------------
 1886|     28|                static_cast<unsigned char>(text[1]) == 0xBB && 
  ------------------
  |  Branch (1886:17): [True: 15, False: 13]
  ------------------
 1887|     15|                static_cast<unsigned char>(text[2]) == 0xBF)
  ------------------
  |  Branch (1887:17): [True: 2, False: 13]
  ------------------
 1888|      2|            {
 1889|      2|                text += 3;      // Skup utf-8 bom
 1890|      2|            }
 1891|  2.56k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_15whitespace_predELi0EEEvRPc:
 1711|  50.4k|        {
 1712|  50.4k|            Ch *tmp = text;
 1713|  52.9k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 2.44k, False: 50.4k]
  ------------------
 1714|  2.44k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  50.4k|            text = tmp;
 1717|  50.4k|        }
_ZN2Wt8rapidxml12xml_documentIcE15whitespace_pred4testEc:
 1446|  54.1k|            {
 1447|  54.1k|                return internal::lookup_tables<0>::lookup_whitespace[static_cast<unsigned char>(ch)];
 1448|  54.1k|            }
_ZN2Wt8rapidxml12xml_documentIcE9next_charILi0EEEvRPc:
 1700|  85.7k|        {
 1701|  85.7k|	  if (Flags & parse_validate_utf8) {
  ------------------
  |  Branch (1701:8): [Folded, False: 85.7k]
  ------------------
 1702|      0|	    Ch *dest = 0;
 1703|      0|	    copy_check_utf8(const_cast<const Ch *&>(text), dest);
 1704|      0|	  } else
 1705|  85.7k|	    ++text;
 1706|  85.7k|	}
_ZN2Wt8rapidxml12xml_documentIcE10parse_nodeILi0EEEPNS0_8xml_nodeIcEERPc:
 2239|  41.6k|        {
 2240|       |            // Parse proper node type
 2241|  41.6k|            switch (text[0])
 2242|  41.6k|            {
 2243|       |
 2244|       |            // <...
 2245|  33.2k|            default: 
  ------------------
  |  Branch (2245:13): [True: 33.2k, False: 8.34k]
  ------------------
 2246|       |                // Parse and append element node
 2247|  33.2k|                return parse_element<Flags>(text);
 2248|       |
 2249|       |            // <?...
 2250|  1.94k|            case Ch('?'): 
  ------------------
  |  Branch (2250:13): [True: 1.94k, False: 39.6k]
  ------------------
 2251|  1.94k|                ++text;     // Skip ?
 2252|  1.94k|                if ((text[0] == Ch('x') || text[0] == Ch('X')) &&
  ------------------
  |  Branch (2252:22): [True: 1.10k, False: 837]
  |  Branch (2252:44): [True: 401, False: 436]
  ------------------
 2253|  1.50k|                    (text[1] == Ch('m') || text[1] == Ch('M')) && 
  ------------------
  |  Branch (2253:22): [True: 664, False: 840]
  |  Branch (2253:44): [True: 388, False: 452]
  ------------------
 2254|  1.05k|                    (text[2] == Ch('l') || text[2] == Ch('L')) &&
  ------------------
  |  Branch (2254:22): [True: 377, False: 675]
  |  Branch (2254:44): [True: 197, False: 478]
  ------------------
 2255|    574|                    whitespace_pred::test(text[3]))
  ------------------
  |  Branch (2255:21): [True: 267, False: 307]
  ------------------
 2256|    267|                {
 2257|       |                    // '<?xml ' - xml declaration
 2258|    267|                    text += 4;      // Skip 'xml '
 2259|    267|                    return parse_xml_declaration<Flags>(text);
 2260|    267|                }
 2261|  1.67k|                else
 2262|  1.67k|                {
 2263|       |                    // Parse PI
 2264|  1.67k|                    return parse_pi<Flags>(text);
 2265|  1.67k|                }
 2266|       |            
 2267|       |            // <!...
 2268|  6.40k|            case Ch('!'): 
  ------------------
  |  Branch (2268:13): [True: 6.40k, False: 35.2k]
  ------------------
 2269|       |
 2270|       |                // Parse proper subset of <! node
 2271|  6.40k|                switch (text[1])    
  ------------------
  |  Branch (2271:25): [True: 5.14k, False: 1.25k]
  ------------------
 2272|  6.40k|                {
 2273|       |                
 2274|       |                // <!-
 2275|    503|                case Ch('-'):
  ------------------
  |  Branch (2275:17): [True: 503, False: 5.89k]
  ------------------
 2276|    503|                    if (text[2] == Ch('-'))
  ------------------
  |  Branch (2276:25): [True: 238, False: 265]
  ------------------
 2277|    238|                    {
 2278|       |                        // '<!--' - xml comment
 2279|    238|                        text += 3;     // Skip '!--'
 2280|    238|                        return parse_comment<Flags>(text);
 2281|    238|                    }
 2282|    265|                    break;
 2283|       |
 2284|       |                // <![
 2285|  2.11k|                case Ch('['):
  ------------------
  |  Branch (2285:17): [True: 2.11k, False: 4.28k]
  ------------------
 2286|  2.11k|                    if (text[2] == Ch('C') && text[3] == Ch('D') && text[4] == Ch('A') && 
  ------------------
  |  Branch (2286:25): [True: 1.84k, False: 269]
  |  Branch (2286:47): [True: 1.59k, False: 256]
  |  Branch (2286:69): [True: 1.34k, False: 246]
  ------------------
 2287|  1.34k|                        text[5] == Ch('T') && text[6] == Ch('A') && text[7] == Ch('['))
  ------------------
  |  Branch (2287:25): [True: 1.11k, False: 229]
  |  Branch (2287:47): [True: 885, False: 231]
  |  Branch (2287:69): [True: 478, False: 407]
  ------------------
 2288|    478|                    {
 2289|       |                        // '<![CDATA[' - cdata
 2290|    478|                        text += 8;     // Skip '![CDATA['
 2291|    478|                        return parse_cdata<Flags>(text);
 2292|    478|                    }
 2293|  1.63k|                    break;
 2294|       |
 2295|       |                // <!D
 2296|  2.52k|                case Ch('D'):
  ------------------
  |  Branch (2296:17): [True: 2.52k, False: 3.87k]
  ------------------
 2297|  2.52k|                    if (text[2] == Ch('O') && text[3] == Ch('C') && text[4] == Ch('T') && 
  ------------------
  |  Branch (2297:25): [True: 2.10k, False: 417]
  |  Branch (2297:47): [True: 1.77k, False: 333]
  |  Branch (2297:69): [True: 1.54k, False: 230]
  ------------------
 2298|  1.54k|                        text[5] == Ch('Y') && text[6] == Ch('P') && text[7] == Ch('E') && 
  ------------------
  |  Branch (2298:25): [True: 1.28k, False: 256]
  |  Branch (2298:47): [True: 1.00k, False: 284]
  |  Branch (2298:69): [True: 680, False: 323]
  ------------------
 2299|    680|                        whitespace_pred::test(text[8]))
  ------------------
  |  Branch (2299:25): [True: 439, False: 241]
  ------------------
 2300|    439|                    {
 2301|       |                        // '<!DOCTYPE ' - doctype
 2302|    439|                        text += 9;      // skip '!DOCTYPE '
 2303|    439|                        return parse_doctype<Flags>(text);
 2304|    439|                    }
 2305|       |
 2306|  6.40k|                }   // switch
 2307|       |
 2308|       |                // Attempt to skip other, unrecognized node types starting with <!
 2309|  5.24k|                ++text;     // Skip !
 2310|  28.5k|                while (*text != Ch('>'))
  ------------------
  |  Branch (2310:24): [True: 23.5k, False: 5.02k]
  ------------------
 2311|  23.5k|                {
 2312|  23.5k|                    if (*text == 0)
  ------------------
  |  Branch (2312:25): [True: 218, False: 23.3k]
  ------------------
 2313|    218|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    218|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2314|  23.3k|		    next_char<Flags>(text);
 2315|  23.3k|                }
 2316|  5.02k|                ++text;     // Skip '>'
 2317|  5.02k|                return 0;   // No node recognized
 2318|       |
 2319|  41.6k|            }
 2320|  41.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_elementILi0EEEPNS0_8xml_nodeIcEERPc:
 2195|  33.2k|        {
 2196|       |            // Create element node
 2197|  33.2k|            xml_node<Ch> *element = this->allocate_node(node_element);
 2198|       |
 2199|       |            // Extract element name
 2200|  33.2k|            Ch *name = text;
 2201|  33.2k|            skip<node_name_pred, Flags>(text);
 2202|  33.2k|            if (text == name)
  ------------------
  |  Branch (2202:17): [True: 17, False: 33.2k]
  ------------------
 2203|     17|                RAPIDXML_PARSE_ERROR("expected element name", text);
  ------------------
  |  |   60|     17|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2204|  33.2k|            element->name(name, text - name);
 2205|       |            
 2206|       |            // Skip whitespace between element name and attributes or >
 2207|  33.2k|            skip<whitespace_pred, Flags>(text);
 2208|       |
 2209|       |            // Parse attributes, if any
 2210|  33.2k|            parse_node_attributes<Flags>(text, element);
 2211|       |
 2212|       |            // Determine ending type
 2213|  33.2k|            if (*text == Ch('>'))
  ------------------
  |  Branch (2213:17): [True: 26.7k, False: 6.52k]
  ------------------
 2214|  26.7k|            {
 2215|  26.7k|                ++text;
 2216|  26.7k|                parse_node_contents<Flags>(text, element);
 2217|  26.7k|            }
 2218|  6.52k|            else if (*text == Ch('/'))
  ------------------
  |  Branch (2218:22): [True: 5.72k, False: 797]
  ------------------
 2219|  5.72k|            {
 2220|  5.72k|                ++text;
 2221|  5.72k|                if (*text != Ch('>'))
  ------------------
  |  Branch (2221:21): [True: 9, False: 5.71k]
  ------------------
 2222|      9|                    RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|      9|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2223|  5.71k|                ++text;
 2224|  5.71k|            }
 2225|    797|            else
 2226|    797|                RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|    797|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2227|       |
 2228|       |            // Place zero terminator after name
 2229|  32.4k|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2229:17): [True: 6.42k, Folded]
  ------------------
 2230|  6.42k|                element->name()[element->name_size()] = Ch('\0');
 2231|       |
 2232|       |            // Return parsed element
 2233|  32.4k|            return element;
 2234|  33.2k|        }
_ZN2Wt8rapidxml11memory_poolIcE13allocate_nodeENS0_9node_typeEPKcS5_mm:
  433|  51.2k|        {
  434|  51.2k|            void *memory = allocate_aligned(sizeof(xml_node<Ch>));
  435|  51.2k|            xml_node<Ch> *node = new(memory) xml_node<Ch>(type);
  436|  51.2k|            if (name)
  ------------------
  |  Branch (436:17): [True: 0, False: 51.2k]
  ------------------
  437|      0|            {
  438|      0|                if (name_size > 0)
  ------------------
  |  Branch (438:21): [True: 0, False: 0]
  ------------------
  439|      0|                    node->name(name, name_size);
  440|      0|                else
  441|      0|                    node->name(name);
  442|      0|            }
  443|  51.2k|            if (value)
  ------------------
  |  Branch (443:17): [True: 0, False: 51.2k]
  ------------------
  444|      0|            {
  445|      0|                if (value_size > 0)
  ------------------
  |  Branch (445:21): [True: 0, False: 0]
  ------------------
  446|      0|                    node->value(value, value_size);
  447|      0|                else
  448|      0|                    node->value(value);
  449|      0|            }
  450|  51.2k|            return node;
  451|  51.2k|        }
_ZN2Wt8rapidxml11memory_poolIcE16allocate_alignedEm:
  615|  53.4k|        {
  616|       |            // Calculate aligned pointer
  617|  53.4k|            char *result = align(m_ptr);
  618|       |
  619|       |            // If not enough memory left in current pool, allocate a new pool
  620|  53.4k|            if (result + size > m_end)
  ------------------
  |  Branch (620:17): [True: 48, False: 53.3k]
  ------------------
  621|     48|            {
  622|       |                // Calculate required pool size (may be bigger than RAPIDXML_DYNAMIC_POOL_SIZE)
  623|     48|                std::size_t pool_size = RAPIDXML_DYNAMIC_POOL_SIZE;
  ------------------
  |  |  130|     48|    #define RAPIDXML_DYNAMIC_POOL_SIZE (64 * 1024)
  ------------------
  624|     48|                if (pool_size < size)
  ------------------
  |  Branch (624:21): [True: 0, False: 48]
  ------------------
  625|      0|                    pool_size = size;
  626|       |                
  627|       |                // Allocate
  628|     48|                std::size_t alloc_size = sizeof(header) + (2 * RAPIDXML_ALIGNMENT - 2) + pool_size;     // 2 alignments required in worst case: one for header, one for actual allocation
  ------------------
  |  |  138|     48|    #define RAPIDXML_ALIGNMENT sizeof(void *)
  ------------------
  629|     48|                char *raw_memory = allocate_raw(alloc_size);
  630|       |                    
  631|       |                // Setup new pool in allocated memory
  632|     48|                char *pool = align(raw_memory);
  633|     48|                header *new_header = reinterpret_cast<header *>(pool);
  634|     48|                new_header->previous_begin = m_begin;
  635|     48|                m_begin = raw_memory;
  636|     48|                m_ptr = pool + sizeof(header);
  637|     48|                m_end = raw_memory + alloc_size;
  638|       |
  639|       |                // Calculate aligned pointer again using new pool
  640|     48|                result = align(m_ptr);
  641|     48|            }
  642|       |
  643|       |            // Update pool and return aligned pointer
  644|  53.4k|            m_ptr = result + size;
  645|  53.4k|            return result;
  646|  53.4k|        }
_ZN2Wt8rapidxml11memory_poolIcE12allocate_rawEm:
  595|     48|        {
  596|       |            // Allocate
  597|     48|            void *memory;   
  598|     48|            if (m_alloc_func)   // Allocate memory using either user-specified allocation function or global operator new[]
  ------------------
  |  Branch (598:17): [True: 0, False: 48]
  ------------------
  599|      0|            {
  600|      0|                memory = m_alloc_func(size);
  601|      0|                assert(memory); // Allocator is not allowed to return 0, on failure it must either throw, stop the program or use longjmp
  602|      0|            }
  603|     48|            else
  604|     48|            {
  605|     48|                memory = new char[size];
  606|       |#ifdef RAPIDXML_NO_EXCEPTIONS
  607|       |                if (!memory)            // If exceptions are disabled, verify memory allocation, because new will not be able to throw bad_alloc
  608|       |                    RAPIDXML_PARSE_ERROR("out of memory", 0);
  609|       |#endif
  610|     48|            }
  611|     48|            return static_cast<char *>(memory);
  612|     48|        }
_ZN2Wt8rapidxml8xml_baseIcE5valueEPKcm:
  767|  25.3k|        {
  768|  25.3k|            m_value = const_cast<Ch *>(value);
  769|  25.3k|            m_value_size = size;
  770|  25.3k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_14node_name_predELi0EEEvRPc:
 1711|  34.0k|        {
 1712|  34.0k|            Ch *tmp = text;
 1713|  85.0k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 51.0k, False: 34.0k]
  ------------------
 1714|  51.0k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  34.0k|            text = tmp;
 1717|  34.0k|        }
_ZN2Wt8rapidxml12xml_documentIcE14node_name_pred4testEc:
 1455|  85.0k|            {
 1456|  85.0k|                return internal::lookup_tables<0>::lookup_node_name[static_cast<unsigned char>(ch)];
 1457|  85.0k|            }
_ZN2Wt8rapidxml8xml_baseIcE4nameEPKcm:
  737|  35.4k|        {
  738|  35.4k|            m_name = const_cast<Ch *>(name);
  739|  35.4k|            m_name_size = size;
  740|  35.4k|        }
_ZN2Wt8rapidxml12xml_documentIcE21parse_node_attributesILi0EEEvRPcPNS0_8xml_nodeIcEE:
 2396|  33.2k|        {
 2397|       |            // For all attributes 
 2398|  34.8k|            while (attribute_name_pred::test(*text))
  ------------------
  |  Branch (2398:20): [True: 2.17k, False: 32.6k]
  ------------------
 2399|  2.17k|            {
 2400|       |                // Extract attribute name
 2401|  2.17k|                Ch *name = text;
 2402|  2.17k|                ++text;     // Skip first character of attribute name
 2403|  2.17k|                skip<attribute_name_pred, Flags>(text);
 2404|  2.17k|                if (text == name)
  ------------------
  |  Branch (2404:21): [True: 0, False: 2.17k]
  ------------------
 2405|      0|                    RAPIDXML_PARSE_ERROR("expected attribute name", name);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2406|       |
 2407|       |                // Create new attribute
 2408|  2.17k|                xml_attribute<Ch> *attribute = this->allocate_attribute();
 2409|  2.17k|                attribute->name(name, text - name);
 2410|  2.17k|                node->append_attribute(attribute);
 2411|       |
 2412|       |                // Skip whitespace after attribute name
 2413|  2.17k|                skip<whitespace_pred, Flags>(text);
 2414|       |
 2415|       |                // Skip =
 2416|  2.17k|                if (*text != Ch('='))
  ------------------
  |  Branch (2416:21): [True: 44, False: 2.12k]
  ------------------
 2417|     44|                    RAPIDXML_PARSE_ERROR("expected =", text);
  ------------------
  |  |   60|     44|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2418|  2.12k|                ++text;
 2419|       |
 2420|       |                // Add terminating zero after name
 2421|  2.12k|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2421:21): [True: 2.12k, Folded]
  ------------------
 2422|  2.12k|                    attribute->name()[attribute->name_size()] = 0;
 2423|       |
 2424|       |                // Skip whitespace after =
 2425|  2.12k|                skip<whitespace_pred, Flags>(text);
 2426|       |
 2427|       |                // Skip quote and remember if it was ' or "
 2428|  2.12k|                Ch quote = *text;
 2429|  2.12k|                if (quote != Ch('\'') && quote != Ch('"'))
  ------------------
  |  Branch (2429:21): [True: 1.35k, False: 772]
  |  Branch (2429:42): [True: 20, False: 1.33k]
  ------------------
 2430|     20|                    RAPIDXML_PARSE_ERROR("expected ' or \"", text);
  ------------------
  |  |   60|     20|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2431|  2.10k|                ++text;
 2432|       |
 2433|       |                // Extract attribute value and expand char refs in it
 2434|  2.10k|                Ch *value = text, *end;
 2435|  2.10k|                const int AttFlags = Flags & ~parse_normalize_whitespace;   // No whitespace normalization in attributes
 2436|  2.10k|                if (quote == Ch('\''))
  ------------------
  |  Branch (2436:21): [True: 772, False: 1.33k]
  ------------------
 2437|    772|                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('\'')>, attribute_value_pure_pred<Ch('\'')>, AttFlags>(text);
 2438|  1.33k|                else
 2439|  1.33k|                    end = skip_and_expand_character_refs<attribute_value_pred<Ch('"')>, attribute_value_pure_pred<Ch('"')>, AttFlags>(text);
 2440|       |                
 2441|       |                // Set attribute value
 2442|  2.10k|                attribute->value(value, end - value);
 2443|       |                
 2444|       |                // Make sure that end quote is present
 2445|  2.10k|                if (*text != quote)
  ------------------
  |  Branch (2445:21): [True: 551, False: 1.55k]
  ------------------
 2446|    551|                    RAPIDXML_PARSE_ERROR("expected ' or \"", text);
  ------------------
  |  |   60|    551|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2447|  1.55k|                ++text;     // Skip quote
 2448|       |
 2449|       |                // Add terminating zero after value
 2450|  1.55k|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2450:21): [True: 1.43k, Folded]
  ------------------
 2451|  1.43k|                    attribute->value()[attribute->value_size()] = 0;
 2452|       |
 2453|       |                // Skip whitespace after attribute value
 2454|  1.55k|                skip<whitespace_pred, Flags>(text);
 2455|  1.55k|            }
 2456|  33.2k|        }
_ZN2Wt8rapidxml12xml_documentIcE19attribute_name_pred4testEc:
 1464|  37.2k|            {
 1465|  37.2k|                return internal::lookup_tables<0>::lookup_attribute_name[static_cast<unsigned char>(ch)];
 1466|  37.2k|            }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_19attribute_name_predELi0EEEvRPc:
 1711|  2.17k|        {
 1712|  2.17k|            Ch *tmp = text;
 1713|  2.52k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 357, False: 2.17k]
  ------------------
 1714|    357|	      next_char<Flags>(tmp);
 1715|       |
 1716|  2.17k|            text = tmp;
 1717|  2.17k|        }
_ZN2Wt8rapidxml11memory_poolIcE18allocate_attributeEPKcS4_mm:
  464|  2.17k|        {
  465|  2.17k|            void *memory = allocate_aligned(sizeof(xml_attribute<Ch>));
  466|  2.17k|            xml_attribute<Ch> *attribute = new(memory) xml_attribute<Ch>;
  467|  2.17k|            if (name)
  ------------------
  |  Branch (467:17): [True: 0, False: 2.17k]
  ------------------
  468|      0|            {
  469|      0|                if (name_size > 0)
  ------------------
  |  Branch (469:21): [True: 0, False: 0]
  ------------------
  470|      0|                    attribute->name(name, name_size);
  471|      0|                else
  472|      0|                    attribute->name(name);
  473|      0|            }
  474|  2.17k|            if (value)
  ------------------
  |  Branch (474:17): [True: 0, False: 2.17k]
  ------------------
  475|      0|            {
  476|      0|                if (value_size > 0)
  ------------------
  |  Branch (476:21): [True: 0, False: 0]
  ------------------
  477|      0|                    attribute->value(value, value_size);
  478|      0|                else
  479|      0|                    attribute->value(value);
  480|      0|            }
  481|  2.17k|            return attribute;
  482|  2.17k|        }
_ZN2Wt8rapidxml13xml_attributeIcEC2Ev:
  826|  2.17k|        {
  827|  2.17k|        }
_ZN2Wt8rapidxml8xml_nodeIcE16append_attributeEPNS0_13xml_attributeIcEE:
 1233|  2.17k|        {
 1234|  2.17k|            assert(attribute && !attribute->parent());
 1235|  2.17k|            if (first_attribute())
  ------------------
  |  Branch (1235:17): [True: 1.02k, False: 1.14k]
  ------------------
 1236|  1.02k|            {
 1237|  1.02k|                attribute->m_prev_attribute = m_last_attribute;
 1238|  1.02k|                m_last_attribute->m_next_attribute = attribute;
 1239|  1.02k|            }
 1240|  1.14k|            else
 1241|  1.14k|            {
 1242|  1.14k|                attribute->m_prev_attribute = 0;
 1243|  1.14k|                m_first_attribute = attribute;
 1244|  1.14k|            }
 1245|  2.17k|            m_last_attribute = attribute;
 1246|  2.17k|            attribute->m_parent = this;
 1247|  2.17k|            attribute->m_next_attribute = 0;
 1248|  2.17k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_20attribute_value_predILc39EEENS2_25attribute_value_pure_predILc39EEELi0EEEPcRS8_:
 1724|    772|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|    772|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 772]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|    772|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|    772|            Ch *src = text;
 1739|    772|            Ch *dest = src;
 1740|  13.8k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 13.1k, False: 721]
  ------------------
 1741|  13.1k|            {
 1742|       |                // If entity translation is enabled    
 1743|  13.1k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 13.1k, Folded]
  ------------------
 1744|  13.1k|                {
 1745|       |                    // Test if replacement is needed
 1746|  13.1k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 5.41k, False: 7.73k]
  ------------------
 1747|  5.41k|                    {
 1748|  5.41k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 4.88k, False: 527]
  ------------------
 1749|  5.41k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  1.78k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 1.78k, False: 3.62k]
  ------------------
 1753|  1.78k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 633, False: 1.15k]
  |  Branch (1753:54): [True: 429, False: 204]
  |  Branch (1753:75): [True: 213, False: 216]
  ------------------
 1754|    213|                            {
 1755|    213|                                *dest = Ch('&');
 1756|    213|                                ++dest;
 1757|    213|                                src += 5;
 1758|    213|                                continue;
 1759|    213|                            }
 1760|  1.57k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 806, False: 770]
  |  Branch (1760:54): [True: 601, False: 205]
  |  Branch (1760:75): [True: 402, False: 199]
  |  Branch (1760:96): [True: 199, False: 203]
  ------------------
 1761|    199|                            {
 1762|    199|                                *dest = Ch('\'');
 1763|    199|                                ++dest;
 1764|    199|                                src += 6;
 1765|    199|                                continue;
 1766|    199|                            }
 1767|  1.37k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  1.37k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 998, False: 4.41k]
  ------------------
 1771|    998|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 789, False: 209]
  |  Branch (1771:54): [True: 593, False: 196]
  |  Branch (1771:75): [True: 399, False: 194]
  |  Branch (1771:96): [True: 202, False: 197]
  ------------------
 1772|    202|                            {
 1773|    202|                                *dest = Ch('"');
 1774|    202|                                ++dest;
 1775|    202|                                src += 6;
 1776|    202|                                continue;
 1777|    202|                            }
 1778|    796|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|    796|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 597, False: 4.81k]
  ------------------
 1782|    597|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 395, False: 202]
  |  Branch (1782:54): [True: 197, False: 198]
  ------------------
 1783|    197|                            {
 1784|    197|                                *dest = Ch('>');
 1785|    197|                                ++dest;
 1786|    197|                                src += 4;
 1787|    197|                                continue;
 1788|    197|                            }
 1789|    400|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    624|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 624, False: 4.78k]
  ------------------
 1793|    624|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 406, False: 218]
  |  Branch (1793:54): [True: 194, False: 212]
  ------------------
 1794|    194|                            {
 1795|    194|                                *dest = Ch('<');
 1796|    194|                                ++dest;
 1797|    194|                                src += 4;
 1798|    194|                                continue;
 1799|    194|                            }
 1800|    430|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|    877|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 877, False: 4.53k]
  ------------------
 1804|    877|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 404, False: 473]
  ------------------
 1805|    404|                            {
 1806|    404|                                unsigned long code = 0;
 1807|    404|                                src += 3;   // Skip &#x
 1808|    809|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 809, Folded]
  ------------------
 1809|    809|                                {
 1810|    809|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|    809|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 404, False: 405]
  ------------------
 1812|    404|                                        break;
 1813|    405|                                    code = code * 16 + digit;
 1814|    405|                                    ++src;
 1815|    405|                                }
 1816|    404|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    404|                            }
 1818|    473|                            else
 1819|    473|                            {
 1820|    473|                                unsigned long code = 0;
 1821|    473|                                src += 2;   // Skip &#
 1822|    928|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 928, Folded]
  ------------------
 1823|    928|                                {
 1824|    928|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|    928|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 473, False: 455]
  ------------------
 1826|    473|                                        break;
 1827|    455|                                    code = code * 10 + digit;
 1828|    455|                                    ++src;
 1829|    455|                                }
 1830|    473|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|    473|                            }
 1832|    877|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 826, False: 51]
  ------------------
 1833|    826|                                ++src;
 1834|     51|                            else
 1835|     51|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|     51|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|    826|                            continue;
 1837|  5.41k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  3.53k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 3.53k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  3.53k|                    }
 1847|  13.1k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  11.2k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 11.2k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  11.2k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 11.2k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  11.2k|		else
 1868|  11.2k|		  *dest++ = *src++;
 1869|  11.2k|            }
 1870|       |
 1871|       |            // Return new end
 1872|    721|            text = src;
 1873|    721|            return dest;
 1874|       |
 1875|    772|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_25attribute_value_pure_predILc39EEELi0EEEvRPc:
 1711|    772|        {
 1712|    772|            Ch *tmp = text;
 1713|  1.01k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 245, False: 772]
  ------------------
 1714|    245|	      next_char<Flags>(tmp);
 1715|       |
 1716|    772|            text = tmp;
 1717|    772|        }
_ZN2Wt8rapidxml12xml_documentIcE25attribute_value_pure_predILc39EE4testEc:
 1515|  1.01k|            {
 1516|  1.01k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1516:21): [True: 1.01k, Folded]
  ------------------
 1517|  1.01k|                    return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)];
 1518|      0|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1518:21): [Folded, False: 0]
  ------------------
 1519|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)];
 1520|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1521|      0|            }
_ZN2Wt8rapidxml12xml_documentIcE20attribute_value_predILc39EE4testEc:
 1501|  13.8k|            {
 1502|  13.8k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1502:21): [True: 13.8k, Folded]
  ------------------
 1503|  13.8k|                    return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)];
 1504|      0|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1504:21): [Folded, False: 0]
  ------------------
 1505|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)];
 1506|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1507|      0|            }
_ZN2Wt8rapidxml12xml_documentIcE22insert_coded_characterILi0EEEvRPcm:
 1528|  4.16k|        {
 1529|  4.16k|            if (Flags & parse_no_utf8)
  ------------------
  |  Branch (1529:17): [Folded, False: 4.16k]
  ------------------
 1530|      0|            {
 1531|       |                // Insert 8-bit ASCII character
 1532|       |                // Todo: possibly verify that code is less than 256 and use replacement char otherwise?
 1533|      0|                text[0] = static_cast<unsigned char>(code);
 1534|      0|                text += 1;
 1535|      0|            }
 1536|  4.16k|            else
 1537|  4.16k|            {
 1538|       |                // Insert UTF8 sequence
 1539|  4.16k|                if (code < 0x80)    // 1 byte sequence
  ------------------
  |  Branch (1539:21): [True: 2.85k, False: 1.31k]
  ------------------
 1540|  2.85k|                {
 1541|  2.85k|		    text[0] = static_cast<unsigned char>(code);
 1542|  2.85k|                    text += 1;
 1543|  2.85k|                }
 1544|  1.31k|                else if (code < 0x800)  // 2 byte sequence
  ------------------
  |  Branch (1544:26): [True: 312, False: 1.00k]
  ------------------
 1545|    312|                {
 1546|    312|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1547|    312|		    code >>= 6;
 1548|    312|		    text[0] = static_cast<unsigned char>(code | 0xC0);
 1549|    312|                    text += 2;
 1550|    312|                }
 1551|  1.00k|	            else if (code < 0x10000)    // 3 byte sequence
  ------------------
  |  Branch (1551:23): [True: 289, False: 711]
  ------------------
 1552|    289|                {
 1553|    289|		    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1554|    289|		    code >>= 6;
 1555|    289|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1556|    289|		    code >>= 6;
 1557|    289|		    text[0] = static_cast<unsigned char>(code | 0xE0);
 1558|    289|                    text += 3;
 1559|    289|                }
 1560|    711|	            else if (code < 0x110000)   // 4 byte sequence
  ------------------
  |  Branch (1560:23): [True: 361, False: 350]
  ------------------
 1561|    361|                {
 1562|    361|		    text[3] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1563|    361|		    code >>= 6;
 1564|    361|		    text[2] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1565|    361|		    code >>= 6;
 1566|    361|		    text[1] = static_cast<unsigned char>((code | 0x80) & 0xBF);
 1567|    361|		    code >>= 6;
 1568|    361|		    text[0] = static_cast<unsigned char>(code | 0xF0);
 1569|    361|                    text += 4;
 1570|    361|                }
 1571|    350|                else    // Invalid, only codes up to 0x10FFFF are allowed in Unicode
 1572|    350|                {
 1573|    350|                    RAPIDXML_PARSE_ERROR
  ------------------
  |  |   60|    350|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1574|    350|		      (("invalid numeric character entity: "
 1575|    350|			+ std::to_string(code)).c_str(), 0);
 1576|    350|                }
 1577|  4.16k|            }
 1578|  4.16k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_20attribute_value_predILc34EEENS2_25attribute_value_pure_predILc34EEELi0EEEPcRS8_:
 1724|  1.33k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  1.33k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 1.33k]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|  1.33k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  1.33k|            Ch *src = text;
 1739|  1.33k|            Ch *dest = src;
 1740|  25.9k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 24.6k, False: 1.26k]
  ------------------
 1741|  24.6k|            {
 1742|       |                // If entity translation is enabled    
 1743|  24.6k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 24.6k, Folded]
  ------------------
 1744|  24.6k|                {
 1745|       |                    // Test if replacement is needed
 1746|  24.6k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 7.34k, False: 17.3k]
  ------------------
 1747|  7.34k|                    {
 1748|  7.34k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 6.21k, False: 1.12k]
  ------------------
 1749|  7.34k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  2.08k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 2.08k, False: 5.26k]
  ------------------
 1753|  2.08k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 667, False: 1.41k]
  |  Branch (1753:54): [True: 410, False: 257]
  |  Branch (1753:75): [True: 200, False: 210]
  ------------------
 1754|    200|                            {
 1755|    200|                                *dest = Ch('&');
 1756|    200|                                ++dest;
 1757|    200|                                src += 5;
 1758|    200|                                continue;
 1759|    200|                            }
 1760|  1.88k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.01k, False: 866]
  |  Branch (1760:54): [True: 780, False: 237]
  |  Branch (1760:75): [True: 416, False: 364]
  |  Branch (1760:96): [True: 194, False: 222]
  ------------------
 1761|    194|                            {
 1762|    194|                                *dest = Ch('\'');
 1763|    194|                                ++dest;
 1764|    194|                                src += 6;
 1765|    194|                                continue;
 1766|    194|                            }
 1767|  1.68k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  1.68k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.25k, False: 6.09k]
  ------------------
 1771|  1.25k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 1.01k, False: 241]
  |  Branch (1771:54): [True: 765, False: 246]
  |  Branch (1771:75): [True: 466, False: 299]
  |  Branch (1771:96): [True: 257, False: 209]
  ------------------
 1772|    257|                            {
 1773|    257|                                *dest = Ch('"');
 1774|    257|                                ++dest;
 1775|    257|                                src += 6;
 1776|    257|                                continue;
 1777|    257|                            }
 1778|    995|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|    995|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 815, False: 6.52k]
  ------------------
 1782|    815|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 595, False: 220]
  |  Branch (1782:54): [True: 215, False: 380]
  ------------------
 1783|    215|                            {
 1784|    215|                                *dest = Ch('>');
 1785|    215|                                ++dest;
 1786|    215|                                src += 4;
 1787|    215|                                continue;
 1788|    215|                            }
 1789|    600|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    734|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 734, False: 6.61k]
  ------------------
 1793|    734|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 478, False: 256]
  |  Branch (1793:54): [True: 271, False: 207]
  ------------------
 1794|    271|                            {
 1795|    271|                                *dest = Ch('<');
 1796|    271|                                ++dest;
 1797|    271|                                src += 4;
 1798|    271|                                continue;
 1799|    271|                            }
 1800|    463|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|  1.33k|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 1.33k, False: 6.01k]
  ------------------
 1804|  1.33k|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 784, False: 550]
  ------------------
 1805|    784|                            {
 1806|    784|                                unsigned long code = 0;
 1807|    784|                                src += 3;   // Skip &#x
 1808|  2.54k|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 2.54k, Folded]
  ------------------
 1809|  2.54k|                                {
 1810|  2.54k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|  2.54k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 784, False: 1.76k]
  ------------------
 1812|    784|                                        break;
 1813|  1.76k|                                    code = code * 16 + digit;
 1814|  1.76k|                                    ++src;
 1815|  1.76k|                                }
 1816|    784|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    784|                            }
 1818|    550|                            else
 1819|    550|                            {
 1820|    550|                                unsigned long code = 0;
 1821|    550|                                src += 2;   // Skip &#
 1822|    994|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 994, Folded]
  ------------------
 1823|    994|                                {
 1824|    994|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|    994|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 550, False: 444]
  ------------------
 1826|    550|                                        break;
 1827|    444|                                    code = code * 10 + digit;
 1828|    444|                                    ++src;
 1829|    444|                                }
 1830|    550|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|    550|                            }
 1832|  1.33k|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 1.25k, False: 75]
  ------------------
 1833|  1.25k|                                ++src;
 1834|     75|                            else
 1835|     75|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|     75|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|  1.25k|                            continue;
 1837|  7.34k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  4.87k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 4.87k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  4.87k|                    }
 1847|  24.6k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  22.1k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 22.1k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  22.1k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 22.1k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  22.1k|		else
 1868|  22.1k|		  *dest++ = *src++;
 1869|  22.1k|            }
 1870|       |
 1871|       |            // Return new end
 1872|  1.26k|            text = src;
 1873|  1.26k|            return dest;
 1874|       |
 1875|  1.33k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_25attribute_value_pure_predILc34EEELi0EEEvRPc:
 1711|  1.33k|        {
 1712|  1.33k|            Ch *tmp = text;
 1713|  1.68k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 344, False: 1.33k]
  ------------------
 1714|    344|	      next_char<Flags>(tmp);
 1715|       |
 1716|  1.33k|            text = tmp;
 1717|  1.33k|        }
_ZN2Wt8rapidxml12xml_documentIcE25attribute_value_pure_predILc34EE4testEc:
 1515|  1.68k|            {
 1516|  1.68k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1516:21): [Folded, False: 1.68k]
  ------------------
 1517|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_1_pure[static_cast<unsigned char>(ch)];
 1518|  1.68k|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1518:21): [True: 1.68k, Folded]
  ------------------
 1519|  1.68k|                    return internal::lookup_tables<0>::lookup_attribute_data_2_pure[static_cast<unsigned char>(ch)];
 1520|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1521|  1.68k|            }
_ZN2Wt8rapidxml12xml_documentIcE20attribute_value_predILc34EE4testEc:
 1501|  25.9k|            {
 1502|  25.9k|                if (Quote == Ch('\''))
  ------------------
  |  Branch (1502:21): [Folded, False: 25.9k]
  ------------------
 1503|      0|                    return internal::lookup_tables<0>::lookup_attribute_data_1[static_cast<unsigned char>(ch)];
 1504|  25.9k|                if (Quote == Ch('\"'))
  ------------------
  |  Branch (1504:21): [True: 25.9k, Folded]
  ------------------
 1505|  25.9k|                    return internal::lookup_tables<0>::lookup_attribute_data_2[static_cast<unsigned char>(ch)];
 1506|      0|                return 0;       // Should never be executed, to avoid warnings on Comeau
 1507|  25.9k|            }
_ZNK2Wt8rapidxml8xml_baseIcE5valueEv:
  708|  14.5k|        {
  709|  14.5k|            return m_value ? m_value : nullstr();
  ------------------
  |  Branch (709:20): [True: 4.83k, False: 9.76k]
  ------------------
  710|  14.5k|        }
_ZNK2Wt8rapidxml8xml_baseIcE10value_sizeEv:
  716|  10.1k|        {
  717|  10.1k|            return m_value ? m_value_size : 0;
  ------------------
  |  Branch (717:20): [True: 4.64k, False: 5.54k]
  ------------------
  718|  10.1k|        }
_ZN2Wt8rapidxml12xml_documentIcE19parse_node_contentsILi0EEEvRPcPNS0_8xml_nodeIcEE:
 2325|  26.7k|        {
 2326|       |            // For all children and text
 2327|  32.8k|            while (1)
  ------------------
  |  Branch (2327:20): [True: 32.8k, Folded]
  ------------------
 2328|  32.8k|            {
 2329|       |                // Skip whitespace between > and node contents
 2330|  32.8k|                Ch *contents_start = text;      // Store start of node contents before whitespace is skipped
 2331|  32.8k|		if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2331:7): [Folded, False: 32.8k]
  ------------------
 2332|      0|		  skip<whitespace_pred, Flags>(text);
 2333|  32.8k|                Ch next_char = *text;
 2334|       |
 2335|       |            // After data nodes, instead of continuing the loop, control jumps here.
 2336|       |            // This is because zero termination inside parse_and_append_data() function
 2337|       |            // would wreak havoc with the above code.
 2338|       |            // Also, skipping whitespace after data nodes is unnecessary.
 2339|  46.0k|            after_data_node:    
 2340|       |                
 2341|       |                // Determine what comes next: node closing, child node, data node, or 0?
 2342|  46.0k|                switch (next_char)
 2343|  46.0k|                {
 2344|       |                
 2345|       |                // Node closing or child node
 2346|  32.0k|                case Ch('<'):
  ------------------
  |  Branch (2346:17): [True: 32.0k, False: 13.9k]
  ------------------
 2347|  32.0k|                    if (text[1] == Ch('/'))
  ------------------
  |  Branch (2347:25): [True: 732, False: 31.2k]
  ------------------
 2348|    732|                    {
 2349|       |                        // Node closing
 2350|    732|                        text += 2;      // Skip '</'
 2351|    732|                        if (Flags & parse_validate_closing_tags)
  ------------------
  |  Branch (2351:29): [Folded, False: 732]
  ------------------
 2352|      0|                        {
 2353|       |                            // Skip and validate closing tag name
 2354|      0|                            Ch *closing_name = text;
 2355|      0|                            skip<node_name_pred, Flags>(text);
 2356|      0|                            if (!internal::compare(node->name(), node->name_size(), closing_name, text - closing_name, true))
  ------------------
  |  Branch (2356:33): [True: 0, False: 0]
  ------------------
 2357|      0|                                RAPIDXML_PARSE_ERROR("invalid closing tag name", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2358|      0|                        }
 2359|    732|                        else
 2360|    732|                        {
 2361|       |                            // No validation, just skip name
 2362|    732|                            skip<node_name_pred, Flags>(text);
 2363|    732|                        }
 2364|       |                        // Skip remaining whitespace after node name
 2365|    732|                        skip<whitespace_pred, Flags>(text);
 2366|    732|                        if (*text != Ch('>'))
  ------------------
  |  Branch (2366:29): [True: 23, False: 709]
  ------------------
 2367|     23|                            RAPIDXML_PARSE_ERROR("expected >", text);
  ------------------
  |  |   60|     23|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2368|    709|                        ++text;     // Skip '>'
 2369|    709|                        return;     // Node closed, finished parsing contents
 2370|    732|                    }
 2371|  31.2k|                    else
 2372|  31.2k|                    {
 2373|       |                        // Child node
 2374|  31.2k|                        ++text;     // Skip '<'
 2375|  31.2k|                        if (xml_node<Ch> *child = parse_node<Flags>(text))
  ------------------
  |  Branch (2375:43): [True: 3.71k, False: 27.5k]
  ------------------
 2376|  3.71k|                            node->append_node(child);
 2377|  31.2k|                    }
 2378|  31.2k|                    break;
 2379|       |
 2380|       |                // End of data - error
 2381|  31.2k|                case Ch('\0'):
  ------------------
  |  Branch (2381:17): [True: 360, False: 45.6k]
  ------------------
 2382|    360|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    360|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2383|       |
 2384|       |                // Data node
 2385|  13.6k|                default:
  ------------------
  |  Branch (2385:17): [True: 13.6k, False: 32.3k]
  ------------------
 2386|  13.6k|                    next_char = parse_and_append_data<Flags>(node, text, contents_start);
 2387|  13.6k|                    goto after_data_node;   // Bypass regular processing after data nodes
 2388|       |
 2389|  46.0k|                }
 2390|  46.0k|            }
 2391|  26.7k|        }
_ZN2Wt8rapidxml12xml_documentIcE21parse_and_append_dataILi0EEEcPNS0_8xml_nodeIcEERPcS7_:
 2098|  13.6k|        {
 2099|       |            // Backup to contents start if whitespace trimming is disabled
 2100|  13.6k|            if (!(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (2100:17): [True: 13.6k, Folded]
  ------------------
 2101|  13.6k|                text = contents_start;     
 2102|       |            
 2103|       |            // Skip until end of data
 2104|  13.6k|            Ch *value = text, *end;
 2105|  13.6k|            if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2105:17): [Folded, False: 13.6k]
  ------------------
 2106|      0|                end = skip_and_expand_character_refs<text_pred, text_pure_with_ws_pred, Flags>(text);   
 2107|  13.6k|            else
 2108|  13.6k|                end = skip_and_expand_character_refs<text_pred, text_pure_no_ws_pred, Flags>(text);
 2109|       |
 2110|       |            // Trim trailing whitespace if flag is set; leading was already trimmed by whitespace skip after >
 2111|  13.6k|            if (Flags & parse_trim_whitespace)
  ------------------
  |  Branch (2111:17): [Folded, False: 13.6k]
  ------------------
 2112|      0|            {
 2113|      0|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (2113:21): [Folded, False: 0]
  ------------------
 2114|      0|                {
 2115|       |                    // Whitespace is already condensed to single space characters by skipping function, so just trim 1 char off the end
 2116|      0|                    if (*(end - 1) == Ch(' '))
  ------------------
  |  Branch (2116:25): [True: 0, False: 0]
  ------------------
 2117|      0|                        --end;
 2118|      0|                }
 2119|      0|                else
 2120|      0|                {
 2121|       |                    // Backup until non-whitespace character is found
 2122|      0|                    while (whitespace_pred::test(*(end - 1)))
  ------------------
  |  Branch (2122:28): [True: 0, False: 0]
  ------------------
 2123|      0|                        --end;
 2124|      0|                }
 2125|      0|            }
 2126|       |            
 2127|       |            // If characters are still left between end and value (this test is only necessary if normalization is enabled)
 2128|       |            // Create new data node
 2129|  13.6k|            if (!(Flags & parse_no_data_nodes))
  ------------------
  |  Branch (2129:17): [True: 13.1k, Folded]
  ------------------
 2130|  13.1k|            {
 2131|  13.1k|                xml_node<Ch> *data = this->allocate_node(node_data);
 2132|  13.1k|                data->value(value, end - value);
 2133|  13.1k|                node->append_node(data);
 2134|  13.1k|            }
 2135|       |
 2136|       |            // Add data to parent node if no data exists yet
 2137|  13.6k|            if (!(Flags & parse_no_element_values)) 
  ------------------
  |  Branch (2137:17): [True: 13.1k, Folded]
  ------------------
 2138|  13.1k|                if (*node->value() == Ch('\0'))
  ------------------
  |  Branch (2138:21): [True: 9.76k, False: 3.40k]
  ------------------
 2139|  9.76k|                    node->value(value, end - value);
 2140|       |
 2141|       |            // Place zero terminator after value
 2142|  13.6k|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2142:17): [True: 13.1k, Folded]
  ------------------
 2143|  13.1k|            {
 2144|  13.1k|                Ch ch = *text;
 2145|  13.1k|                *end = Ch('\0');
 2146|  13.1k|                return ch;      // Return character that ends data; this is required because zero terminator overwritten it
 2147|  13.1k|            }
 2148|       |
 2149|       |            // Return character that ends data
 2150|    461|            return *text;
 2151|  13.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE30skip_and_expand_character_refsINS2_9text_predENS2_20text_pure_no_ws_predELi0EEEPcRS6_:
 1724|  13.6k|        {
 1725|       |            // If entity translation, whitespace condense and whitespace trimming is disabled, use plain skip
 1726|  13.6k|            if (Flags & parse_no_entity_translation && 
  ------------------
  |  Branch (1726:17): [Folded, False: 13.6k]
  ------------------
 1727|      0|                !(Flags & parse_normalize_whitespace) &&
  ------------------
  |  Branch (1727:17): [True: 0, Folded]
  ------------------
 1728|      0|                !(Flags & parse_trim_whitespace))
  ------------------
  |  Branch (1728:17): [True: 0, Folded]
  ------------------
 1729|      0|            {
 1730|      0|                skip<StopPred, Flags>(text);
 1731|      0|                return text;
 1732|      0|            }
 1733|       |            
 1734|       |            // Use simple skip until first modification is detected
 1735|  13.6k|            skip<StopPredPure, Flags>(text);
 1736|       |
 1737|       |            // Use translation skip
 1738|  13.6k|            Ch *src = text;
 1739|  13.6k|            Ch *dest = src;
 1740|  59.1k|            while (StopPred::test(*src))
  ------------------
  |  Branch (1740:20): [True: 45.9k, False: 13.1k]
  ------------------
 1741|  45.9k|            {
 1742|       |                // If entity translation is enabled    
 1743|  45.9k|                if (!(Flags & parse_no_entity_translation))
  ------------------
  |  Branch (1743:21): [True: 45.9k, Folded]
  ------------------
 1744|  45.9k|                {
 1745|       |                    // Test if replacement is needed
 1746|  45.9k|                    if (src[0] == Ch('&'))
  ------------------
  |  Branch (1746:25): [True: 18.1k, False: 27.8k]
  ------------------
 1747|  18.1k|                    {
 1748|  18.1k|                        switch (src[1])
  ------------------
  |  Branch (1748:33): [True: 7.29k, False: 10.8k]
  ------------------
 1749|  18.1k|                        {
 1750|       |
 1751|       |                        // &amp; &apos;
 1752|  2.08k|                        case Ch('a'): 
  ------------------
  |  Branch (1752:25): [True: 2.08k, False: 16.0k]
  ------------------
 1753|  2.08k|                            if (src[2] == Ch('m') && src[3] == Ch('p') && src[4] == Ch(';'))
  ------------------
  |  Branch (1753:33): [True: 810, False: 1.27k]
  |  Branch (1753:54): [True: 544, False: 266]
  |  Branch (1753:75): [True: 268, False: 276]
  ------------------
 1754|    268|                            {
 1755|    268|                                *dest = Ch('&');
 1756|    268|                                ++dest;
 1757|    268|                                src += 5;
 1758|    268|                                continue;
 1759|    268|                            }
 1760|  1.81k|                            if (src[2] == Ch('p') && src[3] == Ch('o') && src[4] == Ch('s') && src[5] == Ch(';'))
  ------------------
  |  Branch (1760:33): [True: 1.00k, False: 812]
  |  Branch (1760:54): [True: 716, False: 286]
  |  Branch (1760:75): [True: 474, False: 242]
  |  Branch (1760:96): [True: 206, False: 268]
  ------------------
 1761|    206|                            {
 1762|    206|                                *dest = Ch('\'');
 1763|    206|                                ++dest;
 1764|    206|                                src += 6;
 1765|    206|                                continue;
 1766|    206|                            }
 1767|  1.60k|                            break;
 1768|       |
 1769|       |                        // &quot;
 1770|  1.80k|                        case Ch('q'): 
  ------------------
  |  Branch (1770:25): [True: 1.80k, False: 16.3k]
  ------------------
 1771|  1.80k|                            if (src[2] == Ch('u') && src[3] == Ch('o') && src[4] == Ch('t') && src[5] == Ch(';'))
  ------------------
  |  Branch (1771:33): [True: 1.43k, False: 366]
  |  Branch (1771:54): [True: 1.08k, False: 356]
  |  Branch (1771:75): [True: 709, False: 371]
  |  Branch (1771:96): [True: 239, False: 470]
  ------------------
 1772|    239|                            {
 1773|    239|                                *dest = Ch('"');
 1774|    239|                                ++dest;
 1775|    239|                                src += 6;
 1776|    239|                                continue;
 1777|    239|                            }
 1778|  1.56k|                            break;
 1779|       |
 1780|       |                        // &gt;
 1781|  1.56k|                        case Ch('g'): 
  ------------------
  |  Branch (1781:25): [True: 730, False: 17.3k]
  ------------------
 1782|    730|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1782:33): [True: 496, False: 234]
  |  Branch (1782:54): [True: 211, False: 285]
  ------------------
 1783|    211|                            {
 1784|    211|                                *dest = Ch('>');
 1785|    211|                                ++dest;
 1786|    211|                                src += 4;
 1787|    211|                                continue;
 1788|    211|                            }
 1789|    519|                            break;
 1790|       |
 1791|       |                        // &lt;
 1792|    730|                        case Ch('l'): 
  ------------------
  |  Branch (1792:25): [True: 730, False: 17.3k]
  ------------------
 1793|    730|                            if (src[2] == Ch('t') && src[3] == Ch(';'))
  ------------------
  |  Branch (1793:33): [True: 503, False: 227]
  |  Branch (1793:54): [True: 270, False: 233]
  ------------------
 1794|    270|                            {
 1795|    270|                                *dest = Ch('<');
 1796|    270|                                ++dest;
 1797|    270|                                src += 4;
 1798|    270|                                continue;
 1799|    270|                            }
 1800|    460|                            break;
 1801|       |
 1802|       |                        // &#...; - assumes ASCII
 1803|  1.95k|                        case Ch('#'): 
  ------------------
  |  Branch (1803:25): [True: 1.95k, False: 16.1k]
  ------------------
 1804|  1.95k|                            if (src[2] == Ch('x'))
  ------------------
  |  Branch (1804:33): [True: 853, False: 1.10k]
  ------------------
 1805|    853|                            {
 1806|    853|                                unsigned long code = 0;
 1807|    853|                                src += 3;   // Skip &#x
 1808|  4.75k|                                while (1)
  ------------------
  |  Branch (1808:40): [True: 4.75k, Folded]
  ------------------
 1809|  4.75k|                                {
 1810|  4.75k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1811|  4.75k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1811:41): [True: 853, False: 3.90k]
  ------------------
 1812|    853|                                        break;
 1813|  3.90k|                                    code = code * 16 + digit;
 1814|  3.90k|                                    ++src;
 1815|  3.90k|                                }
 1816|    853|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1817|    853|                            }
 1818|  1.10k|                            else
 1819|  1.10k|                            {
 1820|  1.10k|                                unsigned long code = 0;
 1821|  1.10k|                                src += 2;   // Skip &#
 1822|  3.53k|                                while (1)
  ------------------
  |  Branch (1822:40): [True: 3.53k, Folded]
  ------------------
 1823|  3.53k|                                {
 1824|  3.53k|                                    unsigned char digit = internal::lookup_tables<0>::lookup_digits[static_cast<unsigned char>(*src)];
 1825|  3.53k|                                    if (digit == 0xFF)
  ------------------
  |  Branch (1825:41): [True: 1.10k, False: 2.43k]
  ------------------
 1826|  1.10k|                                        break;
 1827|  2.43k|                                    code = code * 10 + digit;
 1828|  2.43k|                                    ++src;
 1829|  2.43k|                                }
 1830|  1.10k|                                insert_coded_character<Flags>(dest, code);    // Put character in output
 1831|  1.10k|                            }
 1832|  1.95k|                            if (*src == Ch(';'))
  ------------------
  |  Branch (1832:33): [True: 1.49k, False: 461]
  ------------------
 1833|  1.49k|                                ++src;
 1834|    461|                            else
 1835|    461|                                RAPIDXML_PARSE_ERROR("expected ;", src);
  ------------------
  |  |   60|    461|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1836|  1.49k|                            continue;
 1837|  18.1k|			}
 1838|       |
 1839|       |                        // Something else
 1840|  14.9k|			if (Flags & parse_xhtml_entity_translation) {
  ------------------
  |  Branch (1840:8): [Folded, False: 14.9k]
  ------------------
 1841|      0|			  if (translate_xhtml_entity(src, dest))
  ------------------
  |  Branch (1841:10): [True: 0, False: 0]
  ------------------
 1842|      0|			    continue;
 1843|      0|			  else 
 1844|      0|			    RAPIDXML_PARSE_ERROR("could not parse xhtml entity", src);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1845|      0|			}
 1846|  14.9k|                    }
 1847|  45.9k|                }
 1848|       |                
 1849|       |                // If whitespace condensing is enabled
 1850|  42.8k|                if (Flags & parse_normalize_whitespace)
  ------------------
  |  Branch (1850:21): [Folded, False: 42.8k]
  ------------------
 1851|      0|                {
 1852|       |                    // Test if condensing is needed                 
 1853|      0|                    if (whitespace_pred::test(*src))
  ------------------
  |  Branch (1853:25): [True: 0, False: 0]
  ------------------
 1854|      0|                    {
 1855|      0|                        *dest = Ch(' '); ++dest;    // Put single space in dest
 1856|      0|                        ++src;                      // Skip first whitespace char
 1857|       |                        // Skip remaining whitespace chars
 1858|      0|                        while (whitespace_pred::test(*src))
  ------------------
  |  Branch (1858:32): [True: 0, False: 0]
  ------------------
 1859|      0|                            ++src;
 1860|      0|                        continue;
 1861|      0|                    }
 1862|      0|                }
 1863|       |
 1864|       |                // No replacement, only copy character
 1865|  42.8k|		if (Flags & parse_validate_utf8)
  ------------------
  |  Branch (1865:7): [Folded, False: 42.8k]
  ------------------
 1866|      0|		  copy_check_utf8(const_cast<const Ch *&>(src), dest);
 1867|  42.8k|		else
 1868|  42.8k|		  *dest++ = *src++;
 1869|  42.8k|            }
 1870|       |
 1871|       |            // Return new end
 1872|  13.1k|            text = src;
 1873|  13.1k|            return dest;
 1874|       |
 1875|  13.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE4skipINS2_20text_pure_no_ws_predELi0EEEvRPc:
 1711|  13.6k|        {
 1712|  13.6k|            Ch *tmp = text;
 1713|  19.3k|            while (StopPred::test(*tmp))
  ------------------
  |  Branch (1713:20): [True: 5.70k, False: 13.6k]
  ------------------
 1714|  5.70k|	      next_char<Flags>(tmp);
 1715|       |
 1716|  13.6k|            text = tmp;
 1717|  13.6k|        }
_ZN2Wt8rapidxml12xml_documentIcE20text_pure_no_ws_pred4testEc:
 1482|  19.3k|            {
 1483|  19.3k|                return internal::lookup_tables<0>::lookup_text_pure_no_ws[static_cast<unsigned char>(ch)];
 1484|  19.3k|            }
_ZN2Wt8rapidxml12xml_documentIcE9text_pred4testEc:
 1473|  59.1k|            {
 1474|  59.1k|                return internal::lookup_tables<0>::lookup_text[static_cast<unsigned char>(ch)];
 1475|  59.1k|            }
_ZN2Wt8rapidxml12xml_documentIcE21parse_xml_declarationILi0EEEPNS0_8xml_nodeIcEERPc:
 1896|    267|        {
 1897|       |            // If parsing of declaration is disabled
 1898|    267|            if (!(Flags & parse_declaration_node))
  ------------------
  |  Branch (1898:17): [True: 267, Folded]
  ------------------
 1899|    267|            {
 1900|       |                // Skip until end of declaration
 1901|  1.40k|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (1901:24): [True: 838, False: 570]
  |  Branch (1901:46): [True: 326, False: 244]
  ------------------
 1902|  1.16k|                {
 1903|  1.16k|                    if (!text[0])
  ------------------
  |  Branch (1903:25): [True: 23, False: 1.14k]
  ------------------
 1904|     23|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     23|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1905|  1.14k|                    ++text;
 1906|  1.14k|                }
 1907|    244|                text += 2;    // Skip '?>'
 1908|    244|                return 0;
 1909|    267|            }
 1910|       |
 1911|       |            // Create declaration
 1912|      0|            xml_node<Ch> *declaration = this->allocate_node(node_declaration);
 1913|       |
 1914|       |            // Skip whitespace before attributes or ?>
 1915|      0|            skip<whitespace_pred, Flags>(text);
 1916|       |
 1917|       |            // Parse declaration attributes
 1918|      0|            parse_node_attributes<Flags>(text, declaration);
 1919|       |            
 1920|       |            // Skip ?>
 1921|      0|            if (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (1921:17): [True: 0, False: 0]
  |  Branch (1921:39): [True: 0, False: 0]
  ------------------
 1922|      0|                RAPIDXML_PARSE_ERROR("expected ?>", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1923|      0|            text += 2;
 1924|       |            
 1925|      0|            return declaration;
 1926|      0|        }
_ZN2Wt8rapidxml12xml_documentIcE8parse_piILi0EEEPNS0_8xml_nodeIcEERPc:
 2038|  1.67k|        {
 2039|       |            // If creation of PI nodes is enabled
 2040|  1.67k|            if (Flags & parse_pi_nodes)
  ------------------
  |  Branch (2040:17): [Folded, False: 1.67k]
  ------------------
 2041|      0|            {
 2042|       |                // Create pi node
 2043|      0|                xml_node<Ch> *pi = this->allocate_node(node_pi);
 2044|       |
 2045|       |                // Extract PI target name
 2046|      0|                Ch *name = text;
 2047|      0|                skip<node_name_pred, Flags>(text);
 2048|      0|                if (text == name)
  ------------------
  |  Branch (2048:21): [True: 0, False: 0]
  ------------------
 2049|      0|                    RAPIDXML_PARSE_ERROR("expected PI target", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2050|      0|                pi->name(name, text - name);
 2051|       |                
 2052|       |                // Skip whitespace between pi target and pi
 2053|      0|                skip<whitespace_pred, Flags>(text);
 2054|       |
 2055|       |                // Remember start of pi
 2056|      0|                Ch *value = text;
 2057|       |                
 2058|       |                // Skip to '?>'
 2059|      0|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (2059:24): [True: 0, False: 0]
  |  Branch (2059:46): [True: 0, False: 0]
  ------------------
 2060|      0|                {
 2061|      0|                    if (*text == Ch('\0'))
  ------------------
  |  Branch (2061:25): [True: 0, False: 0]
  ------------------
 2062|      0|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2063|      0|                    ++text;
 2064|      0|                }
 2065|       |
 2066|       |                // Set pi value (verbatim, no entity expansion or whitespace normalization)
 2067|      0|                pi->value(value, text - value);     
 2068|       |                
 2069|       |                // Place zero terminator after name and value
 2070|      0|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2070:21): [True: 0, Folded]
  ------------------
 2071|      0|                {
 2072|      0|                    pi->name()[pi->name_size()] = Ch('\0');
 2073|      0|                    pi->value()[pi->value_size()] = Ch('\0');
 2074|      0|                }
 2075|       |                
 2076|      0|                text += 2;                          // Skip '?>'
 2077|      0|                return pi;
 2078|      0|            }
 2079|  1.67k|            else
 2080|  1.67k|            {
 2081|       |                // Skip to '?>'
 2082|  6.31k|                while (text[0] != Ch('?') || text[1] != Ch('>'))
  ------------------
  |  Branch (2082:24): [True: 4.31k, False: 1.99k]
  |  Branch (2082:46): [True: 431, False: 1.56k]
  ------------------
 2083|  4.74k|                {
 2084|  4.74k|                    if (*text == Ch('\0'))
  ------------------
  |  Branch (2084:25): [True: 106, False: 4.64k]
  ------------------
 2085|    106|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|    106|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2086|  4.64k|                    ++text;
 2087|  4.64k|                }
 2088|  1.56k|                text += 2;    // Skip '?>'
 2089|  1.56k|                return 0;
 2090|  1.67k|            }
 2091|  1.67k|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_commentILi0EEEPNS0_8xml_nodeIcEERPc:
 1931|    238|        {
 1932|       |            // If parsing of comments is disabled
 1933|    238|            if (!(Flags & parse_comment_nodes))
  ------------------
  |  Branch (1933:17): [True: 238, Folded]
  ------------------
 1934|    238|            {
 1935|       |                // Skip until end of comment
 1936|  1.95k|                while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
  ------------------
  |  Branch (1936:24): [True: 1.24k, False: 710]
  |  Branch (1936:46): [True: 246, False: 464]
  |  Branch (1936:68): [True: 265, False: 199]
  ------------------
 1937|  1.75k|                {
 1938|  1.75k|                    if (!text[0])
  ------------------
  |  Branch (1938:25): [True: 39, False: 1.71k]
  ------------------
 1939|     39|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     39|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1940|  1.71k|                    ++text;
 1941|  1.71k|                }
 1942|    199|                text += 3;     // Skip '-->'
 1943|    199|                return 0;      // Do not produce comment node
 1944|    238|            }
 1945|       |
 1946|       |            // Remember value start
 1947|      0|            Ch *value = text;
 1948|       |
 1949|       |            // Skip until end of comment
 1950|      0|            while (text[0] != Ch('-') || text[1] != Ch('-') || text[2] != Ch('>'))
  ------------------
  |  Branch (1950:20): [True: 0, False: 0]
  |  Branch (1950:42): [True: 0, False: 0]
  |  Branch (1950:64): [True: 0, False: 0]
  ------------------
 1951|      0|            {
 1952|      0|                if (!text[0])
  ------------------
  |  Branch (1952:21): [True: 0, False: 0]
  ------------------
 1953|      0|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 1954|      0|                ++text;
 1955|      0|            }
 1956|       |
 1957|       |            // Create comment node
 1958|      0|            xml_node<Ch> *comment = this->allocate_node(node_comment);
 1959|      0|            comment->value(value, text - value);
 1960|       |            
 1961|       |            // Place zero terminator after comment value
 1962|      0|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (1962:17): [True: 0, Folded]
  ------------------
 1963|      0|                *text = Ch('\0');
 1964|       |            
 1965|      0|            text += 3;     // Skip '-->'
 1966|      0|            return comment;
 1967|      0|        }
_ZN2Wt8rapidxml12xml_documentIcE11parse_cdataILi0EEEPNS0_8xml_nodeIcEERPc:
 2156|    478|        {
 2157|       |            // If CDATA is disabled
 2158|    478|            if (Flags & parse_no_data_nodes)
  ------------------
  |  Branch (2158:17): [Folded, False: 478]
  ------------------
 2159|      0|            {
 2160|       |                // Skip until end of cdata
 2161|      0|                while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
  ------------------
  |  Branch (2161:24): [True: 0, False: 0]
  |  Branch (2161:46): [True: 0, False: 0]
  |  Branch (2161:68): [True: 0, False: 0]
  ------------------
 2162|      0|                {
 2163|      0|                    if (!text[0])
  ------------------
  |  Branch (2163:25): [True: 0, False: 0]
  ------------------
 2164|      0|                        RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|      0|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2165|      0|		    next_char<Flags>(text);
 2166|      0|                }
 2167|      0|                text += 3;      // Skip ]]>
 2168|      0|                return 0;       // Do not produce CDATA node
 2169|      0|            }
 2170|       |
 2171|       |            // Skip until end of cdata
 2172|    478|            Ch *value = text;
 2173|  2.76k|            while (text[0] != Ch(']') || text[1] != Ch(']') || text[2] != Ch('>'))
  ------------------
  |  Branch (2173:20): [True: 1.74k, False: 1.01k]
  |  Branch (2173:42): [True: 291, False: 726]
  |  Branch (2173:64): [True: 307, False: 419]
  ------------------
 2174|  2.34k|            {
 2175|  2.34k|                if (!text[0])
  ------------------
  |  Branch (2175:21): [True: 59, False: 2.28k]
  ------------------
 2176|     59|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     59|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2177|  2.28k|		next_char<Flags>(text);
 2178|  2.28k|            }
 2179|       |
 2180|       |            // Create new cdata node
 2181|    419|            xml_node<Ch> *cdata = this->allocate_node(node_cdata);
 2182|    419|            cdata->value(value, text - value);
 2183|       |
 2184|       |            // Place zero terminator after value
 2185|    419|            if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2185:17): [True: 419, Folded]
  ------------------
 2186|    419|                *text = Ch('\0');
 2187|       |
 2188|    419|            text += 3;      // Skip ]]>
 2189|    419|            return cdata;
 2190|    478|        }
_ZN2Wt8rapidxml12xml_documentIcE13parse_doctypeILi0EEEPNS0_8xml_nodeIcEERPc:
 1972|    439|        {
 1973|       |            // Remember value start
 1974|    439|            Ch *value = text;
 1975|       |
 1976|       |            // Skip to >
 1977|    995|            while (*text != Ch('>'))
  ------------------
  |  Branch (1977:20): [True: 602, False: 393]
  ------------------
 1978|    602|            {
 1979|       |                // Determine character type
 1980|    602|                switch (*text)
 1981|    602|                {
 1982|       |                
 1983|       |                // If '[' encountered, scan for matching ending ']' using naive algorithm with depth
 1984|       |                // This works for all W3C test files except for 2 most wicked
 1985|    227|                case Ch('['):
  ------------------
  |  Branch (1985:17): [True: 227, False: 375]
  ------------------
 1986|    227|                {
 1987|    227|                    ++text;     // Skip '['
 1988|    227|                    int depth = 1;
 1989|    842|                    while (depth > 0)
  ------------------
  |  Branch (1989:28): [True: 634, False: 208]
  ------------------
 1990|    634|                    {
 1991|    634|                        switch (*text)
  ------------------
  |  Branch (1991:33): [True: 436, False: 198]
  ------------------
 1992|    634|                        {
 1993|    202|                            case Ch('['): ++depth; break;
  ------------------
  |  Branch (1993:29): [True: 202, False: 432]
  ------------------
 1994|    215|                            case Ch(']'): --depth; break;
  ------------------
  |  Branch (1994:29): [True: 215, False: 419]
  ------------------
 1995|     19|                            case 0: RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     19|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
  |  Branch (1995:29): [True: 19, False: 615]
  ------------------
 1996|    634|                        }
 1997|    615|                        ++text;
 1998|    615|                    }
 1999|    208|                    break;
 2000|    227|                }
 2001|       |                
 2002|       |                // Error on end of text
 2003|    208|                case Ch('\0'):
  ------------------
  |  Branch (2003:17): [True: 27, False: 575]
  ------------------
 2004|     27|                    RAPIDXML_PARSE_ERROR("unexpected end of data", text);
  ------------------
  |  |   60|     27|#define RAPIDXML_PARSE_ERROR(what, where) throw parse_error(what, where)
  ------------------
 2005|       |                
 2006|       |                // Other character, skip it
 2007|    348|                default:
  ------------------
  |  Branch (2007:17): [True: 348, False: 254]
  ------------------
 2008|    348|                    ++text;
 2009|       |
 2010|    602|                }
 2011|    602|            }
 2012|       |            
 2013|       |            // If DOCTYPE nodes enabled
 2014|    393|            if (Flags & parse_doctype_node)
  ------------------
  |  Branch (2014:17): [Folded, False: 393]
  ------------------
 2015|      0|            {
 2016|       |                // Create a new doctype node
 2017|      0|                xml_node<Ch> *doctype = this->allocate_node(node_doctype);
 2018|      0|                doctype->value(value, text - value);
 2019|       |                
 2020|       |                // Place zero terminator after value
 2021|      0|                if (!(Flags & parse_no_string_terminators))
  ------------------
  |  Branch (2021:21): [True: 0, Folded]
  ------------------
 2022|      0|                    *text = Ch('\0');
 2023|       |
 2024|      0|                text += 1;      // skip '>'
 2025|      0|                return doctype;
 2026|      0|            }
 2027|    393|            else
 2028|    393|            {
 2029|    393|                text += 1;      // skip '>'
 2030|    393|                return 0;
 2031|    393|            }
 2032|       |
 2033|    393|        }
_ZN2Wt8rapidxml8xml_nodeIcE11append_nodeEPS2_:
 1113|  24.3k|        {
 1114|  24.3k|            assert(child && !child->parent() && child->type() != node_document);
 1115|  24.3k|            if (first_node())
  ------------------
  |  Branch (1115:17): [True: 9.39k, False: 14.9k]
  ------------------
 1116|  9.39k|            {
 1117|  9.39k|                child->m_prev_sibling = m_last_node;
 1118|  9.39k|                m_last_node->m_next_sibling = child;
 1119|  9.39k|            }
 1120|  14.9k|            else
 1121|  14.9k|            {
 1122|  14.9k|                child->m_prev_sibling = 0;
 1123|  14.9k|                m_first_node = child;
 1124|  14.9k|            }
 1125|  24.3k|            m_last_node = child;
 1126|  24.3k|            child->m_parent = this;
 1127|  24.3k|            child->m_next_sibling = 0;
 1128|  24.3k|        }
_ZN2Wt8rapidxml11parse_errorC2EPKcPv:
   84|  2.21k|            : m_what(what)
   85|  2.21k|            , m_where(location)
   86|  2.21k|        {
   87|  2.21k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE8documentEv:
  939|  4.38k|        {
  940|  4.38k|            xml_node<Ch> *node = const_cast<xml_node<Ch> *>(this);
  941|  12.9k|            while (node->parent())
  ------------------
  |  Branch (941:20): [True: 8.56k, False: 4.38k]
  ------------------
  942|  8.56k|                node = node->parent();
  943|  4.38k|            return node->type() == node_document ? static_cast<xml_document<Ch> *>(node) : 0;
  ------------------
  |  Branch (943:20): [True: 4.38k, False: 0]
  ------------------
  944|  4.38k|        }
_ZNK2Wt8rapidxml8xml_baseIcE6parentEv:
  786|  21.5k|        {
  787|  21.5k|            return m_parent;
  788|  21.5k|        }
_ZNK2Wt8rapidxml8xml_nodeIcE4typeEv:
  929|  4.38k|        {
  930|  4.38k|            return m_type;
  931|  4.38k|        }

_ZN2Wt10DomElement16isSelfClosingTagERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE:
 1934|  5.83k|{
 1935|  5.83k|  return (   (tag == "br")
  ------------------
  |  Branch (1935:14): [True: 196, False: 5.63k]
  ------------------
 1936|  5.63k|          || (tag == "hr")
  ------------------
  |  Branch (1936:14): [True: 211, False: 5.42k]
  ------------------
 1937|  5.42k|          || (tag == "img")
  ------------------
  |  Branch (1937:14): [True: 194, False: 5.23k]
  ------------------
 1938|  5.23k|          || (tag == "area")
  ------------------
  |  Branch (1938:14): [True: 200, False: 5.03k]
  ------------------
 1939|  5.03k|          || (tag == "col")
  ------------------
  |  Branch (1939:14): [True: 196, False: 4.83k]
  ------------------
 1940|  4.83k|          || (tag == "input")
  ------------------
  |  Branch (1940:14): [True: 194, False: 4.64k]
  ------------------
 1941|  4.64k|          || (tag == "link")
  ------------------
  |  Branch (1941:14): [True: 256, False: 4.38k]
  ------------------
 1942|  4.38k|          || (tag == "meta"));
  ------------------
  |  Branch (1942:14): [True: 1, False: 4.38k]
  ------------------
 1943|  5.83k|}
DomElement.C:_ZN12_GLOBAL__N_117createCssNamesMapB5cxx11Ev:
  117|      2|{
  118|      2|  CssPropertyMap cssNames;
  119|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePosition, std::string("position"));
  120|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleZIndex,std::string("z-index"));
  121|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFloat,std::string("float"));
  122|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleClear,std::string("clear"));
  123|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWidth,std::string("width"));
  124|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleHeight,std::string("height"));
  125|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleLineHeight,std::string("line-height"));
  126|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMinWidth,std::string("min-width"));
  127|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMinHeight,std::string("min-height"));
  128|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMaxWidth,std::string("max-width"));
  129|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMaxHeight,std::string("max-height"));
  130|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleLeft,std::string("left"));
  131|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleRight,std::string("right"));
  132|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTop,std::string("top"));
  133|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBottom,std::string("bottom"));
  134|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleVerticalAlign,std::string("vertical-align"));
  135|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTextAlign,std::string("text-align"));
  136|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePadding,std::string("padding"));
  137|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingTop,std::string("padding-top"));
  138|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingRight,std::string("padding-right"));
  139|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingBottom,std::string("padding-bottom"));
  140|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePaddingLeft,std::string("padding-left"));
  141|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMargin,std::string("margin"));
  142|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginTop,std::string("margin-top"));
  143|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginRight,std::string("margin-right"));
  144|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginBottom,std::string("margin-bottom"));
  145|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleMarginLeft,std::string("margin-left"));
  146|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleCursor,std::string("cursor"));
  147|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderTop,std::string("border-top"));
  148|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderRight,std::string("border-right"));
  149|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderBottom,std::string("border-bottom"));
  150|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderLeft,std::string("border-left"));
  151|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorTop,std::string("border-color-top"));
  152|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorRight,std::string("border-color-right"));
  153|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorBottom,std::string("border-color-bottom"));
  154|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderColorLeft,std::string("border-color-left"));
  155|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthTop,std::string("border-width-top"));
  156|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthRight,std::string("border-width-right"));
  157|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthBottom,std::string("border-width-bottom"));
  158|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderWidthLeft,std::string("border-width-left"));
  159|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleColor,std::string("color"));
  160|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOverflowX,std::string("overflow-x"));
  161|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOverflowY,std::string("overflow-y"));
  162|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleOpacity,std::string("opacity"));
  163|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontFamily,std::string("font-family"));
  164|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontStyle,std::string("font-style"));
  165|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontVariant,std::string("font-variant"));
  166|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontWeight,std::string("font-weight"));
  167|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFontSize,std::string("font-size"));
  168|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundColor,std::string("background-color"));
  169|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundImage,std::string("background-image"));
  170|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundRepeat,std::string("background-repeat"));
  171|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundAttachment,std::string("background-attachment"));
  172|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBackgroundPosition,std::string("background-position"));
  173|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTextDecoration,std::string("text-decoration"));
  174|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWhiteSpace,std::string("white-space"));
  175|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleTableLayout,std::string("table-layout"));
  176|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderSpacing,std::string("border-spacing"));
  177|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBorderCollapse,std::string("border-collapse"));
  178|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePageBreakBefore,std::string("page-break-before"));
  179|      2|  Wt::Utils::insert(cssNames, Wt::Property::StylePageBreakAfter,std::string("page-break-after"));
  180|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleZoom,std::string("zoom"));
  181|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleVisibility,std::string("visibility"));
  182|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleDisplay,std::string("display"));
  183|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleWebkitAppearance,std::string("-webkit-appearance"));
  184|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleBoxSizing,std::string("box-sizing"));
  185|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlex,std::string("flex"));
  186|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlexDirection,std::string("flex-direction"));
  187|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleFlexFlow,std::string("flex-flow"));
  188|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleAlignSelf,std::string("align-self"));
  189|      2|  Wt::Utils::insert(cssNames, Wt::Property::StyleJustifyContent,std::string("justify-content"));
  190|      2|  return cssNames;
  191|      2|}
DomElement.C:_ZN12_GLOBAL__N_122createCssCamelNamesMapB5cxx11Ev:
  196|      2|{
  197|      2|  CssPropertyMap cssCamelNames;
  198|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::Style,std::string("cssText"));
  199|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePosition,std::string("position"));
  200|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleZIndex,std::string("zIndex"));
  201|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFloat,std::string("cssFloat"));
  202|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleClear,std::string("clear"));
  203|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWidth,std::string("width"));
  204|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleHeight,std::string("height"));
  205|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleLineHeight,std::string("lineHeight"));
  206|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMinWidth,std::string("minWidth"));
  207|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMinHeight,std::string("minHeight"));
  208|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMaxWidth,std::string("maxWidth"));
  209|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMaxHeight,std::string("maxHeight"));
  210|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleLeft,std::string("left"));
  211|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleRight,std::string("right"));
  212|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTop,std::string("top"));
  213|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBottom,std::string("bottom"));
  214|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleVerticalAlign,std::string("verticalAlign"));
  215|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTextAlign,std::string("textAlign"));
  216|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePadding,std::string("padding"));
  217|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingTop,std::string("paddingTop"));
  218|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingRight,std::string("paddingRight"));
  219|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingBottom,std::string("paddingBottom"));
  220|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePaddingLeft,std::string("paddingLeft"));
  221|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMargin,std::string("margin"));
  222|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginTop,std::string("marginTop"));
  223|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginRight,std::string("marginRight"));
  224|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginBottom,std::string("marginBottom"));
  225|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleMarginLeft,std::string("marginLeft"));
  226|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleCursor,std::string("cursor"));
  227|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderTop,std::string("borderTop"));
  228|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderRight,std::string("borderRight"));
  229|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderBottom,std::string("borderBottom"));
  230|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderLeft,std::string("borderLeft"));
  231|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorTop,std::string("borderColorTop"));
  232|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorRight,std::string("borderColorRight"));
  233|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorBottom,std::string("borderColorBottom"));
  234|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderColorLeft,std::string("borderColorLeft"));
  235|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthTop,std::string("borderWidthTop"));
  236|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthRight,std::string("borderWidthRight"));
  237|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthBottom,std::string("borderWidthBottom"));
  238|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderWidthLeft,std::string("borderWidthLeft"));
  239|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleColor,std::string("color"));
  240|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOverflowX,std::string("overflowX"));
  241|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOverflowY,std::string("overflowY"));
  242|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleOpacity,std::string("opacity"));
  243|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontFamily,std::string("fontFamily"));
  244|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontStyle,std::string("fontStyle"));
  245|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontVariant,std::string("fontVariant"));
  246|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontWeight,std::string("fontWeight"));
  247|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFontSize,std::string("fontSize"));
  248|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundColor,std::string("backgroundColor"));
  249|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundImage,std::string("backgroundImage"));
  250|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundRepeat,std::string("backgroundRepeat"));
  251|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundAttachment,std::string("backgroundAttachment"));
  252|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBackgroundPosition,std::string("backgroundPosition"));
  253|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTextDecoration,std::string("textDecoration"));
  254|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWhiteSpace,std::string("whiteSpace"));
  255|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleTableLayout,std::string("tableLayout"));
  256|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderSpacing,std::string("borderSpacing"));
  257|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBorderCollapse,std::string("border-collapse"));
  258|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePageBreakBefore,std::string("pageBreakBefore"));
  259|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StylePageBreakAfter,std::string("pageBreakAfter"));
  260|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleZoom,std::string("zoom"));
  261|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleVisibility,std::string("visibility"));
  262|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleDisplay,std::string("display"));
  263|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleWebkitAppearance,std::string("webKitAppearance"));
  264|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleBoxSizing,std::string("boxSizing"));
  265|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlex,std::string("flex"));
  266|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlexDirection,std::string("flexDirection"));
  267|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleFlexFlow,std::string("flexFlow"));
  268|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleAlignSelf,std::string("alignSelf"));
  269|      2|  Wt::Utils::insert(cssCamelNames, Wt::Property::StyleJustifyContent,std::string("justifyContent"));
  270|      2|  return cssCamelNames;
  271|      2|}

_ZN2Wt5Utils18fixSelfClosingTagsEPNS_8rapidxml8xml_nodeIcEE:
  494|  9.52k|{
  495|  18.6k|  for (Wt::rapidxml::xml_node<> *x_child = x_node->first_node(); x_child;
  ------------------
  |  Branch (495:66): [True: 9.17k, False: 9.52k]
  ------------------
  496|  9.52k|       x_child = x_child->next_sibling())
  497|  9.17k|    fixSelfClosingTags(x_child);
  498|       |
  499|  9.52k|  if (!x_node->first_node()
  ------------------
  |  Branch (499:7): [True: 8.75k, False: 763]
  |  Branch (499:7): [True: 4.38k, False: 5.13k]
  ------------------
  500|  8.75k|      && x_node->value_size() == 0
  ------------------
  |  Branch (500:10): [True: 5.83k, False: 2.92k]
  ------------------
  501|  5.83k|      && !Wt::DomElement::isSelfClosingTag
  ------------------
  |  Branch (501:10): [True: 4.38k, False: 1.44k]
  ------------------
  502|  5.83k|      (std::string(x_node->name(), x_node->name_size()))) {
  503|       |    // We need to add an emtpy data node since <div /> is illegal HTML
  504|       |    // (but valid XML / XHTML)
  505|  4.38k|    Wt::rapidxml::xml_node<> *empty = x_node->document()->allocate_node(Wt::rapidxml::node_data);
  506|  4.38k|    x_node->append_node(empty);
  507|  4.38k|  }
  508|  9.52k|}

_ZN2Wt5Utils6insertINS_8PropertyENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEvRSt13unordered_mapIT_T0_St4hashISA_ESt8equal_toISA_ESaISt4pairIKSA_SB_EEERSH_RKSB_:
  260|    286|{
  261|    286|#ifndef WT_TARGET_JAVA
  262|    286|  m.insert(std::make_pair(key, value));
  263|    286|#endif // WT_TARGET_JAVA
  264|    286|}

