_ZNK4i18n12phonenumbers14DefaultDeleterIKNS0_21AbstractRegExpFactoryEEclEPS3_:
   54|  3.06k|  inline void operator()(T* ptr) const {
   55|  3.06k|    enum { type_must_be_complete = sizeof(T) };
   56|  3.06k|    delete ptr;
   57|  3.06k|  }
_ZN4i18n12phonenumbers10scoped_ptrIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  225|  3.06k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|  3.06k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|  3.06k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIKNS0_21AbstractRegExpFactoryEEC2Ev:
   35|  3.06k|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEE3getEv:
  276|      1|  element_type* get() const { return impl_.get(); }
_ZNK4i18n12phonenumbers15scoped_ptr_implIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEE3getEv:
  159|  75.2k|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers10scoped_ptrINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|  3.06k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|  3.06k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|  3.06k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_11RegExpCacheEEC2Ev:
   35|  3.06k|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  225|     14|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|     14|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|     14|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIKNS0_6RegExpEEC2Ev:
   35|     14|  DefaultDeleter() {}
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEED2Ev:
  125|  3.06k|  ~scoped_ptr_impl() {
  126|  3.06k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 3.06k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  3.06k|      static_cast<D&>(data_)(data_.ptr);
  130|  3.06k|    }
  131|  3.06k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterINS0_11RegExpCacheEEclEPS2_:
   54|  3.06k|  inline void operator()(T* ptr) const {
   55|  3.06k|    enum { type_must_be_complete = sizeof(T) };
   56|  3.06k|    delete ptr;
   57|  3.06k|  }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEED2Ev:
  125|  3.06k|  ~scoped_ptr_impl() {
  126|  3.06k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 3.06k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  3.06k|      static_cast<D&>(data_)(data_.ptr);
  130|  3.06k|    }
  131|  3.06k|  }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEED2Ev:
  125|  34.5k|  ~scoped_ptr_impl() {
  126|  34.5k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 34.5k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  34.5k|      static_cast<D&>(data_)(data_.ptr);
  130|  34.5k|    }
  131|  34.5k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterINS0_11RegExpInputEEclEPS2_:
   54|  34.5k|  inline void operator()(T* ptr) const {
   55|  34.5k|    enum { type_must_be_complete = sizeof(T) };
   56|  34.5k|    delete ptr;
   57|  34.5k|  }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_6LoggerENS0_14DefaultDeleterIS2_EEE3getEv:
  276|      1|  element_type* get() const { return impl_.get(); }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_6LoggerENS0_14DefaultDeleterIS2_EEE3getEv:
  159|      1|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEEptEv:
  272|  34.5k|  element_type* operator->() const  {
  273|  34.5k|    assert(impl_.get() != NULL);
  274|  34.5k|    return impl_.get();
  275|  34.5k|  }
_ZN4i18n12phonenumbers10scoped_ptrINS0_6LoggerENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_6LoggerENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_6LoggerENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_6LoggerEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_10MatcherApiEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_29PhoneNumberRegExpsAndMappingsEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEEC2EPSH_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEEC2EPSH_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEE4DataC2EPSH_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEC2EPSG_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEC2EPSG_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEE4DataC2EPSG_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEC2EPSK_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEC2EPSK_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEE4DataC2EPSK_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEEC2EPSH_:
  225|      1|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEEC2EPSH_:
  101|      1|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEE4DataC2EPSH_:
  188|      1|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEEEC2Ev:
   35|      1|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEEptEv:
  272|     45|  element_type* operator->() const  {
  273|     45|    assert(impl_.get() != NULL);
  274|     45|    return impl_.get();
  275|     45|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapIiNS0_13PhoneMetadataENS3_13hash_internal4HashIiEENSt3__18equal_toIiEENS9_9allocatorINS9_4pairIKiS5_EEEEEENS0_14DefaultDeleterISH_EEE3getEv:
  159|     90|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEptEv:
  272|  8.07k|  element_type* operator->() const  {
  273|  8.07k|    assert(impl_.get() != NULL);
  274|  8.07k|    return impl_.get();
  275|  8.07k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEE3getEv:
  159|  16.1k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEptEv:
  272|     25|  element_type* operator->() const  {
  273|     25|    assert(impl_.get() != NULL);
  274|     25|    return impl_.get();
  275|     25|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313node_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEE3getEv:
  159|     50|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEEptEv:
  272|  63.4k|  element_type* operator->() const  {
  273|  63.4k|    assert(impl_.get() != NULL);
  274|  63.4k|    return impl_.get();
  275|  63.4k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINSt3__16vectorINS2_4pairIiPNS2_4listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS9_ISB_EEEEEENS9_ISF_EEEENS0_14DefaultDeleterISH_EEE3getEv:
  159|   126k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEEptEv:
  272|  63.5k|  element_type* operator->() const  {
  273|  63.5k|    assert(impl_.get() != NULL);
  274|  63.5k|    return impl_.get();
  275|  63.5k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_29PhoneNumberRegExpsAndMappingsENS0_14DefaultDeleterIS2_EEE3getEv:
  159|   127k|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers10scoped_ptrINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  225|  34.5k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEEC2EPS2_:
  101|  34.5k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEE4DataC2EPS2_:
  188|  34.5k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINS0_11RegExpInputEEC2Ev:
   35|  34.5k|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEEptEv:
  272|  44.2k|  element_type* operator->() const  {
  273|  44.2k|    assert(impl_.get() != NULL);
  274|  44.2k|    return impl_.get();
  275|  44.2k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIKNS0_6RegExpENS0_14DefaultDeleterIS3_EEE3getEv:
  159|  88.4k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEE3getEv:
  276|  34.7k|  element_type* get() const { return impl_.get(); }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEE3getEv:
  159|  37.9k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEEptEv:
  272|  26.2k|  element_type* operator->() const  {
  273|  26.2k|    assert(impl_.get() != NULL);
  274|  26.2k|    return impl_.get();
  275|  26.2k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_11RegExpCacheENS0_14DefaultDeleterIS2_EEE3getEv:
  159|  52.5k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_11RegExpInputENS0_14DefaultDeleterIS2_EEEptEv:
  272|  1.63k|  element_type* operator->() const  {
  273|  1.63k|    assert(impl_.get() != NULL);
  274|  1.63k|    return impl_.get();
  275|  1.63k|  }
_ZNK4i18n12phonenumbers10scoped_ptrINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEEdeEv:
  268|  1.35k|  element_type& operator*() const {
  269|  1.35k|    assert(impl_.get() != NULL);
  270|  1.35k|    return *impl_.get();
  271|  1.35k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINS0_10MatcherApiENS0_14DefaultDeleterIS2_EEE3getEv:
  159|  2.70k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_21AbstractRegExpFactoryENS0_14DefaultDeleterIS3_EEEdeEv:
  268|  3.06k|  element_type& operator*() const {
  269|  3.06k|    assert(impl_.get() != NULL);
  270|  3.06k|    return *impl_.get();
  271|  3.06k|  }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEED2Ev:
  125|  3.06k|  ~scoped_ptr_impl() {
  126|  3.06k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 3.06k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  3.06k|      static_cast<D&>(data_)(data_.ptr);
  130|  3.06k|    }
  131|  3.06k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEEEclEPSJ_:
   54|  3.06k|  inline void operator()(T* ptr) const {
   55|  3.06k|    enum { type_must_be_complete = sizeof(T) };
   56|  3.06k|    delete ptr;
   57|  3.06k|  }
_ZN4i18n12phonenumbers10scoped_ptrINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEEC2EPSJ_:
  225|  3.06k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEEC2EPSJ_:
  101|  3.06k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEE4DataC2EPSJ_:
  188|  3.06k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEEEC2Ev:
   35|  3.06k|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEEptEv:
  272|  73.8k|  element_type* operator->() const  {
  273|  73.8k|    assert(impl_.get() != NULL);
  274|  73.8k|    return impl_.get();
  275|  73.8k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implINSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPKNS0_6RegExpENS2_4lessIS9_EENS7_INS2_4pairIKS9_SC_EEEEEENS0_14DefaultDeleterISJ_EEE3getEv:
  159|   147k|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313flat_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEED2Ev:
  125|  3.06k|  ~scoped_ptr_impl() {
  126|  3.06k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 3.06k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  3.06k|      static_cast<D&>(data_)(data_.ptr);
  130|  3.06k|    }
  131|  3.06k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313flat_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEEEclEPSG_:
   54|  3.06k|  inline void operator()(T* ptr) const {
   55|  3.06k|    enum { type_must_be_complete = sizeof(T) };
   56|  3.06k|    delete ptr;
   57|  3.06k|  }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313flat_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEED2Ev:
  125|  3.06k|  ~scoped_ptr_impl() {
  126|  3.06k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 3.06k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  3.06k|      static_cast<D&>(data_)(data_.ptr);
  130|  3.06k|    }
  131|  3.06k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313flat_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEEEclEPSK_:
   54|  3.06k|  inline void operator()(T* ptr) const {
   55|  3.06k|    enum { type_must_be_complete = sizeof(T) };
   56|  3.06k|    delete ptr;
   57|  3.06k|  }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_10MatcherApiENS0_14DefaultDeleterIS3_EEED2Ev:
  125|  3.06k|  ~scoped_ptr_impl() {
  126|  3.06k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 3.06k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  3.06k|      static_cast<D&>(data_)(data_.ptr);
  130|  3.06k|    }
  131|  3.06k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterIKNS0_10MatcherApiEEclEPS3_:
   54|  3.06k|  inline void operator()(T* ptr) const {
   55|  3.06k|    enum { type_must_be_complete = sizeof(T) };
   56|  3.06k|    delete ptr;
   57|  3.06k|  }
_ZN4i18n12phonenumbers10scoped_ptrIKNS0_10MatcherApiENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  225|  3.06k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_10MatcherApiENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|  3.06k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIKNS0_10MatcherApiENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|  3.06k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIKNS0_10MatcherApiEEC2Ev:
   35|  3.06k|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313flat_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEC2EPSK_:
  225|  3.06k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313flat_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEC2EPSK_:
  101|  3.06k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313flat_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEE4DataC2EPSK_:
  188|  3.06k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313flat_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEEEC2Ev:
   35|  3.06k|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313flat_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEC2EPSG_:
  225|  3.06k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313flat_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEC2EPSG_:
  101|  3.06k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313flat_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEE4DataC2EPSG_:
  188|  3.06k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN4absl12lts_2022062313flat_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEEEC2Ev:
   35|  3.06k|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313flat_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEEptEv:
  272|   820k|  element_type* operator->() const  {
  273|   820k|    assert(impl_.get() != NULL);
  274|   820k|    return impl_.get();
  275|   820k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313flat_hash_mapINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS0_13PhoneMetadataENS3_18container_internal10StringHashENSD_8StringEqENS9_INS5_4pairIKSB_SC_EEEEEENS0_14DefaultDeleterISK_EEE3getEv:
  159|  1.64M|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIN4absl12lts_2022062313flat_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEEptEv:
  272|  9.89k|  element_type* operator->() const  {
  273|  9.89k|    assert(impl_.get() != NULL);
  274|  9.89k|    return impl_.get();
  275|  9.89k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN4absl12lts_2022062313flat_hash_setINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENS3_18container_internal10StringHashENSC_8StringEqENS9_ISB_EEEENS0_14DefaultDeleterISG_EEE3getEv:
  159|  19.7k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_10MatcherApiENS0_14DefaultDeleterIS3_EEEdeEv:
  268|  21.6k|  element_type& operator*() const {
  269|  21.6k|    assert(impl_.get() != NULL);
  270|  21.6k|    return *impl_.get();
  271|  21.6k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIKNS0_10MatcherApiENS0_14DefaultDeleterIS3_EEE3getEv:
  159|  45.7k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIKNS0_10MatcherApiENS0_14DefaultDeleterIS3_EEEptEv:
  272|  1.24k|  element_type* operator->() const  {
  273|  1.24k|    assert(impl_.get() != NULL);
  274|  1.24k|    return impl_.get();
  275|  1.24k|  }
_ZN4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEEC2Ev:
  222|  7.70k|  scoped_ptr() : impl_(NULL) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|  7.70k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|  7.70k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN6icu_6612RegexPatternEEC2Ev:
   35|  7.70k|  DefaultDeleter() {}
_ZN4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE5resetEPS3_:
  264|  7.70k|  void reset(element_type* p = NULL) { impl_.reset(p); }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE5resetEPS3_:
  133|  7.70k|  void reset(T* p) {
  134|       |    // This is a self-reset, which is no longer allowed: http://crbug.com/162971
  135|  7.70k|    if (p != NULL && p == data_.ptr)
  ------------------
  |  Branch (135:9): [True: 7.70k, False: 0]
  |  Branch (135:22): [True: 0, False: 7.70k]
  ------------------
  136|      0|      abort();
  137|       |
  138|       |    // Note that running data_.ptr = p can lead to undefined behavior if
  139|       |    // get_deleter()(get()) deletes this. In order to pevent this, reset()
  140|       |    // should update the stored pointer before deleting its old value.
  141|       |    //
  142|       |    // However, changing reset() to use that behavior may cause current code to
  143|       |    // break in unexpected ways. If the destruction of the owned object
  144|       |    // dereferences the scoped_ptr when it is destroyed by a call to reset(),
  145|       |    // then it will incorrectly dispatch calls to |p| rather than the original
  146|       |    // value of |data_.ptr|.
  147|       |    //
  148|       |    // During the transition period, set the stored pointer to NULL while
  149|       |    // deleting the object. Eventually, this safety check will be removed to
  150|       |    // prevent the scenario initially described from occuring and
  151|       |    // http://crbug.com/176091 can be closed.
  152|  7.70k|    T* old = data_.ptr;
  153|  7.70k|    data_.ptr = NULL;
  154|  7.70k|    if (old != NULL)
  ------------------
  |  Branch (154:9): [True: 0, False: 7.70k]
  ------------------
  155|      0|      static_cast<D&>(data_)(old);
  156|  7.70k|    data_.ptr = p;
  157|  7.70k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterIN6icu_6612RegexPatternEEclEPS3_:
   54|  7.52k|  inline void operator()(T* ptr) const {
   55|  7.52k|    enum { type_must_be_complete = sizeof(T) };
   56|  7.52k|    delete ptr;
   57|  7.52k|  }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEED2Ev:
  125|  7.52k|  ~scoped_ptr_impl() {
  126|  7.52k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 7.52k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  7.52k|      static_cast<D&>(data_)(data_.ptr);
  130|  7.52k|    }
  131|  7.52k|  }
_ZNK4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE3getEv:
  276|  93.1k|  element_type* get() const { return impl_.get(); }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEE3getEv:
  159|   279k|  T* get() const { return data_.ptr; }
_ZNK4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexPatternENS0_14DefaultDeleterIS3_EEEptEv:
  272|  93.1k|  element_type* operator->() const  {
  273|  93.1k|    assert(impl_.get() != NULL);
  274|  93.1k|    return impl_.get();
  275|  93.1k|  }
_ZN4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  225|  93.1k|  explicit scoped_ptr(element_type* p) : impl_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEEC2EPS3_:
  101|  93.1k|  explicit scoped_ptr_impl(T* p) : data_(p) { }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEE4DataC2EPS3_:
  188|  93.1k|    explicit Data(T* ptr_in) : ptr(ptr_in) {}
_ZN4i18n12phonenumbers14DefaultDeleterIN6icu_6612RegexMatcherEEC2Ev:
   35|  93.1k|  DefaultDeleter() {}
_ZNK4i18n12phonenumbers10scoped_ptrIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEEptEv:
  272|   123k|  element_type* operator->() const  {
  273|   123k|    assert(impl_.get() != NULL);
  274|   123k|    return impl_.get();
  275|   123k|  }
_ZNK4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEE3getEv:
  159|   246k|  T* get() const { return data_.ptr; }
_ZN4i18n12phonenumbers15scoped_ptr_implIN6icu_6612RegexMatcherENS0_14DefaultDeleterIS3_EEED2Ev:
  125|  93.1k|  ~scoped_ptr_impl() {
  126|  93.1k|    if (data_.ptr != NULL) {
  ------------------
  |  Branch (126:9): [True: 93.1k, False: 0]
  ------------------
  127|       |      // Not using get_deleter() saves one function call in non-optimized
  128|       |      // builds.
  129|  93.1k|      static_cast<D&>(data_)(data_.ptr);
  130|  93.1k|    }
  131|  93.1k|  }
_ZNK4i18n12phonenumbers14DefaultDeleterIN6icu_6612RegexMatcherEEclEPS3_:
   54|  93.1k|  inline void operator()(T* ptr) const {
   55|  93.1k|    enum { type_must_be_complete = sizeof(T) };
   56|  93.1k|    delete ptr;
   57|  93.1k|  }

_ZN4i18n12phonenumbers9SingletonINS0_15PhoneNumberUtilEE11GetInstanceEv:
   30|  6.13k|  static T* GetInstance() {
   31|  6.13k|    const int ret = pthread_once(&once_control_, &Init);
   32|  6.13k|    (void) ret;
   33|  6.13k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|  6.13k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|  6.13k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   34|  6.13k|    return instance_;
   35|  6.13k|  }
_ZN4i18n12phonenumbers9SingletonINS0_15PhoneNumberUtilEE4InitEv:
   38|      1|  static void Init() {
   39|      1|    instance_ = new T();
   40|      1|  }

_ZN4i18n12phonenumbers8AutoLockC2ERNS0_4LockE:
   40|  29.3k|  AutoLock(Lock& lock) : lock_(lock) {
   41|  29.3k|    lock_.Acquire();
   42|  29.3k|  }
_ZN4i18n12phonenumbers8AutoLockD2Ev:
   44|  29.3k|  ~AutoLock() {
   45|  29.3k|    lock_.Release();
   46|  29.3k|  }

_ZN4i18n12phonenumbers4LockC2Ev:
   30|  3.06k|  Lock() {
   31|  3.06k|    const int ret = pthread_mutex_init(&mutex_, NULL);
   32|  3.06k|    (void) ret;
   33|  3.06k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|  3.06k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|  3.06k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   34|  3.06k|  }
_ZN4i18n12phonenumbers4LockD2Ev:
   40|  3.06k|  ~Lock() {
   41|  3.06k|    const int ret = pthread_mutex_destroy(&mutex_);
   42|  3.06k|    (void) ret;
   43|  3.06k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|  3.06k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|  3.06k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   44|  3.06k|  }
_ZNK4i18n12phonenumbers4Lock7AcquireEv:
   46|  29.3k|  void Acquire() const {
   47|  29.3k|    int ret = pthread_mutex_lock(&mutex_);
   48|  29.3k|    (void) ret;
   49|  29.3k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|  29.3k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|  29.3k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   50|  29.3k|  }
_ZNK4i18n12phonenumbers4Lock7ReleaseEv:
   52|  29.3k|  void Release() const {
   53|  29.3k|    int ret = pthread_mutex_unlock(&mutex_);
   54|  29.3k|    (void) ret;
   55|  29.3k|    DCHECK_EQ(0, ret);
  ------------------
  |  |   30|  29.3k|#define DCHECK_EQ(X, Y) CHECK_EQ((X), (Y))
  |  |  ------------------
  |  |  |  |   25|  29.3k|#define CHECK_EQ(X, Y) assert((X) == (Y))
  |  |  ------------------
  ------------------
   56|  29.3k|  }

_ZN4i18n12phonenumbers13LoggerHandlerC2EPNS0_6LoggerE:
   56|  3.44k|  LoggerHandler(Logger* impl) : impl_(impl) {}
_ZN4i18n12phonenumbers13LoggerHandlerD2Ev:
   58|  3.44k|  ~LoggerHandler() {
   59|  3.44k|    if (impl_) {
  ------------------
  |  Branch (59:9): [True: 0, False: 3.44k]
  ------------------
   60|      0|      impl_->WriteMessage("\n");
   61|      0|    }
   62|  3.44k|  }
_ZN4i18n12phonenumbers3LOGEi:
   76|  3.44k|inline LoggerHandler LOG(int n) {
   77|  3.44k|  Logger* const logger_impl = Logger::mutable_logger_impl();
   78|  3.44k|  if (logger_impl->level() < n) {
  ------------------
  |  Branch (78:7): [True: 3.44k, False: 0]
  ------------------
   79|  3.44k|    return LoggerHandler(NULL);
   80|  3.44k|  }
   81|      0|  logger_impl->WriteLevel();
   82|      0|  return LoggerHandler(logger_impl);
   83|  3.44k|}
_ZN4i18n12phonenumbers4VLOGEi:
   85|  2.33k|inline LoggerHandler VLOG(int n) {
   86|       |  // VLOG(1) is the next logging level after LOG(DEBUG).
   87|  2.33k|  n += LOG_DEBUG;
   88|  2.33k|  return LOG(n);
   89|  2.33k|}
_ZN4i18n12phonenumbers13LoggerHandlerlsINSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEERS1_RKT_:
   65|    260|  LoggerHandler& operator<<(const T& value) {
   66|    260|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 260]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    260|    return *this;
   70|    260|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA36_cEERS1_RKT_:
   65|    258|  LoggerHandler& operator<<(const T& value) {
   66|    258|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 258]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    258|    return *this;
   70|    258|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA46_cEERS1_RKT_:
   65|    190|  LoggerHandler& operator<<(const T& value) {
   66|    190|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 190]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    190|    return *this;
   70|    190|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA39_cEERS1_RKT_:
   65|  1.10k|  LoggerHandler& operator<<(const T& value) {
   66|  1.10k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 1.10k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  1.10k|    return *this;
   70|  1.10k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA55_cEERS1_RKT_:
   65|  1.47k|  LoggerHandler& operator<<(const T& value) {
   66|  1.47k|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 1.47k]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|  1.47k|    return *this;
   70|  1.47k|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA54_cEERS1_RKT_:
   65|     39|  LoggerHandler& operator<<(const T& value) {
   66|     39|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 39]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     39|    return *this;
   70|     39|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA32_cEERS1_RKT_:
   65|    260|  LoggerHandler& operator<<(const T& value) {
   66|    260|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 260]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    260|    return *this;
   70|    260|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA41_cEERS1_RKT_:
   65|     16|  LoggerHandler& operator<<(const T& value) {
   66|     16|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 16]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     16|    return *this;
   70|     16|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA49_cEERS1_RKT_:
   65|     16|  LoggerHandler& operator<<(const T& value) {
   66|     16|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 16]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|     16|    return *this;
   70|     16|  }
_ZN4i18n12phonenumbers13LoggerHandlerlsIA43_cEERS1_RKT_:
   65|    104|  LoggerHandler& operator<<(const T& value) {
   66|    104|    if (impl_) {
  ------------------
  |  Branch (66:9): [True: 0, False: 104]
  ------------------
   67|      0|      impl_->WriteMessage(ConvertToString<T>::DoWork(value));
   68|      0|    }
   69|    104|    return *this;
   70|    104|  }

_ZN4i18n12phonenumbers13EncodingUtils14DecodeUTF8CharEPKcPi:
   30|     42|  static inline int DecodeUTF8Char(const char* in, char32* out) {
   31|     42|    Rune r;
   32|     42|    int len = chartorune(&r, in);
   33|     42|    *out = r;
   34|     42|    return len;
   35|     42|  }

_ZN4i18n12phonenumbers6LoggerC2Ev:
   49|      1|  Logger() : level_(LOG_ERROR) {}
_ZNK4i18n12phonenumbers6Logger5levelEv:
   60|  3.44k|  inline int level() const {
   61|  3.44k|    return level_;
   62|  3.44k|  }
_ZN4i18n12phonenumbers6Logger15set_logger_implEPS1_:
   77|      2|  static inline Logger* set_logger_impl(Logger* logger) {
   78|      2|    impl_ = logger;
   79|      2|    return logger;
   80|      2|  }
_ZN4i18n12phonenumbers6Logger19mutable_logger_implEv:
   82|  3.44k|  static inline Logger* mutable_logger_impl() {
   83|  3.44k|    return impl_;
   84|  3.44k|  }

_ZN4i18n12phonenumbers10MatcherApiD2Ev:
   34|  3.06k|  virtual ~MatcherApi() {}

_ZN4i18n12phonenumbers13metadata_sizeEv:
15549|      1|int metadata_size() {
15550|      1|  return sizeof(data) / sizeof(data[0]);
15551|      1|}
_ZN4i18n12phonenumbers12metadata_getEv:
15553|      1|const void* metadata_get() {
15554|      1|  return data;
15555|      1|}

_ZN4i18n12phonenumbers13NormalizeUTF822NormalizeDecimalDigitsERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   26|  2.92k|  static string NormalizeDecimalDigits(const string& number) {
   27|  2.92k|    string normalized;
   28|  2.92k|    UnicodeText number_as_unicode;
   29|  2.92k|    number_as_unicode.PointToUTF8(number.data(), static_cast<int>(number.size()));
   30|  2.92k|    if (!number_as_unicode.UTF8WasValid())
  ------------------
  |  Branch (30:9): [True: 0, False: 2.92k]
  ------------------
   31|      0|      return normalized; // Return an empty result to indicate an error
   32|  2.92k|    for (UnicodeText::const_iterator it = number_as_unicode.begin();
   33|  19.4k|         it != number_as_unicode.end();
  ------------------
  |  Branch (33:10): [True: 16.4k, False: 2.92k]
  ------------------
   34|  16.4k|         ++it) {
   35|  16.4k|      int32_t digitValue = u_charDigitValue(*it);
   36|  16.4k|      if (digitValue == -1) {
  ------------------
  |  Branch (36:11): [True: 0, False: 16.4k]
  ------------------
   37|       |        // Not a decimal digit.
   38|      0|        char utf8[4];
   39|      0|        int len = it.get_utf8(utf8);
   40|      0|        normalized.append(utf8, len);
   41|  16.4k|      } else {
   42|  16.4k|        normalized.push_back('0' + digitValue);
   43|  16.4k|      }
   44|  16.4k|    }
   45|  2.92k|    return normalized;
   46|  2.92k|  }

_ZN4i18n12phonenumbers12NumberFormatC2EPN6google8protobuf5ArenaE:
  121|  1.86k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena),
  122|  1.86k|  leading_digits_pattern_(arena) {
  123|  1.86k|  SharedCtor();
  124|  1.86k|  RegisterArenaDtor(arena);
  125|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.NumberFormat)
  126|  1.86k|}
_ZN4i18n12phonenumbers12NumberFormatD2Ev:
  165|    933|NumberFormat::~NumberFormat() {
  166|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.NumberFormat)
  167|    933|  SharedDtor();
  168|    933|  _internal_metadata_.Delete<std::string>();
  169|    933|}
_ZN4i18n12phonenumbers12NumberFormat14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE:
  221|    933|const char* NumberFormat::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  222|    933|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  223|    933|  _Internal::HasBits has_bits{};
  224|  4.38k|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (224:10): [True: 3.45k, False: 933]
  ------------------
  225|  3.45k|    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
  226|  3.45k|    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
  227|  3.45k|    CHK_(ptr);
  ------------------
  |  |  222|  3.45k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  228|  3.45k|    switch (tag >> 3) {
  229|       |      // required string pattern = 1;
  230|    933|      case 1:
  ------------------
  |  Branch (230:7): [True: 933, False: 2.51k]
  ------------------
  231|    933|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
  232|    933|          auto str = _internal_mutable_pattern();
  233|    933|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  234|    933|          CHK_(ptr);
  ------------------
  |  |  222|    933|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  235|    933|        } else goto handle_unusual;
  236|    933|        continue;
  237|       |      // required string format = 2;
  238|    933|      case 2:
  ------------------
  |  Branch (238:7): [True: 933, False: 2.51k]
  ------------------
  239|    933|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
  240|    933|          auto str = _internal_mutable_format();
  241|    933|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  242|    933|          CHK_(ptr);
  ------------------
  |  |  222|    933|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  243|    933|        } else goto handle_unusual;
  244|    933|        continue;
  245|       |      // repeated string leading_digits_pattern = 3;
  246|    933|      case 3:
  ------------------
  |  Branch (246:7): [True: 932, False: 2.51k]
  ------------------
  247|    932|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
  248|    932|          ptr -= 1;
  249|  1.08k|          do {
  250|  1.08k|            ptr += 1;
  251|  1.08k|            auto str = _internal_add_leading_digits_pattern();
  252|  1.08k|            ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  253|  1.08k|            CHK_(ptr);
  ------------------
  |  |  222|  1.08k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  254|  1.08k|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (254:17): [True: 371, False: 710]
  ------------------
  255|  1.08k|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<26>(ptr));
  ------------------
  |  Branch (255:20): [True: 149, False: 561]
  ------------------
  256|    932|        } else goto handle_unusual;
  257|    932|        continue;
  258|       |      // optional string national_prefix_formatting_rule = 4;
  259|    932|      case 4:
  ------------------
  |  Branch (259:7): [True: 523, False: 2.92k]
  ------------------
  260|    523|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
  261|    523|          auto str = _internal_mutable_national_prefix_formatting_rule();
  262|    523|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  263|    523|          CHK_(ptr);
  ------------------
  |  |  222|    523|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  264|    523|        } else goto handle_unusual;
  265|    523|        continue;
  266|       |      // optional string domestic_carrier_code_formatting_rule = 5;
  267|    523|      case 5:
  ------------------
  |  Branch (267:7): [True: 55, False: 3.39k]
  ------------------
  268|     55|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
  269|     55|          auto str = _internal_mutable_domestic_carrier_code_formatting_rule();
  270|     55|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  271|     55|          CHK_(ptr);
  ------------------
  |  |  222|     55|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  272|     55|        } else goto handle_unusual;
  273|     55|        continue;
  274|       |      // optional bool national_prefix_optional_when_formatting = 6 [default = false];
  275|     74|      case 6:
  ------------------
  |  Branch (275:7): [True: 74, False: 3.37k]
  ------------------
  276|     74|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 48)) {
  277|     74|          _Internal::set_has_national_prefix_optional_when_formatting(&has_bits);
  278|     74|          national_prefix_optional_when_formatting_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
  279|     74|          CHK_(ptr);
  ------------------
  |  |  222|     74|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  280|     74|        } else goto handle_unusual;
  281|     74|        continue;
  282|     74|      default: {
  ------------------
  |  Branch (282:7): [True: 0, False: 3.45k]
  ------------------
  283|      0|      handle_unusual:
  284|      0|        if ((tag & 7) == 4 || tag == 0) {
  ------------------
  |  Branch (284:13): [True: 0, False: 0]
  |  Branch (284:31): [True: 0, False: 0]
  ------------------
  285|      0|          ctx->SetLastTag(tag);
  286|      0|          goto success;
  287|      0|        }
  288|      0|        ptr = UnknownFieldParse(tag,
  289|      0|            _internal_metadata_.mutable_unknown_fields<std::string>(),
  290|      0|            ptr, ctx);
  291|      0|        CHK_(ptr != nullptr);
  ------------------
  |  |  222|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  292|      0|        continue;
  293|      0|      }
  294|  3.45k|    }  // switch
  295|  3.45k|  }  // while
  296|    933|success:
  297|    933|  _has_bits_.Or(has_bits);
  298|    933|  return ptr;
  299|      0|failure:
  300|      0|  ptr = nullptr;
  301|      0|  goto success;
  302|    933|#undef CHK_
  303|    933|}
_ZN4i18n12phonenumbers12NumberFormat9MergeFromERKS1_:
  442|    933|void NumberFormat::MergeFrom(const NumberFormat& from) {
  443|       |// @@protoc_insertion_point(class_specific_merge_from_start:i18n.phonenumbers.NumberFormat)
  444|    933|  GOOGLE_DCHECK_NE(&from, this);
  445|    933|  _internal_metadata_.MergeFrom<std::string>(from._internal_metadata_);
  446|    933|  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
  447|    933|  (void) cached_has_bits;
  448|       |
  449|    933|  leading_digits_pattern_.MergeFrom(from.leading_digits_pattern_);
  450|    933|  cached_has_bits = from._has_bits_[0];
  451|    933|  if (cached_has_bits & 0x0000001fu) {
  ------------------
  |  Branch (451:7): [True: 933, False: 0]
  ------------------
  452|    933|    if (cached_has_bits & 0x00000001u) {
  ------------------
  |  Branch (452:9): [True: 933, False: 0]
  ------------------
  453|    933|      _internal_set_pattern(from._internal_pattern());
  454|    933|    }
  455|    933|    if (cached_has_bits & 0x00000002u) {
  ------------------
  |  Branch (455:9): [True: 933, False: 0]
  ------------------
  456|    933|      _internal_set_format(from._internal_format());
  457|    933|    }
  458|    933|    if (cached_has_bits & 0x00000004u) {
  ------------------
  |  Branch (458:9): [True: 523, False: 410]
  ------------------
  459|    523|      _internal_set_national_prefix_formatting_rule(from._internal_national_prefix_formatting_rule());
  460|    523|    }
  461|    933|    if (cached_has_bits & 0x00000008u) {
  ------------------
  |  Branch (461:9): [True: 55, False: 878]
  ------------------
  462|     55|      _internal_set_domestic_carrier_code_formatting_rule(from._internal_domestic_carrier_code_formatting_rule());
  463|     55|    }
  464|    933|    if (cached_has_bits & 0x00000010u) {
  ------------------
  |  Branch (464:9): [True: 74, False: 859]
  ------------------
  465|     74|      national_prefix_optional_when_formatting_ = from.national_prefix_optional_when_formatting_;
  466|     74|    }
  467|    933|    _has_bits_[0] |= cached_has_bits;
  468|    933|  }
  469|    933|}
_ZNK4i18n12phonenumbers12NumberFormat13IsInitializedEv:
  478|    933|bool NumberFormat::IsInitialized() const {
  479|    933|  if (_Internal::MissingRequiredFields(_has_bits_)) return false;
  ------------------
  |  Branch (479:7): [True: 0, False: 933]
  ------------------
  480|    933|  return true;
  481|    933|}
_ZN4i18n12phonenumbers15PhoneNumberDescC2EPN6google8protobuf5ArenaE:
  514|  5.91M|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena),
  515|  5.91M|  possible_length_(arena),
  516|  5.91M|  possible_length_local_only_(arena) {
  517|  5.91M|  SharedCtor();
  518|  5.91M|  RegisterArenaDtor(arena);
  519|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.PhoneNumberDesc)
  520|  5.91M|}
_ZN4i18n12phonenumbers15PhoneNumberDescC2ERKS1_:
  522|  5.91M|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(),
  523|  5.91M|      _has_bits_(from._has_bits_),
  524|  5.91M|      possible_length_(from.possible_length_),
  525|  5.91M|      possible_length_local_only_(from.possible_length_local_only_) {
  526|  5.91M|  _internal_metadata_.MergeFrom<std::string>(from._internal_metadata_);
  527|  5.91M|  national_number_pattern_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  528|  5.91M|  if (from._internal_has_national_number_pattern()) {
  ------------------
  |  Branch (528:7): [True: 3.65M, False: 2.25M]
  ------------------
  529|  3.65M|    national_number_pattern_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_national_number_pattern(), 
  530|  3.65M|      GetArena());
  531|  3.65M|  }
  532|  5.91M|  example_number_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  533|  5.91M|  if (from._internal_has_example_number()) {
  ------------------
  |  Branch (533:7): [True: 2.91M, False: 2.99M]
  ------------------
  534|  2.91M|    example_number_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_example_number(), 
  535|  2.91M|      GetArena());
  536|  2.91M|  }
  537|       |  // @@protoc_insertion_point(copy_constructor:i18n.phonenumbers.PhoneNumberDesc)
  538|  5.91M|}
_ZN4i18n12phonenumbers15PhoneNumberDescD2Ev:
  546|  11.8M|PhoneNumberDesc::~PhoneNumberDesc() {
  547|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.PhoneNumberDesc)
  548|  11.8M|  SharedDtor();
  549|  11.8M|  _internal_metadata_.Delete<std::string>();
  550|  11.8M|}
_ZN4i18n12phonenumbers15PhoneNumberDesc14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE:
  594|  5.91M|const char* PhoneNumberDesc::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
  595|  5.91M|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  596|  5.91M|  _Internal::HasBits has_bits{};
  597|  16.8M|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (597:10): [True: 10.9M, False: 5.91M]
  ------------------
  598|  10.9M|    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
  599|  10.9M|    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
  600|  10.9M|    CHK_(ptr);
  ------------------
  |  |  595|  10.9M|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  601|  10.9M|    switch (tag >> 3) {
  602|       |      // optional string national_number_pattern = 2;
  603|  3.65M|      case 2:
  ------------------
  |  Branch (603:7): [True: 3.65M, False: 7.26M]
  ------------------
  604|  3.65M|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
  605|  3.65M|          auto str = _internal_mutable_national_number_pattern();
  606|  3.65M|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  607|  3.65M|          CHK_(ptr);
  ------------------
  |  |  595|  3.65M|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  608|  3.65M|        } else goto handle_unusual;
  609|  3.65M|        continue;
  610|       |      // optional string example_number = 6;
  611|  3.65M|      case 6:
  ------------------
  |  Branch (611:7): [True: 2.91M, False: 8.00M]
  ------------------
  612|  2.91M|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
  613|  2.91M|          auto str = _internal_mutable_example_number();
  614|  2.91M|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
  615|  2.91M|          CHK_(ptr);
  ------------------
  |  |  595|  2.91M|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  616|  2.91M|        } else goto handle_unusual;
  617|  2.91M|        continue;
  618|       |      // repeated int32 possible_length = 9;
  619|  4.34M|      case 9:
  ------------------
  |  Branch (619:7): [True: 4.34M, False: 6.57M]
  ------------------
  620|  4.34M|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 72)) {
  621|  4.34M|          ptr -= 1;
  622|  5.70M|          do {
  623|  5.70M|            ptr += 1;
  624|  5.70M|            _internal_add_possible_length(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
  625|  5.70M|            CHK_(ptr);
  ------------------
  |  |  595|  5.70M|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  626|  5.70M|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (626:17): [True: 4.34M, False: 1.35M]
  ------------------
  627|  5.70M|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<72>(ptr));
  ------------------
  |  Branch (627:20): [True: 1.35M, False: 150]
  ------------------
  628|  4.34M|        } else if (static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 74) {
  ------------------
  |  Branch (628:20): [True: 0, False: 0]
  ------------------
  629|      0|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedInt32Parser(_internal_mutable_possible_length(), ptr, ctx);
  630|      0|          CHK_(ptr);
  ------------------
  |  |  595|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  631|      0|        } else goto handle_unusual;
  632|  4.34M|        continue;
  633|       |      // repeated int32 possible_length_local_only = 10;
  634|  4.34M|      case 10:
  ------------------
  |  Branch (634:7): [True: 242, False: 10.9M]
  ------------------
  635|    242|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 80)) {
  636|    242|          ptr -= 1;
  637|    354|          do {
  638|    354|            ptr += 1;
  639|    354|            _internal_add_possible_length_local_only(::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr));
  640|    354|            CHK_(ptr);
  ------------------
  |  |  595|    354|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  641|    354|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (641:17): [True: 242, False: 112]
  ------------------
  642|    354|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<80>(ptr));
  ------------------
  |  Branch (642:20): [True: 112, False: 0]
  ------------------
  643|    242|        } else if (static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 82) {
  ------------------
  |  Branch (643:20): [True: 0, False: 0]
  ------------------
  644|      0|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::PackedInt32Parser(_internal_mutable_possible_length_local_only(), ptr, ctx);
  645|      0|          CHK_(ptr);
  ------------------
  |  |  595|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  646|      0|        } else goto handle_unusual;
  647|    242|        continue;
  648|    242|      default: {
  ------------------
  |  Branch (648:7): [True: 0, False: 10.9M]
  ------------------
  649|      0|      handle_unusual:
  650|      0|        if ((tag & 7) == 4 || tag == 0) {
  ------------------
  |  Branch (650:13): [True: 0, False: 0]
  |  Branch (650:31): [True: 0, False: 0]
  ------------------
  651|      0|          ctx->SetLastTag(tag);
  652|      0|          goto success;
  653|      0|        }
  654|      0|        ptr = UnknownFieldParse(tag,
  655|      0|            _internal_metadata_.mutable_unknown_fields<std::string>(),
  656|      0|            ptr, ctx);
  657|      0|        CHK_(ptr != nullptr);
  ------------------
  |  |  595|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
  658|      0|        continue;
  659|      0|      }
  660|  10.9M|    }  // switch
  661|  10.9M|  }  // while
  662|  5.91M|success:
  663|  5.91M|  _has_bits_.Or(has_bits);
  664|  5.91M|  return ptr;
  665|      0|failure:
  666|      0|  ptr = nullptr;
  667|      0|  goto success;
  668|  5.91M|#undef CHK_
  669|  5.91M|}
_ZN4i18n12phonenumbers13PhoneMetadataC2EPN6google8protobuf5ArenaE:
  996|  2.84M|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena),
  997|  2.84M|  number_format_(arena),
  998|  2.84M|  intl_number_format_(arena) {
  999|  2.84M|  SharedCtor();
 1000|  2.84M|  RegisterArenaDtor(arena);
 1001|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.PhoneMetadata)
 1002|  2.84M|}
_ZN4i18n12phonenumbers13PhoneMetadataC2ERKS1_:
 1004|   738k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(),
 1005|   738k|      _has_bits_(from._has_bits_),
 1006|   738k|      number_format_(from.number_format_),
 1007|   738k|      intl_number_format_(from.intl_number_format_) {
 1008|   738k|  _internal_metadata_.MergeFrom<std::string>(from._internal_metadata_);
 1009|   738k|  id_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1010|   738k|  if (from._internal_has_id()) {
  ------------------
  |  Branch (1010:7): [True: 738k, False: 0]
  ------------------
 1011|   738k|    id_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_id(), 
 1012|   738k|      GetArena());
 1013|   738k|  }
 1014|   738k|  international_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1015|   738k|  if (from._internal_has_international_prefix()) {
  ------------------
  |  Branch (1015:7): [True: 245, False: 738k]
  ------------------
 1016|    245|    international_prefix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_international_prefix(), 
 1017|    245|      GetArena());
 1018|    245|  }
 1019|   738k|  national_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1020|   738k|  if (from._internal_has_national_prefix()) {
  ------------------
  |  Branch (1020:7): [True: 144, False: 738k]
  ------------------
 1021|    144|    national_prefix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_national_prefix(), 
 1022|    144|      GetArena());
 1023|    144|  }
 1024|   738k|  preferred_extn_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1025|   738k|  if (from._internal_has_preferred_extn_prefix()) {
  ------------------
  |  Branch (1025:7): [True: 5, False: 738k]
  ------------------
 1026|      5|    preferred_extn_prefix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_preferred_extn_prefix(), 
 1027|      5|      GetArena());
 1028|      5|  }
 1029|   738k|  national_prefix_for_parsing_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1030|   738k|  if (from._internal_has_national_prefix_for_parsing()) {
  ------------------
  |  Branch (1030:7): [True: 150, False: 738k]
  ------------------
 1031|    150|    national_prefix_for_parsing_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_national_prefix_for_parsing(), 
 1032|    150|      GetArena());
 1033|    150|  }
 1034|   738k|  national_prefix_transform_rule_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1035|   738k|  if (from._internal_has_national_prefix_transform_rule()) {
  ------------------
  |  Branch (1035:7): [True: 32, False: 738k]
  ------------------
 1036|     32|    national_prefix_transform_rule_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_national_prefix_transform_rule(), 
 1037|     32|      GetArena());
 1038|     32|  }
 1039|   738k|  preferred_international_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1040|   738k|  if (from._internal_has_preferred_international_prefix()) {
  ------------------
  |  Branch (1040:7): [True: 25, False: 738k]
  ------------------
 1041|     25|    preferred_international_prefix_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_preferred_international_prefix(), 
 1042|     25|      GetArena());
 1043|     25|  }
 1044|   738k|  leading_digits_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1045|   738k|  if (from._internal_has_leading_digits()) {
  ------------------
  |  Branch (1045:7): [True: 36, False: 738k]
  ------------------
 1046|     36|    leading_digits_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, from._internal_leading_digits(), 
 1047|     36|      GetArena());
 1048|     36|  }
 1049|   738k|  if (from._internal_has_general_desc()) {
  ------------------
  |  Branch (1049:7): [True: 738k, False: 0]
  ------------------
 1050|   738k|    general_desc_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.general_desc_);
 1051|   738k|  } else {
 1052|      0|    general_desc_ = nullptr;
 1053|      0|  }
 1054|   738k|  if (from._internal_has_fixed_line()) {
  ------------------
  |  Branch (1054:7): [True: 254, False: 738k]
  ------------------
 1055|    254|    fixed_line_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.fixed_line_);
 1056|   738k|  } else {
 1057|   738k|    fixed_line_ = nullptr;
 1058|   738k|  }
 1059|   738k|  if (from._internal_has_mobile()) {
  ------------------
  |  Branch (1059:7): [True: 254, False: 738k]
  ------------------
 1060|    254|    mobile_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.mobile_);
 1061|   738k|  } else {
 1062|   738k|    mobile_ = nullptr;
 1063|   738k|  }
 1064|   738k|  if (from._internal_has_toll_free()) {
  ------------------
  |  Branch (1064:7): [True: 738k, False: 0]
  ------------------
 1065|   738k|    toll_free_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.toll_free_);
 1066|   738k|  } else {
 1067|      0|    toll_free_ = nullptr;
 1068|      0|  }
 1069|   738k|  if (from._internal_has_premium_rate()) {
  ------------------
  |  Branch (1069:7): [True: 738k, False: 0]
  ------------------
 1070|   738k|    premium_rate_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.premium_rate_);
 1071|   738k|  } else {
 1072|      0|    premium_rate_ = nullptr;
 1073|      0|  }
 1074|   738k|  if (from._internal_has_shared_cost()) {
  ------------------
  |  Branch (1074:7): [True: 254, False: 738k]
  ------------------
 1075|    254|    shared_cost_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.shared_cost_);
 1076|   738k|  } else {
 1077|   738k|    shared_cost_ = nullptr;
 1078|   738k|  }
 1079|   738k|  if (from._internal_has_personal_number()) {
  ------------------
  |  Branch (1079:7): [True: 254, False: 738k]
  ------------------
 1080|    254|    personal_number_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.personal_number_);
 1081|   738k|  } else {
 1082|   738k|    personal_number_ = nullptr;
 1083|   738k|  }
 1084|   738k|  if (from._internal_has_voip()) {
  ------------------
  |  Branch (1084:7): [True: 254, False: 738k]
  ------------------
 1085|    254|    voip_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.voip_);
 1086|   738k|  } else {
 1087|   738k|    voip_ = nullptr;
 1088|   738k|  }
 1089|   738k|  if (from._internal_has_pager()) {
  ------------------
  |  Branch (1089:7): [True: 254, False: 738k]
  ------------------
 1090|    254|    pager_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.pager_);
 1091|   738k|  } else {
 1092|   738k|    pager_ = nullptr;
 1093|   738k|  }
 1094|   738k|  if (from._internal_has_no_international_dialling()) {
  ------------------
  |  Branch (1094:7): [True: 254, False: 738k]
  ------------------
 1095|    254|    no_international_dialling_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.no_international_dialling_);
 1096|   738k|  } else {
 1097|   738k|    no_international_dialling_ = nullptr;
 1098|   738k|  }
 1099|   738k|  if (from._internal_has_uan()) {
  ------------------
  |  Branch (1099:7): [True: 254, False: 738k]
  ------------------
 1100|    254|    uan_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.uan_);
 1101|   738k|  } else {
 1102|   738k|    uan_ = nullptr;
 1103|   738k|  }
 1104|   738k|  if (from._internal_has_emergency()) {
  ------------------
  |  Branch (1104:7): [True: 738k, False: 254]
  ------------------
 1105|   738k|    emergency_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.emergency_);
 1106|   738k|  } else {
 1107|    254|    emergency_ = nullptr;
 1108|    254|  }
 1109|   738k|  if (from._internal_has_voicemail()) {
  ------------------
  |  Branch (1109:7): [True: 254, False: 738k]
  ------------------
 1110|    254|    voicemail_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.voicemail_);
 1111|   738k|  } else {
 1112|   738k|    voicemail_ = nullptr;
 1113|   738k|  }
 1114|   738k|  if (from._internal_has_short_code()) {
  ------------------
  |  Branch (1114:7): [True: 738k, False: 254]
  ------------------
 1115|   738k|    short_code_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.short_code_);
 1116|   738k|  } else {
 1117|    254|    short_code_ = nullptr;
 1118|    254|  }
 1119|   738k|  if (from._internal_has_standard_rate()) {
  ------------------
  |  Branch (1119:7): [True: 738k, False: 254]
  ------------------
 1120|   738k|    standard_rate_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.standard_rate_);
 1121|   738k|  } else {
 1122|    254|    standard_rate_ = nullptr;
 1123|    254|  }
 1124|   738k|  if (from._internal_has_carrier_specific()) {
  ------------------
  |  Branch (1124:7): [True: 738k, False: 254]
  ------------------
 1125|   738k|    carrier_specific_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.carrier_specific_);
 1126|   738k|  } else {
 1127|    254|    carrier_specific_ = nullptr;
 1128|    254|  }
 1129|   738k|  if (from._internal_has_sms_services()) {
  ------------------
  |  Branch (1129:7): [True: 738k, False: 254]
  ------------------
 1130|   738k|    sms_services_ = new ::i18n::phonenumbers::PhoneNumberDesc(*from.sms_services_);
 1131|   738k|  } else {
 1132|    254|    sms_services_ = nullptr;
 1133|    254|  }
 1134|   738k|  ::memcpy(&country_code_, &from.country_code_,
 1135|   738k|    static_cast<size_t>(reinterpret_cast<char*>(&mobile_number_portable_region_) -
 1136|   738k|    reinterpret_cast<char*>(&country_code_)) + sizeof(mobile_number_portable_region_));
 1137|       |  // @@protoc_insertion_point(copy_constructor:i18n.phonenumbers.PhoneMetadata)
 1138|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadataD2Ev:
 1156|  3.58M|PhoneMetadata::~PhoneMetadata() {
 1157|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.PhoneMetadata)
 1158|  3.58M|  SharedDtor();
 1159|  3.58M|  _internal_metadata_.Delete<std::string>();
 1160|  3.58M|}
_ZN4i18n12phonenumbers13PhoneMetadata14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE:
 1322|   738k|const char* PhoneMetadata::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
 1324|   738k|  _Internal::HasBits has_bits{};
 1325|  7.39M|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (1325:10): [True: 6.65M, False: 738k]
  ------------------
 1326|  6.65M|    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
 1327|  6.65M|    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
 1328|  6.65M|    CHK_(ptr);
  ------------------
  |  | 1323|  6.65M|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1329|  6.65M|    switch (tag >> 3) {
 1330|       |      // optional .i18n.phonenumbers.PhoneNumberDesc general_desc = 1;
 1331|   738k|      case 1:
  ------------------
  |  Branch (1331:7): [True: 738k, False: 5.91M]
  ------------------
 1332|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
 1333|   738k|          ptr = ctx->ParseMessage(_internal_mutable_general_desc(), ptr);
 1334|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1335|   738k|        } else goto handle_unusual;
 1336|   738k|        continue;
 1337|       |      // optional .i18n.phonenumbers.PhoneNumberDesc fixed_line = 2;
 1338|   738k|      case 2:
  ------------------
  |  Branch (1338:7): [True: 254, False: 6.65M]
  ------------------
 1339|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 18)) {
 1340|    254|          ptr = ctx->ParseMessage(_internal_mutable_fixed_line(), ptr);
 1341|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1342|    254|        } else goto handle_unusual;
 1343|    254|        continue;
 1344|       |      // optional .i18n.phonenumbers.PhoneNumberDesc mobile = 3;
 1345|    254|      case 3:
  ------------------
  |  Branch (1345:7): [True: 254, False: 6.65M]
  ------------------
 1346|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 26)) {
 1347|    254|          ptr = ctx->ParseMessage(_internal_mutable_mobile(), ptr);
 1348|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1349|    254|        } else goto handle_unusual;
 1350|    254|        continue;
 1351|       |      // optional .i18n.phonenumbers.PhoneNumberDesc toll_free = 4;
 1352|   738k|      case 4:
  ------------------
  |  Branch (1352:7): [True: 738k, False: 5.91M]
  ------------------
 1353|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 34)) {
 1354|   738k|          ptr = ctx->ParseMessage(_internal_mutable_toll_free(), ptr);
 1355|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1356|   738k|        } else goto handle_unusual;
 1357|   738k|        continue;
 1358|       |      // optional .i18n.phonenumbers.PhoneNumberDesc premium_rate = 5;
 1359|   738k|      case 5:
  ------------------
  |  Branch (1359:7): [True: 738k, False: 5.91M]
  ------------------
 1360|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 42)) {
 1361|   738k|          ptr = ctx->ParseMessage(_internal_mutable_premium_rate(), ptr);
 1362|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1363|   738k|        } else goto handle_unusual;
 1364|   738k|        continue;
 1365|       |      // optional .i18n.phonenumbers.PhoneNumberDesc shared_cost = 6;
 1366|   738k|      case 6:
  ------------------
  |  Branch (1366:7): [True: 254, False: 6.65M]
  ------------------
 1367|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 50)) {
 1368|    254|          ptr = ctx->ParseMessage(_internal_mutable_shared_cost(), ptr);
 1369|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1370|    254|        } else goto handle_unusual;
 1371|    254|        continue;
 1372|       |      // optional .i18n.phonenumbers.PhoneNumberDesc personal_number = 7;
 1373|    254|      case 7:
  ------------------
  |  Branch (1373:7): [True: 254, False: 6.65M]
  ------------------
 1374|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 58)) {
 1375|    254|          ptr = ctx->ParseMessage(_internal_mutable_personal_number(), ptr);
 1376|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1377|    254|        } else goto handle_unusual;
 1378|    254|        continue;
 1379|       |      // optional .i18n.phonenumbers.PhoneNumberDesc voip = 8;
 1380|    254|      case 8:
  ------------------
  |  Branch (1380:7): [True: 254, False: 6.65M]
  ------------------
 1381|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 66)) {
 1382|    254|          ptr = ctx->ParseMessage(_internal_mutable_voip(), ptr);
 1383|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1384|    254|        } else goto handle_unusual;
 1385|    254|        continue;
 1386|       |      // required string id = 9;
 1387|   738k|      case 9:
  ------------------
  |  Branch (1387:7): [True: 738k, False: 5.91M]
  ------------------
 1388|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 74)) {
 1389|   738k|          auto str = _internal_mutable_id();
 1390|   738k|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1391|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1392|   738k|        } else goto handle_unusual;
 1393|   738k|        continue;
 1394|       |      // optional int32 country_code = 10;
 1395|   738k|      case 10:
  ------------------
  |  Branch (1395:7): [True: 254, False: 6.65M]
  ------------------
 1396|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 80)) {
 1397|    254|          _Internal::set_has_country_code(&has_bits);
 1398|    254|          country_code_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
 1399|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1400|    254|        } else goto handle_unusual;
 1401|    254|        continue;
 1402|       |      // optional string international_prefix = 11;
 1403|    254|      case 11:
  ------------------
  |  Branch (1403:7): [True: 245, False: 6.65M]
  ------------------
 1404|    245|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 90)) {
 1405|    245|          auto str = _internal_mutable_international_prefix();
 1406|    245|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1407|    245|          CHK_(ptr);
  ------------------
  |  | 1323|    245|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1408|    245|        } else goto handle_unusual;
 1409|    245|        continue;
 1410|       |      // optional string national_prefix = 12;
 1411|    245|      case 12:
  ------------------
  |  Branch (1411:7): [True: 144, False: 6.65M]
  ------------------
 1412|    144|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 98)) {
 1413|    144|          auto str = _internal_mutable_national_prefix();
 1414|    144|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1415|    144|          CHK_(ptr);
  ------------------
  |  | 1323|    144|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1416|    144|        } else goto handle_unusual;
 1417|    144|        continue;
 1418|       |      // optional string preferred_extn_prefix = 13;
 1419|    144|      case 13:
  ------------------
  |  Branch (1419:7): [True: 5, False: 6.65M]
  ------------------
 1420|      5|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 106)) {
 1421|      5|          auto str = _internal_mutable_preferred_extn_prefix();
 1422|      5|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1423|      5|          CHK_(ptr);
  ------------------
  |  | 1323|      5|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1424|      5|        } else goto handle_unusual;
 1425|      5|        continue;
 1426|       |      // optional string national_prefix_for_parsing = 15;
 1427|    150|      case 15:
  ------------------
  |  Branch (1427:7): [True: 150, False: 6.65M]
  ------------------
 1428|    150|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 122)) {
 1429|    150|          auto str = _internal_mutable_national_prefix_for_parsing();
 1430|    150|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1431|    150|          CHK_(ptr);
  ------------------
  |  | 1323|    150|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1432|    150|        } else goto handle_unusual;
 1433|    150|        continue;
 1434|       |      // optional string national_prefix_transform_rule = 16;
 1435|    150|      case 16:
  ------------------
  |  Branch (1435:7): [True: 32, False: 6.65M]
  ------------------
 1436|     32|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 130)) {
 1437|     32|          auto str = _internal_mutable_national_prefix_transform_rule();
 1438|     32|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1439|     32|          CHK_(ptr);
  ------------------
  |  | 1323|     32|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1440|     32|        } else goto handle_unusual;
 1441|     32|        continue;
 1442|       |      // optional string preferred_international_prefix = 17;
 1443|     32|      case 17:
  ------------------
  |  Branch (1443:7): [True: 25, False: 6.65M]
  ------------------
 1444|     25|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 138)) {
 1445|     25|          auto str = _internal_mutable_preferred_international_prefix();
 1446|     25|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1447|     25|          CHK_(ptr);
  ------------------
  |  | 1323|     25|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1448|     25|        } else goto handle_unusual;
 1449|     25|        continue;
 1450|       |      // optional bool same_mobile_and_fixed_line_pattern = 18 [default = false];
 1451|     25|      case 18:
  ------------------
  |  Branch (1451:7): [True: 13, False: 6.65M]
  ------------------
 1452|     13|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 144)) {
 1453|     13|          _Internal::set_has_same_mobile_and_fixed_line_pattern(&has_bits);
 1454|     13|          same_mobile_and_fixed_line_pattern_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
 1455|     13|          CHK_(ptr);
  ------------------
  |  | 1323|     13|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1456|     13|        } else goto handle_unusual;
 1457|     13|        continue;
 1458|       |      // repeated .i18n.phonenumbers.NumberFormat number_format = 19;
 1459|    210|      case 19:
  ------------------
  |  Branch (1459:7): [True: 210, False: 6.65M]
  ------------------
 1460|    210|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 154)) {
 1461|    210|          ptr -= 2;
 1462|    754|          do {
 1463|    754|            ptr += 2;
 1464|    754|            ptr = ctx->ParseMessage(_internal_add_number_format(), ptr);
 1465|    754|            CHK_(ptr);
  ------------------
  |  | 1323|    754|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1466|    754|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (1466:17): [True: 0, False: 754]
  ------------------
 1467|    754|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<154>(ptr));
  ------------------
  |  Branch (1467:20): [True: 544, False: 210]
  ------------------
 1468|    210|        } else goto handle_unusual;
 1469|    210|        continue;
 1470|       |      // repeated .i18n.phonenumbers.NumberFormat intl_number_format = 20;
 1471|    210|      case 20:
  ------------------
  |  Branch (1471:7): [True: 38, False: 6.65M]
  ------------------
 1472|     38|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 162)) {
 1473|     38|          ptr -= 2;
 1474|    179|          do {
 1475|    179|            ptr += 2;
 1476|    179|            ptr = ctx->ParseMessage(_internal_add_intl_number_format(), ptr);
 1477|    179|            CHK_(ptr);
  ------------------
  |  | 1323|    179|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1478|    179|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (1478:17): [True: 0, False: 179]
  ------------------
 1479|    179|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<162>(ptr));
  ------------------
  |  Branch (1479:20): [True: 141, False: 38]
  ------------------
 1480|     38|        } else goto handle_unusual;
 1481|     38|        continue;
 1482|       |      // optional .i18n.phonenumbers.PhoneNumberDesc pager = 21;
 1483|    254|      case 21:
  ------------------
  |  Branch (1483:7): [True: 254, False: 6.65M]
  ------------------
 1484|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 170)) {
 1485|    254|          ptr = ctx->ParseMessage(_internal_mutable_pager(), ptr);
 1486|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1487|    254|        } else goto handle_unusual;
 1488|    254|        continue;
 1489|       |      // optional bool main_country_for_code = 22 [default = false];
 1490|    254|      case 22:
  ------------------
  |  Branch (1490:7): [True: 12, False: 6.65M]
  ------------------
 1491|     12|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 176)) {
 1492|     12|          _Internal::set_has_main_country_for_code(&has_bits);
 1493|     12|          main_country_for_code_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
 1494|     12|          CHK_(ptr);
  ------------------
  |  | 1323|     12|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1495|     12|        } else goto handle_unusual;
 1496|     12|        continue;
 1497|       |      // optional string leading_digits = 23;
 1498|     36|      case 23:
  ------------------
  |  Branch (1498:7): [True: 36, False: 6.65M]
  ------------------
 1499|     36|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 186)) {
 1500|     36|          auto str = _internal_mutable_leading_digits();
 1501|     36|          ptr = ::PROTOBUF_NAMESPACE_ID::internal::InlineGreedyStringParser(str, ptr, ctx);
 1502|     36|          CHK_(ptr);
  ------------------
  |  | 1323|     36|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1503|     36|        } else goto handle_unusual;
 1504|     36|        continue;
 1505|       |      // optional .i18n.phonenumbers.PhoneNumberDesc no_international_dialling = 24;
 1506|    254|      case 24:
  ------------------
  |  Branch (1506:7): [True: 254, False: 6.65M]
  ------------------
 1507|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 194)) {
 1508|    254|          ptr = ctx->ParseMessage(_internal_mutable_no_international_dialling(), ptr);
 1509|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1510|    254|        } else goto handle_unusual;
 1511|    254|        continue;
 1512|       |      // optional .i18n.phonenumbers.PhoneNumberDesc uan = 25;
 1513|    254|      case 25:
  ------------------
  |  Branch (1513:7): [True: 254, False: 6.65M]
  ------------------
 1514|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 202)) {
 1515|    254|          ptr = ctx->ParseMessage(_internal_mutable_uan(), ptr);
 1516|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1517|    254|        } else goto handle_unusual;
 1518|    254|        continue;
 1519|       |      // optional .i18n.phonenumbers.PhoneNumberDesc emergency = 27;
 1520|   738k|      case 27:
  ------------------
  |  Branch (1520:7): [True: 738k, False: 5.91M]
  ------------------
 1521|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 218)) {
 1522|   738k|          ptr = ctx->ParseMessage(_internal_mutable_emergency(), ptr);
 1523|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1524|   738k|        } else goto handle_unusual;
 1525|   738k|        continue;
 1526|       |      // optional .i18n.phonenumbers.PhoneNumberDesc voicemail = 28;
 1527|   738k|      case 28:
  ------------------
  |  Branch (1527:7): [True: 254, False: 6.65M]
  ------------------
 1528|    254|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 226)) {
 1529|    254|          ptr = ctx->ParseMessage(_internal_mutable_voicemail(), ptr);
 1530|    254|          CHK_(ptr);
  ------------------
  |  | 1323|    254|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1531|    254|        } else goto handle_unusual;
 1532|    254|        continue;
 1533|       |      // optional .i18n.phonenumbers.PhoneNumberDesc short_code = 29;
 1534|   738k|      case 29:
  ------------------
  |  Branch (1534:7): [True: 738k, False: 5.91M]
  ------------------
 1535|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 234)) {
 1536|   738k|          ptr = ctx->ParseMessage(_internal_mutable_short_code(), ptr);
 1537|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1538|   738k|        } else goto handle_unusual;
 1539|   738k|        continue;
 1540|       |      // optional .i18n.phonenumbers.PhoneNumberDesc standard_rate = 30;
 1541|   738k|      case 30:
  ------------------
  |  Branch (1541:7): [True: 738k, False: 5.91M]
  ------------------
 1542|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 242)) {
 1543|   738k|          ptr = ctx->ParseMessage(_internal_mutable_standard_rate(), ptr);
 1544|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1545|   738k|        } else goto handle_unusual;
 1546|   738k|        continue;
 1547|       |      // optional .i18n.phonenumbers.PhoneNumberDesc carrier_specific = 31;
 1548|   738k|      case 31:
  ------------------
  |  Branch (1548:7): [True: 738k, False: 5.91M]
  ------------------
 1549|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 250)) {
 1550|   738k|          ptr = ctx->ParseMessage(_internal_mutable_carrier_specific(), ptr);
 1551|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1552|   738k|        } else goto handle_unusual;
 1553|   738k|        continue;
 1554|       |      // optional bool mobile_number_portable_region = 32 [default = false];
 1555|   738k|      case 32:
  ------------------
  |  Branch (1555:7): [True: 107, False: 6.65M]
  ------------------
 1556|    107|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 0)) {
 1557|    107|          _Internal::set_has_mobile_number_portable_region(&has_bits);
 1558|    107|          mobile_number_portable_region_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr);
 1559|    107|          CHK_(ptr);
  ------------------
  |  | 1323|    107|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1560|    107|        } else goto handle_unusual;
 1561|    107|        continue;
 1562|       |      // optional .i18n.phonenumbers.PhoneNumberDesc sms_services = 33;
 1563|   738k|      case 33:
  ------------------
  |  Branch (1563:7): [True: 738k, False: 5.91M]
  ------------------
 1564|   738k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
 1565|   738k|          ptr = ctx->ParseMessage(_internal_mutable_sms_services(), ptr);
 1566|   738k|          CHK_(ptr);
  ------------------
  |  | 1323|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1567|   738k|        } else goto handle_unusual;
 1568|   738k|        continue;
 1569|   738k|      default: {
  ------------------
  |  Branch (1569:7): [True: 0, False: 6.65M]
  ------------------
 1570|      0|      handle_unusual:
 1571|      0|        if ((tag & 7) == 4 || tag == 0) {
  ------------------
  |  Branch (1571:13): [True: 0, False: 0]
  |  Branch (1571:31): [True: 0, False: 0]
  ------------------
 1572|      0|          ctx->SetLastTag(tag);
 1573|      0|          goto success;
 1574|      0|        }
 1575|      0|        ptr = UnknownFieldParse(tag,
 1576|      0|            _internal_metadata_.mutable_unknown_fields<std::string>(),
 1577|      0|            ptr, ctx);
 1578|      0|        CHK_(ptr != nullptr);
  ------------------
  |  | 1323|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 1579|      0|        continue;
 1580|      0|      }
 1581|  6.65M|    }  // switch
 1582|  6.65M|  }  // while
 1583|   738k|success:
 1584|   738k|  _has_bits_.Or(has_bits);
 1585|   738k|  return ptr;
 1586|      0|failure:
 1587|      0|  ptr = nullptr;
 1588|      0|  goto success;
 1589|   738k|#undef CHK_
 1590|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata13IsInitializedEv:
 2187|   738k|bool PhoneMetadata::IsInitialized() const {
 2188|   738k|  if (_Internal::MissingRequiredFields(_has_bits_)) return false;
  ------------------
  |  Branch (2188:7): [True: 0, False: 738k]
  ------------------
 2189|   738k|  if (!::PROTOBUF_NAMESPACE_ID::internal::AllAreInitialized(number_format_)) return false;
  ------------------
  |  Branch (2189:7): [True: 0, False: 738k]
  ------------------
 2190|   738k|  if (!::PROTOBUF_NAMESPACE_ID::internal::AllAreInitialized(intl_number_format_)) return false;
  ------------------
  |  Branch (2190:7): [True: 0, False: 738k]
  ------------------
 2191|   738k|  return true;
 2192|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata12InternalSwapEPS1_:
 2194|  2.10M|void PhoneMetadata::InternalSwap(PhoneMetadata* other) {
 2195|  2.10M|  using std::swap;
 2196|  2.10M|  _internal_metadata_.Swap<std::string>(&other->_internal_metadata_);
 2197|  2.10M|  swap(_has_bits_[0], other->_has_bits_[0]);
 2198|  2.10M|  number_format_.InternalSwap(&other->number_format_);
 2199|  2.10M|  intl_number_format_.InternalSwap(&other->intl_number_format_);
 2200|  2.10M|  id_.Swap(&other->id_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2201|  2.10M|  international_prefix_.Swap(&other->international_prefix_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2202|  2.10M|  national_prefix_.Swap(&other->national_prefix_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2203|  2.10M|  preferred_extn_prefix_.Swap(&other->preferred_extn_prefix_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2204|  2.10M|  national_prefix_for_parsing_.Swap(&other->national_prefix_for_parsing_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2205|  2.10M|  national_prefix_transform_rule_.Swap(&other->national_prefix_transform_rule_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2206|  2.10M|  preferred_international_prefix_.Swap(&other->preferred_international_prefix_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2207|  2.10M|  leading_digits_.Swap(&other->leading_digits_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
 2208|  2.10M|  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
 2209|  2.10M|      PROTOBUF_FIELD_OFFSET(PhoneMetadata, mobile_number_portable_region_)
 2210|  2.10M|      + sizeof(PhoneMetadata::mobile_number_portable_region_)
 2211|  2.10M|      - PROTOBUF_FIELD_OFFSET(PhoneMetadata, general_desc_)>(
 2212|  2.10M|          reinterpret_cast<char*>(&general_desc_),
 2213|  2.10M|          reinterpret_cast<char*>(&other->general_desc_));
 2214|  2.10M|}
_ZN4i18n12phonenumbers23PhoneMetadataCollectionC2EPN6google8protobuf5ArenaE:
 2228|  3.06k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena),
 2229|  3.06k|  metadata_(arena) {
 2230|  3.06k|  SharedCtor();
 2231|  3.06k|  RegisterArenaDtor(arena);
 2232|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.PhoneMetadataCollection)
 2233|  3.06k|}
_ZN4i18n12phonenumbers23PhoneMetadataCollectionD2Ev:
 2245|  3.06k|PhoneMetadataCollection::~PhoneMetadataCollection() {
 2246|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.PhoneMetadataCollection)
 2247|  3.06k|  SharedDtor();
 2248|  3.06k|  _internal_metadata_.Delete<std::string>();
 2249|  3.06k|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection5ClearEv:
 2270|  3.06k|void PhoneMetadataCollection::Clear() {
 2271|       |// @@protoc_insertion_point(message_clear_start:i18n.phonenumbers.PhoneMetadataCollection)
 2272|  3.06k|  ::PROTOBUF_NAMESPACE_ID::uint32 cached_has_bits = 0;
 2273|       |  // Prevent compiler warnings about cached_has_bits being unused
 2274|  3.06k|  (void) cached_has_bits;
 2275|       |
 2276|  3.06k|  metadata_.Clear();
 2277|  3.06k|  _internal_metadata_.Clear<std::string>();
 2278|  3.06k|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection14_InternalParseEPKcPN6google8protobuf8internal12ParseContextE:
 2280|  3.06k|const char* PhoneMetadataCollection::_InternalParse(const char* ptr, ::PROTOBUF_NAMESPACE_ID::internal::ParseContext* ctx) {
 2281|  3.06k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
 2282|  6.13k|  while (!ctx->Done(&ptr)) {
  ------------------
  |  Branch (2282:10): [True: 3.06k, False: 3.06k]
  ------------------
 2283|  3.06k|    ::PROTOBUF_NAMESPACE_ID::uint32 tag;
 2284|  3.06k|    ptr = ::PROTOBUF_NAMESPACE_ID::internal::ReadTag(ptr, &tag);
 2285|  3.06k|    CHK_(ptr);
  ------------------
  |  | 2281|  3.06k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 2286|  3.06k|    switch (tag >> 3) {
 2287|       |      // repeated .i18n.phonenumbers.PhoneMetadata metadata = 1;
 2288|  3.06k|      case 1:
  ------------------
  |  Branch (2288:7): [True: 3.06k, False: 0]
  ------------------
 2289|  3.06k|        if (PROTOBUF_PREDICT_TRUE(static_cast<::PROTOBUF_NAMESPACE_ID::uint8>(tag) == 10)) {
 2290|  3.06k|          ptr -= 1;
 2291|   738k|          do {
 2292|   738k|            ptr += 1;
 2293|   738k|            ptr = ctx->ParseMessage(_internal_add_metadata(), ptr);
 2294|   738k|            CHK_(ptr);
  ------------------
  |  | 2281|   738k|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 2295|   738k|            if (!ctx->DataAvailable(ptr)) break;
  ------------------
  |  Branch (2295:17): [True: 3.06k, False: 735k]
  ------------------
 2296|   738k|          } while (::PROTOBUF_NAMESPACE_ID::internal::ExpectTag<10>(ptr));
  ------------------
  |  Branch (2296:20): [True: 735k, False: 0]
  ------------------
 2297|  3.06k|        } else goto handle_unusual;
 2298|  3.06k|        continue;
 2299|  3.06k|      default: {
  ------------------
  |  Branch (2299:7): [True: 0, False: 3.06k]
  ------------------
 2300|      0|      handle_unusual:
 2301|      0|        if ((tag & 7) == 4 || tag == 0) {
  ------------------
  |  Branch (2301:13): [True: 0, False: 0]
  |  Branch (2301:31): [True: 0, False: 0]
  ------------------
 2302|      0|          ctx->SetLastTag(tag);
 2303|      0|          goto success;
 2304|      0|        }
 2305|      0|        ptr = UnknownFieldParse(tag,
 2306|      0|            _internal_metadata_.mutable_unknown_fields<std::string>(),
 2307|      0|            ptr, ctx);
 2308|      0|        CHK_(ptr != nullptr);
  ------------------
  |  | 2281|      0|#define CHK_(x) if (PROTOBUF_PREDICT_FALSE(!(x))) goto failure
  ------------------
 2309|      0|        continue;
 2310|      0|      }
 2311|  3.06k|    }  // switch
 2312|  3.06k|  }  // while
 2313|  3.06k|success:
 2314|  3.06k|  return ptr;
 2315|      0|failure:
 2316|      0|  ptr = nullptr;
 2317|      0|  goto success;
 2318|  3.06k|#undef CHK_
 2319|  3.06k|}
_ZNK4i18n12phonenumbers23PhoneMetadataCollection13IsInitializedEv:
 2389|  3.06k|bool PhoneMetadataCollection::IsInitialized() const {
 2390|  3.06k|  if (!::PROTOBUF_NAMESPACE_ID::internal::AllAreInitialized(metadata_)) return false;
  ------------------
  |  Branch (2390:7): [True: 0, False: 3.06k]
  ------------------
 2391|  3.06k|  return true;
 2392|  3.06k|}
_ZN6google8protobuf5Arena18CreateMaybeMessageIN4i18n12phonenumbers12NumberFormatEJEEEPT_PS1_DpOT0_:
 2409|  1.86k|template<> PROTOBUF_NOINLINE ::i18n::phonenumbers::NumberFormat* Arena::CreateMaybeMessage< ::i18n::phonenumbers::NumberFormat >(Arena* arena) {
 2410|  1.86k|  return Arena::CreateMessageInternal< ::i18n::phonenumbers::NumberFormat >(arena);
 2411|  1.86k|}
_ZN6google8protobuf5Arena18CreateMaybeMessageIN4i18n12phonenumbers15PhoneNumberDescEJEEEPT_PS1_DpOT0_:
 2412|  5.91M|template<> PROTOBUF_NOINLINE ::i18n::phonenumbers::PhoneNumberDesc* Arena::CreateMaybeMessage< ::i18n::phonenumbers::PhoneNumberDesc >(Arena* arena) {
 2413|  5.91M|  return Arena::CreateMessageInternal< ::i18n::phonenumbers::PhoneNumberDesc >(arena);
 2414|  5.91M|}
_ZN6google8protobuf5Arena18CreateMaybeMessageIN4i18n12phonenumbers13PhoneMetadataEJEEEPT_PS1_DpOT0_:
 2415|   738k|template<> PROTOBUF_NOINLINE ::i18n::phonenumbers::PhoneMetadata* Arena::CreateMaybeMessage< ::i18n::phonenumbers::PhoneMetadata >(Arena* arena) {
 2416|   738k|  return Arena::CreateMessageInternal< ::i18n::phonenumbers::PhoneMetadata >(arena);
 2417|   738k|}
phonemetadata.pb.cc:_ZL55InitDefaultsscc_info_NumberFormat_phonemetadata_2eprotov:
   37|      1|static void InitDefaultsscc_info_NumberFormat_phonemetadata_2eproto() {
   38|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   39|       |
   40|      1|  {
   41|      1|    void* ptr = &::i18n::phonenumbers::_NumberFormat_default_instance_;
   42|      1|    new (ptr) ::i18n::phonenumbers::NumberFormat();
   43|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   44|      1|  }
   45|      1|}
phonemetadata.pb.cc:_ZL56InitDefaultsscc_info_PhoneMetadata_phonemetadata_2eprotov:
   50|      1|static void InitDefaultsscc_info_PhoneMetadata_phonemetadata_2eproto() {
   51|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   52|       |
   53|      1|  {
   54|      1|    void* ptr = &::i18n::phonenumbers::_PhoneMetadata_default_instance_;
   55|      1|    new (ptr) ::i18n::phonenumbers::PhoneMetadata();
   56|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   57|      1|  }
   58|      1|}
phonemetadata.pb.cc:_ZL66InitDefaultsscc_info_PhoneMetadataCollection_phonemetadata_2eprotov:
   65|      1|static void InitDefaultsscc_info_PhoneMetadataCollection_phonemetadata_2eproto() {
   66|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   67|       |
   68|      1|  {
   69|      1|    void* ptr = &::i18n::phonenumbers::_PhoneMetadataCollection_default_instance_;
   70|      1|    new (ptr) ::i18n::phonenumbers::PhoneMetadataCollection();
   71|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   72|      1|  }
   73|      1|}
phonemetadata.pb.cc:_ZL58InitDefaultsscc_info_PhoneNumberDesc_phonemetadata_2eprotov:
   79|      1|static void InitDefaultsscc_info_PhoneNumberDesc_phonemetadata_2eproto() {
   80|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   81|       |
   82|      1|  {
   83|      1|    void* ptr = &::i18n::phonenumbers::_PhoneNumberDesc_default_instance_;
   84|      1|    new (ptr) ::i18n::phonenumbers::PhoneNumberDesc();
   85|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   86|      1|  }
   87|      1|}
_ZN4i18n12phonenumbers12NumberFormat10SharedCtorEv:
  156|  1.86k|void NumberFormat::SharedCtor() {
  157|  1.86k|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_NumberFormat_phonemetadata_2eproto.base);
  158|  1.86k|  pattern_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  159|  1.86k|  format_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  160|  1.86k|  national_prefix_formatting_rule_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  161|  1.86k|  domestic_carrier_code_formatting_rule_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  162|  1.86k|  national_prefix_optional_when_formatting_ = false;
  163|  1.86k|}
_ZN4i18n12phonenumbers12NumberFormat10SharedDtorEv:
  171|    933|void NumberFormat::SharedDtor() {
  172|    933|  GOOGLE_DCHECK(GetArena() == nullptr);
  173|    933|  pattern_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  174|    933|  format_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  175|    933|  national_prefix_formatting_rule_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  176|    933|  domestic_carrier_code_formatting_rule_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  177|    933|}
_ZN4i18n12phonenumbers12NumberFormat17RegisterArenaDtorEPN6google8protobuf5ArenaE:
  183|  1.86k|void NumberFormat::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
  184|  1.86k|}
_ZN4i18n12phonenumbers12NumberFormat9_Internal48set_has_national_prefix_optional_when_formattingEPN6google8protobuf8internal7HasBitsILm1EEE:
  109|     74|  static void set_has_national_prefix_optional_when_formatting(HasBits* has_bits) {
  110|     74|    (*has_bits)[0] |= 16u;
  111|     74|  }
_ZN4i18n12phonenumbers12NumberFormat9_Internal21MissingRequiredFieldsERKN6google8protobuf8internal7HasBitsILm1EEE:
  115|    933|  static bool MissingRequiredFields(const HasBits& has_bits) {
  116|    933|    return ((has_bits[0] & 0x00000003) ^ 0x00000003) != 0;
  117|    933|  }
_ZN4i18n12phonenumbers15PhoneNumberDesc10SharedCtorEv:
  540|  5.91M|void PhoneNumberDesc::SharedCtor() {
  541|  5.91M|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_PhoneNumberDesc_phonemetadata_2eproto.base);
  542|  5.91M|  national_number_pattern_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  543|  5.91M|  example_number_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  544|  5.91M|}
_ZN4i18n12phonenumbers15PhoneNumberDesc10SharedDtorEv:
  552|  11.8M|void PhoneNumberDesc::SharedDtor() {
  553|  11.8M|  GOOGLE_DCHECK(GetArena() == nullptr);
  554|  11.8M|  national_number_pattern_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  555|  11.8M|  example_number_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  556|  11.8M|}
_ZN4i18n12phonenumbers15PhoneNumberDesc17RegisterArenaDtorEPN6google8protobuf5ArenaE:
  562|  5.91M|void PhoneNumberDesc::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
  563|  5.91M|}
_ZN4i18n12phonenumbers13PhoneMetadata10SharedCtorEv:
 1140|  2.84M|void PhoneMetadata::SharedCtor() {
 1141|  2.84M|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_PhoneMetadata_phonemetadata_2eproto.base);
 1142|  2.84M|  id_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1143|  2.84M|  international_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1144|  2.84M|  national_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1145|  2.84M|  preferred_extn_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1146|  2.84M|  national_prefix_for_parsing_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1147|  2.84M|  national_prefix_transform_rule_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1148|  2.84M|  preferred_international_prefix_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1149|  2.84M|  leading_digits_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1150|  2.84M|  ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
 1151|  2.84M|      reinterpret_cast<char*>(&general_desc_) - reinterpret_cast<char*>(this)),
 1152|  2.84M|      0, static_cast<size_t>(reinterpret_cast<char*>(&mobile_number_portable_region_) -
 1153|  2.84M|      reinterpret_cast<char*>(&general_desc_)) + sizeof(mobile_number_portable_region_));
 1154|  2.84M|}
_ZN4i18n12phonenumbers13PhoneMetadata10SharedDtorEv:
 1162|  3.58M|void PhoneMetadata::SharedDtor() {
 1163|  3.58M|  GOOGLE_DCHECK(GetArena() == nullptr);
 1164|  3.58M|  id_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1165|  3.58M|  international_prefix_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1166|  3.58M|  national_prefix_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1167|  3.58M|  preferred_extn_prefix_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1168|  3.58M|  national_prefix_for_parsing_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1169|  3.58M|  national_prefix_transform_rule_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1170|  3.58M|  preferred_international_prefix_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1171|  3.58M|  leading_digits_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
 1172|  3.58M|  if (this != internal_default_instance()) delete general_desc_;
  ------------------
  |  Branch (1172:7): [True: 3.58M, False: 0]
  ------------------
 1173|  3.58M|  if (this != internal_default_instance()) delete fixed_line_;
  ------------------
  |  Branch (1173:7): [True: 3.58M, False: 0]
  ------------------
 1174|  3.58M|  if (this != internal_default_instance()) delete mobile_;
  ------------------
  |  Branch (1174:7): [True: 3.58M, False: 0]
  ------------------
 1175|  3.58M|  if (this != internal_default_instance()) delete toll_free_;
  ------------------
  |  Branch (1175:7): [True: 3.58M, False: 0]
  ------------------
 1176|  3.58M|  if (this != internal_default_instance()) delete premium_rate_;
  ------------------
  |  Branch (1176:7): [True: 3.58M, False: 0]
  ------------------
 1177|  3.58M|  if (this != internal_default_instance()) delete shared_cost_;
  ------------------
  |  Branch (1177:7): [True: 3.58M, False: 0]
  ------------------
 1178|  3.58M|  if (this != internal_default_instance()) delete personal_number_;
  ------------------
  |  Branch (1178:7): [True: 3.58M, False: 0]
  ------------------
 1179|  3.58M|  if (this != internal_default_instance()) delete voip_;
  ------------------
  |  Branch (1179:7): [True: 3.58M, False: 0]
  ------------------
 1180|  3.58M|  if (this != internal_default_instance()) delete pager_;
  ------------------
  |  Branch (1180:7): [True: 3.58M, False: 0]
  ------------------
 1181|  3.58M|  if (this != internal_default_instance()) delete no_international_dialling_;
  ------------------
  |  Branch (1181:7): [True: 3.58M, False: 0]
  ------------------
 1182|  3.58M|  if (this != internal_default_instance()) delete uan_;
  ------------------
  |  Branch (1182:7): [True: 3.58M, False: 0]
  ------------------
 1183|  3.58M|  if (this != internal_default_instance()) delete emergency_;
  ------------------
  |  Branch (1183:7): [True: 3.58M, False: 0]
  ------------------
 1184|  3.58M|  if (this != internal_default_instance()) delete voicemail_;
  ------------------
  |  Branch (1184:7): [True: 3.58M, False: 0]
  ------------------
 1185|  3.58M|  if (this != internal_default_instance()) delete short_code_;
  ------------------
  |  Branch (1185:7): [True: 3.58M, False: 0]
  ------------------
 1186|  3.58M|  if (this != internal_default_instance()) delete standard_rate_;
  ------------------
  |  Branch (1186:7): [True: 3.58M, False: 0]
  ------------------
 1187|  3.58M|  if (this != internal_default_instance()) delete carrier_specific_;
  ------------------
  |  Branch (1187:7): [True: 3.58M, False: 0]
  ------------------
 1188|  3.58M|  if (this != internal_default_instance()) delete sms_services_;
  ------------------
  |  Branch (1188:7): [True: 3.58M, False: 0]
  ------------------
 1189|  3.58M|}
_ZN4i18n12phonenumbers13PhoneMetadata17RegisterArenaDtorEPN6google8protobuf5ArenaE:
 1195|  2.84M|void PhoneMetadata::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
 1196|  2.84M|}
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal20set_has_country_codeEPN6google8protobuf8internal7HasBitsILm1EEE:
  889|    254|  static void set_has_country_code(HasBits* has_bits) {
  890|    254|    (*has_bits)[0] |= 33554432u;
  891|    254|  }
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal42set_has_same_mobile_and_fixed_line_patternEPN6google8protobuf8internal7HasBitsILm1EEE:
  910|     13|  static void set_has_same_mobile_and_fixed_line_pattern(HasBits* has_bits) {
  911|     13|    (*has_bits)[0] |= 67108864u;
  912|     13|  }
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal29set_has_main_country_for_codeEPN6google8protobuf8internal7HasBitsILm1EEE:
  913|     12|  static void set_has_main_country_for_code(HasBits* has_bits) {
  914|     12|    (*has_bits)[0] |= 134217728u;
  915|     12|  }
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal37set_has_mobile_number_portable_regionEPN6google8protobuf8internal7HasBitsILm1EEE:
  919|    107|  static void set_has_mobile_number_portable_region(HasBits* has_bits) {
  920|    107|    (*has_bits)[0] |= 268435456u;
  921|    107|  }
_ZN4i18n12phonenumbers13PhoneMetadata9_Internal21MissingRequiredFieldsERKN6google8protobuf8internal7HasBitsILm1EEE:
  922|   738k|  static bool MissingRequiredFields(const HasBits& has_bits) {
  923|   738k|    return ((has_bits[0] & 0x00000001) ^ 0x00000001) != 0;
  924|   738k|  }
_ZN4i18n12phonenumbers23PhoneMetadataCollection10SharedCtorEv:
 2241|  3.06k|void PhoneMetadataCollection::SharedCtor() {
 2242|  3.06k|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_PhoneMetadataCollection_phonemetadata_2eproto.base);
 2243|  3.06k|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection10SharedDtorEv:
 2251|  3.06k|void PhoneMetadataCollection::SharedDtor() {
 2252|  3.06k|  GOOGLE_DCHECK(GetArena() == nullptr);
 2253|  3.06k|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection17RegisterArenaDtorEPN6google8protobuf5ArenaE:
 2259|  3.06k|void PhoneMetadataCollection::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
 2260|  3.06k|}

_ZN4i18n12phonenumbers12NumberFormatC2Ev:
   83|  1.86k|  inline NumberFormat() : NumberFormat(nullptr) {}
_ZN4i18n12phonenumbers15PhoneNumberDescC2Ev:
  333|  5.91M|  inline PhoneNumberDesc() : PhoneNumberDesc(nullptr) {}
_ZN4i18n12phonenumbers13PhoneMetadataC2Ev:
  543|  2.84M|  inline PhoneMetadata() : PhoneMetadata(nullptr) {}
_ZN4i18n12phonenumbers13PhoneMetadataC2EOS1_:
  548|  2.10M|    : PhoneMetadata() {
  549|  2.10M|    *this = ::std::move(from);
  550|  2.10M|  }
_ZN4i18n12phonenumbers13PhoneMetadataaSEOS1_:
  556|  2.10M|  inline PhoneMetadata& operator=(PhoneMetadata&& from) noexcept {
  557|  2.10M|    if (GetArena() == from.GetArena()) {
  ------------------
  |  Branch (557:9): [True: 2.10M, False: 0]
  ------------------
  558|  2.10M|      if (this != &from) InternalSwap(&from);
  ------------------
  |  Branch (558:11): [True: 2.10M, False: 0]
  ------------------
  559|  2.10M|    } else {
  560|      0|      CopyFrom(from);
  561|      0|    }
  562|  2.10M|    return *this;
  563|  2.10M|  }
_ZN4i18n12phonenumbers13PhoneMetadata25internal_default_instanceEv:
  574|  60.8M|  static inline const PhoneMetadata* internal_default_instance() {
  575|  60.8M|    return reinterpret_cast<const PhoneMetadata*>(
  576|  60.8M|               &_PhoneMetadata_default_instance_);
  577|  60.8M|  }
_ZN4i18n12phonenumbers23PhoneMetadataCollectionC2Ev:
 1277|  3.06k|  inline PhoneMetadataCollection() : PhoneMetadataCollection(nullptr) {}
_ZNK4i18n12phonenumbers12NumberFormat17_internal_patternEv:
 1444|    933|inline const std::string& NumberFormat::_internal_pattern() const {
 1445|    933|  return pattern_.Get();
 1446|    933|}
_ZN4i18n12phonenumbers12NumberFormat21_internal_set_patternERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1447|    933|inline void NumberFormat::_internal_set_pattern(const std::string& value) {
 1448|    933|  _has_bits_[0] |= 0x00000001u;
 1449|    933|  pattern_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
 1450|    933|}
_ZN4i18n12phonenumbers12NumberFormat25_internal_mutable_patternEv:
 1470|    933|inline std::string* NumberFormat::_internal_mutable_pattern() {
 1471|    933|  _has_bits_[0] |= 0x00000001u;
 1472|    933|  return pattern_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1473|    933|}
_ZNK4i18n12phonenumbers12NumberFormat16_internal_formatEv:
 1517|    933|inline const std::string& NumberFormat::_internal_format() const {
 1518|    933|  return format_.Get();
 1519|    933|}
_ZN4i18n12phonenumbers12NumberFormat20_internal_set_formatERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1520|    933|inline void NumberFormat::_internal_set_format(const std::string& value) {
 1521|    933|  _has_bits_[0] |= 0x00000002u;
 1522|    933|  format_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
 1523|    933|}
_ZN4i18n12phonenumbers12NumberFormat24_internal_mutable_formatEv:
 1543|    933|inline std::string* NumberFormat::_internal_mutable_format() {
 1544|    933|  _has_bits_[0] |= 0x00000002u;
 1545|    933|  return format_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1546|    933|}
_ZN4i18n12phonenumbers12NumberFormat36_internal_add_leading_digits_patternEv:
 1609|  1.08k|inline std::string* NumberFormat::_internal_add_leading_digits_pattern() {
 1610|  1.08k|  return leading_digits_pattern_.Add();
 1611|  1.08k|}
_ZNK4i18n12phonenumbers12NumberFormat41_internal_national_prefix_formatting_ruleEv:
 1664|    523|inline const std::string& NumberFormat::_internal_national_prefix_formatting_rule() const {
 1665|    523|  return national_prefix_formatting_rule_.Get();
 1666|    523|}
_ZN4i18n12phonenumbers12NumberFormat45_internal_set_national_prefix_formatting_ruleERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1667|    523|inline void NumberFormat::_internal_set_national_prefix_formatting_rule(const std::string& value) {
 1668|    523|  _has_bits_[0] |= 0x00000004u;
 1669|    523|  national_prefix_formatting_rule_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
 1670|    523|}
_ZN4i18n12phonenumbers12NumberFormat49_internal_mutable_national_prefix_formatting_ruleEv:
 1690|    523|inline std::string* NumberFormat::_internal_mutable_national_prefix_formatting_rule() {
 1691|    523|  _has_bits_[0] |= 0x00000004u;
 1692|    523|  return national_prefix_formatting_rule_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1693|    523|}
_ZNK4i18n12phonenumbers12NumberFormat47_internal_domestic_carrier_code_formatting_ruleEv:
 1765|     55|inline const std::string& NumberFormat::_internal_domestic_carrier_code_formatting_rule() const {
 1766|     55|  return domestic_carrier_code_formatting_rule_.Get();
 1767|     55|}
_ZN4i18n12phonenumbers12NumberFormat51_internal_set_domestic_carrier_code_formatting_ruleERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1768|     55|inline void NumberFormat::_internal_set_domestic_carrier_code_formatting_rule(const std::string& value) {
 1769|     55|  _has_bits_[0] |= 0x00000008u;
 1770|     55|  domestic_carrier_code_formatting_rule_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
 1771|     55|}
_ZN4i18n12phonenumbers12NumberFormat55_internal_mutable_domestic_carrier_code_formatting_ruleEv:
 1791|     55|inline std::string* NumberFormat::_internal_mutable_domestic_carrier_code_formatting_rule() {
 1792|     55|  _has_bits_[0] |= 0x00000008u;
 1793|     55|  return domestic_carrier_code_formatting_rule_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1794|     55|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc37_internal_has_national_number_patternEv:
 1819|  5.91M|inline bool PhoneNumberDesc::_internal_has_national_number_pattern() const {
 1820|  5.91M|  bool value = (_has_bits_[0] & 0x00000001u) != 0;
 1821|  5.91M|  return value;
 1822|  5.91M|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc23national_number_patternEv:
 1830|  21.7k|inline const std::string& PhoneNumberDesc::national_number_pattern() const {
 1831|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumberDesc.national_number_pattern)
 1832|  21.7k|  return _internal_national_number_pattern();
 1833|  21.7k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc33_internal_national_number_patternEv:
 1842|  3.67M|inline const std::string& PhoneNumberDesc::_internal_national_number_pattern() const {
 1843|  3.67M|  return national_number_pattern_.Get();
 1844|  3.67M|}
_ZN4i18n12phonenumbers15PhoneNumberDesc41_internal_mutable_national_number_patternEv:
 1868|  3.65M|inline std::string* PhoneNumberDesc::_internal_mutable_national_number_pattern() {
 1869|  3.65M|  _has_bits_[0] |= 0x00000001u;
 1870|  3.65M|  return national_number_pattern_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 1871|  3.65M|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc30_internal_possible_length_sizeEv:
 1892|  22.8k|inline int PhoneNumberDesc::_internal_possible_length_size() const {
 1893|  22.8k|  return possible_length_.size();
 1894|  22.8k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc20possible_length_sizeEv:
 1895|  22.8k|inline int PhoneNumberDesc::possible_length_size() const {
 1896|  22.8k|  return _internal_possible_length_size();
 1897|  22.8k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc29_internal_add_possible_lengthEi:
 1912|  5.70M|inline void PhoneNumberDesc::_internal_add_possible_length(::PROTOBUF_NAMESPACE_ID::int32 value) {
 1913|  5.70M|  possible_length_.Add(value);
 1914|  5.70M|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc25_internal_possible_lengthEv:
 1920|  32.1k|PhoneNumberDesc::_internal_possible_length() const {
 1921|  32.1k|  return possible_length_;
 1922|  32.1k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc15possible_lengthEv:
 1924|  32.1k|PhoneNumberDesc::possible_length() const {
 1925|       |  // @@protoc_insertion_point(field_list:i18n.phonenumbers.PhoneNumberDesc.possible_length)
 1926|  32.1k|  return _internal_possible_length();
 1927|  32.1k|}
_ZN4i18n12phonenumbers15PhoneNumberDesc40_internal_add_possible_length_local_onlyEi:
 1959|    354|inline void PhoneNumberDesc::_internal_add_possible_length_local_only(::PROTOBUF_NAMESPACE_ID::int32 value) {
 1960|    354|  possible_length_local_only_.Add(value);
 1961|    354|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc36_internal_possible_length_local_onlyEv:
 1967|  1.24k|PhoneNumberDesc::_internal_possible_length_local_only() const {
 1968|  1.24k|  return possible_length_local_only_;
 1969|  1.24k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc26possible_length_local_onlyEv:
 1971|  1.24k|PhoneNumberDesc::possible_length_local_only() const {
 1972|       |  // @@protoc_insertion_point(field_list:i18n.phonenumbers.PhoneNumberDesc.possible_length_local_only)
 1973|  1.24k|  return _internal_possible_length_local_only();
 1974|  1.24k|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc28_internal_has_example_numberEv:
 1986|  5.91M|inline bool PhoneNumberDesc::_internal_has_example_number() const {
 1987|  5.91M|  bool value = (_has_bits_[0] & 0x00000002u) != 0;
 1988|  5.91M|  return value;
 1989|  5.91M|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc18has_example_numberEv:
 1990|    737|inline bool PhoneNumberDesc::has_example_number() const {
 1991|    737|  return _internal_has_example_number();
 1992|    737|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc14example_numberEv:
 1997|    727|inline const std::string& PhoneNumberDesc::example_number() const {
 1998|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumberDesc.example_number)
 1999|    727|  return _internal_example_number();
 2000|    727|}
_ZNK4i18n12phonenumbers15PhoneNumberDesc24_internal_example_numberEv:
 2009|  2.91M|inline const std::string& PhoneNumberDesc::_internal_example_number() const {
 2010|  2.91M|  return example_number_.Get();
 2011|  2.91M|}
_ZN4i18n12phonenumbers15PhoneNumberDesc32_internal_mutable_example_numberEv:
 2035|  2.91M|inline std::string* PhoneNumberDesc::_internal_mutable_example_number() {
 2036|  2.91M|  _has_bits_[0] |= 0x00000002u;
 2037|  2.91M|  return example_number_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 2038|  2.91M|}
_ZNK4i18n12phonenumbers13PhoneMetadata26_internal_has_general_descEv:
 2063|   738k|inline bool PhoneMetadata::_internal_has_general_desc() const {
 2064|   738k|  bool value = (_has_bits_[0] & 0x00000100u) != 0;
 2065|   738k|  PROTOBUF_ASSUME(!value || general_desc_ != nullptr);
 2066|   738k|  return value;
 2067|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata22_internal_general_descEv:
 2075|  12.0k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_general_desc() const {
 2076|  12.0k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = general_desc_;
 2077|  12.0k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2077:10): [True: 12.0k, False: 0]
  ------------------
 2078|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2079|  12.0k|}
_ZNK4i18n12phonenumbers13PhoneMetadata12general_descEv:
 2080|  12.0k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::general_desc() const {
 2081|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.general_desc)
 2082|  12.0k|  return _internal_general_desc();
 2083|  12.0k|}
_ZN4i18n12phonenumbers13PhoneMetadata30_internal_mutable_general_descEv:
 2113|   738k|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_general_desc() {
 2114|   738k|  _has_bits_[0] |= 0x00000100u;
 2115|   738k|  if (general_desc_ == nullptr) {
  ------------------
  |  Branch (2115:7): [True: 738k, False: 0]
  ------------------
 2116|   738k|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2117|   738k|    general_desc_ = p;
 2118|   738k|  }
 2119|   738k|  return general_desc_;
 2120|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata24_internal_has_fixed_lineEv:
 2146|   738k|inline bool PhoneMetadata::_internal_has_fixed_line() const {
 2147|   738k|  bool value = (_has_bits_[0] & 0x00000200u) != 0;
 2148|   738k|  PROTOBUF_ASSUME(!value || fixed_line_ != nullptr);
 2149|   738k|  return value;
 2150|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata28_internal_mutable_fixed_lineEv:
 2196|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_fixed_line() {
 2197|    254|  _has_bits_[0] |= 0x00000200u;
 2198|    254|  if (fixed_line_ == nullptr) {
  ------------------
  |  Branch (2198:7): [True: 254, False: 0]
  ------------------
 2199|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2200|    254|    fixed_line_ = p;
 2201|    254|  }
 2202|    254|  return fixed_line_;
 2203|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata20_internal_has_mobileEv:
 2229|   738k|inline bool PhoneMetadata::_internal_has_mobile() const {
 2230|   738k|  bool value = (_has_bits_[0] & 0x00000400u) != 0;
 2231|   738k|  PROTOBUF_ASSUME(!value || mobile_ != nullptr);
 2232|   738k|  return value;
 2233|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata24_internal_mutable_mobileEv:
 2279|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_mobile() {
 2280|    254|  _has_bits_[0] |= 0x00000400u;
 2281|    254|  if (mobile_ == nullptr) {
  ------------------
  |  Branch (2281:7): [True: 254, False: 0]
  ------------------
 2282|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2283|    254|    mobile_ = p;
 2284|    254|  }
 2285|    254|  return mobile_;
 2286|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata23_internal_has_toll_freeEv:
 2312|   738k|inline bool PhoneMetadata::_internal_has_toll_free() const {
 2313|   738k|  bool value = (_has_bits_[0] & 0x00000800u) != 0;
 2314|   738k|  PROTOBUF_ASSUME(!value || toll_free_ != nullptr);
 2315|   738k|  return value;
 2316|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata19_internal_toll_freeEv:
 2324|  1.23k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_toll_free() const {
 2325|  1.23k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = toll_free_;
 2326|  1.23k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2326:10): [True: 1.23k, False: 0]
  ------------------
 2327|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2328|  1.23k|}
_ZNK4i18n12phonenumbers13PhoneMetadata9toll_freeEv:
 2329|  1.23k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::toll_free() const {
 2330|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.toll_free)
 2331|  1.23k|  return _internal_toll_free();
 2332|  1.23k|}
_ZN4i18n12phonenumbers13PhoneMetadata27_internal_mutable_toll_freeEv:
 2362|   738k|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_toll_free() {
 2363|   738k|  _has_bits_[0] |= 0x00000800u;
 2364|   738k|  if (toll_free_ == nullptr) {
  ------------------
  |  Branch (2364:7): [True: 738k, False: 0]
  ------------------
 2365|   738k|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2366|   738k|    toll_free_ = p;
 2367|   738k|  }
 2368|   738k|  return toll_free_;
 2369|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata26_internal_has_premium_rateEv:
 2395|   738k|inline bool PhoneMetadata::_internal_has_premium_rate() const {
 2396|   738k|  bool value = (_has_bits_[0] & 0x00001000u) != 0;
 2397|   738k|  PROTOBUF_ASSUME(!value || premium_rate_ != nullptr);
 2398|   738k|  return value;
 2399|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata22_internal_premium_rateEv:
 2407|    905|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_premium_rate() const {
 2408|    905|  const ::i18n::phonenumbers::PhoneNumberDesc* p = premium_rate_;
 2409|    905|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2409:10): [True: 905, False: 0]
  ------------------
 2410|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2411|    905|}
_ZNK4i18n12phonenumbers13PhoneMetadata12premium_rateEv:
 2412|    905|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::premium_rate() const {
 2413|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.premium_rate)
 2414|    905|  return _internal_premium_rate();
 2415|    905|}
_ZN4i18n12phonenumbers13PhoneMetadata30_internal_mutable_premium_rateEv:
 2445|   738k|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_premium_rate() {
 2446|   738k|  _has_bits_[0] |= 0x00001000u;
 2447|   738k|  if (premium_rate_ == nullptr) {
  ------------------
  |  Branch (2447:7): [True: 738k, False: 0]
  ------------------
 2448|   738k|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2449|   738k|    premium_rate_ = p;
 2450|   738k|  }
 2451|   738k|  return premium_rate_;
 2452|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata25_internal_has_shared_costEv:
 2478|   738k|inline bool PhoneMetadata::_internal_has_shared_cost() const {
 2479|   738k|  bool value = (_has_bits_[0] & 0x00002000u) != 0;
 2480|   738k|  PROTOBUF_ASSUME(!value || shared_cost_ != nullptr);
 2481|   738k|  return value;
 2482|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata29_internal_mutable_shared_costEv:
 2528|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_shared_cost() {
 2529|    254|  _has_bits_[0] |= 0x00002000u;
 2530|    254|  if (shared_cost_ == nullptr) {
  ------------------
  |  Branch (2530:7): [True: 254, False: 0]
  ------------------
 2531|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2532|    254|    shared_cost_ = p;
 2533|    254|  }
 2534|    254|  return shared_cost_;
 2535|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata29_internal_has_personal_numberEv:
 2561|   738k|inline bool PhoneMetadata::_internal_has_personal_number() const {
 2562|   738k|  bool value = (_has_bits_[0] & 0x00004000u) != 0;
 2563|   738k|  PROTOBUF_ASSUME(!value || personal_number_ != nullptr);
 2564|   738k|  return value;
 2565|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata33_internal_mutable_personal_numberEv:
 2611|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_personal_number() {
 2612|    254|  _has_bits_[0] |= 0x00004000u;
 2613|    254|  if (personal_number_ == nullptr) {
  ------------------
  |  Branch (2613:7): [True: 254, False: 0]
  ------------------
 2614|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2615|    254|    personal_number_ = p;
 2616|    254|  }
 2617|    254|  return personal_number_;
 2618|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata18_internal_has_voipEv:
 2644|   738k|inline bool PhoneMetadata::_internal_has_voip() const {
 2645|   738k|  bool value = (_has_bits_[0] & 0x00008000u) != 0;
 2646|   738k|  PROTOBUF_ASSUME(!value || voip_ != nullptr);
 2647|   738k|  return value;
 2648|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata22_internal_mutable_voipEv:
 2694|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_voip() {
 2695|    254|  _has_bits_[0] |= 0x00008000u;
 2696|    254|  if (voip_ == nullptr) {
  ------------------
  |  Branch (2696:7): [True: 254, False: 0]
  ------------------
 2697|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2698|    254|    voip_ = p;
 2699|    254|  }
 2700|    254|  return voip_;
 2701|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata19_internal_has_pagerEv:
 2727|   738k|inline bool PhoneMetadata::_internal_has_pager() const {
 2728|   738k|  bool value = (_has_bits_[0] & 0x00010000u) != 0;
 2729|   738k|  PROTOBUF_ASSUME(!value || pager_ != nullptr);
 2730|   738k|  return value;
 2731|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata23_internal_mutable_pagerEv:
 2777|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_pager() {
 2778|    254|  _has_bits_[0] |= 0x00010000u;
 2779|    254|  if (pager_ == nullptr) {
  ------------------
  |  Branch (2779:7): [True: 254, False: 0]
  ------------------
 2780|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2781|    254|    pager_ = p;
 2782|    254|  }
 2783|    254|  return pager_;
 2784|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata17_internal_has_uanEv:
 2810|   738k|inline bool PhoneMetadata::_internal_has_uan() const {
 2811|   738k|  bool value = (_has_bits_[0] & 0x00040000u) != 0;
 2812|   738k|  PROTOBUF_ASSUME(!value || uan_ != nullptr);
 2813|   738k|  return value;
 2814|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata21_internal_mutable_uanEv:
 2860|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_uan() {
 2861|    254|  _has_bits_[0] |= 0x00040000u;
 2862|    254|  if (uan_ == nullptr) {
  ------------------
  |  Branch (2862:7): [True: 254, False: 0]
  ------------------
 2863|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2864|    254|    uan_ = p;
 2865|    254|  }
 2866|    254|  return uan_;
 2867|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata23_internal_has_emergencyEv:
 2893|   740k|inline bool PhoneMetadata::_internal_has_emergency() const {
 2894|   740k|  bool value = (_has_bits_[0] & 0x00080000u) != 0;
 2895|   740k|  PROTOBUF_ASSUME(!value || emergency_ != nullptr);
 2896|   740k|  return value;
 2897|   740k|}
_ZNK4i18n12phonenumbers13PhoneMetadata13has_emergencyEv:
 2898|  1.24k|inline bool PhoneMetadata::has_emergency() const {
 2899|  1.24k|  return _internal_has_emergency();
 2900|  1.24k|}
_ZNK4i18n12phonenumbers13PhoneMetadata19_internal_emergencyEv:
 2905|  1.24k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_emergency() const {
 2906|  1.24k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = emergency_;
 2907|  1.24k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (2907:10): [True: 1.24k, False: 0]
  ------------------
 2908|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 2909|  1.24k|}
_ZNK4i18n12phonenumbers13PhoneMetadata9emergencyEv:
 2910|  1.24k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::emergency() const {
 2911|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.emergency)
 2912|  1.24k|  return _internal_emergency();
 2913|  1.24k|}
_ZN4i18n12phonenumbers13PhoneMetadata27_internal_mutable_emergencyEv:
 2943|   738k|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_emergency() {
 2944|   738k|  _has_bits_[0] |= 0x00080000u;
 2945|   738k|  if (emergency_ == nullptr) {
  ------------------
  |  Branch (2945:7): [True: 738k, False: 0]
  ------------------
 2946|   738k|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 2947|   738k|    emergency_ = p;
 2948|   738k|  }
 2949|   738k|  return emergency_;
 2950|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata23_internal_has_voicemailEv:
 2976|   738k|inline bool PhoneMetadata::_internal_has_voicemail() const {
 2977|   738k|  bool value = (_has_bits_[0] & 0x00100000u) != 0;
 2978|   738k|  PROTOBUF_ASSUME(!value || voicemail_ != nullptr);
 2979|   738k|  return value;
 2980|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata27_internal_mutable_voicemailEv:
 3026|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_voicemail() {
 3027|    254|  _has_bits_[0] |= 0x00100000u;
 3028|    254|  if (voicemail_ == nullptr) {
  ------------------
  |  Branch (3028:7): [True: 254, False: 0]
  ------------------
 3029|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 3030|    254|    voicemail_ = p;
 3031|    254|  }
 3032|    254|  return voicemail_;
 3033|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata24_internal_has_short_codeEv:
 3059|   738k|inline bool PhoneMetadata::_internal_has_short_code() const {
 3060|   738k|  bool value = (_has_bits_[0] & 0x00200000u) != 0;
 3061|   738k|  PROTOBUF_ASSUME(!value || short_code_ != nullptr);
 3062|   738k|  return value;
 3063|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata20_internal_short_codeEv:
 3071|  18.0k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_short_code() const {
 3072|  18.0k|  const ::i18n::phonenumbers::PhoneNumberDesc* p = short_code_;
 3073|  18.0k|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (3073:10): [True: 18.0k, False: 0]
  ------------------
 3074|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 3075|  18.0k|}
_ZNK4i18n12phonenumbers13PhoneMetadata10short_codeEv:
 3076|  18.0k|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::short_code() const {
 3077|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.short_code)
 3078|  18.0k|  return _internal_short_code();
 3079|  18.0k|}
_ZN4i18n12phonenumbers13PhoneMetadata28_internal_mutable_short_codeEv:
 3109|   738k|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_short_code() {
 3110|   738k|  _has_bits_[0] |= 0x00200000u;
 3111|   738k|  if (short_code_ == nullptr) {
  ------------------
  |  Branch (3111:7): [True: 738k, False: 0]
  ------------------
 3112|   738k|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 3113|   738k|    short_code_ = p;
 3114|   738k|  }
 3115|   738k|  return short_code_;
 3116|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata27_internal_has_standard_rateEv:
 3142|   738k|inline bool PhoneMetadata::_internal_has_standard_rate() const {
 3143|   738k|  bool value = (_has_bits_[0] & 0x00400000u) != 0;
 3144|   738k|  PROTOBUF_ASSUME(!value || standard_rate_ != nullptr);
 3145|   738k|  return value;
 3146|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata23_internal_standard_rateEv:
 3154|    891|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_standard_rate() const {
 3155|    891|  const ::i18n::phonenumbers::PhoneNumberDesc* p = standard_rate_;
 3156|    891|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (3156:10): [True: 891, False: 0]
  ------------------
 3157|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 3158|    891|}
_ZNK4i18n12phonenumbers13PhoneMetadata13standard_rateEv:
 3159|    891|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::standard_rate() const {
 3160|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.standard_rate)
 3161|    891|  return _internal_standard_rate();
 3162|    891|}
_ZN4i18n12phonenumbers13PhoneMetadata31_internal_mutable_standard_rateEv:
 3192|   738k|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_standard_rate() {
 3193|   738k|  _has_bits_[0] |= 0x00400000u;
 3194|   738k|  if (standard_rate_ == nullptr) {
  ------------------
  |  Branch (3194:7): [True: 738k, False: 0]
  ------------------
 3195|   738k|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 3196|   738k|    standard_rate_ = p;
 3197|   738k|  }
 3198|   738k|  return standard_rate_;
 3199|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata30_internal_has_carrier_specificEv:
 3225|   738k|inline bool PhoneMetadata::_internal_has_carrier_specific() const {
 3226|   738k|  bool value = (_has_bits_[0] & 0x00800000u) != 0;
 3227|   738k|  PROTOBUF_ASSUME(!value || carrier_specific_ != nullptr);
 3228|   738k|  return value;
 3229|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata26_internal_carrier_specificEv:
 3237|    733|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_carrier_specific() const {
 3238|    733|  const ::i18n::phonenumbers::PhoneNumberDesc* p = carrier_specific_;
 3239|    733|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (3239:10): [True: 733, False: 0]
  ------------------
 3240|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 3241|    733|}
_ZNK4i18n12phonenumbers13PhoneMetadata16carrier_specificEv:
 3242|    733|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::carrier_specific() const {
 3243|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.carrier_specific)
 3244|    733|  return _internal_carrier_specific();
 3245|    733|}
_ZN4i18n12phonenumbers13PhoneMetadata34_internal_mutable_carrier_specificEv:
 3275|   738k|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_carrier_specific() {
 3276|   738k|  _has_bits_[0] |= 0x00800000u;
 3277|   738k|  if (carrier_specific_ == nullptr) {
  ------------------
  |  Branch (3277:7): [True: 738k, False: 0]
  ------------------
 3278|   738k|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 3279|   738k|    carrier_specific_ = p;
 3280|   738k|  }
 3281|   738k|  return carrier_specific_;
 3282|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata26_internal_has_sms_servicesEv:
 3308|   738k|inline bool PhoneMetadata::_internal_has_sms_services() const {
 3309|   738k|  bool value = (_has_bits_[0] & 0x01000000u) != 0;
 3310|   738k|  PROTOBUF_ASSUME(!value || sms_services_ != nullptr);
 3311|   738k|  return value;
 3312|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata22_internal_sms_servicesEv:
 3320|    229|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::_internal_sms_services() const {
 3321|    229|  const ::i18n::phonenumbers::PhoneNumberDesc* p = sms_services_;
 3322|    229|  return p != nullptr ? *p : reinterpret_cast<const ::i18n::phonenumbers::PhoneNumberDesc&>(
  ------------------
  |  Branch (3322:10): [True: 229, False: 0]
  ------------------
 3323|      0|      ::i18n::phonenumbers::_PhoneNumberDesc_default_instance_);
 3324|    229|}
_ZNK4i18n12phonenumbers13PhoneMetadata12sms_servicesEv:
 3325|    229|inline const ::i18n::phonenumbers::PhoneNumberDesc& PhoneMetadata::sms_services() const {
 3326|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.sms_services)
 3327|    229|  return _internal_sms_services();
 3328|    229|}
_ZN4i18n12phonenumbers13PhoneMetadata30_internal_mutable_sms_servicesEv:
 3358|   738k|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_sms_services() {
 3359|   738k|  _has_bits_[0] |= 0x01000000u;
 3360|   738k|  if (sms_services_ == nullptr) {
  ------------------
  |  Branch (3360:7): [True: 738k, False: 0]
  ------------------
 3361|   738k|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 3362|   738k|    sms_services_ = p;
 3363|   738k|  }
 3364|   738k|  return sms_services_;
 3365|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata39_internal_has_no_international_diallingEv:
 3391|   738k|inline bool PhoneMetadata::_internal_has_no_international_dialling() const {
 3392|   738k|  bool value = (_has_bits_[0] & 0x00020000u) != 0;
 3393|   738k|  PROTOBUF_ASSUME(!value || no_international_dialling_ != nullptr);
 3394|   738k|  return value;
 3395|   738k|}
_ZN4i18n12phonenumbers13PhoneMetadata43_internal_mutable_no_international_diallingEv:
 3441|    254|inline ::i18n::phonenumbers::PhoneNumberDesc* PhoneMetadata::_internal_mutable_no_international_dialling() {
 3442|    254|  _has_bits_[0] |= 0x00020000u;
 3443|    254|  if (no_international_dialling_ == nullptr) {
  ------------------
  |  Branch (3443:7): [True: 254, False: 0]
  ------------------
 3444|    254|    auto* p = CreateMaybeMessage<::i18n::phonenumbers::PhoneNumberDesc>(GetArena());
 3445|    254|    no_international_dialling_ = p;
 3446|    254|  }
 3447|    254|  return no_international_dialling_;
 3448|    254|}
_ZNK4i18n12phonenumbers13PhoneMetadata16_internal_has_idEv:
 3474|   738k|inline bool PhoneMetadata::_internal_has_id() const {
 3475|   738k|  bool value = (_has_bits_[0] & 0x00000001u) != 0;
 3476|   738k|  return value;
 3477|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata2idEv:
 3485|   738k|inline const std::string& PhoneMetadata::id() const {
 3486|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.id)
 3487|   738k|  return _internal_id();
 3488|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata12_internal_idEv:
 3497|  1.47M|inline const std::string& PhoneMetadata::_internal_id() const {
 3498|  1.47M|  return id_.Get();
 3499|  1.47M|}
_ZN4i18n12phonenumbers13PhoneMetadata20_internal_mutable_idEv:
 3523|   738k|inline std::string* PhoneMetadata::_internal_mutable_id() {
 3524|   738k|  _has_bits_[0] |= 0x00000001u;
 3525|   738k|  return id_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3526|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata22_internal_country_codeEv:
 3558|    732|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneMetadata::_internal_country_code() const {
 3559|    732|  return country_code_;
 3560|    732|}
_ZNK4i18n12phonenumbers13PhoneMetadata12country_codeEv:
 3561|    732|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneMetadata::country_code() const {
 3562|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.country_code)
 3563|    732|  return _internal_country_code();
 3564|    732|}
_ZNK4i18n12phonenumbers13PhoneMetadata34_internal_has_international_prefixEv:
 3575|   738k|inline bool PhoneMetadata::_internal_has_international_prefix() const {
 3576|   738k|  bool value = (_has_bits_[0] & 0x00000002u) != 0;
 3577|   738k|  return value;
 3578|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata20international_prefixEv:
 3586|    339|inline const std::string& PhoneMetadata::international_prefix() const {
 3587|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.international_prefix)
 3588|    339|  return _internal_international_prefix();
 3589|    339|}
_ZNK4i18n12phonenumbers13PhoneMetadata30_internal_international_prefixEv:
 3598|    584|inline const std::string& PhoneMetadata::_internal_international_prefix() const {
 3599|    584|  return international_prefix_.Get();
 3600|    584|}
_ZN4i18n12phonenumbers13PhoneMetadata38_internal_mutable_international_prefixEv:
 3624|    245|inline std::string* PhoneMetadata::_internal_mutable_international_prefix() {
 3625|    245|  _has_bits_[0] |= 0x00000002u;
 3626|    245|  return international_prefix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3627|    245|}
_ZNK4i18n12phonenumbers13PhoneMetadata44_internal_has_preferred_international_prefixEv:
 3648|   738k|inline bool PhoneMetadata::_internal_has_preferred_international_prefix() const {
 3649|   738k|  bool value = (_has_bits_[0] & 0x00000040u) != 0;
 3650|   738k|  return value;
 3651|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata40_internal_preferred_international_prefixEv:
 3671|     25|inline const std::string& PhoneMetadata::_internal_preferred_international_prefix() const {
 3672|     25|  return preferred_international_prefix_.Get();
 3673|     25|}
_ZN4i18n12phonenumbers13PhoneMetadata48_internal_mutable_preferred_international_prefixEv:
 3697|     25|inline std::string* PhoneMetadata::_internal_mutable_preferred_international_prefix() {
 3698|     25|  _has_bits_[0] |= 0x00000040u;
 3699|     25|  return preferred_international_prefix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3700|     25|}
_ZNK4i18n12phonenumbers13PhoneMetadata29_internal_has_national_prefixEv:
 3721|   738k|inline bool PhoneMetadata::_internal_has_national_prefix() const {
 3722|   738k|  bool value = (_has_bits_[0] & 0x00000004u) != 0;
 3723|   738k|  return value;
 3724|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata25_internal_national_prefixEv:
 3744|    144|inline const std::string& PhoneMetadata::_internal_national_prefix() const {
 3745|    144|  return national_prefix_.Get();
 3746|    144|}
_ZN4i18n12phonenumbers13PhoneMetadata33_internal_mutable_national_prefixEv:
 3770|    144|inline std::string* PhoneMetadata::_internal_mutable_national_prefix() {
 3771|    144|  _has_bits_[0] |= 0x00000004u;
 3772|    144|  return national_prefix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3773|    144|}
_ZNK4i18n12phonenumbers13PhoneMetadata35_internal_has_preferred_extn_prefixEv:
 3794|   738k|inline bool PhoneMetadata::_internal_has_preferred_extn_prefix() const {
 3795|   738k|  bool value = (_has_bits_[0] & 0x00000008u) != 0;
 3796|   738k|  return value;
 3797|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata31_internal_preferred_extn_prefixEv:
 3817|      5|inline const std::string& PhoneMetadata::_internal_preferred_extn_prefix() const {
 3818|      5|  return preferred_extn_prefix_.Get();
 3819|      5|}
_ZN4i18n12phonenumbers13PhoneMetadata39_internal_mutable_preferred_extn_prefixEv:
 3843|      5|inline std::string* PhoneMetadata::_internal_mutable_preferred_extn_prefix() {
 3844|      5|  _has_bits_[0] |= 0x00000008u;
 3845|      5|  return preferred_extn_prefix_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3846|      5|}
_ZNK4i18n12phonenumbers13PhoneMetadata41_internal_has_national_prefix_for_parsingEv:
 3867|   738k|inline bool PhoneMetadata::_internal_has_national_prefix_for_parsing() const {
 3868|   738k|  bool value = (_has_bits_[0] & 0x00000010u) != 0;
 3869|   738k|  return value;
 3870|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata27national_prefix_for_parsingEv:
 3878|  1.25k|inline const std::string& PhoneMetadata::national_prefix_for_parsing() const {
 3879|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.national_prefix_for_parsing)
 3880|  1.25k|  return _internal_national_prefix_for_parsing();
 3881|  1.25k|}
_ZNK4i18n12phonenumbers13PhoneMetadata37_internal_national_prefix_for_parsingEv:
 3890|  1.40k|inline const std::string& PhoneMetadata::_internal_national_prefix_for_parsing() const {
 3891|  1.40k|  return national_prefix_for_parsing_.Get();
 3892|  1.40k|}
_ZN4i18n12phonenumbers13PhoneMetadata45_internal_mutable_national_prefix_for_parsingEv:
 3916|    150|inline std::string* PhoneMetadata::_internal_mutable_national_prefix_for_parsing() {
 3917|    150|  _has_bits_[0] |= 0x00000010u;
 3918|    150|  return national_prefix_for_parsing_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3919|    150|}
_ZNK4i18n12phonenumbers13PhoneMetadata44_internal_has_national_prefix_transform_ruleEv:
 3940|   738k|inline bool PhoneMetadata::_internal_has_national_prefix_transform_rule() const {
 3941|   738k|  bool value = (_has_bits_[0] & 0x00000020u) != 0;
 3942|   738k|  return value;
 3943|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata30national_prefix_transform_ruleEv:
 3951|  1.13k|inline const std::string& PhoneMetadata::national_prefix_transform_rule() const {
 3952|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.national_prefix_transform_rule)
 3953|  1.13k|  return _internal_national_prefix_transform_rule();
 3954|  1.13k|}
_ZNK4i18n12phonenumbers13PhoneMetadata40_internal_national_prefix_transform_ruleEv:
 3963|  1.16k|inline const std::string& PhoneMetadata::_internal_national_prefix_transform_rule() const {
 3964|  1.16k|  return national_prefix_transform_rule_.Get();
 3965|  1.16k|}
_ZN4i18n12phonenumbers13PhoneMetadata48_internal_mutable_national_prefix_transform_ruleEv:
 3989|     32|inline std::string* PhoneMetadata::_internal_mutable_national_prefix_transform_rule() {
 3990|     32|  _has_bits_[0] |= 0x00000020u;
 3991|     32|  return national_prefix_transform_rule_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 3992|     32|}
_ZN4i18n12phonenumbers13PhoneMetadata27_internal_add_number_formatEv:
 4066|    754|inline ::i18n::phonenumbers::NumberFormat* PhoneMetadata::_internal_add_number_format() {
 4067|    754|  return number_format_.Add();
 4068|    754|}
_ZN4i18n12phonenumbers13PhoneMetadata32_internal_add_intl_number_formatEv:
 4105|    179|inline ::i18n::phonenumbers::NumberFormat* PhoneMetadata::_internal_add_intl_number_format() {
 4106|    179|  return intl_number_format_.Add();
 4107|    179|}
_ZNK4i18n12phonenumbers13PhoneMetadata31_internal_main_country_for_codeEv:
 4130|     39|inline bool PhoneMetadata::_internal_main_country_for_code() const {
 4131|     39|  return main_country_for_code_;
 4132|     39|}
_ZNK4i18n12phonenumbers13PhoneMetadata21main_country_for_codeEv:
 4133|     39|inline bool PhoneMetadata::main_country_for_code() const {
 4134|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneMetadata.main_country_for_code)
 4135|     39|  return _internal_main_country_for_code();
 4136|     39|}
_ZNK4i18n12phonenumbers13PhoneMetadata28_internal_has_leading_digitsEv:
 4147|   738k|inline bool PhoneMetadata::_internal_has_leading_digits() const {
 4148|   738k|  bool value = (_has_bits_[0] & 0x00000080u) != 0;
 4149|   738k|  return value;
 4150|   738k|}
_ZNK4i18n12phonenumbers13PhoneMetadata24_internal_leading_digitsEv:
 4170|     36|inline const std::string& PhoneMetadata::_internal_leading_digits() const {
 4171|     36|  return leading_digits_.Get();
 4172|     36|}
_ZN4i18n12phonenumbers13PhoneMetadata32_internal_mutable_leading_digitsEv:
 4196|     36|inline std::string* PhoneMetadata::_internal_mutable_leading_digits() {
 4197|     36|  _has_bits_[0] |= 0x00000080u;
 4198|     36|  return leading_digits_.Mutable(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, GetArena());
 4199|     36|}
_ZN4i18n12phonenumbers23PhoneMetadataCollection22_internal_add_metadataEv:
 4277|   738k|inline ::i18n::phonenumbers::PhoneMetadata* PhoneMetadataCollection::_internal_add_metadata() {
 4278|   738k|  return metadata_.Add();
 4279|   738k|}
_ZNK4i18n12phonenumbers23PhoneMetadataCollection8metadataEv:
 4285|  3.32k|PhoneMetadataCollection::metadata() const {
 4286|       |  // @@protoc_insertion_point(field_list:i18n.phonenumbers.PhoneMetadataCollection.metadata)
 4287|  3.32k|  return metadata_;
 4288|  3.32k|}

_ZN4i18n12phonenumbers37PhoneNumber_CountryCodeSource_IsValidEi:
   37|     20|bool PhoneNumber_CountryCodeSource_IsValid(int value) {
   38|     20|  switch (value) {
   39|      0|    case 0:
  ------------------
  |  Branch (39:5): [True: 0, False: 20]
  ------------------
   40|      6|    case 1:
  ------------------
  |  Branch (40:5): [True: 6, False: 14]
  ------------------
   41|      7|    case 5:
  ------------------
  |  Branch (41:5): [True: 1, False: 19]
  ------------------
   42|      8|    case 10:
  ------------------
  |  Branch (42:5): [True: 1, False: 19]
  ------------------
   43|     20|    case 20:
  ------------------
  |  Branch (43:5): [True: 12, False: 8]
  ------------------
   44|     20|      return true;
   45|      0|    default:
  ------------------
  |  Branch (45:5): [True: 0, False: 20]
  ------------------
   46|      0|      return false;
   47|     20|  }
   48|     20|}
_ZN4i18n12phonenumbers11PhoneNumberC2EPN6google8protobuf5ArenaE:
  146|  4.50k|  : ::PROTOBUF_NAMESPACE_ID::MessageLite(arena) {
  147|  4.50k|  SharedCtor();
  148|  4.50k|  RegisterArenaDtor(arena);
  149|       |  // @@protoc_insertion_point(arena_constructor:i18n.phonenumbers.PhoneNumber)
  150|  4.50k|}
_ZN4i18n12phonenumbers11PhoneNumberD2Ev:
  188|  4.50k|PhoneNumber::~PhoneNumber() {
  189|       |  // @@protoc_insertion_point(destructor:i18n.phonenumbers.PhoneNumber)
  190|  4.50k|  SharedDtor();
  191|  4.50k|  _internal_metadata_.Delete<std::string>();
  192|  4.50k|}
_ZN4i18n12phonenumbers11PhoneNumber12InternalSwapEPS1_:
  556|  1.11k|void PhoneNumber::InternalSwap(PhoneNumber* other) {
  557|  1.11k|  using std::swap;
  558|  1.11k|  _internal_metadata_.Swap<std::string>(&other->_internal_metadata_);
  559|  1.11k|  swap(_has_bits_[0], other->_has_bits_[0]);
  560|  1.11k|  extension_.Swap(&other->extension_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
  561|  1.11k|  raw_input_.Swap(&other->raw_input_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
  562|  1.11k|  preferred_domestic_carrier_code_.Swap(&other->preferred_domestic_carrier_code_, &::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited(), GetArena());
  563|  1.11k|  ::PROTOBUF_NAMESPACE_ID::internal::memswap<
  564|  1.11k|      PROTOBUF_FIELD_OFFSET(PhoneNumber, country_code_source_)
  565|  1.11k|      + sizeof(PhoneNumber::country_code_source_)
  566|  1.11k|      - PROTOBUF_FIELD_OFFSET(PhoneNumber, national_number_)>(
  567|  1.11k|          reinterpret_cast<char*>(&national_number_),
  568|  1.11k|          reinterpret_cast<char*>(&other->national_number_));
  569|  1.11k|  swap(number_of_leading_zeros_, other->number_of_leading_zeros_);
  570|  1.11k|}
phonenumber.pb.cc:_ZL52InitDefaultsscc_info_PhoneNumber_phonenumber_2eprotov:
   22|      1|static void InitDefaultsscc_info_PhoneNumber_phonenumber_2eproto() {
   23|      1|  GOOGLE_PROTOBUF_VERIFY_VERSION;
   24|       |
   25|      1|  {
   26|      1|    void* ptr = &::i18n::phonenumbers::_PhoneNumber_default_instance_;
   27|      1|    new (ptr) ::i18n::phonenumbers::PhoneNumber();
   28|      1|    ::PROTOBUF_NAMESPACE_ID::internal::OnShutdownDestroyMessage(ptr);
   29|      1|  }
   30|      1|}
_ZN4i18n12phonenumbers11PhoneNumber10SharedCtorEv:
  176|  4.50k|void PhoneNumber::SharedCtor() {
  177|  4.50k|  ::PROTOBUF_NAMESPACE_ID::internal::InitSCC(&scc_info_PhoneNumber_phonenumber_2eproto.base);
  178|  4.50k|  extension_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  179|  4.50k|  raw_input_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  180|  4.50k|  preferred_domestic_carrier_code_.UnsafeSetDefault(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  181|  4.50k|  ::memset(reinterpret_cast<char*>(this) + static_cast<size_t>(
  182|  4.50k|      reinterpret_cast<char*>(&national_number_) - reinterpret_cast<char*>(this)),
  183|  4.50k|      0, static_cast<size_t>(reinterpret_cast<char*>(&country_code_source_) -
  184|  4.50k|      reinterpret_cast<char*>(&national_number_)) + sizeof(country_code_source_));
  185|  4.50k|  number_of_leading_zeros_ = 1;
  186|  4.50k|}
_ZN4i18n12phonenumbers11PhoneNumber10SharedDtorEv:
  194|  4.50k|void PhoneNumber::SharedDtor() {
  195|  4.50k|  GOOGLE_DCHECK(GetArena() == nullptr);
  196|  4.50k|  extension_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  197|  4.50k|  raw_input_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  198|  4.50k|  preferred_domestic_carrier_code_.DestroyNoArena(&::PROTOBUF_NAMESPACE_ID::internal::GetEmptyStringAlreadyInited());
  199|  4.50k|}
_ZN4i18n12phonenumbers11PhoneNumber17RegisterArenaDtorEPN6google8protobuf5ArenaE:
  205|  4.50k|void PhoneNumber::RegisterArenaDtor(::PROTOBUF_NAMESPACE_ID::Arena*) {
  206|  4.50k|}

_ZN4i18n12phonenumbers11PhoneNumberC2Ev:
   94|  4.50k|  inline PhoneNumber() : PhoneNumber(nullptr) {}
_ZN4i18n12phonenumbers11PhoneNumber4SwapEPS1_:
  135|  1.11k|  inline void Swap(PhoneNumber* other) {
  136|  1.11k|    if (other == this) return;
  ------------------
  |  Branch (136:9): [True: 0, False: 1.11k]
  ------------------
  137|  1.11k|    if (GetArena() == other->GetArena()) {
  ------------------
  |  Branch (137:9): [True: 1.11k, False: 0]
  ------------------
  138|  1.11k|      InternalSwap(other);
  139|  1.11k|    } else {
  140|      0|      ::PROTOBUF_NAMESPACE_ID::internal::GenericSwap(this, other);
  141|      0|    }
  142|  1.11k|  }
_ZNK4i18n12phonenumbers11PhoneNumber22_internal_country_codeEv:
  406|  30.2k|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneNumber::_internal_country_code() const {
  407|  30.2k|  return country_code_;
  408|  30.2k|}
_ZNK4i18n12phonenumbers11PhoneNumber12country_codeEv:
  409|  30.2k|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneNumber::country_code() const {
  410|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.country_code)
  411|  30.2k|  return _internal_country_code();
  412|  30.2k|}
_ZN4i18n12phonenumbers11PhoneNumber26_internal_set_country_codeEi:
  413|  2.53k|inline void PhoneNumber::_internal_set_country_code(::PROTOBUF_NAMESPACE_ID::int32 value) {
  414|  2.53k|  _has_bits_[0] |= 0x00000010u;
  415|  2.53k|  country_code_ = value;
  416|  2.53k|}
_ZN4i18n12phonenumbers11PhoneNumber16set_country_codeEi:
  417|  2.53k|inline void PhoneNumber::set_country_code(::PROTOBUF_NAMESPACE_ID::int32 value) {
  418|  2.53k|  _internal_set_country_code(value);
  419|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.country_code)
  420|  2.53k|}
_ZNK4i18n12phonenumbers11PhoneNumber25_internal_national_numberEv:
  434|  10.3k|inline ::PROTOBUF_NAMESPACE_ID::uint64 PhoneNumber::_internal_national_number() const {
  435|  10.3k|  return national_number_;
  436|  10.3k|}
_ZNK4i18n12phonenumbers11PhoneNumber15national_numberEv:
  437|  10.3k|inline ::PROTOBUF_NAMESPACE_ID::uint64 PhoneNumber::national_number() const {
  438|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.national_number)
  439|  10.3k|  return _internal_national_number();
  440|  10.3k|}
_ZN4i18n12phonenumbers11PhoneNumber29_internal_set_national_numberEm:
  441|  1.11k|inline void PhoneNumber::_internal_set_national_number(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  442|  1.11k|  _has_bits_[0] |= 0x00000008u;
  443|  1.11k|  national_number_ = value;
  444|  1.11k|}
_ZN4i18n12phonenumbers11PhoneNumber19set_national_numberEm:
  445|  1.11k|inline void PhoneNumber::set_national_number(::PROTOBUF_NAMESPACE_ID::uint64 value) {
  446|  1.11k|  _internal_set_national_number(value);
  447|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.national_number)
  448|  1.11k|}
_ZN4i18n12phonenumbers11PhoneNumber13set_extensionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  466|     85|inline void PhoneNumber::set_extension(const std::string& value) {
  467|     85|  _internal_set_extension(value);
  468|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.extension)
  469|     85|}
_ZN4i18n12phonenumbers11PhoneNumber23_internal_set_extensionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  477|     85|inline void PhoneNumber::_internal_set_extension(const std::string& value) {
  478|     85|  _has_bits_[0] |= 0x00000001u;
  479|     85|  extension_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
  480|     85|}
_ZNK4i18n12phonenumbers11PhoneNumber30_internal_italian_leading_zeroEv:
  535|  10.3k|inline bool PhoneNumber::_internal_italian_leading_zero() const {
  536|  10.3k|  return italian_leading_zero_;
  537|  10.3k|}
_ZNK4i18n12phonenumbers11PhoneNumber20italian_leading_zeroEv:
  538|  10.3k|inline bool PhoneNumber::italian_leading_zero() const {
  539|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.italian_leading_zero)
  540|  10.3k|  return _internal_italian_leading_zero();
  541|  10.3k|}
_ZN4i18n12phonenumbers11PhoneNumber34_internal_set_italian_leading_zeroEb:
  542|    100|inline void PhoneNumber::_internal_set_italian_leading_zero(bool value) {
  543|    100|  _has_bits_[0] |= 0x00000020u;
  544|    100|  italian_leading_zero_ = value;
  545|    100|}
_ZN4i18n12phonenumbers11PhoneNumber24set_italian_leading_zeroEb:
  546|    100|inline void PhoneNumber::set_italian_leading_zero(bool value) {
  547|    100|  _internal_set_italian_leading_zero(value);
  548|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.italian_leading_zero)
  549|    100|}
_ZNK4i18n12phonenumbers11PhoneNumber33_internal_number_of_leading_zerosEv:
  563|    552|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneNumber::_internal_number_of_leading_zeros() const {
  564|    552|  return number_of_leading_zeros_;
  565|    552|}
_ZNK4i18n12phonenumbers11PhoneNumber23number_of_leading_zerosEv:
  566|    552|inline ::PROTOBUF_NAMESPACE_ID::int32 PhoneNumber::number_of_leading_zeros() const {
  567|       |  // @@protoc_insertion_point(field_get:i18n.phonenumbers.PhoneNumber.number_of_leading_zeros)
  568|    552|  return _internal_number_of_leading_zeros();
  569|    552|}
_ZN4i18n12phonenumbers11PhoneNumber37_internal_set_number_of_leading_zerosEi:
  570|     27|inline void PhoneNumber::_internal_set_number_of_leading_zeros(::PROTOBUF_NAMESPACE_ID::int32 value) {
  571|     27|  _has_bits_[0] |= 0x00000080u;
  572|     27|  number_of_leading_zeros_ = value;
  573|     27|}
_ZN4i18n12phonenumbers11PhoneNumber27set_number_of_leading_zerosEi:
  574|     27|inline void PhoneNumber::set_number_of_leading_zeros(::PROTOBUF_NAMESPACE_ID::int32 value) {
  575|     27|  _internal_set_number_of_leading_zeros(value);
  576|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.number_of_leading_zeros)
  577|     27|}
_ZN4i18n12phonenumbers11PhoneNumber13set_raw_inputERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  595|     17|inline void PhoneNumber::set_raw_input(const std::string& value) {
  596|     17|  _internal_set_raw_input(value);
  597|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.raw_input)
  598|     17|}
_ZN4i18n12phonenumbers11PhoneNumber23_internal_set_raw_inputERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  606|     17|inline void PhoneNumber::_internal_set_raw_input(const std::string& value) {
  607|     17|  _has_bits_[0] |= 0x00000002u;
  608|     17|  raw_input_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
  609|     17|}
_ZN4i18n12phonenumbers11PhoneNumber33_internal_set_country_code_sourceENS0_29PhoneNumber_CountryCodeSourceE:
  671|     20|inline void PhoneNumber::_internal_set_country_code_source(::i18n::phonenumbers::PhoneNumber_CountryCodeSource value) {
  672|     20|  assert(::i18n::phonenumbers::PhoneNumber_CountryCodeSource_IsValid(value));
  673|     20|  _has_bits_[0] |= 0x00000040u;
  674|     20|  country_code_source_ = value;
  675|     20|}
_ZN4i18n12phonenumbers11PhoneNumber23set_country_code_sourceENS0_29PhoneNumber_CountryCodeSourceE:
  676|     20|inline void PhoneNumber::set_country_code_source(::i18n::phonenumbers::PhoneNumber_CountryCodeSource value) {
  677|     20|  _internal_set_country_code_source(value);
  678|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.country_code_source)
  679|     20|}
_ZN4i18n12phonenumbers11PhoneNumber35set_preferred_domestic_carrier_codeERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  697|      5|inline void PhoneNumber::set_preferred_domestic_carrier_code(const std::string& value) {
  698|      5|  _internal_set_preferred_domestic_carrier_code(value);
  699|       |  // @@protoc_insertion_point(field_set:i18n.phonenumbers.PhoneNumber.preferred_domestic_carrier_code)
  700|      5|}
_ZN4i18n12phonenumbers11PhoneNumber45_internal_set_preferred_domestic_carrier_codeERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  708|      5|inline void PhoneNumber::_internal_set_preferred_domestic_carrier_code(const std::string& value) {
  709|      5|  _has_bits_[0] |= 0x00000004u;
  710|      5|  preferred_domestic_carrier_code_.Set(::PROTOBUF_NAMESPACE_ID::internal::ArenaStringPtr::EmptyDefault{}, value, GetArena());
  711|      5|}

_ZN4i18n12phonenumbers15PhoneNumberUtilC2Ev:
  859|      1|    : logger_(Logger::set_logger_impl(new NullLogger())),
  860|      1|      matcher_api_(new RegexBasedMatcher()),
  861|      1|      reg_exps_(new PhoneNumberRegExpsAndMappings),
  862|      1|      country_calling_code_to_region_code_map_(
  863|      1|          new std::vector<IntRegionsPair>()),
  864|      1|      nanpa_regions_(new absl::node_hash_set<string>()),
  865|      1|      region_to_metadata_map_(new absl::node_hash_map<string, PhoneMetadata>()),
  866|      1|      country_code_to_non_geographical_metadata_map_(
  867|      1|          new absl::node_hash_map<int, PhoneMetadata>) {
  868|      1|  Logger::set_logger_impl(logger_.get());
  869|       |  // TODO: Update the java version to put the contents of the init
  870|       |  // method inside the constructor as well to keep both in sync.
  871|      1|  PhoneMetadataCollection metadata_collection;
  872|      1|  if (!LoadCompiledInMetadata(&metadata_collection)) {
  ------------------
  |  Branch (872:7): [True: 0, False: 1]
  ------------------
  873|      0|    LOG(DFATAL) << "Could not parse compiled-in metadata.";
  874|      0|    return;
  875|      0|  }
  876|       |  // Storing data in a temporary map to make it easier to find other regions
  877|       |  // that share a country calling code when inserting data.
  878|      1|  std::map<int, std::list<string>* > country_calling_code_to_region_map;
  879|      1|  for (RepeatedPtrField<PhoneMetadata>::const_iterator it =
  880|      1|           metadata_collection.metadata().begin();
  881|    255|       it != metadata_collection.metadata().end();
  ------------------
  |  Branch (881:8): [True: 254, False: 1]
  ------------------
  882|    254|       ++it) {
  883|    254|    const string& region_code = it->id();
  884|    254|    if (region_code == RegionCode::GetUnknown()) {
  ------------------
  |  Branch (884:9): [True: 0, False: 254]
  ------------------
  885|      0|      continue;
  886|      0|    }
  887|       |
  888|    254|    int country_calling_code = it->country_code();
  889|    254|    if (kRegionCodeForNonGeoEntity == region_code) {
  ------------------
  |  Branch (889:9): [True: 9, False: 245]
  ------------------
  890|      9|      country_code_to_non_geographical_metadata_map_->insert(
  891|      9|          std::make_pair(country_calling_code, *it));
  892|    245|    } else {
  893|    245|      region_to_metadata_map_->insert(std::make_pair(region_code, *it));
  894|    245|    }
  895|    254|    std::map<int, std::list<string>* >::iterator calling_code_in_map =
  896|    254|        country_calling_code_to_region_map.find(country_calling_code);
  897|    254|    if (calling_code_in_map != country_calling_code_to_region_map.end()) {
  ------------------
  |  Branch (897:9): [True: 39, False: 215]
  ------------------
  898|     39|      if (it->main_country_for_code()) {
  ------------------
  |  Branch (898:11): [True: 6, False: 33]
  ------------------
  899|      6|        calling_code_in_map->second->push_front(region_code);
  900|     33|      } else {
  901|     33|        calling_code_in_map->second->push_back(region_code);
  902|     33|      }
  903|    215|    } else {
  904|       |      // For most country calling codes, there will be only one region code.
  905|    215|      std::list<string>* list_with_region_code = new std::list<string>();
  906|    215|      list_with_region_code->push_back(region_code);
  907|    215|      country_calling_code_to_region_map.insert(
  908|    215|          std::make_pair(country_calling_code, list_with_region_code));
  909|    215|    }
  910|    254|    if (country_calling_code == kNanpaCountryCode) {
  ------------------
  |  Branch (910:9): [True: 25, False: 229]
  ------------------
  911|     25|        nanpa_regions_->insert(region_code);
  912|     25|    }
  913|    254|  }
  914|       |
  915|      1|  country_calling_code_to_region_code_map_->insert(
  916|      1|      country_calling_code_to_region_code_map_->begin(),
  917|      1|      country_calling_code_to_region_map.begin(),
  918|      1|      country_calling_code_to_region_map.end());
  919|       |  // Sort all the pairs in ascending order according to country calling code.
  920|      1|  std::sort(country_calling_code_to_region_code_map_->begin(),
  921|      1|            country_calling_code_to_region_code_map_->end(), OrderByFirst());
  922|      1|}
_ZN4i18n12phonenumbers15PhoneNumberUtil11GetInstanceEv:
  990|  6.13k|PhoneNumberUtil* PhoneNumberUtil::GetInstance() {
  991|  6.13k|  return Singleton<PhoneNumberUtil>::GetInstance();
  992|  6.13k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil26StartsWithPlusCharsPatternERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  999|  6.67k|    const {
 1000|  6.67k|  const scoped_ptr<RegExpInput> number_string_piece(
 1001|  6.67k|      reg_exps_->regexp_factory_->CreateInput(number));
 1002|  6.67k|  return reg_exps_->plus_chars_pattern_->Consume(number_string_piece.get());
 1003|  6.67k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil20TrimUnwantedEndCharsEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1009|  7.44k|void PhoneNumberUtil::TrimUnwantedEndChars(string* number) const {
 1010|  7.44k|  DCHECK(number);
  ------------------
  |  |   29|  7.44k|#define DCHECK(X) assert(X)
  ------------------
 1011|  7.44k|  UnicodeText number_as_unicode;
 1012|  7.44k|  number_as_unicode.PointToUTF8(number->data(), static_cast<int>(number->size()));
 1013|  7.44k|  if (!number_as_unicode.UTF8WasValid()) {
  ------------------
  |  Branch (1013:7): [True: 0, False: 7.44k]
  ------------------
 1014|       |    // The input wasn't valid UTF-8. Produce an empty string to indicate an error.
 1015|      0|    number->clear();
 1016|      0|    return;
 1017|      0|  }
 1018|  7.44k|  char current_char[5];
 1019|  7.44k|  int len;
 1020|  7.44k|  UnicodeText::const_reverse_iterator reverse_it(number_as_unicode.end());
 1021|  8.15k|  for (; reverse_it.base() != number_as_unicode.begin(); ++reverse_it) {
  ------------------
  |  Branch (1021:10): [True: 8.11k, False: 45]
  ------------------
 1022|  8.11k|    len = reverse_it.get_utf8(current_char);
 1023|  8.11k|    current_char[len] = '\0';
 1024|  8.11k|    if (!reg_exps_->unwanted_end_char_pattern_->FullMatch(current_char)) {
  ------------------
  |  Branch (1024:9): [True: 7.39k, False: 714]
  ------------------
 1025|  7.39k|      break;
 1026|  7.39k|    }
 1027|  8.11k|  }
 1028|       |
 1029|  7.44k|  number->assign(UnicodeText::UTF8Substring(number_as_unicode.begin(),
 1030|  7.44k|                                            reverse_it.base()));
 1031|  7.44k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil17IsValidRegionCodeERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1080|  1.48k|bool PhoneNumberUtil::IsValidRegionCode(const string& region_code) const {
 1081|  1.48k|  return (region_to_metadata_map_->find(region_code) !=
 1082|  1.48k|          region_to_metadata_map_->end());
 1083|  1.48k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil20GetMetadataForRegionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1099|  2.43k|    const string& region_code) const {
 1100|  2.43k|  absl::node_hash_map<string, PhoneMetadata>::const_iterator it =
 1101|  2.43k|      region_to_metadata_map_->find(region_code);
 1102|  2.43k|  if (it != region_to_metadata_map_->end()) {
  ------------------
  |  Branch (1102:7): [True: 1.31k, False: 1.12k]
  ------------------
 1103|  1.31k|    return &it->second;
 1104|  1.31k|  }
 1105|  1.12k|  return NULL;
 1106|  2.43k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil35GetMetadataForNonGeographicalRegionEi:
 1109|     18|    int country_calling_code) const {
 1110|     18|  absl::node_hash_map<int, PhoneMetadata>::const_iterator it =
 1111|     18|      country_code_to_non_geographical_metadata_map_->find(
 1112|     18|          country_calling_code);
 1113|     18|  if (it != country_code_to_non_geographical_metadata_map_->end()) {
  ------------------
  |  Branch (1113:7): [True: 18, False: 0]
  ------------------
 1114|     18|    return &it->second;
 1115|     18|  }
 1116|      0|  return NULL;
 1117|     18|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil33GetMetadataForRegionOrCallingCodeEiRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1258|  1.01k|      int country_calling_code, const string& region_code) const {
 1259|  1.01k|  return kRegionCodeForNonGeoEntity == region_code
  ------------------
  |  Branch (1259:10): [True: 18, False: 994]
  ------------------
 1260|  1.01k|      ? GetMetadataForNonGeographicalRegion(country_calling_code)
 1261|  1.01k|      : GetMetadataForRegion(region_code);
 1262|  1.01k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil35GetRegionCodesForCountryCallingCodeEiPNSt3__14listINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS7_IS9_EEEE:
 1880|  31.7k|    std::list<string>* region_codes) const {
 1881|  31.7k|  DCHECK(region_codes);
  ------------------
  |  |   29|  31.7k|#define DCHECK(X) assert(X)
  ------------------
 1882|       |  // Create a IntRegionsPair with the country_code passed in, and use it to
 1883|       |  // locate the pair with the same country_code in the sorted vector.
 1884|  31.7k|  IntRegionsPair target_pair;
 1885|  31.7k|  target_pair.first = country_calling_code;
 1886|  31.7k|  typedef std::vector<IntRegionsPair>::const_iterator ConstIterator;
 1887|  31.7k|  std::pair<ConstIterator, ConstIterator> range =
 1888|  31.7k|      std::equal_range(country_calling_code_to_region_code_map_->begin(),
 1889|  31.7k|                       country_calling_code_to_region_code_map_->end(),
 1890|  31.7k|                       target_pair, OrderByFirst());
 1891|  31.7k|  if (range.first != range.second) {
  ------------------
  |  Branch (1891:7): [True: 13.3k, False: 18.3k]
  ------------------
 1892|  13.3k|    region_codes->insert(region_codes->begin(),
 1893|  13.3k|                         range.first->second->begin(),
 1894|  13.3k|                         range.first->second->end());
 1895|  13.3k|  }
 1896|  31.7k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil27GetRegionCodeForCountryCodeEiPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 1903|  2.84k|    string* region_code) const {
 1904|  2.84k|  DCHECK(region_code);
  ------------------
  |  |   29|  2.84k|#define DCHECK(X) assert(X)
  ------------------
 1905|  2.84k|  std::list<string> region_codes;
 1906|       |
 1907|  2.84k|  GetRegionCodesForCountryCallingCode(country_calling_code, &region_codes);
 1908|  2.84k|  *region_code = (region_codes.size() > 0) ?
  ------------------
  |  Branch (1908:18): [True: 2.04k, False: 801]
  ------------------
 1909|  2.04k|      region_codes.front() : RegionCode::GetUnknown();
 1910|  2.84k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil5ParseERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_PNS0_11PhoneNumberE:
 2139|  3.00k|                                                  PhoneNumber* number) const {
 2140|  3.00k|  DCHECK(number);
  ------------------
  |  |   29|  3.00k|#define DCHECK(X) assert(X)
  ------------------
 2141|  3.00k|  return ParseHelper(number_to_parse, default_region, false, true, number);
 2142|  3.00k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil20ParseAndKeepRawInputERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_PNS0_11PhoneNumberE:
 2147|     56|    PhoneNumber* number) const {
 2148|     56|  DCHECK(number);
  ------------------
  |  |   29|     56|#define DCHECK(X) assert(X)
  ------------------
 2149|     56|  return ParseHelper(number_to_parse, default_region, true, true, number);
 2150|     56|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil21CheckRegionForParsingERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_:
 2158|  1.48k|    const string& default_region) const {
 2159|  1.48k|  if (!IsValidRegionCode(default_region) && !number_to_parse.empty()) {
  ------------------
  |  Branch (2159:7): [True: 1.16k, False: 318]
  |  Branch (2159:45): [True: 1.16k, False: 0]
  ------------------
 2160|  1.16k|    const scoped_ptr<RegExpInput> number(
 2161|  1.16k|        reg_exps_->regexp_factory_->CreateInput(number_to_parse));
 2162|  1.16k|    if (!reg_exps_->plus_chars_pattern_->Consume(number.get())) {
  ------------------
  |  Branch (2162:9): [True: 37, False: 1.12k]
  ------------------
 2163|     37|      return false;
 2164|     37|    }
 2165|  1.16k|  }
 2166|  1.44k|  return true;
 2167|  1.48k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19ExtractPhoneContextERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEm:
 2176|  3.06k|    const size_t index_of_phone_context) const {
 2177|       |  // If no phone-context parameter is present
 2178|  3.06k|  if (index_of_phone_context == std::string::npos) {
  ------------------
  |  Branch (2178:7): [True: 2.74k, False: 317]
  ------------------
 2179|  2.74k|    return absl::nullopt;
 2180|  2.74k|  }
 2181|       |
 2182|    317|  size_t phone_context_start =
 2183|    317|      index_of_phone_context + strlen(kRfc3966PhoneContext);
 2184|       |  // If phone-context parameter is empty
 2185|    317|  if (phone_context_start >= number_to_extract_from.length()) {
  ------------------
  |  Branch (2185:7): [True: 17, False: 300]
  ------------------
 2186|     17|    return "";
 2187|     17|  }
 2188|       |
 2189|    300|  size_t phone_context_end =
 2190|    300|      number_to_extract_from.find(';', phone_context_start);
 2191|       |  // If phone-context is not the last parameter
 2192|    300|  if (phone_context_end != std::string::npos) {
  ------------------
  |  Branch (2192:7): [True: 24, False: 276]
  ------------------
 2193|     24|    return number_to_extract_from.substr(
 2194|     24|        phone_context_start, phone_context_end - phone_context_start);
 2195|    276|  } else {
 2196|    276|    return number_to_extract_from.substr(phone_context_start);
 2197|    276|  }
 2198|    300|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19IsPhoneContextValidEN4absl12lts_202206238optionalINSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEEE:
 2203|  3.06k|    const absl::optional<string> phone_context) const {
 2204|  3.06k|  if (!phone_context.has_value()) {
  ------------------
  |  Branch (2204:7): [True: 2.74k, False: 317]
  ------------------
 2205|  2.74k|    return true;
 2206|  2.74k|  }
 2207|    317|  if (phone_context.value().empty()) {
  ------------------
  |  Branch (2207:7): [True: 18, False: 299]
  ------------------
 2208|     18|    return false;
 2209|     18|  }
 2210|       |
 2211|       |  // Does phone-context value match pattern of global-number-digits or
 2212|       |  // domainname
 2213|    299|  return reg_exps_->rfc3966_global_number_digits_pattern_->FullMatch(
  ------------------
  |  Branch (2213:10): [True: 32, False: 267]
  ------------------
 2214|    299|      std::string{phone_context.value()}) ||
 2215|    299|      reg_exps_->rfc3966_domainname_pattern_->FullMatch(
  ------------------
  |  Branch (2215:7): [True: 64, False: 203]
  ------------------
 2216|    267|          std::string{phone_context.value()});
 2217|    317|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil29BuildNationalNumberForParsingERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPS8_:
 2223|  3.06k|    const string& number_to_parse, string* national_number) const {
 2224|  3.06k|  size_t index_of_phone_context = number_to_parse.find(kRfc3966PhoneContext);
 2225|       |
 2226|  3.06k|  absl::optional<string> phone_context =
 2227|  3.06k|      ExtractPhoneContext(number_to_parse, index_of_phone_context);
 2228|  3.06k|  if (!IsPhoneContextValid(phone_context)) {
  ------------------
  |  Branch (2228:7): [True: 221, False: 2.84k]
  ------------------
 2229|    221|    VLOG(2) << "The phone-context value is invalid.";
 2230|    221|    return NOT_A_NUMBER;
 2231|    221|  }
 2232|       |
 2233|  2.84k|  if (phone_context.has_value()) {
  ------------------
  |  Branch (2233:7): [True: 96, False: 2.74k]
  ------------------
 2234|       |    // If the phone context contains a phone number prefix, we need to capture
 2235|       |    // it, whereas domains will be ignored.
 2236|     96|    if (phone_context.value().at(0) == kPlusSign[0]) {
  ------------------
  |  Branch (2236:9): [True: 32, False: 64]
  ------------------
 2237|       |      // Additional parameters might follow the phone context. If so, we will
 2238|       |      // remove them here because the parameters after phone context are not
 2239|       |      // important for parsing the phone number.
 2240|     32|      StrAppend(national_number, phone_context.value());
 2241|     32|    }
 2242|       |
 2243|       |    // Now append everything between the "tel:" prefix and the phone-context.
 2244|       |    // This should include the national number, an optional extension or
 2245|       |    // isdn-subaddress component. Note we also handle the case when "tel:" is
 2246|       |    // missing, as we have seen in some of the phone number inputs. In that
 2247|       |    // case, we append everything from the beginning.
 2248|     96|    size_t index_of_rfc_prefix = number_to_parse.find(kRfc3966Prefix);
 2249|     96|    int index_of_national_number = (index_of_rfc_prefix != string::npos) ?
  ------------------
  |  Branch (2249:36): [True: 14, False: 82]
  ------------------
 2250|     82|        static_cast<int>(index_of_rfc_prefix + strlen(kRfc3966Prefix)) : 0;
 2251|     96|    StrAppend(
 2252|     96|        national_number,
 2253|     96|        number_to_parse.substr(
 2254|     96|            index_of_national_number,
 2255|     96|            index_of_phone_context - index_of_national_number));
 2256|  2.74k|  } else {
 2257|       |    // Extract a possible number from the string passed in (this strips leading
 2258|       |    // characters that could not be the start of a phone number.)
 2259|  2.74k|    ExtractPossibleNumber(number_to_parse, national_number);
 2260|  2.74k|  }
 2261|       |
 2262|       |  // Delete the isdn-subaddress and everything after it if it is present. Note
 2263|       |  // extension won't appear at the same time with isdn-subaddress according to
 2264|       |  // paragraph 5.3 of the RFC3966 spec.
 2265|  2.84k|  size_t index_of_isdn = national_number->find(kRfc3966IsdnSubaddress);
 2266|  2.84k|  if (index_of_isdn != string::npos) {
  ------------------
  |  Branch (2266:7): [True: 7, False: 2.83k]
  ------------------
 2267|      7|    national_number->erase(index_of_isdn);
 2268|      7|  }
 2269|       |  // If both phone context and isdn-subaddress are absent but other parameters
 2270|       |  // are present, the parameters are left in nationalNumber. This is because
 2271|       |  // we are concerned about deleting content from a potential number string
 2272|       |  // when there is no strong evidence that the number is actually written in
 2273|       |  // RFC3966.
 2274|  2.84k|  return NO_PARSING_ERROR;
 2275|  3.06k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil11ParseHelperERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_bbPNS0_11PhoneNumberE:
 2285|  3.06k|    PhoneNumber* phone_number) const {
 2286|  3.06k|  DCHECK(phone_number);
  ------------------
  |  |   29|  3.06k|#define DCHECK(X) assert(X)
  ------------------
 2287|       |
 2288|  3.06k|  string national_number;
 2289|  3.06k|  PhoneNumberUtil::ErrorType build_national_number_for_parsing_return =
 2290|  3.06k|      BuildNationalNumberForParsing(number_to_parse, &national_number);
 2291|  3.06k|  if (build_national_number_for_parsing_return != NO_PARSING_ERROR) {
  ------------------
  |  Branch (2291:7): [True: 221, False: 2.84k]
  ------------------
 2292|    221|    return build_national_number_for_parsing_return;
 2293|    221|  }
 2294|       |
 2295|  2.84k|  if (!IsViablePhoneNumber(national_number)) {
  ------------------
  |  Branch (2295:7): [True: 1.36k, False: 1.48k]
  ------------------
 2296|  1.36k|    VLOG(2) << "The string supplied did not seem to be a phone number.";
 2297|  1.36k|    return NOT_A_NUMBER;
 2298|  1.36k|  }
 2299|       |
 2300|  1.48k|  if (check_region &&
  ------------------
  |  Branch (2300:7): [True: 1.48k, False: 0]
  ------------------
 2301|  1.48k|      !CheckRegionForParsing(national_number, default_region)) {
  ------------------
  |  Branch (2301:7): [True: 37, False: 1.44k]
  ------------------
 2302|     37|    VLOG(1) << "Missing or invalid default country.";
 2303|     37|    return INVALID_COUNTRY_CODE_ERROR;
 2304|     37|  }
 2305|  1.44k|  PhoneNumber temp_number;
 2306|  1.44k|  if (keep_raw_input) {
  ------------------
  |  Branch (2306:7): [True: 17, False: 1.42k]
  ------------------
 2307|     17|    temp_number.set_raw_input(number_to_parse);
 2308|     17|  }
 2309|       |  // Attempt to parse extension first, since it doesn't require country-specific
 2310|       |  // data and we want to have the non-normalised number here.
 2311|  1.44k|  string extension;
 2312|  1.44k|  MaybeStripExtension(&national_number, &extension);
 2313|  1.44k|  if (!extension.empty()) {
  ------------------
  |  Branch (2313:7): [True: 85, False: 1.35k]
  ------------------
 2314|     85|    temp_number.set_extension(extension);
 2315|     85|  }
 2316|  1.44k|  const PhoneMetadata* country_metadata = GetMetadataForRegion(default_region);
 2317|       |  // Check to see if the number is given in international format so we know
 2318|       |  // whether this number is from the default country or not.
 2319|  1.44k|  string normalized_national_number(national_number);
 2320|  1.44k|  ErrorType country_code_error =
 2321|  1.44k|      MaybeExtractCountryCode(country_metadata, keep_raw_input,
 2322|  1.44k|                              &normalized_national_number, &temp_number);
 2323|  1.44k|  if (country_code_error != NO_PARSING_ERROR) {
  ------------------
  |  Branch (2323:7): [True: 192, False: 1.25k]
  ------------------
 2324|    192|    const scoped_ptr<RegExpInput> number_string_piece(
 2325|    192|        reg_exps_->regexp_factory_->CreateInput(national_number));
 2326|    192|    if ((country_code_error == INVALID_COUNTRY_CODE_ERROR) &&
  ------------------
  |  Branch (2326:9): [True: 180, False: 12]
  ------------------
 2327|    192|        (reg_exps_->plus_chars_pattern_->Consume(number_string_piece.get()))) {
  ------------------
  |  Branch (2327:9): [True: 178, False: 2]
  ------------------
 2328|    178|      normalized_national_number.assign(number_string_piece->ToString());
 2329|       |      // Strip the plus-char, and try again.
 2330|    178|      MaybeExtractCountryCode(country_metadata,
 2331|    178|                              keep_raw_input,
 2332|    178|                              &normalized_national_number,
 2333|    178|                              &temp_number);
 2334|    178|      if (temp_number.country_code() == 0) {
  ------------------
  |  Branch (2334:11): [True: 168, False: 10]
  ------------------
 2335|    168|        return INVALID_COUNTRY_CODE_ERROR;
 2336|    168|      }
 2337|    178|    } else {
 2338|     14|      return country_code_error;
 2339|     14|    }
 2340|    192|  }
 2341|  1.26k|  int country_code = temp_number.country_code();
 2342|  1.26k|  if (country_code != 0) {
  ------------------
  |  Branch (2342:7): [True: 1.04k, False: 218]
  ------------------
 2343|  1.04k|    string phone_number_region;
 2344|  1.04k|    GetRegionCodeForCountryCode(country_code, &phone_number_region);
 2345|  1.04k|    if (phone_number_region != default_region) {
  ------------------
  |  Branch (2345:9): [True: 1.01k, False: 31]
  ------------------
 2346|  1.01k|      country_metadata =
 2347|  1.01k|          GetMetadataForRegionOrCallingCode(country_code, phone_number_region);
 2348|  1.01k|    }
 2349|  1.04k|  } else if (country_metadata) {
  ------------------
  |  Branch (2349:14): [True: 218, False: 0]
  ------------------
 2350|       |    // If no extracted country calling code, use the region supplied instead.
 2351|       |    // Note that the national number was already normalized by
 2352|       |    // MaybeExtractCountryCode.
 2353|    218|    country_code = country_metadata->country_code();
 2354|    218|  }
 2355|  1.26k|  if (normalized_national_number.length() < kMinLengthForNsn) {
  ------------------
  |  Branch (2355:7): [True: 106, False: 1.15k]
  ------------------
 2356|    106|    VLOG(2) << "The string supplied is too short to be a phone number.";
 2357|    106|    return TOO_SHORT_NSN;
 2358|    106|  }
 2359|  1.15k|  if (country_metadata) {
  ------------------
  |  Branch (2359:7): [True: 1.15k, False: 2]
  ------------------
 2360|  1.15k|    string carrier_code;
 2361|  1.15k|    string potential_national_number(normalized_national_number);
 2362|  1.15k|    MaybeStripNationalPrefixAndCarrierCode(*country_metadata,
 2363|  1.15k|                                           &potential_national_number,
 2364|  1.15k|                                           &carrier_code);
 2365|       |    // We require that the NSN remaining after stripping the national prefix
 2366|       |    // and carrier code be long enough to be a possible length for the region.
 2367|       |    // Otherwise, we don't do the stripping, since the original number could be
 2368|       |    // a valid short number.
 2369|  1.15k|    ValidationResult validation_result =
 2370|  1.15k|        TestNumberLength(potential_national_number, *country_metadata);
 2371|  1.15k|    if (validation_result != TOO_SHORT &&
  ------------------
  |  Branch (2371:9): [True: 378, False: 775]
  ------------------
 2372|  1.15k|        validation_result != IS_POSSIBLE_LOCAL_ONLY &&
  ------------------
  |  Branch (2372:9): [True: 316, False: 62]
  ------------------
 2373|  1.15k|        validation_result != INVALID_LENGTH) {
  ------------------
  |  Branch (2373:9): [True: 307, False: 9]
  ------------------
 2374|    307|      normalized_national_number.assign(potential_national_number);
 2375|    307|      if (keep_raw_input && !carrier_code.empty()) {
  ------------------
  |  Branch (2375:11): [True: 10, False: 297]
  |  Branch (2375:29): [True: 5, False: 5]
  ------------------
 2376|      5|        temp_number.set_preferred_domestic_carrier_code(carrier_code);
 2377|      5|      }
 2378|    307|    }
 2379|  1.15k|  }
 2380|  1.15k|  size_t normalized_national_number_length =
 2381|  1.15k|      normalized_national_number.length();
 2382|  1.15k|  if (normalized_national_number_length < kMinLengthForNsn) {
  ------------------
  |  Branch (2382:7): [True: 0, False: 1.15k]
  ------------------
 2383|      0|    VLOG(2) << "The string supplied is too short to be a phone number.";
 2384|      0|    return TOO_SHORT_NSN;
 2385|      0|  }
 2386|  1.15k|  if (normalized_national_number_length > kMaxLengthForNsn) {
  ------------------
  |  Branch (2386:7): [True: 39, False: 1.11k]
  ------------------
 2387|     39|    VLOG(2) << "The string supplied is too long to be a phone number.";
 2388|     39|    return TOO_LONG_NSN;
 2389|     39|  }
 2390|  1.11k|  temp_number.set_country_code(country_code);
 2391|  1.11k|  SetItalianLeadingZerosForPhoneNumber(normalized_national_number,
 2392|  1.11k|      &temp_number);
 2393|  1.11k|  uint64 number_as_int;
 2394|  1.11k|  safe_strtou64(normalized_national_number, &number_as_int);
 2395|  1.11k|  temp_number.set_national_number(number_as_int);
 2396|  1.11k|  phone_number->Swap(&temp_number);
 2397|  1.11k|  return NO_PARSING_ERROR;
 2398|  1.15k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil21ExtractPossibleNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPS8_:
 2411|  9.42k|                                            string* extracted_number) const {
 2412|  9.42k|  DCHECK(extracted_number);
  ------------------
  |  |   29|  9.42k|#define DCHECK(X) assert(X)
  ------------------
 2413|       |
 2414|  9.42k|  UnicodeText number_as_unicode;
 2415|  9.42k|  number_as_unicode.PointToUTF8(number.data(), static_cast<int>(number.size()));
 2416|  9.42k|  if (!number_as_unicode.UTF8WasValid()) {
  ------------------
  |  Branch (2416:7): [True: 1.10k, False: 8.31k]
  ------------------
 2417|       |    // The input wasn't valid UTF-8. Produce an empty string to indicate an error.
 2418|  1.10k|    extracted_number->clear();
 2419|  1.10k|    return;
 2420|  1.10k|  }
 2421|  8.31k|  char current_char[5];
 2422|  8.31k|  int len;
 2423|  8.31k|  UnicodeText::const_iterator it;
 2424|  14.1k|  for (it = number_as_unicode.begin(); it != number_as_unicode.end(); ++it) {
  ------------------
  |  Branch (2424:40): [True: 13.2k, False: 874]
  ------------------
 2425|  13.2k|    len = it.get_utf8(current_char);
 2426|  13.2k|    current_char[len] = '\0';
 2427|  13.2k|    if (reg_exps_->valid_start_char_pattern_->FullMatch(current_char)) {
  ------------------
  |  Branch (2427:9): [True: 7.44k, False: 5.84k]
  ------------------
 2428|  7.44k|      break;
 2429|  7.44k|    }
 2430|  13.2k|  }
 2431|       |
 2432|  8.31k|  if (it == number_as_unicode.end()) {
  ------------------
  |  Branch (2432:7): [True: 874, False: 7.44k]
  ------------------
 2433|       |    // No valid start character was found. extracted_number should be set to
 2434|       |    // empty string.
 2435|    874|    extracted_number->clear();
 2436|    874|    return;
 2437|    874|  }
 2438|       |
 2439|  7.44k|  extracted_number->assign(
 2440|  7.44k|      UnicodeText::UTF8Substring(it, number_as_unicode.end()));
 2441|  7.44k|  TrimUnwantedEndChars(extracted_number);
 2442|  7.44k|  if (extracted_number->length() == 0) {
  ------------------
  |  Branch (2442:7): [True: 45, False: 7.39k]
  ------------------
 2443|     45|    return;
 2444|     45|  }
 2445|       |
 2446|       |  // Now remove any extra numbers at the end.
 2447|  7.39k|  reg_exps_->capture_up_to_second_number_start_pattern_->
 2448|  7.39k|      PartialMatch(*extracted_number, extracted_number);
 2449|  7.39k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil36SetItalianLeadingZerosForPhoneNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPNS0_11PhoneNumberE:
 2577|  1.11k|    const string& national_number, PhoneNumber* phone_number) const {
 2578|  1.11k|  if (national_number.length() > 1 && national_number[0] == '0') {
  ------------------
  |  Branch (2578:7): [True: 1.11k, False: 0]
  |  Branch (2578:39): [True: 100, False: 1.01k]
  ------------------
 2579|    100|    phone_number->set_italian_leading_zero(true);
 2580|    100|    size_t number_of_leading_zeros = 1;
 2581|       |    // Note that if the national number is all "0"s, the last "0" is not
 2582|       |    // counted as a leading zero.
 2583|    209|    while (number_of_leading_zeros < national_number.length() - 1 &&
  ------------------
  |  Branch (2583:12): [True: 149, False: 60]
  ------------------
 2584|    209|        national_number[number_of_leading_zeros] == '0') {
  ------------------
  |  Branch (2584:9): [True: 109, False: 40]
  ------------------
 2585|    109|      number_of_leading_zeros++;
 2586|    109|    }
 2587|    100|    if (number_of_leading_zeros != 1) {
  ------------------
  |  Branch (2587:9): [True: 27, False: 73]
  ------------------
 2588|     27|      phone_number->set_number_of_leading_zeros(static_cast<int32_t>(number_of_leading_zeros));
 2589|     27|    }
 2590|    100|  }
 2591|  1.11k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil28GetNationalSignificantNumberERKNS0_11PhoneNumberEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 2678|  10.3k|    string* national_number) const {
 2679|  10.3k|  DCHECK(national_number);
  ------------------
  |  |   29|  10.3k|#define DCHECK(X) assert(X)
  ------------------
 2680|       |  // If leading zero(s) have been set, we prefix this now. Note this is not a
 2681|       |  // national prefix. Ensure the number of leading zeros is at least 0 so we
 2682|       |  // don't crash in the case of malicious input.
 2683|  10.3k|  StrAppend(national_number, number.italian_leading_zero() ?
  ------------------
  |  Branch (2683:30): [True: 552, False: 9.74k]
  ------------------
 2684|  9.74k|      string(std::max(number.number_of_leading_zeros(), 0), '0') : "");
 2685|  10.3k|  StrAppend(national_number, number.national_number());
 2686|  10.3k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19NormalizeDigitsOnlyEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 2782|  2.92k|void PhoneNumberUtil::NormalizeDigitsOnly(string* number) const {
 2783|  2.92k|  DCHECK(number);
  ------------------
  |  |   29|  2.92k|#define DCHECK(X) assert(X)
  ------------------
 2784|  2.92k|  const RegExp& non_digits_pattern = reg_exps_->regexp_cache_->GetRegExp(
 2785|  2.92k|      StrCat("[^", kDigits, "]"));
 2786|       |  // Delete everything that isn't valid digits.
 2787|  2.92k|  non_digits_pattern.GlobalReplace(number, "");
 2788|       |  // Normalize all decimal digits to ASCII digits.
 2789|  2.92k|  number->assign(NormalizeUTF8::NormalizeDecimalDigits(*number));
 2790|  2.92k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil9NormalizeEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 2827|  1.62k|void PhoneNumberUtil::Normalize(string* number) const {
 2828|  1.62k|  DCHECK(number);
  ------------------
  |  |   29|  1.62k|#define DCHECK(X) assert(X)
  ------------------
 2829|  1.62k|  if (reg_exps_->valid_alpha_phone_pattern_->PartialMatch(*number)) {
  ------------------
  |  Branch (2829:7): [True: 422, False: 1.19k]
  ------------------
 2830|    422|    NormalizeHelper(reg_exps_->alpha_phone_mappings_, true, number);
 2831|    422|  }
 2832|  1.62k|  NormalizeDigitsOnly(number);
 2833|  1.62k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19IsViablePhoneNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 2841|  3.05k|bool PhoneNumberUtil::IsViablePhoneNumber(const string& number) const {
 2842|  3.05k|  if (number.length() < kMinLengthForNsn) {
  ------------------
  |  Branch (2842:7): [True: 584, False: 2.46k]
  ------------------
 2843|    584|    return false;
 2844|    584|  }
 2845|  2.46k|  return reg_exps_->valid_phone_number_pattern_->FullMatch(number);
 2846|  3.05k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil16ParsePrefixAsIddERKNS0_6RegExpEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
 2851|    473|                                       string* number) const {
 2852|    473|  DCHECK(number);
  ------------------
  |  |   29|    473|#define DCHECK(X) assert(X)
  ------------------
 2853|    473|  const scoped_ptr<RegExpInput> number_copy(
 2854|    473|      reg_exps_->regexp_factory_->CreateInput(*number));
 2855|       |  // First attempt to strip the idd_pattern at the start, if present. We make a
 2856|       |  // copy so that we can revert to the original string if necessary.
 2857|    473|  if (idd_pattern.Consume(number_copy.get())) {
  ------------------
  |  Branch (2857:7): [True: 65, False: 408]
  ------------------
 2858|       |    // Only strip this if the first digit after the match is not a 0, since
 2859|       |    // country calling codes cannot begin with 0.
 2860|     65|    string extracted_digit;
 2861|     65|    if (reg_exps_->capturing_digit_pattern_->PartialMatch(
  ------------------
  |  Branch (2861:9): [True: 62, False: 3]
  ------------------
 2862|     65|            number_copy->ToString(), &extracted_digit)) {
 2863|     62|      NormalizeDigitsOnly(&extracted_digit);
 2864|     62|      if (extracted_digit == "0") {
  ------------------
  |  Branch (2864:11): [True: 9, False: 53]
  ------------------
 2865|      9|        return false;
 2866|      9|      }
 2867|     62|    }
 2868|     56|    number->assign(number_copy->ToString());
 2869|     56|    return true;
 2870|     65|  }
 2871|    408|  return false;
 2872|    473|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil41MaybeStripInternationalPrefixAndNormalizeERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPS8_:
 2886|  1.62k|    string* number) const {
 2887|  1.62k|  DCHECK(number);
  ------------------
  |  |   29|  1.62k|#define DCHECK(X) assert(X)
  ------------------
 2888|  1.62k|  if (number->empty()) {
  ------------------
  |  Branch (2888:7): [True: 0, False: 1.62k]
  ------------------
 2889|      0|    return PhoneNumber::FROM_DEFAULT_COUNTRY;
 2890|      0|  }
 2891|  1.62k|  const scoped_ptr<RegExpInput> number_string_piece(
 2892|  1.62k|      reg_exps_->regexp_factory_->CreateInput(*number));
 2893|  1.62k|  if (reg_exps_->plus_chars_pattern_->Consume(number_string_piece.get())) {
  ------------------
  |  Branch (2893:7): [True: 1.14k, False: 473]
  ------------------
 2894|  1.14k|    number->assign(number_string_piece->ToString());
 2895|       |    // Can now normalize the rest of the number since we've consumed the "+"
 2896|       |    // sign at the start.
 2897|  1.14k|    Normalize(number);
 2898|  1.14k|    return PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN;
 2899|  1.14k|  }
 2900|       |  // Attempt to parse the first digits as an international prefix.
 2901|    473|  const RegExp& idd_pattern =
 2902|    473|      reg_exps_->regexp_cache_->GetRegExp(possible_idd_prefix);
 2903|    473|  Normalize(number);
 2904|    473|  return ParsePrefixAsIdd(idd_pattern, number)
  ------------------
  |  Branch (2904:10): [True: 56, False: 417]
  ------------------
 2905|    473|      ? PhoneNumber::FROM_NUMBER_WITH_IDD
 2906|    473|      : PhoneNumber::FROM_DEFAULT_COUNTRY;
 2907|  1.62k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil38MaybeStripNationalPrefixAndCarrierCodeERKNS0_13PhoneMetadataEPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEESC_:
 2917|  1.25k|    string* carrier_code) const {
 2918|  1.25k|  DCHECK(number);
  ------------------
  |  |   29|  1.25k|#define DCHECK(X) assert(X)
  ------------------
 2919|  1.25k|  string carrier_code_temp;
 2920|  1.25k|  const string& possible_national_prefix =
 2921|  1.25k|      metadata.national_prefix_for_parsing();
 2922|  1.25k|  if (number->empty() || possible_national_prefix.empty()) {
  ------------------
  |  Branch (2922:7): [True: 4, False: 1.25k]
  |  Branch (2922:26): [True: 122, False: 1.13k]
  ------------------
 2923|       |    // Early return for numbers of zero length or with no national prefix
 2924|       |    // possible.
 2925|    126|    return false;
 2926|    126|  }
 2927|       |  // We use two copies here since Consume modifies the phone number, and if the
 2928|       |  // first if-clause fails the number will already be changed.
 2929|  1.13k|  const scoped_ptr<RegExpInput> number_copy(
 2930|  1.13k|      reg_exps_->regexp_factory_->CreateInput(*number));
 2931|  1.13k|  const scoped_ptr<RegExpInput> number_copy_without_transform(
 2932|  1.13k|      reg_exps_->regexp_factory_->CreateInput(*number));
 2933|  1.13k|  string number_string_copy(*number);
 2934|  1.13k|  string captured_part_of_prefix;
 2935|  1.13k|  const PhoneNumberDesc& general_desc = metadata.general_desc();
 2936|       |  // Check if the original number is viable.
 2937|  1.13k|  bool is_viable_original_number =
 2938|  1.13k|      IsMatch(*matcher_api_, *number, general_desc);
 2939|       |  // Attempt to parse the first digits as a national prefix. We make a
 2940|       |  // copy so that we can revert to the original string if necessary.
 2941|  1.13k|  const string& transform_rule = metadata.national_prefix_transform_rule();
 2942|  1.13k|  const RegExp& possible_national_prefix_pattern =
 2943|  1.13k|      reg_exps_->regexp_cache_->GetRegExp(possible_national_prefix);
 2944|  1.13k|  if (!transform_rule.empty() &&
  ------------------
  |  Branch (2944:7): [True: 172, False: 959]
  ------------------
 2945|  1.13k|      (possible_national_prefix_pattern.Consume(
  ------------------
  |  Branch (2945:8): [True: 13, False: 159]
  ------------------
 2946|    172|          number_copy.get(), &carrier_code_temp, &captured_part_of_prefix) ||
 2947|    172|       possible_national_prefix_pattern.Consume(
  ------------------
  |  Branch (2947:8): [True: 84, False: 75]
  ------------------
 2948|    159|           number_copy.get(), &captured_part_of_prefix)) &&
 2949|  1.13k|      !captured_part_of_prefix.empty()) {
  ------------------
  |  Branch (2949:7): [True: 29, False: 68]
  ------------------
 2950|       |    // If this succeeded, then we must have had a transform rule and there must
 2951|       |    // have been some part of the prefix that we captured.
 2952|       |    // We make the transformation and check that the resultant number is still
 2953|       |    // viable. If so, replace the number and return.
 2954|     29|    possible_national_prefix_pattern.Replace(&number_string_copy,
 2955|     29|                                             transform_rule);
 2956|     29|    if (is_viable_original_number &&
  ------------------
  |  Branch (2956:9): [True: 1, False: 28]
  ------------------
 2957|     29|        !IsMatch(*matcher_api_, number_string_copy, general_desc)) {
  ------------------
  |  Branch (2957:9): [True: 1, False: 0]
  ------------------
 2958|      1|      return false;
 2959|      1|    }
 2960|     28|    number->assign(number_string_copy);
 2961|     28|    if (carrier_code) {
  ------------------
  |  Branch (2961:9): [True: 22, False: 6]
  ------------------
 2962|     22|      carrier_code->assign(carrier_code_temp);
 2963|     22|    }
 2964|  1.10k|  } else if (possible_national_prefix_pattern.Consume(
  ------------------
  |  Branch (2964:14): [True: 89, False: 1.01k]
  ------------------
 2965|  1.10k|                 number_copy_without_transform.get(), &carrier_code_temp) ||
 2966|  1.10k|             possible_national_prefix_pattern.Consume(
  ------------------
  |  Branch (2966:14): [True: 101, False: 912]
  ------------------
 2967|  1.01k|                 number_copy_without_transform.get())) {
 2968|    190|    VLOG(4) << "Parsed the first digits as a national prefix.";
 2969|       |    // If captured_part_of_prefix is empty, this implies nothing was captured by
 2970|       |    // the capturing groups in possible_national_prefix; therefore, no
 2971|       |    // transformation is necessary, and we just remove the national prefix.
 2972|    190|    const string number_copy_as_string =
 2973|    190|        number_copy_without_transform->ToString();
 2974|    190|    if (is_viable_original_number &&
  ------------------
  |  Branch (2974:9): [True: 15, False: 175]
  ------------------
 2975|    190|        !IsMatch(*matcher_api_, number_copy_as_string, general_desc)) {
  ------------------
  |  Branch (2975:9): [True: 12, False: 3]
  ------------------
 2976|     12|      return false;
 2977|     12|    }
 2978|    178|    number->assign(number_copy_as_string);
 2979|    178|    if (carrier_code) {
  ------------------
  |  Branch (2979:9): [True: 158, False: 20]
  ------------------
 2980|    158|      carrier_code->assign(carrier_code_temp);
 2981|    158|    }
 2982|    912|  } else {
 2983|    912|    return false;
 2984|      0|    VLOG(4) << "The first digits did not match the national prefix.";
 2985|      0|  }
 2986|    206|  return true;
 2987|  1.13k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil19MaybeStripExtensionEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEES9_:
 2993|  1.44k|    const {
 2994|  1.44k|  DCHECK(number);
  ------------------
  |  |   29|  1.44k|#define DCHECK(X) assert(X)
  ------------------
 2995|  1.44k|  DCHECK(extension);
  ------------------
  |  |   29|  1.44k|#define DCHECK(X) assert(X)
  ------------------
 2996|       |  // There are six extension capturing groups in the regular expression.
 2997|  1.44k|  string possible_extension_one;
 2998|  1.44k|  string possible_extension_two;
 2999|  1.44k|  string possible_extension_three;
 3000|  1.44k|  string possible_extension_four;
 3001|  1.44k|  string possible_extension_five;
 3002|  1.44k|  string possible_extension_six;
 3003|  1.44k|  string number_copy(*number);
 3004|  1.44k|  const scoped_ptr<RegExpInput> number_copy_as_regexp_input(
 3005|  1.44k|      reg_exps_->regexp_factory_->CreateInput(number_copy));
 3006|  1.44k|  if (reg_exps_->extn_pattern_->Consume(
  ------------------
  |  Branch (3006:7): [True: 207, False: 1.23k]
  ------------------
 3007|  1.44k|          number_copy_as_regexp_input.get(), false, &possible_extension_one,
 3008|  1.44k|          &possible_extension_two, &possible_extension_three,
 3009|  1.44k|          &possible_extension_four, &possible_extension_five,
 3010|  1.44k|          &possible_extension_six)) {
 3011|       |    // Replace the extensions in the original string here.
 3012|    207|    reg_exps_->extn_pattern_->Replace(&number_copy, "");
 3013|       |    // If we find a potential extension, and the number preceding this is a
 3014|       |    // viable number, we assume it is an extension.
 3015|    207|    if ((!possible_extension_one.empty() || !possible_extension_two.empty() ||
  ------------------
  |  Branch (3015:10): [True: 1, False: 206]
  |  Branch (3015:45): [True: 4, False: 202]
  ------------------
 3016|    207|         !possible_extension_three.empty() ||
  ------------------
  |  Branch (3016:10): [True: 169, False: 33]
  ------------------
 3017|    207|         !possible_extension_four.empty() || !possible_extension_five.empty() ||
  ------------------
  |  Branch (3017:10): [True: 4, False: 29]
  |  Branch (3017:46): [True: 17, False: 12]
  ------------------
 3018|    207|         !possible_extension_six.empty()) &&
  ------------------
  |  Branch (3018:10): [True: 12, False: 0]
  ------------------
 3019|    207|        IsViablePhoneNumber(number_copy)) {
  ------------------
  |  Branch (3019:9): [True: 85, False: 122]
  ------------------
 3020|     85|      number->assign(number_copy);
 3021|     85|      if (!possible_extension_one.empty()) {
  ------------------
  |  Branch (3021:11): [True: 1, False: 84]
  ------------------
 3022|      1|        extension->assign(possible_extension_one);
 3023|     84|      } else if (!possible_extension_two.empty()) {
  ------------------
  |  Branch (3023:18): [True: 4, False: 80]
  ------------------
 3024|      4|        extension->assign(possible_extension_two);
 3025|     80|      } else if (!possible_extension_three.empty()) {
  ------------------
  |  Branch (3025:18): [True: 47, False: 33]
  ------------------
 3026|     47|        extension->assign(possible_extension_three);
 3027|     47|      } else if (!possible_extension_four.empty()) {
  ------------------
  |  Branch (3027:18): [True: 4, False: 29]
  ------------------
 3028|      4|        extension->assign(possible_extension_four);
 3029|     29|      } else if (!possible_extension_five.empty()) {
  ------------------
  |  Branch (3029:18): [True: 17, False: 12]
  ------------------
 3030|     17|        extension->assign(possible_extension_five);
 3031|     17|      } else if (!possible_extension_six.empty()) {
  ------------------
  |  Branch (3031:18): [True: 12, False: 0]
  ------------------
 3032|     12|        extension->assign(possible_extension_six);
 3033|     12|      }
 3034|     85|      return true;
 3035|     85|    }
 3036|    207|  }
 3037|  1.35k|  return false;
 3038|  1.44k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil18ExtractCountryCodeEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
 3045|  1.18k|int PhoneNumberUtil::ExtractCountryCode(string* national_number) const {
 3046|  1.18k|  int potential_country_code;
 3047|  1.18k|  if (national_number->empty() || (national_number->at(0) == '0')) {
  ------------------
  |  Branch (3047:7): [True: 0, False: 1.18k]
  |  Branch (3047:35): [True: 103, False: 1.08k]
  ------------------
 3048|       |    // Country codes do not begin with a '0'.
 3049|    103|    return 0;
 3050|    103|  }
 3051|  1.88k|  for (size_t i = 1; i <= kMaxLengthCountryCode; ++i) {
  ------------------
  |  Branch (3051:22): [True: 1.80k, False: 80]
  ------------------
 3052|  1.80k|    safe_strto32(national_number->substr(0, i), &potential_country_code);
 3053|  1.80k|    string region_code;
 3054|  1.80k|    GetRegionCodeForCountryCode(potential_country_code, &region_code);
 3055|  1.80k|    if (region_code != RegionCode::GetUnknown()) {
  ------------------
  |  Branch (3055:9): [True: 1.00k, False: 801]
  ------------------
 3056|  1.00k|      national_number->erase(0, i);
 3057|  1.00k|      return potential_country_code;
 3058|  1.00k|    }
 3059|  1.80k|  }
 3060|     80|  return 0;
 3061|  1.08k|}
_ZNK4i18n12phonenumbers15PhoneNumberUtil23MaybeExtractCountryCodeEPKNS0_13PhoneMetadataEbPNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEPNS0_11PhoneNumberE:
 3087|  1.62k|    PhoneNumber* phone_number) const {
 3088|  1.62k|  DCHECK(national_number);
  ------------------
  |  |   29|  1.62k|#define DCHECK(X) assert(X)
  ------------------
 3089|  1.62k|  DCHECK(phone_number);
  ------------------
  |  |   29|  1.62k|#define DCHECK(X) assert(X)
  ------------------
 3090|       |  // Set the default prefix to be something that will never match if there is no
 3091|       |  // default region.
 3092|  1.62k|  string possible_country_idd_prefix = default_region_metadata
  ------------------
  |  Branch (3092:40): [True: 339, False: 1.28k]
  ------------------
 3093|  1.62k|      ?  default_region_metadata->international_prefix()
 3094|  1.62k|      : "NonMatch";
 3095|  1.62k|  PhoneNumber::CountryCodeSource country_code_source =
 3096|  1.62k|      MaybeStripInternationalPrefixAndNormalize(possible_country_idd_prefix,
 3097|  1.62k|                                                national_number);
 3098|  1.62k|  if (keep_raw_input) {
  ------------------
  |  Branch (3098:7): [True: 19, False: 1.60k]
  ------------------
 3099|     19|    phone_number->set_country_code_source(country_code_source);
 3100|     19|  }
 3101|  1.62k|  if (country_code_source != PhoneNumber::FROM_DEFAULT_COUNTRY) {
  ------------------
  |  Branch (3101:7): [True: 1.20k, False: 417]
  ------------------
 3102|  1.20k|    if (national_number->length() <= kMinLengthForNsn) {
  ------------------
  |  Branch (3102:9): [True: 16, False: 1.18k]
  ------------------
 3103|     16|      VLOG(2) << "Phone number had an IDD, but after this was not "
 3104|     16|              << "long enough to be a viable phone number.";
 3105|     16|      return TOO_SHORT_AFTER_IDD;
 3106|     16|    }
 3107|  1.18k|    int potential_country_code = ExtractCountryCode(national_number);
 3108|  1.18k|    if (potential_country_code != 0) {
  ------------------
  |  Branch (3108:9): [True: 1.00k, False: 183]
  ------------------
 3109|  1.00k|      phone_number->set_country_code(potential_country_code);
 3110|  1.00k|      return NO_PARSING_ERROR;
 3111|  1.00k|    }
 3112|       |    // If this fails, they must be using a strange country calling code that we
 3113|       |    // don't recognize, or that doesn't exist.
 3114|    183|    return INVALID_COUNTRY_CODE_ERROR;
 3115|  1.18k|  } else if (default_region_metadata) {
  ------------------
  |  Branch (3115:14): [True: 260, False: 157]
  ------------------
 3116|       |    // Check to see if the number starts with the country calling code for the
 3117|       |    // default region. If so, we remove the country calling code, and do some
 3118|       |    // checks on the validity of the number before and after.
 3119|    260|    int default_country_code = default_region_metadata->country_code();
 3120|    260|    string default_country_code_string(SimpleItoa(default_country_code));
 3121|    260|    VLOG(4) << "Possible country calling code: " << default_country_code_string;
 3122|    260|    string potential_national_number;
 3123|    260|    if (TryStripPrefixString(*national_number,
  ------------------
  |  Branch (3123:9): [True: 104, False: 156]
  ------------------
 3124|    260|                             default_country_code_string,
 3125|    260|                             &potential_national_number)) {
 3126|    104|      const PhoneNumberDesc& general_num_desc =
 3127|    104|          default_region_metadata->general_desc();
 3128|    104|      MaybeStripNationalPrefixAndCarrierCode(*default_region_metadata,
 3129|    104|                                             &potential_national_number,
 3130|    104|                                             NULL);
 3131|    104|      VLOG(4) << "Number without country calling code prefix";
 3132|       |      // If the number was not valid before but is valid now, or if it was too
 3133|       |      // long before, we consider the number with the country code stripped to
 3134|       |      // be a better result and keep that instead.
 3135|    104|      if ((!IsMatch(*matcher_api_, *national_number, general_num_desc) &&
  ------------------
  |  Branch (3135:12): [True: 103, False: 1]
  ------------------
 3136|    104|          IsMatch(
  ------------------
  |  Branch (3136:11): [True: 8, False: 95]
  ------------------
 3137|    103|              *matcher_api_, potential_national_number, general_num_desc)) ||
 3138|    104|          TestNumberLength(*national_number, *default_region_metadata) ==
  ------------------
  |  Branch (3138:11): [True: 30, False: 66]
  ------------------
 3139|     96|              TOO_LONG) {
 3140|     38|        national_number->assign(potential_national_number);
 3141|     38|        if (keep_raw_input) {
  ------------------
  |  Branch (3141:13): [True: 1, False: 37]
  ------------------
 3142|      1|          phone_number->set_country_code_source(
 3143|      1|              PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN);
 3144|      1|        }
 3145|     38|        phone_number->set_country_code(default_country_code);
 3146|     38|        return NO_PARSING_ERROR;
 3147|     38|      }
 3148|    104|    }
 3149|    260|  }
 3150|       |  // No country calling code present. Set the country_code to 0.
 3151|    379|  phone_number->set_country_code(0);
 3152|    379|  return NO_PARSING_ERROR;
 3153|  1.62k|}
_ZN4i18n12phonenumbers29PhoneNumberRegExpsAndMappingsC2Ev:
  782|      1|      : valid_phone_number_(
  783|      1|            StrCat(kDigits, "{", PhoneNumberUtil::kMinLengthForNsn, "}|[",
  784|      1|                   PhoneNumberUtil::kPlusChars, "]*(?:[",
  785|      1|                   PhoneNumberUtil::kValidPunctuation, kStarSign, "]*",
  786|      1|                   kDigits, "){3,}[", PhoneNumberUtil::kValidPunctuation,
  787|      1|                   kStarSign, kValidAlpha, kDigits, "]*")),
  788|      1|        extn_patterns_for_parsing_(CreateExtnPattern(/* for_parsing= */ true)),
  789|      1|        rfc3966_phone_digit_(
  790|      1|            StrCat("(", kDigits, "|", kRfc3966VisualSeparator, ")")),
  791|      1|        alphanum_(StrCat(kValidAlphaInclUppercase, kDigits)),
  792|      1|        rfc3966_domainlabel_(
  793|      1|            StrCat("[", alphanum_, "]+((\\-)*[", alphanum_, "])*")),
  794|      1|        rfc3966_toplabel_(StrCat("[", kValidAlphaInclUppercase,
  795|      1|                                 "]+((\\-)*[", alphanum_, "])*")),
  796|      1|        regexp_factory_(new RegExpFactory()),
  797|      1|        regexp_cache_(new RegExpCache(*regexp_factory_.get(), 128)),
  798|      1|        diallable_char_mappings_(),
  799|      1|        alpha_mappings_(),
  800|      1|        alpha_phone_mappings_(),
  801|      1|        all_plus_number_grouping_symbols_(),
  802|      1|        mobile_token_mappings_(),
  803|      1|        countries_without_national_prefix_with_area_codes_(),
  804|      1|        geo_mobile_countries_without_mobile_area_codes_(),
  805|      1|        geo_mobile_countries_(),
  806|      1|        single_international_prefix_(regexp_factory_->CreateRegExp(
  807|       |            /* "[\\d]+(?:[~⁓∼～][\\d]+)?" */
  808|      1|            "[\\d]+(?:[~\xE2\x81\x93\xE2\x88\xBC\xEF\xBD\x9E][\\d]+)?")),
  809|      1|        digits_pattern_(
  810|      1|            regexp_factory_->CreateRegExp(StrCat("[", kDigits, "]*"))),
  811|      1|        capturing_digit_pattern_(
  812|      1|            regexp_factory_->CreateRegExp(StrCat("([", kDigits, "])"))),
  813|      1|        capturing_ascii_digits_pattern_(
  814|      1|            regexp_factory_->CreateRegExp("(\\d+)")),
  815|      1|        valid_start_char_pattern_(regexp_factory_->CreateRegExp(
  816|      1|            StrCat("[", PhoneNumberUtil::kPlusChars, kDigits, "]"))),
  817|      1|        capture_up_to_second_number_start_pattern_(
  818|      1|            regexp_factory_->CreateRegExp(
  819|      1|                PhoneNumberUtil::kCaptureUpToSecondNumberStart)),
  820|      1|        unwanted_end_char_pattern_(
  821|      1|            regexp_factory_->CreateRegExp("[^\\p{N}\\p{L}#]")),
  822|      1|        separator_pattern_(regexp_factory_->CreateRegExp(
  823|      1|            StrCat("[", PhoneNumberUtil::kValidPunctuation, "]+"))),
  824|      1|        extn_patterns_for_matching_(
  825|      1|            CreateExtnPattern(/* for_parsing= */ false)),
  826|      1|        extn_pattern_(regexp_factory_->CreateRegExp(
  827|      1|            StrCat("(?i)(?:", extn_patterns_for_parsing_, ")$"))),
  828|      1|        valid_phone_number_pattern_(regexp_factory_->CreateRegExp(
  829|      1|            StrCat("(?i)", valid_phone_number_,
  830|      1|                   "(?:", extn_patterns_for_parsing_, ")?"))),
  831|      1|        valid_alpha_phone_pattern_(regexp_factory_->CreateRegExp(
  832|      1|            StrCat("(?i)(?:.*?[", kValidAlpha, "]){3}"))),
  833|       |        // The first_group_capturing_pattern was originally set to $1 but there
  834|       |        // are some countries for which the first group is not used in the
  835|       |        // national pattern (e.g. Argentina) so the $1 group does not match
  836|       |        // correctly. Therefore, we use \d, so that the first group actually
  837|       |        // used in the pattern will be matched.
  838|      1|        first_group_capturing_pattern_(
  839|      1|            regexp_factory_->CreateRegExp("(\\$\\d)")),
  840|      1|        carrier_code_pattern_(regexp_factory_->CreateRegExp("\\$CC")),
  841|      1|        plus_chars_pattern_(regexp_factory_->CreateRegExp(
  842|      1|            StrCat("[", PhoneNumberUtil::kPlusChars, "]+"))),
  843|      1|        rfc3966_global_number_digits_pattern_(regexp_factory_->CreateRegExp(
  844|      1|            StrCat("^\\", kPlusSign, rfc3966_phone_digit_, "*", kDigits,
  845|      1|                   rfc3966_phone_digit_, "*$"))),
  846|      1|        rfc3966_domainname_pattern_(regexp_factory_->CreateRegExp(StrCat(
  847|      1|            "^(", rfc3966_domainlabel_, "\\.)*", rfc3966_toplabel_, "\\.?$"))) {
  848|      1|    InitializeMapsAndSets();
  849|      1|  }
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_117CreateExtnPatternEb:
  220|      2|std::string CreateExtnPattern(bool for_parsing) {
  221|       |  // We cap the maximum length of an extension based on the ambiguity of the
  222|       |  // way the extension is prefixed. As per ITU, the officially allowed
  223|       |  // length for extensions is actually 40, but we don't support this since we
  224|       |  // haven't seen real examples and this introduces many false interpretations
  225|       |  // as the extension labels are not standardized.
  226|      2|  int ext_limit_after_explicit_label = 20;
  227|      2|  int ext_limit_after_likely_label = 15;
  228|      2|  int ext_limit_after_ambiguous_char = 9;
  229|      2|  int ext_limit_when_not_sure = 6;
  230|       |
  231|       |  // Canonical-equivalence doesn't seem to be an option with RE2, so we allow
  232|       |  // two options for representing any non-ASCII character like ó - the character
  233|       |  // itself, and one in the unicode decomposed form with the combining acute
  234|       |  // accent.
  235|       |
  236|       |  // Here the extension is called out in a more explicit way, i.e mentioning it
  237|       |  // obvious patterns like "ext.".
  238|      2|  string explicit_ext_labels =
  239|      2|      "(?:e?xt(?:ensi(?:o\xCC\x81?|\xC3\xB3))?n?|(?:\xEF\xBD\x85)?"
  240|      2|      "\xEF\xBD\x98\xEF\xBD\x94(?:\xEF\xBD\x8E)?|\xD0\xB4\xD0\xBE\xD0\xB1|"
  241|      2|      "anexo)";
  242|       |  // One-character symbols that can be used to indicate an extension, and less
  243|       |  // commonly used or more ambiguous extension labels.
  244|      2|  string ambiguous_ext_labels =
  245|      2|      "(?:[x\xEF\xBD\x98#\xEF\xBC\x83~\xEF\xBD\x9E]|int|"
  246|      2|      "\xEF\xBD\x89\xEF\xBD\x8E\xEF\xBD\x94)";
  247|       |  // When extension is not separated clearly.
  248|      2|  string ambiguous_separator = "[- ]+";
  249|       |
  250|      2|  string rfc_extn = StrCat(kRfc3966ExtnPrefix,
  251|      2|                           ExtnDigits(ext_limit_after_explicit_label));
  252|      2|  string explicit_extn = StrCat(
  253|      2|      kPossibleSeparatorsBetweenNumberAndExtLabel,
  254|      2|      explicit_ext_labels, kPossibleCharsAfterExtLabel,
  255|      2|      ExtnDigits(ext_limit_after_explicit_label),
  256|      2|      kOptionalExtSuffix);
  257|      2|  string ambiguous_extn = StrCat(
  258|      2|      kPossibleSeparatorsBetweenNumberAndExtLabel,
  259|      2|      ambiguous_ext_labels, kPossibleCharsAfterExtLabel,
  260|      2|      ExtnDigits(ext_limit_after_ambiguous_char),
  261|      2|      kOptionalExtSuffix);
  262|      2|  string american_style_extn_with_suffix = StrCat(
  263|      2|      ambiguous_separator, ExtnDigits(ext_limit_when_not_sure), "#");
  264|       |
  265|       |  // The first regular expression covers RFC 3966 format, where the extension is
  266|       |  // added using ";ext=". The second more generic where extension is mentioned
  267|       |  // with explicit labels like "ext:". In both the above cases we allow more
  268|       |  // numbers in extension than any other extension labels. The third one
  269|       |  // captures when single character extension labels or less commonly used
  270|       |  // labels are present. In such cases we capture fewer extension digits in
  271|       |  // order to reduce the chance of falsely interpreting two numbers beside each
  272|       |  // other as a number + extension. The fourth one covers the special case of
  273|       |  // American numbers where the extension is written with a hash at the end,
  274|       |  // such as "- 503#".
  275|      2|  string extension_pattern = StrCat(
  276|      2|      rfc_extn, "|",
  277|      2|      explicit_extn, "|",
  278|      2|      ambiguous_extn, "|",
  279|      2|      american_style_extn_with_suffix);
  280|       |  // Additional pattern that is supported when parsing extensions, not when
  281|       |  // matching.
  282|      2|  if (for_parsing) {
  ------------------
  |  Branch (282:7): [True: 1, False: 1]
  ------------------
  283|       |    // ",," is commonly used for auto dialling the extension when connected.
  284|       |    // Semi-colon works in Iphone and also in Android to pop up a button with
  285|       |    // the extension number following.
  286|      1|    string auto_dialling_and_ext_labels_found = "(?:,{2}|;)";
  287|       |    // This is same as kPossibleSeparatorsBetweenNumberAndExtLabel, but not
  288|       |    // matching comma as extension label may have it.
  289|      1|    string possible_separators_number_extLabel_no_comma = "[ \xC2\xA0\\t]*";
  290|       |
  291|      1|    string auto_dialling_extn = StrCat(
  292|      1|      possible_separators_number_extLabel_no_comma,
  293|      1|      auto_dialling_and_ext_labels_found, kPossibleCharsAfterExtLabel,
  294|      1|      ExtnDigits(ext_limit_after_likely_label),
  295|      1|      kOptionalExtSuffix);
  296|      1|    string only_commas_extn = StrCat(
  297|      1|      possible_separators_number_extLabel_no_comma,
  298|      1|      "(?:,)+", kPossibleCharsAfterExtLabel,
  299|      1|      ExtnDigits(ext_limit_after_ambiguous_char),
  300|      1|      kOptionalExtSuffix);
  301|       |    // Here the first pattern is exclusive for extension autodialling formats
  302|       |    // which are used when dialling and in this case we accept longer
  303|       |    // extensions. However, the second pattern is more liberal on number of
  304|       |    // commas that acts as extension labels, so we have strict cap on number of
  305|       |    // digits in such extensions.
  306|      1|    return StrCat(extension_pattern, "|",
  307|      1|                  auto_dialling_extn, "|",
  308|      1|                  only_commas_extn);
  309|      1|  }
  310|      1|  return extension_pattern;
  311|      2|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_110ExtnDigitsEi:
  210|     10|std::string ExtnDigits(int max_length) {
  211|     10|  return StrCat("([", kDigits, "]{1,", max_length, "})");
  212|     10|}
_ZN4i18n12phonenumbers29PhoneNumberRegExpsAndMappings21InitializeMapsAndSetsEv:
  521|      1|  void InitializeMapsAndSets() {
  522|      1|    diallable_char_mappings_.insert(std::make_pair('+', '+'));
  523|      1|    diallable_char_mappings_.insert(std::make_pair('*', '*'));
  524|      1|    diallable_char_mappings_.insert(std::make_pair('#', '#'));
  525|       |    // Here we insert all punctuation symbols that we wish to respect when
  526|       |    // formatting alpha numbers, as they show the intended number groupings.
  527|      1|    all_plus_number_grouping_symbols_.insert(
  528|      1|        std::make_pair(ToUnicodeCodepoint("-"), '-'));
  529|      1|    all_plus_number_grouping_symbols_.insert(
  530|      1|        std::make_pair(ToUnicodeCodepoint("\xEF\xBC\x8D" /* "－" */), '-'));
  531|      1|    all_plus_number_grouping_symbols_.insert(
  532|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x90" /* "‐" */), '-'));
  533|      1|    all_plus_number_grouping_symbols_.insert(
  534|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x91" /* "‑" */), '-'));
  535|      1|    all_plus_number_grouping_symbols_.insert(
  536|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x92" /* "‒" */), '-'));
  537|      1|    all_plus_number_grouping_symbols_.insert(
  538|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x93" /* "–" */), '-'));
  539|      1|    all_plus_number_grouping_symbols_.insert(
  540|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x94" /* "—" */), '-'));
  541|      1|    all_plus_number_grouping_symbols_.insert(
  542|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x80\x95" /* "―" */), '-'));
  543|      1|    all_plus_number_grouping_symbols_.insert(
  544|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x88\x92" /* "−" */), '-'));
  545|      1|    all_plus_number_grouping_symbols_.insert(
  546|      1|        std::make_pair(ToUnicodeCodepoint("/"), '/'));
  547|      1|    all_plus_number_grouping_symbols_.insert(
  548|      1|        std::make_pair(ToUnicodeCodepoint("\xEF\xBC\x8F" /* "／" */), '/'));
  549|      1|    all_plus_number_grouping_symbols_.insert(
  550|      1|        std::make_pair(ToUnicodeCodepoint(" "), ' '));
  551|      1|    all_plus_number_grouping_symbols_.insert(
  552|      1|        std::make_pair(ToUnicodeCodepoint("\xE3\x80\x80" /* "　" */), ' '));
  553|      1|    all_plus_number_grouping_symbols_.insert(
  554|      1|        std::make_pair(ToUnicodeCodepoint("\xE2\x81\xA0"), ' '));
  555|      1|    all_plus_number_grouping_symbols_.insert(
  556|      1|        std::make_pair(ToUnicodeCodepoint("."), '.'));
  557|      1|    all_plus_number_grouping_symbols_.insert(
  558|      1|        std::make_pair(ToUnicodeCodepoint("\xEF\xBC\x8E" /* "．" */), '.'));
  559|       |    // Only the upper-case letters are added here - the lower-case versions are
  560|       |    // added programmatically.
  561|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("A"), '2'));
  562|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("B"), '2'));
  563|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("C"), '2'));
  564|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("D"), '3'));
  565|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("E"), '3'));
  566|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("F"), '3'));
  567|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("G"), '4'));
  568|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("H"), '4'));
  569|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("I"), '4'));
  570|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("J"), '5'));
  571|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("K"), '5'));
  572|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("L"), '5'));
  573|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("M"), '6'));
  574|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("N"), '6'));
  575|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("O"), '6'));
  576|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("P"), '7'));
  577|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("Q"), '7'));
  578|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("R"), '7'));
  579|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("S"), '7'));
  580|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("T"), '8'));
  581|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("U"), '8'));
  582|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("V"), '8'));
  583|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("W"), '9'));
  584|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("X"), '9'));
  585|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("Y"), '9'));
  586|      1|    alpha_mappings_.insert(std::make_pair(ToUnicodeCodepoint("Z"), '9'));
  587|      1|    std::map<char32, char> lower_case_mappings;
  588|      1|    std::map<char32, char> alpha_letters;
  589|      1|    for (std::map<char32, char>::const_iterator it = alpha_mappings_.begin();
  590|     27|         it != alpha_mappings_.end();
  ------------------
  |  Branch (590:10): [True: 26, False: 1]
  ------------------
  591|     26|         ++it) {
  592|       |      // Convert all the upper-case ASCII letters to lower-case.
  593|     26|      if (it->first < 128) {
  ------------------
  |  Branch (593:11): [True: 26, False: 0]
  ------------------
  594|     26|        char letter_as_upper = static_cast<char>(it->first);
  595|     26|        char32 letter_as_lower = static_cast<char32>(tolower(letter_as_upper));
  596|     26|        lower_case_mappings.insert(std::make_pair(letter_as_lower, it->second));
  597|       |        // Add the letters in both variants to the alpha_letters map. This just
  598|       |        // pairs each letter with its upper-case representation so that it can
  599|       |        // be retained when normalising alpha numbers.
  600|     26|        alpha_letters.insert(std::make_pair(letter_as_lower, letter_as_upper));
  601|     26|        alpha_letters.insert(std::make_pair(it->first, letter_as_upper));
  602|     26|      }
  603|     26|    }
  604|       |    // In the Java version we don't insert the lower-case mappings in the map,
  605|       |    // because we convert to upper case on the fly. Doing this here would
  606|       |    // involve pulling in all of ICU, which we don't want to do if we don't have
  607|       |    // to.
  608|      1|    alpha_mappings_.insert(lower_case_mappings.begin(),
  609|      1|                           lower_case_mappings.end());
  610|      1|    alpha_phone_mappings_.insert(alpha_mappings_.begin(),
  611|      1|                                 alpha_mappings_.end());
  612|      1|    all_plus_number_grouping_symbols_.insert(alpha_letters.begin(),
  613|      1|                                             alpha_letters.end());
  614|       |    // Add the ASCII digits so that they don't get deleted by NormalizeHelper().
  615|     11|    for (char c = '0'; c <= '9'; ++c) {
  ------------------
  |  Branch (615:24): [True: 10, False: 1]
  ------------------
  616|     10|      diallable_char_mappings_.insert(std::make_pair(c, c));
  617|     10|      alpha_phone_mappings_.insert(std::make_pair(c, c));
  618|     10|      all_plus_number_grouping_symbols_.insert(std::make_pair(c, c));
  619|     10|    }
  620|       |
  621|      1|    mobile_token_mappings_.insert(std::make_pair(54, '9'));
  622|      1|    countries_without_national_prefix_with_area_codes_.insert(52);  // Mexico
  623|      1|    geo_mobile_countries_without_mobile_area_codes_.insert(86);  // China
  624|      1|    geo_mobile_countries_.insert(52);  // Mexico
  625|      1|    geo_mobile_countries_.insert(54);  // Argentina
  626|      1|    geo_mobile_countries_.insert(55);  // Brazil
  627|       |    // Indonesia: some prefixes only (fixed CMDA wireless)
  628|      1|    geo_mobile_countries_.insert(62);
  629|      1|    geo_mobile_countries_.insert(
  630|      1|        geo_mobile_countries_without_mobile_area_codes_.begin(),
  631|      1|        geo_mobile_countries_without_mobile_area_codes_.end());
  632|      1|  }
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_118ToUnicodeCodepointEPKc:
  202|     42|char32 ToUnicodeCodepoint(const char* unicode_char) {
  203|     42|  char32 codepoint;
  204|     42|  EncodingUtils::DecodeUTF8Char(unicode_char, &codepoint);
  205|     42|  return codepoint;
  206|     42|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_122LoadCompiledInMetadataEPNS0_23PhoneMetadataCollectionE:
  124|      1|bool LoadCompiledInMetadata(PhoneMetadataCollection* metadata) {
  125|      1|  if (!metadata->ParseFromArray(metadata_get(), metadata_size())) {
  ------------------
  |  Branch (125:7): [True: 0, False: 1]
  ------------------
  126|      0|    LOG(ERROR) << "Could not parse binary data.";
  127|      0|    return false;
  128|      0|  }
  129|      1|  return true;
  130|      1|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_116TestNumberLengthERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_13PhoneMetadataE:
  482|  1.24k|    const string& number, const PhoneMetadata& metadata) {
  483|  1.24k|  return TestNumberLength(number, metadata, PhoneNumberUtil::UNKNOWN);
  484|  1.24k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_115NormalizeHelperERKNSt3__13mapIicNS2_4lessIiEENS2_9allocatorINS2_4pairIKicEEEEEEbPNS2_12basic_stringIcNS2_11char_traitsIcEENS6_IcEEEE:
  326|    422|                     string* number) {
  327|    422|  DCHECK(number);
  ------------------
  |  |   29|    422|#define DCHECK(X) assert(X)
  ------------------
  328|    422|  UnicodeText number_as_unicode;
  329|    422|  number_as_unicode.PointToUTF8(number->data(), static_cast<int>(number->size()));
  330|    422|  if (!number_as_unicode.UTF8WasValid()) {
  ------------------
  |  Branch (330:7): [True: 0, False: 422]
  ------------------
  331|       |    // The input wasn't valid UTF-8. Produce an empty string to indicate an error.
  332|      0|    number->clear();
  333|      0|    return;
  334|      0|  }
  335|    422|  string normalized_number;
  336|    422|  char unicode_char[5];
  337|    422|  for (UnicodeText::const_iterator it = number_as_unicode.begin();
  338|  5.54k|       it != number_as_unicode.end();
  ------------------
  |  Branch (338:8): [True: 5.12k, False: 422]
  ------------------
  339|  5.12k|       ++it) {
  340|  5.12k|    std::map<char32, char>::const_iterator found_glyph_pair =
  341|  5.12k|        normalization_replacements.find(*it);
  342|  5.12k|    if (found_glyph_pair != normalization_replacements.end()) {
  ------------------
  |  Branch (342:9): [True: 4.78k, False: 339]
  ------------------
  343|  4.78k|      normalized_number.push_back(found_glyph_pair->second);
  344|  4.78k|    } else if (!remove_non_matches) {
  ------------------
  |  Branch (344:16): [True: 0, False: 339]
  ------------------
  345|       |      // Find out how long this unicode char is so we can append it all.
  346|      0|      int char_len = it.get_utf8(unicode_char);
  347|      0|      normalized_number.append(unicode_char, char_len);
  348|      0|    }
  349|       |    // If neither of the above are true, we remove this character.
  350|  5.12k|  }
  351|    422|  number->assign(normalized_number);
  352|    422|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_119GetNumberDescByTypeERKNS0_13PhoneMetadataENS0_15PhoneNumberUtil15PhoneNumberTypeE:
  136|  1.24k|    PhoneNumberUtil::PhoneNumberType type) {
  137|  1.24k|  switch (type) {
  138|      0|    case PhoneNumberUtil::PREMIUM_RATE:
  ------------------
  |  Branch (138:5): [True: 0, False: 1.24k]
  ------------------
  139|      0|      return &metadata.premium_rate();
  140|      0|    case PhoneNumberUtil::TOLL_FREE:
  ------------------
  |  Branch (140:5): [True: 0, False: 1.24k]
  ------------------
  141|      0|      return &metadata.toll_free();
  142|      0|    case PhoneNumberUtil::MOBILE:
  ------------------
  |  Branch (142:5): [True: 0, False: 1.24k]
  ------------------
  143|      0|      return &metadata.mobile();
  144|      0|    case PhoneNumberUtil::FIXED_LINE:
  ------------------
  |  Branch (144:5): [True: 0, False: 1.24k]
  ------------------
  145|      0|    case PhoneNumberUtil::FIXED_LINE_OR_MOBILE:
  ------------------
  |  Branch (145:5): [True: 0, False: 1.24k]
  ------------------
  146|      0|      return &metadata.fixed_line();
  147|      0|    case PhoneNumberUtil::SHARED_COST:
  ------------------
  |  Branch (147:5): [True: 0, False: 1.24k]
  ------------------
  148|      0|      return &metadata.shared_cost();
  149|      0|    case PhoneNumberUtil::VOIP:
  ------------------
  |  Branch (149:5): [True: 0, False: 1.24k]
  ------------------
  150|      0|      return &metadata.voip();
  151|      0|    case PhoneNumberUtil::PERSONAL_NUMBER:
  ------------------
  |  Branch (151:5): [True: 0, False: 1.24k]
  ------------------
  152|      0|      return &metadata.personal_number();
  153|      0|    case PhoneNumberUtil::PAGER:
  ------------------
  |  Branch (153:5): [True: 0, False: 1.24k]
  ------------------
  154|      0|      return &metadata.pager();
  155|      0|    case PhoneNumberUtil::UAN:
  ------------------
  |  Branch (155:5): [True: 0, False: 1.24k]
  ------------------
  156|      0|      return &metadata.uan();
  157|      0|    case PhoneNumberUtil::VOICEMAIL:
  ------------------
  |  Branch (157:5): [True: 0, False: 1.24k]
  ------------------
  158|      0|      return &metadata.voicemail();
  159|  1.24k|    default:
  ------------------
  |  Branch (159:5): [True: 1.24k, False: 0]
  ------------------
  160|  1.24k|      return &metadata.general_desc();
  161|  1.24k|  }
  162|  1.24k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_116TestNumberLengthERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_13PhoneMetadataENS0_15PhoneNumberUtil15PhoneNumberTypeE:
  404|  1.24k|    PhoneNumberUtil::PhoneNumberType type) {
  405|  1.24k|  const PhoneNumberDesc* desc_for_type = GetNumberDescByType(metadata, type);
  406|       |  // There should always be "possibleLengths" set for every element. This is
  407|       |  // declared in the XML schema which is verified by
  408|       |  // PhoneNumberMetadataSchemaTest. For size efficiency, where a
  409|       |  // sub-description (e.g. fixed-line) has the same possibleLengths as the
  410|       |  // parent, this is missing, so we fall back to the general desc (where no
  411|       |  // numbers of the type exist at all, there is one possible length (-1) which
  412|       |  // is guaranteed not to match the length of any real phone number).
  413|  1.24k|  RepeatedField<int> possible_lengths =
  414|  1.24k|      desc_for_type->possible_length_size() == 0
  ------------------
  |  Branch (414:7): [True: 0, False: 1.24k]
  ------------------
  415|  1.24k|          ? metadata.general_desc().possible_length()
  416|  1.24k|          : desc_for_type->possible_length();
  417|  1.24k|  RepeatedField<int> local_lengths =
  418|  1.24k|      desc_for_type->possible_length_local_only();
  419|  1.24k|  if (type == PhoneNumberUtil::FIXED_LINE_OR_MOBILE) {
  ------------------
  |  Branch (419:7): [True: 0, False: 1.24k]
  ------------------
  420|      0|    const PhoneNumberDesc* fixed_line_desc =
  421|      0|        GetNumberDescByType(metadata, PhoneNumberUtil::FIXED_LINE);
  422|      0|    if (!DescHasPossibleNumberData(*fixed_line_desc)) {
  ------------------
  |  Branch (422:9): [True: 0, False: 0]
  ------------------
  423|       |      // The rare case has been encountered where no fixedLine data is available
  424|       |      // (true for some non-geographical entities), so we just check mobile.
  425|      0|      return TestNumberLength(number, metadata, PhoneNumberUtil::MOBILE);
  426|      0|    } else {
  427|      0|      const PhoneNumberDesc* mobile_desc =
  428|      0|          GetNumberDescByType(metadata, PhoneNumberUtil::MOBILE);
  429|      0|      if (DescHasPossibleNumberData(*mobile_desc)) {
  ------------------
  |  Branch (429:11): [True: 0, False: 0]
  ------------------
  430|       |        // Merge the mobile data in if there was any. Note that when adding the
  431|       |        // possible lengths from mobile, we have to again check they aren't
  432|       |        // empty since if they are this indicates they are the same as the
  433|       |        // general desc and should be obtained from there.
  434|      0|        possible_lengths.MergeFrom(
  435|      0|            mobile_desc->possible_length_size() == 0
  ------------------
  |  Branch (435:13): [True: 0, False: 0]
  ------------------
  436|      0|            ? metadata.general_desc().possible_length()
  437|      0|            : mobile_desc->possible_length());
  438|      0|        std::sort(possible_lengths.begin(), possible_lengths.end());
  439|       |
  440|      0|        if (local_lengths.size() == 0) {
  ------------------
  |  Branch (440:13): [True: 0, False: 0]
  ------------------
  441|      0|          local_lengths = mobile_desc->possible_length_local_only();
  442|      0|        } else {
  443|      0|          local_lengths.MergeFrom(mobile_desc->possible_length_local_only());
  444|      0|          std::sort(local_lengths.begin(), local_lengths.end());
  445|      0|        }
  446|      0|      }
  447|      0|    }
  448|      0|  }
  449|       |
  450|       |  // If the type is not suported at all (indicated by the possible lengths
  451|       |  // containing -1 at this point) we return invalid length.
  452|  1.24k|  if (possible_lengths.Get(0) == -1) {
  ------------------
  |  Branch (452:7): [True: 0, False: 1.24k]
  ------------------
  453|      0|    return PhoneNumberUtil::INVALID_LENGTH;
  454|      0|  }
  455|       |
  456|  1.24k|  int actual_length = static_cast<int>(number.length());
  457|       |  // This is safe because there is never an overlap beween the possible lengths
  458|       |  // and the local-only lengths; this is checked at build time.
  459|  1.24k|  if (std::find(local_lengths.begin(), local_lengths.end(), actual_length) !=
  ------------------
  |  Branch (459:7): [True: 65, False: 1.18k]
  ------------------
  460|  1.24k|      local_lengths.end()) {
  461|     65|    return PhoneNumberUtil::IS_POSSIBLE_LOCAL_ONLY;
  462|     65|  }
  463|  1.18k|  int minimum_length = possible_lengths.Get(0);
  464|  1.18k|  if (minimum_length == actual_length) {
  ------------------
  |  Branch (464:7): [True: 149, False: 1.03k]
  ------------------
  465|    149|    return PhoneNumberUtil::IS_POSSIBLE;
  466|  1.03k|  } else if (minimum_length > actual_length) {
  ------------------
  |  Branch (466:14): [True: 833, False: 202]
  ------------------
  467|    833|    return PhoneNumberUtil::TOO_SHORT;
  468|    833|  } else if (*(possible_lengths.end() - 1) < actual_length) {
  ------------------
  |  Branch (468:14): [True: 148, False: 54]
  ------------------
  469|    148|    return PhoneNumberUtil::TOO_LONG;
  470|    148|  }
  471|       |  // We skip the first element; we've already checked it.
  472|     54|  return std::find(possible_lengths.begin() + 1, possible_lengths.end(),
  ------------------
  |  Branch (472:10): [True: 44, False: 10]
  ------------------
  473|     54|                   actual_length) != possible_lengths.end()
  474|     54|             ? PhoneNumberUtil::IS_POSSIBLE
  475|     54|             : PhoneNumberUtil::INVALID_LENGTH;
  476|  1.18k|}
phonenumberutil.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_17IsMatchERKNS0_10MatcherApiERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERKNS0_15PhoneNumberDescE:
  508|  1.35k|             const string& number, const PhoneNumberDesc& desc) {
  509|  1.35k|  return matcher_api.MatchNationalNumber(number, desc, false);
  510|  1.35k|}

_ZN4i18n12phonenumbers17RegexBasedMatcherC2Ev:
   33|  3.06k|    : regexp_factory_(new RegExpFactory()),
   34|  3.06k|      regexp_cache_(new RegExpCache(*regexp_factory_, 128)) {}
_ZN4i18n12phonenumbers17RegexBasedMatcherD2Ev:
   36|  3.06k|RegexBasedMatcher::~RegexBasedMatcher() {}
_ZNK4i18n12phonenumbers17RegexBasedMatcher19MatchNationalNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKNS0_15PhoneNumberDescEb:
   41|  21.7k|    bool allow_prefix_match) const {
   42|  21.7k|  const string& national_number_pattern = number_desc.national_number_pattern();
   43|       |  // We don't want to consider it a prefix match when matching non-empty input
   44|       |  // against an empty pattern.
   45|  21.7k|  if (national_number_pattern.empty()) {
  ------------------
  |  Branch (45:7): [True: 7, False: 21.7k]
  ------------------
   46|      7|    return false;
   47|      7|  }
   48|  21.7k|  return Match(number, national_number_pattern, allow_prefix_match);
   49|  21.7k|}
_ZNK4i18n12phonenumbers17RegexBasedMatcher5MatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_b:
   54|  21.7k|    bool allow_prefix_match) const {
   55|  21.7k|  const RegExp& regexp(regexp_cache_->GetRegExp(number_pattern));
   56|       |
   57|  21.7k|  if (regexp.FullMatch(number)) {
  ------------------
  |  Branch (57:7): [True: 1.01k, False: 20.7k]
  ------------------
   58|  1.01k|    return true;
   59|  1.01k|  }
   60|  20.7k|  const scoped_ptr<RegExpInput> normalized_number_input(
   61|  20.7k|      regexp_factory_->CreateInput(number));
   62|  20.7k|  return regexp.Consume(normalized_number_input.get())
  ------------------
  |  Branch (62:10): [True: 1.98k, False: 18.7k]
  ------------------
   63|  20.7k|      ? allow_prefix_match
   64|  20.7k|      : false;
   65|  21.7k|}

_ZN4i18n12phonenumbers11RegExpInputD2Ev:
   41|  92.9k|  virtual ~RegExpInput() {}
_ZN4i18n12phonenumbers6RegExpD2Ev:
   52|  7.52k|  virtual ~RegExp() {}
_ZNK4i18n12phonenumbers6RegExp7ConsumeEPNS0_11RegExpInputEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEESB_:
  113|    172|                      string* matched_string2) const {
  114|    172|    return Consume(input_string, true, matched_string1, matched_string2, NULL,
  115|    172|    		   NULL, NULL, NULL);
  116|    172|  }
_ZNK4i18n12phonenumbers6RegExp7ConsumeEPNS0_11RegExpInputEPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEE:
  118|  1.26k|  inline bool Consume(RegExpInput* input_string, string* matched_string) const {
  119|  1.26k|    return Consume(input_string, true, matched_string, NULL, NULL, NULL, NULL,
  120|  1.26k|    	   	   NULL);
  121|  1.26k|  }
_ZNK4i18n12phonenumbers6RegExp7ConsumeEPNS0_11RegExpInputE:
  123|  31.8k|  inline bool Consume(RegExpInput* input_string) const {
  124|  31.8k|    return Consume(input_string, true, NULL, NULL, NULL, NULL, NULL, NULL);
  125|  31.8k|  }
_ZNK4i18n12phonenumbers6RegExp12PartialMatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPS8_:
  147|  7.46k|                           string* matched_string) const {
  148|  7.46k|    return Match(input_string, false, matched_string);
  149|  7.46k|  }
_ZNK4i18n12phonenumbers6RegExp12PartialMatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  151|  1.62k|  inline bool PartialMatch(const string& input_string) const {
  152|  1.62k|    return Match(input_string, false, NULL);
  153|  1.62k|  }
_ZNK4i18n12phonenumbers6RegExp9FullMatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  160|  46.1k|  inline bool FullMatch(const string& input_string) const {
  161|  46.1k|    return Match(input_string, true, NULL);
  162|  46.1k|  }
_ZNK4i18n12phonenumbers6RegExp7ReplaceEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKS8_:
  176|    236|                      const string& replacement_string) const {
  177|    236|    return Replace(string_to_process, false, replacement_string);
  178|    236|  }
_ZNK4i18n12phonenumbers6RegExp13GlobalReplaceEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEERKS8_:
  181|  2.92k|                            const string& replacement_string) const {
  182|  2.92k|    return Replace(string_to_process, true, replacement_string);
  183|  2.92k|  }
_ZN4i18n12phonenumbers21AbstractRegExpFactoryD2Ev:
  190|  3.06k|  virtual ~AbstractRegExpFactory() {}

_ZNK4i18n12phonenumbers16ICURegExpFactory11CreateInputERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  236|  34.5k|RegExpInput* ICURegExpFactory::CreateInput(const string& utf8_input) const {
  237|  34.5k|  return new IcuRegExpInput(utf8_input);
  238|  34.5k|}
_ZNK4i18n12phonenumbers16ICURegExpFactory12CreateRegExpERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  240|  7.70k|RegExp* ICURegExpFactory::CreateRegExp(const string& utf8_regexp) const {
  241|  7.70k|  return new IcuRegExp(utf8_regexp);
  242|  7.70k|}
_ZN4i18n12phonenumbers14IcuRegExpInputC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   69|  92.9k|      : utf8_input_(Utf8StringToUnicodeString(utf8_input)),
   70|  92.9k|        position_(0) {}
regexp_adapter_icu.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_125Utf8StringToUnicodeStringERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   54|   103k|UnicodeString Utf8StringToUnicodeString(const string& source) {
   55|       |  // Note that we don't use icu::StringPiece(const string&).
   56|   103k|  return UnicodeString::fromUTF8(
   57|   103k|      icu::StringPiece(source.c_str(), static_cast<int>(source.size())));
   58|   103k|}
_ZN4i18n12phonenumbers14IcuRegExpInputD2Ev:
   77|  92.9k|  virtual ~IcuRegExpInput() {}
_ZNK4i18n12phonenumbers14IcuRegExpInput8ToStringEv:
   79|  1.63k|  virtual string ToString() const {
   80|  1.63k|    return UnicodeStringToUtf8String(utf8_input_.tempSubString(position_));
   81|  1.63k|  }
regexp_adapter_icu.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_125UnicodeStringToUtf8StringERKN6icu_6613UnicodeStringE:
   47|  4.63k|string UnicodeStringToUtf8String(const UnicodeString& source) {
   48|  4.63k|  string data;
   49|  4.63k|  source.toUTF8String(data);
   50|  4.63k|  return data;
   51|  4.63k|}
_ZN4i18n12phonenumbers9IcuRegExpC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  108|  7.70k|  explicit IcuRegExp(const string& utf8_regexp) {
  109|  7.70k|    UParseError parse_error;
  110|  7.70k|    UErrorCode status = U_ZERO_ERROR;
  111|  7.70k|    utf8_regexp_.reset(RegexPattern::compile(
  112|  7.70k|        Utf8StringToUnicodeString(utf8_regexp), 0, parse_error, status));
  113|  7.70k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (113:9): [True: 0, False: 7.70k]
  ------------------
  114|       |      // The provided regular expressions should compile correctly.
  115|      0|      LOG(ERROR) << "Error compiling regular expression: " << utf8_regexp;
  116|      0|      utf8_regexp_.reset(NULL);
  117|      0|    }
  118|  7.70k|  }
_ZN4i18n12phonenumbers9IcuRegExpD2Ev:
  124|  7.52k|  virtual ~IcuRegExp() {}
_ZNK4i18n12phonenumbers9IcuRegExp7ConsumeEPNS0_11RegExpInputEbPNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEESB_SB_SB_SB_SB_:
  133|  34.7k|                       string* matched_string6) const {
  134|  34.7k|    DCHECK(input_string);
  ------------------
  |  |   29|  34.7k|#define DCHECK(X) assert(X)
  ------------------
  135|  34.7k|    if (!utf8_regexp_.get()) {
  ------------------
  |  Branch (135:9): [True: 0, False: 34.7k]
  ------------------
  136|      0|      return false;
  137|      0|    }
  138|  34.7k|    IcuRegExpInput* const input = static_cast<IcuRegExpInput*>(input_string);
  139|  34.7k|    UErrorCode status = U_ZERO_ERROR;
  140|  34.7k|    const scoped_ptr<RegexMatcher> matcher(
  141|  34.7k|        utf8_regexp_->matcher(*input->Data(), status));
  142|  34.7k|    bool match_succeeded = anchor_at_start
  ------------------
  |  Branch (142:28): [True: 33.2k, False: 1.44k]
  ------------------
  143|  34.7k|        ? matcher->lookingAt(input->position(), status)
  144|  34.7k|        : matcher->find(input->position(), status);
  145|  34.7k|    if (!match_succeeded || U_FAILURE(status)) {
  ------------------
  |  Branch (145:9): [True: 26.9k, False: 7.76k]
  |  Branch (145:29): [True: 0, False: 7.76k]
  ------------------
  146|  26.9k|      return false;
  147|  26.9k|    }
  148|  7.76k|    string* const matched_strings[] = {matched_string1, matched_string2,
  149|  7.76k|                                       matched_string3, matched_string4,
  150|  7.76k|                                       matched_string5, matched_string6};
  151|       |    // If less matches than expected - fail.
  152|  53.3k|    for (size_t i = 0; i < arraysize(matched_strings); ++i) {
  ------------------
  |  |  131|  53.3k|#define arraysize(array) (sizeof(ArraySizeHelper(array)))
  ------------------
  |  Branch (152:24): [True: 45.7k, False: 7.58k]
  ------------------
  153|  45.7k|      if (matched_strings[i]) {
  ------------------
  |  Branch (153:11): [True: 1.71k, False: 44.0k]
  ------------------
  154|       |        // Groups are counted from 1 rather than 0.
  155|  1.71k|        const int group_index = static_cast<int>(i + 1);
  156|  1.71k|        if (group_index > matcher->groupCount()) {
  ------------------
  |  Branch (156:13): [True: 185, False: 1.52k]
  ------------------
  157|    185|          return false;
  158|    185|        }
  159|  1.52k|        *matched_strings[i] =
  160|  1.52k|            UnicodeStringToUtf8String(matcher->group(group_index, status));
  161|  1.52k|      }
  162|  45.7k|    }
  163|  7.58k|    input->set_position(matcher->end(status));
  164|  7.58k|    return !U_FAILURE(status);
  165|  7.76k|  }
_ZN4i18n12phonenumbers14IcuRegExpInput4DataEv:
   83|  93.1k|  UnicodeString* Data() {
   84|  93.1k|    return &utf8_input_;
   85|  93.1k|  }
_ZNK4i18n12phonenumbers14IcuRegExpInput8positionEv:
   90|  89.9k|  int position() const {
   91|  89.9k|    return position_;
   92|  89.9k|  }
_ZN4i18n12phonenumbers14IcuRegExpInput12set_positionEi:
   94|  7.58k|  void set_position(int position) {
   95|  7.58k|    DCHECK(position >= 0 && position <= utf8_input_.length());
  ------------------
  |  |   29|  7.58k|#define DCHECK(X) assert(X)
  ------------------
   96|  7.58k|    position_ = position;
   97|  7.58k|  }
_ZNK4i18n12phonenumbers9IcuRegExp5MatchERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbPS8_:
  169|  55.2k|             string* matched_string) const {
  170|  55.2k|    if (!utf8_regexp_.get()) {
  ------------------
  |  Branch (170:9): [True: 0, False: 55.2k]
  ------------------
  171|      0|      return false;
  172|      0|    }
  173|  55.2k|    IcuRegExpInput input(input_string);
  174|  55.2k|    UErrorCode status = U_ZERO_ERROR;
  175|  55.2k|    const scoped_ptr<RegexMatcher> matcher(
  176|  55.2k|        utf8_regexp_->matcher(*input.Data(), status));
  177|  55.2k|    bool match_succeeded = full_match
  ------------------
  |  Branch (177:28): [True: 46.1k, False: 9.08k]
  ------------------
  178|  55.2k|        ? matcher->matches(input.position(), status)
  179|  55.2k|        : matcher->find(input.position(), status);
  180|  55.2k|    if (!match_succeeded || U_FAILURE(status)) {
  ------------------
  |  Branch (180:9): [True: 43.3k, False: 11.8k]
  |  Branch (180:29): [True: 0, False: 11.8k]
  ------------------
  181|  43.3k|      return false;
  182|  43.3k|    }
  183|  11.8k|    if (matcher->groupCount() > 0 && matched_string) {
  ------------------
  |  Branch (183:9): [True: 2.25k, False: 9.59k]
  |  Branch (183:38): [True: 596, False: 1.66k]
  ------------------
  184|    596|      *matched_string = UnicodeStringToUtf8String(matcher->group(1, status));
  185|    596|    }
  186|  11.8k|    return !U_FAILURE(status);
  187|  55.2k|  }
_ZNK4i18n12phonenumbers9IcuRegExp7ReplaceEPNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEbRKS8_:
  191|  3.16k|               const string& replacement_string) const {
  192|  3.16k|    DCHECK(string_to_process);
  ------------------
  |  |   29|  3.16k|#define DCHECK(X) assert(X)
  ------------------
  193|  3.16k|    if (!utf8_regexp_.get()) {
  ------------------
  |  Branch (193:9): [True: 0, False: 3.16k]
  ------------------
  194|      0|      return false;
  195|      0|    }
  196|  3.16k|    IcuRegExpInput input(*string_to_process);
  197|  3.16k|    UErrorCode status = U_ZERO_ERROR;
  198|  3.16k|    const scoped_ptr<RegexMatcher> matcher(
  199|  3.16k|        utf8_regexp_->matcher(*input.Data(), status));
  200|  3.16k|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (200:9): [True: 0, False: 3.16k]
  ------------------
  201|      0|      return false;
  202|      0|    }
  203|       |
  204|  3.16k|    UnicodeString output;
  205|       |    // We reimplement ReplaceFirst and ReplaceAll such that their behaviour is
  206|       |    // consistent with the RE2 reg-ex matcher.
  207|  3.16k|    if (!matcher->find()) {
  ------------------
  |  Branch (207:9): [True: 2.28k, False: 878]
  ------------------
  208|  2.28k|      return false;
  209|  2.28k|    }
  210|    878|    matcher->appendReplacement(output,
  211|    878|                               Utf8StringToUnicodeString(replacement_string),
  212|    878|                               status);
  213|    878|    if (global) {
  ------------------
  |  Branch (213:9): [True: 642, False: 236]
  ------------------
  214|       |      // Continue and look for more matches.
  215|  2.84k|      while (matcher->find()) {
  ------------------
  |  Branch (215:14): [True: 2.20k, False: 642]
  ------------------
  216|  2.20k|        matcher->appendReplacement(
  217|  2.20k|            output,
  218|  2.20k|            Utf8StringToUnicodeString(replacement_string),
  219|  2.20k|            status);
  220|  2.20k|      }
  221|    642|    }
  222|       |
  223|    878|    matcher->appendTail(output);
  224|    878|    if (U_FAILURE(status)) {
  ------------------
  |  Branch (224:9): [True: 0, False: 878]
  ------------------
  225|      0|      return false;
  226|      0|    }
  227|    878|    const string replaced_string = UnicodeStringToUtf8String(output);
  228|    878|    *string_to_process = replaced_string;
  229|    878|    return true;
  230|    878|  }

_ZN4i18n12phonenumbers11RegExpCacheC2ERKNS0_21AbstractRegExpFactoryEm:
   33|  3.06k|    : regexp_factory_(regexp_factory),
   34|       |#ifdef I18N_PHONENUMBERS_USE_TR1_UNORDERED_MAP
   35|       |      cache_impl_(new CacheImpl(min_items))
   36|       |#else
   37|  3.06k|      cache_impl_(new CacheImpl())
   38|       |#endif
   39|  3.06k|{}
_ZN4i18n12phonenumbers11RegExpCacheD2Ev:
   41|  3.06k|RegExpCache::~RegExpCache() {
   42|  3.06k|  AutoLock l(lock_);
   43|  3.06k|  for (CacheImpl::const_iterator
   44|  10.5k|       it = cache_impl_->begin(); it != cache_impl_->end(); ++it) {
  ------------------
  |  Branch (44:35): [True: 7.52k, False: 3.06k]
  ------------------
   45|  7.52k|    delete it->second;
   46|  7.52k|  }
   47|  3.06k|}
_ZN4i18n12phonenumbers11RegExpCache9GetRegExpERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   49|  26.2k|const RegExp& RegExpCache::GetRegExp(const string& pattern) {
   50|  26.2k|  AutoLock l(lock_);
   51|  26.2k|  CacheImpl::const_iterator it = cache_impl_->find(pattern);
   52|  26.2k|  if (it != cache_impl_->end()) return *it->second;
  ------------------
  |  Branch (52:7): [True: 18.5k, False: 7.69k]
  ------------------
   53|       |
   54|  7.69k|  const RegExp* regexp = regexp_factory_.CreateRegExp(pattern);
   55|  7.69k|  cache_impl_->insert(std::make_pair(pattern, regexp));
   56|  7.69k|  return *regexp;
   57|  26.2k|}

_ZN4i18n12phonenumbers10RegionCode10GetUnknownEv:
   28|  8.68k|  static const char* GetUnknown() {
   29|  8.68k|    return ZZ();
   30|  8.68k|  }
_ZN4i18n12phonenumbers10RegionCode2ZZEv:
   32|  8.68k|  static const char* ZZ() {
   33|  8.68k|    return "ZZ";
   34|  8.68k|  }

_ZN4i18n12phonenumbers19short_metadata_sizeEv:
 4053|  3.06k|int short_metadata_size() {
 4054|  3.06k|  return sizeof(data) / sizeof(data[0]);
 4055|  3.06k|}
_ZN4i18n12phonenumbers18short_metadata_getEv:
 4057|  3.06k|const void* short_metadata_get() {
 4058|  3.06k|  return data;
 4059|  3.06k|}

_ZN4i18n12phonenumbers22LoadCompiledInMetadataEPNS0_23PhoneMetadataCollectionE:
   37|  3.06k|bool LoadCompiledInMetadata(PhoneMetadataCollection* metadata) {
   38|  3.06k|  if (!metadata->ParseFromArray(short_metadata_get(), short_metadata_size())) {
  ------------------
  |  Branch (38:7): [True: 0, False: 3.06k]
  ------------------
   39|      0|    LOG(ERROR) << "Could not parse binary data.";
   40|      0|    return false;
   41|      0|  }
   42|  3.06k|  return true;
   43|  3.06k|}
_ZN4i18n12phonenumbers15ShortNumberInfoC2Ev:
   46|  3.06k|    : phone_util_(*PhoneNumberUtil::GetInstance()),
   47|  3.06k|      matcher_api_(new RegexBasedMatcher()),
   48|  3.06k|      region_to_short_metadata_map_(new absl::flat_hash_map<string, PhoneMetadata>()),
   49|  3.06k|      regions_where_emergency_numbers_must_be_exact_(new absl::flat_hash_set<string>()) {
   50|  3.06k|  PhoneMetadataCollection metadata_collection;
   51|  3.06k|  if (!LoadCompiledInMetadata(&metadata_collection)) {
  ------------------
  |  Branch (51:7): [True: 0, False: 3.06k]
  ------------------
   52|      0|    LOG(DFATAL) << "Could not parse compiled-in metadata.";
   53|      0|    return;
   54|      0|  }
   55|   738k|  for (const auto& metadata : metadata_collection.metadata()) {
  ------------------
  |  Branch (55:29): [True: 738k, False: 3.06k]
  ------------------
   56|   738k|    const string& region_code = metadata.id();
   57|   738k|    region_to_short_metadata_map_->insert(std::make_pair(region_code, metadata));
   58|   738k|  }
   59|  3.06k|  regions_where_emergency_numbers_must_be_exact_->insert("BR");
   60|  3.06k|  regions_where_emergency_numbers_must_be_exact_->insert("CL");
   61|  3.06k|  regions_where_emergency_numbers_must_be_exact_->insert("NI");
   62|  3.06k|}
_ZN4i18n12phonenumbers15ShortNumberInfoD2Ev:
   64|  3.06k|ShortNumberInfo::~ShortNumberInfo() {}
_ZNK4i18n12phonenumbers15ShortNumberInfo20GetMetadataForRegionERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
   69|  40.9k|    const string& region_code) const {
   70|  40.9k|  auto it = region_to_short_metadata_map_->find(region_code);
   71|  40.9k|  if (it != region_to_short_metadata_map_->end()) {
  ------------------
  |  Branch (71:7): [True: 30.0k, False: 10.9k]
  ------------------
   72|  30.0k|    return &it->second;
   73|  30.0k|  }
   74|  10.9k|  return nullptr;
   75|  40.9k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo30RegionDialingFromMatchesNumberERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
   97|  16.5k|    const string& region_dialing_from) const {
   98|  16.5k|  list<string> region_codes;
   99|  16.5k|  phone_util_.GetRegionCodesForCountryCallingCode(number.country_code(),
  100|  16.5k|                                                  &region_codes);
  101|  16.5k|  return std::find(region_codes.begin(),
  102|  16.5k|                   region_codes.end(),
  103|  16.5k|                   region_dialing_from) != region_codes.end();
  104|  16.5k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo30IsPossibleShortNumberForRegionERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  107|  3.06k|    const string& region_dialing_from) const {
  108|  3.06k|  if (!RegionDialingFromMatchesNumber(number, region_dialing_from)) {
  ------------------
  |  Branch (108:7): [True: 2.82k, False: 239]
  ------------------
  109|  2.82k|    return false;
  110|  2.82k|  }
  111|    239|  const PhoneMetadata* phone_metadata =
  112|    239|      GetMetadataForRegion(region_dialing_from);
  113|    239|  if (!phone_metadata) {
  ------------------
  |  Branch (113:7): [True: 10, False: 229]
  ------------------
  114|     10|    return false;
  115|     10|  }
  116|    229|  string short_number;
  117|    229|  phone_util_.GetNationalSignificantNumber(number, &short_number);
  118|    229|  const RepeatedField<int>& lengths =
  119|    229|      phone_metadata->general_desc().possible_length();
  120|    229|  return (std::find(lengths.begin(), lengths.end(), short_number.length()) !=
  121|    229|      lengths.end());
  122|    239|}
_ZNK4i18n12phonenumbers15ShortNumberInfo21IsPossibleShortNumberERKNS0_11PhoneNumberE:
  124|  3.06k|bool ShortNumberInfo::IsPossibleShortNumber(const PhoneNumber& number) const {
  125|  3.06k|  list<string> region_codes;
  126|  3.06k|  phone_util_.GetRegionCodesForCountryCallingCode(number.country_code(),
  127|  3.06k|                                                  &region_codes);
  128|  3.06k|  string short_number;
  129|  3.06k|  phone_util_.GetNationalSignificantNumber(number, &short_number);
  130|  7.39k|  for (const auto& region_code : region_codes) {
  ------------------
  |  Branch (130:32): [True: 7.39k, False: 2.56k]
  ------------------
  131|  7.39k|    const PhoneMetadata* phone_metadata = GetMetadataForRegion(region_code);
  132|  7.39k|    if (!phone_metadata) {
  ------------------
  |  Branch (132:9): [True: 26, False: 7.36k]
  ------------------
  133|     26|      continue;
  134|     26|    }
  135|  7.36k|    const RepeatedField<int>& lengths =
  136|  7.36k|        phone_metadata->general_desc().possible_length();
  137|  7.36k|    if (std::find(lengths.begin(), lengths.end(), short_number.length()) !=
  ------------------
  |  Branch (137:9): [True: 497, False: 6.87k]
  ------------------
  138|  7.36k|        lengths.end()) {
  139|    497|      return true;
  140|    497|    }
  141|  7.36k|  }
  142|  2.56k|  return false;
  143|  3.06k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo27IsValidShortNumberForRegionERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  146|  2.91k|    const PhoneNumber& number, const string& region_dialing_from) const {
  147|  2.91k|  if (!RegionDialingFromMatchesNumber(number, region_dialing_from)) {
  ------------------
  |  Branch (147:7): [True: 2.54k, False: 376]
  ------------------
  148|  2.54k|    return false;
  149|  2.54k|  }
  150|    376|  const PhoneMetadata* phone_metadata =
  151|    376|      GetMetadataForRegion(region_dialing_from);
  152|    376|  if (!phone_metadata) {
  ------------------
  |  Branch (152:7): [True: 21, False: 355]
  ------------------
  153|     21|    return false;
  154|     21|  }
  155|    355|  string short_number;
  156|    355|  phone_util_.GetNationalSignificantNumber(number, &short_number);
  157|    355|  const PhoneNumberDesc& general_desc = phone_metadata->general_desc();
  158|    355|  if (!MatchesPossibleNumberAndNationalNumber(*matcher_api_, short_number,
  ------------------
  |  Branch (158:7): [True: 224, False: 131]
  ------------------
  159|    355|                                              general_desc)) {
  160|    224|    return false;
  161|    224|  }
  162|    131|  const PhoneNumberDesc& short_number_desc = phone_metadata->short_code();
  163|    131|  return MatchesPossibleNumberAndNationalNumber(*matcher_api_, short_number,
  164|    131|                                                short_number_desc);
  165|    355|}
_ZNK4i18n12phonenumbers15ShortNumberInfo18IsValidShortNumberERKNS0_11PhoneNumberE:
  167|  3.06k|bool ShortNumberInfo::IsValidShortNumber(const PhoneNumber& number) const {
  168|  3.06k|  list<string> region_codes;
  169|  3.06k|  phone_util_.GetRegionCodesForCountryCallingCode(number.country_code(),
  170|  3.06k|                                                  &region_codes);
  171|  3.06k|  string region_code;
  172|  3.06k|  GetRegionCodeForShortNumberFromRegionList(number, region_codes, &region_code);
  173|  3.06k|  if (region_codes.size() > 1 && region_code != RegionCode::GetUnknown()) {
  ------------------
  |  Branch (173:7): [True: 740, False: 2.32k]
  |  Branch (173:34): [True: 149, False: 591]
  ------------------
  174|    149|    return true;
  175|    149|  }
  176|  2.91k|  return IsValidShortNumberForRegion(number, region_code);
  177|  3.06k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo24GetExpectedCostForRegionERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  180|  4.48k|    const PhoneNumber& number, const string& region_dialing_from) const {
  181|  4.48k|  if (!RegionDialingFromMatchesNumber(number, region_dialing_from)) {
  ------------------
  |  Branch (181:7): [True: 2.82k, False: 1.65k]
  ------------------
  182|  2.82k|    return ShortNumberInfo::UNKNOWN_COST;
  183|  2.82k|  }
  184|  1.65k|  const PhoneMetadata* phone_metadata =
  185|  1.65k|      GetMetadataForRegion(region_dialing_from);
  186|  1.65k|  if (!phone_metadata) {
  ------------------
  |  Branch (186:7): [True: 31, False: 1.62k]
  ------------------
  187|     31|    return ShortNumberInfo::UNKNOWN_COST;
  188|     31|  }
  189|  1.62k|  string short_number;
  190|  1.62k|  phone_util_.GetNationalSignificantNumber(number, &short_number);
  191|       |
  192|       |  // The possible lengths are not present for a particular sub-type if they
  193|       |  // match the general description; for this reason, we check the possible
  194|       |  // lengths against the general description first to allow an early exit if
  195|       |  // possible.
  196|  1.62k|  const RepeatedField<int>& lengths =
  197|  1.62k|      phone_metadata->general_desc().possible_length();
  198|  1.62k|  if (std::find(lengths.begin(), lengths.end(), short_number.length()) ==
  ------------------
  |  Branch (198:7): [True: 730, False: 898]
  ------------------
  199|  1.62k|      lengths.end()) {
  200|    730|    return ShortNumberInfo::UNKNOWN_COST;
  201|    730|  }
  202|       |
  203|       |  // The cost categories are tested in order of decreasing expense, since if
  204|       |  // for some reason the patterns overlap the most expensive matching cost
  205|       |  // category should be returned.
  206|    898|  if (MatchesPossibleNumberAndNationalNumber(*matcher_api_, short_number,
  ------------------
  |  Branch (206:7): [True: 8, False: 890]
  ------------------
  207|    898|                                             phone_metadata->premium_rate())) {
  208|      8|    return ShortNumberInfo::PREMIUM_RATE;
  209|      8|  }
  210|    890|  if (MatchesPossibleNumberAndNationalNumber(*matcher_api_, short_number,
  ------------------
  |  Branch (210:7): [True: 11, False: 879]
  ------------------
  211|    890|                                             phone_metadata->standard_rate())) {
  212|     11|    return ShortNumberInfo::STANDARD_RATE;
  213|     11|  }
  214|    879|  if (MatchesPossibleNumberAndNationalNumber(*matcher_api_, short_number,
  ------------------
  |  Branch (214:7): [True: 336, False: 543]
  ------------------
  215|    879|                                             phone_metadata->toll_free())) {
  216|    336|    return ShortNumberInfo::TOLL_FREE;
  217|    336|  }
  218|    543|  if (IsEmergencyNumber(short_number, region_dialing_from)) {
  ------------------
  |  Branch (218:7): [True: 2, False: 541]
  ------------------
  219|       |    // Emergency numbers are implicitly toll-free.
  220|      2|    return ShortNumberInfo::TOLL_FREE;
  221|      2|  }
  222|    541|  return ShortNumberInfo::UNKNOWN_COST;
  223|    543|}
_ZNK4i18n12phonenumbers15ShortNumberInfo15GetExpectedCostERKNS0_11PhoneNumberE:
  226|  3.06k|    const PhoneNumber& number) const {
  227|  3.06k|  list<string> region_codes;
  228|  3.06k|  phone_util_.GetRegionCodesForCountryCallingCode(number.country_code(),
  229|  3.06k|                                                  &region_codes);
  230|  3.06k|  if (region_codes.size() == 0) {
  ------------------
  |  Branch (230:7): [True: 1.94k, False: 1.11k]
  ------------------
  231|  1.94k|    return ShortNumberInfo::UNKNOWN_COST;
  232|  1.94k|  }
  233|  1.11k|  if (region_codes.size() == 1) {
  ------------------
  |  Branch (233:7): [True: 376, False: 740]
  ------------------
  234|    376|    return GetExpectedCostForRegion(number, region_codes.front());
  235|    376|  }
  236|    740|  ShortNumberInfo::ShortNumberCost cost = ShortNumberInfo::TOLL_FREE;
  237|  1.04k|  for (const auto& region_code : region_codes) {
  ------------------
  |  Branch (237:32): [True: 1.04k, False: 12]
  ------------------
  238|  1.04k|    ShortNumberInfo::ShortNumberCost cost_for_region =
  239|  1.04k|        GetExpectedCostForRegion(number, region_code);
  240|  1.04k|    switch (cost_for_region) {
  241|      1|     case ShortNumberInfo::PREMIUM_RATE:
  ------------------
  |  Branch (241:6): [True: 1, False: 1.04k]
  ------------------
  242|      1|       return ShortNumberInfo::PREMIUM_RATE;
  243|    727|     case ShortNumberInfo::UNKNOWN_COST:
  ------------------
  |  Branch (243:6): [True: 727, False: 317]
  ------------------
  244|    727|       return ShortNumberInfo::UNKNOWN_COST;
  245|      6|     case ShortNumberInfo::STANDARD_RATE:
  ------------------
  |  Branch (245:6): [True: 6, False: 1.03k]
  ------------------
  246|      6|       if (cost != ShortNumberInfo::UNKNOWN_COST) {
  ------------------
  |  Branch (246:12): [True: 6, False: 0]
  ------------------
  247|      6|         cost = ShortNumberInfo::STANDARD_RATE;
  248|      6|       }
  249|      6|       break;
  250|    310|     case ShortNumberInfo::TOLL_FREE:
  ------------------
  |  Branch (250:6): [True: 310, False: 734]
  ------------------
  251|       |       // Do nothing.
  252|    310|       break;
  253|      0|     default:
  ------------------
  |  Branch (253:6): [True: 0, False: 1.04k]
  ------------------
  254|      0|       LOG(ERROR) << "Unrecognised cost for region: "
  255|      0|                  << static_cast<int>(cost_for_region);
  256|      0|       break;
  257|  1.04k|    }
  258|  1.04k|  }
  259|     12|  return cost;
  260|    740|}
_ZNK4i18n12phonenumbers15ShortNumberInfo41GetRegionCodeForShortNumberFromRegionListERKNS0_11PhoneNumberERKNSt3__14listINS5_12basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEENSA_ISC_EEEEPSC_:
  264|  6.13k|    string* region_code) const {
  265|  6.13k|  if (region_codes.size() == 0) {
  ------------------
  |  Branch (265:7): [True: 3.89k, False: 2.23k]
  ------------------
  266|  3.89k|    region_code->assign(RegionCode::GetUnknown());
  267|  3.89k|    return;
  268|  3.89k|  } else if (region_codes.size() == 1) {
  ------------------
  |  Branch (268:14): [True: 752, False: 1.48k]
  ------------------
  269|    752|    region_code->assign(region_codes.front());
  270|    752|    return;
  271|    752|  }
  272|  1.48k|  string national_number;
  273|  1.48k|  phone_util_.GetNationalSignificantNumber(number, &national_number);
  274|  17.5k|  for (const auto& region_code_it : region_codes) {
  ------------------
  |  Branch (274:35): [True: 17.5k, False: 1.18k]
  ------------------
  275|  17.5k|    const PhoneMetadata* phone_metadata = GetMetadataForRegion(region_code_it);
  276|  17.5k|    if (phone_metadata != nullptr &&
  ------------------
  |  Branch (276:9): [True: 17.5k, False: 12]
  ------------------
  277|  17.5k|        MatchesPossibleNumberAndNationalNumber(*matcher_api_, national_number,
  ------------------
  |  Branch (277:9): [True: 298, False: 17.2k]
  ------------------
  278|  17.5k|                                               phone_metadata->short_code())) {
  279|       |      // The number is valid for this region.
  280|    298|      region_code->assign(region_code_it);
  281|    298|      return;
  282|    298|    }
  283|  17.5k|  }
  284|  1.18k|  region_code->assign(RegionCode::GetUnknown());
  285|  1.18k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo21GetExampleShortNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  287|  3.06k|string ShortNumberInfo::GetExampleShortNumber(const string& region_code) const {
  288|  3.06k|  const PhoneMetadata* phone_metadata = GetMetadataForRegion(region_code);
  289|  3.06k|  if (!phone_metadata) {
  ------------------
  |  Branch (289:7): [True: 2.69k, False: 371]
  ------------------
  290|  2.69k|    return "";
  291|  2.69k|  }
  292|    371|  const PhoneNumberDesc& desc = phone_metadata->short_code();
  293|    371|  if (desc.has_example_number()) {
  ------------------
  |  Branch (293:7): [True: 371, False: 0]
  ------------------
  294|    371|    return desc.example_number();
  295|    371|  }
  296|      0|  return "";
  297|    371|}
_ZNK4i18n12phonenumbers15ShortNumberInfo28GetExampleShortNumberForCostERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS1_15ShortNumberCostE:
  300|  3.06k|    ShortNumberInfo::ShortNumberCost cost) const {
  301|  3.06k|  const PhoneMetadata* phone_metadata = GetMetadataForRegion(region_code);
  302|  3.06k|  if (!phone_metadata) {
  ------------------
  |  Branch (302:7): [True: 2.69k, False: 371]
  ------------------
  303|  2.69k|    return "";
  304|  2.69k|  }
  305|    371|  const PhoneNumberDesc* desc = nullptr;
  306|    371|  switch (cost) {
  307|    358|    case TOLL_FREE:
  ------------------
  |  Branch (307:5): [True: 358, False: 13]
  ------------------
  308|    358|      desc = &(phone_metadata->toll_free());
  309|    358|      break;
  310|      1|    case STANDARD_RATE:
  ------------------
  |  Branch (310:5): [True: 1, False: 370]
  ------------------
  311|      1|      desc = &(phone_metadata->standard_rate());
  312|      1|      break;
  313|      7|    case PREMIUM_RATE:
  ------------------
  |  Branch (313:5): [True: 7, False: 364]
  ------------------
  314|      7|      desc = &(phone_metadata->premium_rate());
  315|      7|      break;
  316|      5|    default:
  ------------------
  |  Branch (316:5): [True: 5, False: 366]
  ------------------
  317|       |      // UNKNOWN_COST numbers are computed by the process of elimination from
  318|       |      // the other cost categories.
  319|      5|      break;
  320|    371|  }
  321|    371|  if (desc != nullptr && desc->has_example_number()) {
  ------------------
  |  Branch (321:7): [True: 366, False: 5]
  |  Branch (321:26): [True: 356, False: 10]
  ------------------
  322|    356|    return desc->example_number();
  323|    356|  }
  324|     15|  return "";
  325|    371|}
_ZNK4i18n12phonenumbers15ShortNumberInfo25ConnectsToEmergencyNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_:
  328|  3.06k|    const string& region_code) const {
  329|  3.06k|  return MatchesEmergencyNumberHelper(number, region_code,
  330|  3.06k|      true /* allows prefix match */);
  331|  3.06k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo17IsEmergencyNumberERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_:
  334|  3.60k|    const string& region_code) const {
  335|  3.60k|  return MatchesEmergencyNumberHelper(number, region_code,
  336|  3.60k|      false /* doesn't allow prefix match */);
  337|  3.60k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo28MatchesEmergencyNumberHelperERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_b:
  340|  6.67k|    const string& region_code, bool allow_prefix_match) const {
  341|  6.67k|  string extracted_number;
  342|  6.67k|  phone_util_.ExtractPossibleNumber(number, &extracted_number);
  343|  6.67k|  if (phone_util_.StartsWithPlusCharsPattern(extracted_number)) {
  ------------------
  |  Branch (343:7): [True: 2.58k, False: 4.08k]
  ------------------
  344|       |    // Returns false if the number starts with a plus sign. We don't believe
  345|       |    // dialing the country code before emergency numbers (e.g. +1911) works,
  346|       |    // but later, if that proves to work, we can add additional logic here to
  347|       |    // handle it.
  348|  2.58k|    return false;
  349|  2.58k|  }
  350|  4.08k|  const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
  351|  4.08k|  if (!metadata || !metadata->has_emergency()) {
  ------------------
  |  Branch (351:7): [True: 2.84k, False: 1.24k]
  |  Branch (351:20): [True: 0, False: 1.24k]
  ------------------
  352|  2.84k|    return false;
  353|  2.84k|  }
  354|  1.24k|  phone_util_.NormalizeDigitsOnly(&extracted_number);
  355|  1.24k|  bool allow_prefix_match_for_region =
  356|  1.24k|      allow_prefix_match &&
  ------------------
  |  Branch (356:7): [True: 351, False: 894]
  ------------------
  357|  1.24k|      regions_where_emergency_numbers_must_be_exact_->find(region_code) ==
  ------------------
  |  Branch (357:7): [True: 336, False: 15]
  ------------------
  358|    351|          regions_where_emergency_numbers_must_be_exact_->end();
  359|  1.24k|  return matcher_api_->MatchNationalNumber(
  360|  1.24k|      extracted_number, metadata->emergency(), allow_prefix_match_for_region);
  361|  4.08k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo17IsCarrierSpecificERKNS0_11PhoneNumberE:
  363|  3.06k|bool ShortNumberInfo::IsCarrierSpecific(const PhoneNumber& number) const {
  364|  3.06k|  list<string> region_codes;
  365|  3.06k|  phone_util_.GetRegionCodesForCountryCallingCode(number.country_code(),
  366|  3.06k|                                                  &region_codes);
  367|  3.06k|  string region_code;
  368|  3.06k|  GetRegionCodeForShortNumberFromRegionList(number, region_codes, &region_code);
  369|  3.06k|  string national_number;
  370|  3.06k|  phone_util_.GetNationalSignificantNumber(number, &national_number);
  371|  3.06k|  const PhoneMetadata* phone_metadata = GetMetadataForRegion(region_code);
  372|  3.06k|  return phone_metadata &&
  ------------------
  |  Branch (372:10): [True: 504, False: 2.56k]
  ------------------
  373|  3.06k|         MatchesPossibleNumberAndNationalNumber(*matcher_api_, national_number,
  ------------------
  |  Branch (373:10): [True: 36, False: 468]
  ------------------
  374|    504|             phone_metadata->carrier_specific());
  375|  3.06k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo26IsCarrierSpecificForRegionERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  378|  3.06k|    const string& region_dialing_from) const {
  379|  3.06k|  if (!RegionDialingFromMatchesNumber(number, region_dialing_from)) {
  ------------------
  |  Branch (379:7): [True: 2.82k, False: 239]
  ------------------
  380|  2.82k|    return false;
  381|  2.82k|  }
  382|    239|  string national_number;
  383|    239|  phone_util_.GetNationalSignificantNumber(number, &national_number);
  384|    239|  const PhoneMetadata* phone_metadata =
  385|    239|      GetMetadataForRegion(region_dialing_from);
  386|    239|  return phone_metadata &&
  ------------------
  |  Branch (386:10): [True: 229, False: 10]
  ------------------
  387|    239|         MatchesPossibleNumberAndNationalNumber(*matcher_api_, national_number,
  ------------------
  |  Branch (387:10): [True: 1, False: 228]
  ------------------
  388|    229|             phone_metadata->carrier_specific());
  389|  3.06k|}
_ZNK4i18n12phonenumbers15ShortNumberInfo21IsSmsServiceForRegionERKNS0_11PhoneNumberERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEE:
  392|  3.06k|    const string& region_dialing_from) const {
  393|  3.06k|  if (!RegionDialingFromMatchesNumber(number, region_dialing_from)) {
  ------------------
  |  Branch (393:7): [True: 2.82k, False: 239]
  ------------------
  394|  2.82k|    return false;
  395|  2.82k|  }
  396|    239|  string national_number;
  397|    239|  phone_util_.GetNationalSignificantNumber(number, &national_number);
  398|    239|  const PhoneMetadata* phone_metadata =
  399|    239|      GetMetadataForRegion(region_dialing_from);
  400|    239|  return phone_metadata &&
  ------------------
  |  Branch (400:10): [True: 229, False: 10]
  ------------------
  401|    239|         MatchesPossibleNumberAndNationalNumber(*matcher_api_, national_number,
  ------------------
  |  Branch (401:10): [True: 1, False: 228]
  ------------------
  402|    229|             phone_metadata->sms_services());
  403|  3.06k|}
shortnumberinfo.cc:_ZN4i18n12phonenumbers12_GLOBAL__N_138MatchesPossibleNumberAndNationalNumberERKNS0_10MatcherApiERKNSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEERKNS0_15PhoneNumberDescE:
   83|  21.6k|    const PhoneNumberDesc& desc) {
   84|  21.6k|  const RepeatedField<int>& lengths = desc.possible_length();
   85|  21.6k|  if (desc.possible_length_size() > 0 &&
  ------------------
  |  Branch (85:7): [True: 3.35k, False: 18.2k]
  |  Branch (85:7): [True: 2.49k, False: 19.1k]
  ------------------
   86|  21.6k|      std::find(lengths.begin(), lengths.end(), number.length()) ==
  ------------------
  |  Branch (86:7): [True: 2.49k, False: 857]
  ------------------
   87|  3.35k|          lengths.end()) {
   88|  2.49k|    return false;
   89|  2.49k|  }
   90|  19.1k|  return matcher_api.MatchNationalNumber(number, desc, false);
   91|  21.6k|}

_ZNK4i18n12phonenumbers3gtl12OrderByFirstclINSt3__14pairIiPNS4_4listINS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENSA_ISC_EEEEEEEEbRKT_SJ_:
   25|   492k|  bool operator()(const T& p1, const T& p2) const {
   26|   492k|    return p1.first < p2.first;
   27|   492k|  }

_ZN4i18n12phonenumbers10SimpleItoaEi:
   40|    260|string SimpleItoa(int n) {
   41|    260|  return absl::StrCat(n);
   42|    260|}
_ZN4i18n12phonenumbers20TryStripPrefixStringERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEES9_PS7_:
   77|    260|bool TryStripPrefixString(const string& in, const string& prefix, string* out) {
   78|    260|  assert(out);
   79|    260|  const bool has_prefix = in.compare(0, prefix.length(), prefix) == 0;
   80|    260|  out->assign(has_prefix ? in.substr(prefix.length()) : in);
  ------------------
  |  Branch (80:15): [True: 104, False: 156]
  ------------------
   81|       |
   82|    260|  return has_prefix;
   83|    260|}
_ZN4i18n12phonenumbers12safe_strto32ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPi:
   95|  1.80k|void safe_strto32(const string& s, int32 *n) {
   96|  1.80k|  GenericAtoi(s, n);
   97|  1.80k|}
_ZN4i18n12phonenumbers13safe_strtou64ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEPm:
   99|  1.11k|void safe_strtou64(const string& s, uint64 *n) {
  100|  1.11k|  GenericAtoi(s, n);
  101|  1.11k|}
_ZN4i18n12phonenumbers12StringHolderC2ERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  126|  10.4k|  : absl::AlphaNum(s)
  127|  10.4k|{}
_ZN4i18n12phonenumbers12StringHolderC2EPKc:
  130|  8.91k|  : absl::AlphaNum(cp)
  131|  8.91k|{}
_ZN4i18n12phonenumbers12StringHolderC2Em:
  134|  10.3k|  : absl::AlphaNum(n)
  135|  10.3k|{}
_ZN4i18n12phonenumbers12StringHolderD2Ev:
  137|  29.6k|StringHolder::~StringHolder() {}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_:
  154|      3|string StrCat(const StringHolder& s1, const StringHolder& s2) {
  155|      3|  return absl::StrCat(s1, s2);
  156|      3|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_:
  159|  2.93k|              const StringHolder& s3) {
  160|  2.93k|  return absl::StrCat(s1, s2, s3);
  161|  2.93k|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_:
  164|      1|              const StringHolder& s3, const StringHolder& s4) {
  165|      1|  return absl::StrCat(s1, s2, s3, s4);
  166|      1|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_:
  170|     22|              const StringHolder& s5) {
  171|     22|  return absl::StrCat(s1, s2, s3, s4, s5);
  172|     22|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_S3_S3_:
  183|      3|              const StringHolder& s7) {
  184|      3|  return absl::StrCat(s1, s2, s3, s4, s5, s6, s7);
  185|      3|}
_ZN4i18n12phonenumbers6StrCatERKNS0_12StringHolderES3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_S3_:
  264|      1|              const StringHolder& s15, const StringHolder& s16) {
  265|      1|  return absl::StrCat(s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12,
  266|      1|                      s13, s14, s15, s16);
  267|      1|}
_ZN4i18n12phonenumbers9StrAppendEPNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKNS0_12StringHolderE:
  271|  20.7k|void StrAppend(string* dest, const StringHolder& s1) {
  272|  20.7k|  absl::StrAppend(dest, s1);
  273|  20.7k|}
_ZN4i18n12phonenumbers11GenericAtoiIiEEvRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPT_:
   90|  1.80k|void GenericAtoi(const string& s, T* out) {
   91|  1.80k|  if (!absl::SimpleAtoi(s, out))
  ------------------
  |  Branch (91:7): [True: 0, False: 1.80k]
  ------------------
   92|      0|    *out = 0;
   93|  1.80k|}
_ZN4i18n12phonenumbers11GenericAtoiImEEvRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEPT_:
   90|  1.11k|void GenericAtoi(const string& s, T* out) {
   91|  1.11k|  if (!absl::SimpleAtoi(s, out))
  ------------------
  |  Branch (91:7): [True: 0, False: 1.11k]
  ------------------
   92|      0|    *out = 0;
   93|  1.11k|}

charntorune:
   68|   174k|{
   69|   174k|	int c, c1, c2, c3;
   70|   174k|	long l;
   71|       |
   72|       |	/* When we're not allowed to read anything */
   73|   174k|	if(length <= 0) {
  ------------------
  |  Branch (73:5): [True: 0, False: 174k]
  ------------------
   74|      0|		goto badlen;
   75|      0|	}
   76|       |
   77|       |	/*
   78|       |	 * one character sequence (7-bit value)
   79|       |	 *	00000-0007F => T1
   80|       |	 */
   81|   174k|	c = *(uchar*)str;
   82|   174k|	if(c < Tx) {
  ------------------
  |  Branch (82:5): [True: 158k, False: 16.1k]
  ------------------
   83|   158k|		*rune = (Rune)c;
   84|   158k|		return 1;
   85|   158k|	}
   86|       |
   87|       |	// If we can't read more than one character we must stop
   88|  16.1k|	if(length <= 1) {
  ------------------
  |  Branch (88:5): [True: 1.04k, False: 15.1k]
  ------------------
   89|  1.04k|		goto badlen;
   90|  1.04k|	}
   91|       |
   92|       |	/*
   93|       |	 * two character sequence (11-bit value)
   94|       |	 *	0080-07FF => T2 Tx
   95|       |	 */
   96|  15.1k|	c1 = *(uchar*)(str+1) ^ Tx;
   97|  15.1k|	if(c1 & Testx)
  ------------------
  |  Branch (97:5): [True: 4.02k, False: 11.0k]
  ------------------
   98|  4.02k|		goto bad;
   99|  11.0k|	if(c < T3) {
  ------------------
  |  Branch (99:5): [True: 4.81k, False: 6.27k]
  ------------------
  100|  4.81k|		if(c < T2)
  ------------------
  |  Branch (100:6): [True: 1.84k, False: 2.96k]
  ------------------
  101|  1.84k|			goto bad;
  102|  2.96k|		l = ((c << Bitx) | c1) & Rune2;
  103|  2.96k|		if(l <= Rune1)
  ------------------
  |  Branch (103:6): [True: 150, False: 2.81k]
  ------------------
  104|    150|			goto bad;
  105|  2.81k|		*rune = (Rune)l;
  106|  2.81k|		return 2;
  107|  2.96k|	}
  108|       |
  109|       |	// If we can't read more than two characters we must stop
  110|  6.27k|	if(length <= 2) {
  ------------------
  |  Branch (110:5): [True: 54, False: 6.21k]
  ------------------
  111|     54|		goto badlen;
  112|     54|	}
  113|       |
  114|       |	/*
  115|       |	 * three character sequence (16-bit value)
  116|       |	 *	0800-FFFF => T3 Tx Tx
  117|       |	 */
  118|  6.21k|	c2 = *(uchar*)(str+2) ^ Tx;
  119|  6.21k|	if(c2 & Testx)
  ------------------
  |  Branch (119:5): [True: 487, False: 5.73k]
  ------------------
  120|    487|		goto bad;
  121|  5.73k|	if(c < T4) {
  ------------------
  |  Branch (121:5): [True: 2.79k, False: 2.94k]
  ------------------
  122|  2.79k|		l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3;
  123|  2.79k|		if(l <= Rune2)
  ------------------
  |  Branch (123:6): [True: 161, False: 2.62k]
  ------------------
  124|    161|			goto bad;
  125|  2.62k|		if (SurrogateMin <= l && l <= SurrogateMax)
  ------------------
  |  Branch (125:7): [True: 1.32k, False: 1.30k]
  |  Branch (125:28): [True: 114, False: 1.20k]
  ------------------
  126|    114|			goto bad;
  127|  2.51k|		*rune = (Rune)l;
  128|  2.51k|		return 3;
  129|  2.62k|	}
  130|       |
  131|  2.94k|	if (length <= 3)
  ------------------
  |  Branch (131:6): [True: 27, False: 2.91k]
  ------------------
  132|     27|		goto badlen;
  133|       |
  134|       |	/*
  135|       |	 * four character sequence (21-bit value)
  136|       |	 *	10000-1FFFFF => T4 Tx Tx Tx
  137|       |	 */
  138|  2.91k|	c3 = *(uchar*)(str+3) ^ Tx;
  139|  2.91k|	if (c3 & Testx)
  ------------------
  |  Branch (139:6): [True: 166, False: 2.74k]
  ------------------
  140|    166|		goto bad;
  141|  2.74k|	if (c < T5) {
  ------------------
  |  Branch (141:6): [True: 2.66k, False: 82]
  ------------------
  142|  2.66k|		l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4;
  143|  2.66k|		if (l <= Rune3 || l > Runemax)
  ------------------
  |  Branch (143:7): [True: 159, False: 2.50k]
  |  Branch (143:21): [True: 111, False: 2.39k]
  ------------------
  144|    270|			goto bad;
  145|  2.39k|		*rune = (Rune)l;
  146|  2.39k|		return 4;
  147|  2.66k|	}
  148|       |
  149|       |	// Support for 5-byte or longer UTF-8 would go here, but
  150|       |	// since we don't have that, we'll just fall through to bad.
  151|       |
  152|       |	/*
  153|       |	 * bad decoding
  154|       |	 */
  155|  7.30k|bad:
  156|  7.30k|	*rune = Bad;
  157|  7.30k|	return 1;
  158|  1.12k|badlen:
  159|  1.12k|	*rune = Bad;
  160|  1.12k|	return 0;
  161|       |
  162|  2.74k|}
chartorune:
  171|     42|{
  172|     42|	int c, c1, c2, c3;
  173|     42|	long l;
  174|       |
  175|       |	/*
  176|       |	 * one character sequence
  177|       |	 *	00000-0007F => T1
  178|       |	 */
  179|     42|	c = *(uchar*)str;
  180|     42|	if(c < Tx) {
  ------------------
  |  Branch (180:5): [True: 30, False: 12]
  ------------------
  181|     30|		*rune = (Rune)c;
  182|     30|		return 1;
  183|     30|	}
  184|       |
  185|       |	/*
  186|       |	 * two character sequence
  187|       |	 *	0080-07FF => T2 Tx
  188|       |	 */
  189|     12|	c1 = *(uchar*)(str+1) ^ Tx;
  190|     12|	if(c1 & Testx)
  ------------------
  |  Branch (190:5): [True: 0, False: 12]
  ------------------
  191|      0|		goto bad;
  192|     12|	if(c < T3) {
  ------------------
  |  Branch (192:5): [True: 0, False: 12]
  ------------------
  193|      0|		if(c < T2)
  ------------------
  |  Branch (193:6): [True: 0, False: 0]
  ------------------
  194|      0|			goto bad;
  195|      0|		l = ((c << Bitx) | c1) & Rune2;
  196|      0|		if(l <= Rune1)
  ------------------
  |  Branch (196:6): [True: 0, False: 0]
  ------------------
  197|      0|			goto bad;
  198|      0|		*rune = (Rune)l;
  199|      0|		return 2;
  200|      0|	}
  201|       |
  202|       |	/*
  203|       |	 * three character sequence
  204|       |	 *	0800-FFFF => T3 Tx Tx
  205|       |	 */
  206|     12|	c2 = *(uchar*)(str+2) ^ Tx;
  207|     12|	if(c2 & Testx)
  ------------------
  |  Branch (207:5): [True: 0, False: 12]
  ------------------
  208|      0|		goto bad;
  209|     12|	if(c < T4) {
  ------------------
  |  Branch (209:5): [True: 12, False: 0]
  ------------------
  210|     12|		l = ((((c << Bitx) | c1) << Bitx) | c2) & Rune3;
  211|     12|		if(l <= Rune2)
  ------------------
  |  Branch (211:6): [True: 0, False: 12]
  ------------------
  212|      0|			goto bad;
  213|     12|		if (SurrogateMin <= l && l <= SurrogateMax)
  ------------------
  |  Branch (213:7): [True: 3, False: 9]
  |  Branch (213:28): [True: 0, False: 3]
  ------------------
  214|      0|			goto bad;
  215|     12|		*rune = (Rune)l;
  216|     12|		return 3;
  217|     12|	}
  218|       |
  219|       |	/*
  220|       |	 * four character sequence (21-bit value)
  221|       |	 *	10000-1FFFFF => T4 Tx Tx Tx
  222|       |	 */
  223|      0|	c3 = *(uchar*)(str+3) ^ Tx;
  224|      0|	if (c3 & Testx)
  ------------------
  |  Branch (224:6): [True: 0, False: 0]
  ------------------
  225|      0|		goto bad;
  226|      0|	if (c < T5) {
  ------------------
  |  Branch (226:6): [True: 0, False: 0]
  ------------------
  227|      0|		l = ((((((c << Bitx) | c1) << Bitx) | c2) << Bitx) | c3) & Rune4;
  228|      0|		if (l <= Rune3 || l > Runemax)
  ------------------
  |  Branch (228:7): [True: 0, False: 0]
  |  Branch (228:21): [True: 0, False: 0]
  ------------------
  229|      0|			goto bad;
  230|      0|		*rune = (Rune)l;
  231|      0|		return 4;
  232|      0|	}
  233|       |
  234|       |	/*
  235|       |	 * Support for 5-byte or longer UTF-8 would go here, but
  236|       |	 * since we don't have that, we'll just fall through to bad.
  237|       |	 */
  238|       |
  239|       |	/*
  240|       |	 * bad decoding
  241|       |	 */
  242|      0|bad:
  243|      0|	*rune = Bad;
  244|      0|	return 1;
  245|      0|}
isvalidcharntorune:
  249|  5.65k|{
  250|  5.65k|	*consumed = charntorune(rune, str, length);
  251|  5.65k|	return *rune != Runeerror || *consumed == 3;
  ------------------
  |  Branch (251:9): [True: 1.83k, False: 3.82k]
  |  Branch (251:31): [True: 0, False: 3.82k]
  ------------------
  252|  5.65k|}

_ZN4i18n12phonenumbers11UnicodeText4Repr7reserveEi:
  109|  1.10k|void UnicodeText::Repr::reserve(int new_capacity) {
  110|       |  // If there's already enough capacity, and we're an owner, do nothing.
  111|  1.10k|  if (capacity_ >= new_capacity && ours_) return;
  ------------------
  |  Branch (111:7): [True: 0, False: 1.10k]
  |  Branch (111:36): [True: 0, False: 0]
  ------------------
  112|       |
  113|       |  // Otherwise, allocate a new buffer.
  114|  1.10k|  capacity_ = max(new_capacity, (3 * capacity_) / 2 + 20);
  115|  1.10k|  char* new_data = new char[capacity_];
  116|       |
  117|       |  // If there is an old buffer, copy it into the new buffer.
  118|  1.10k|  if (data_) {
  ------------------
  |  Branch (118:7): [True: 0, False: 1.10k]
  ------------------
  119|      0|    memcpy(new_data, data_, size_);
  120|      0|    if (ours_) delete[] data_;  // If we owned the old buffer, free it.
  ------------------
  |  Branch (120:9): [True: 0, False: 0]
  ------------------
  121|      0|  }
  122|  1.10k|  data_ = new_data;
  123|  1.10k|  ours_ = true;  // We own the new buffer.
  124|       |  // size_ is unchanged.
  125|  1.10k|}
_ZN4i18n12phonenumbers11UnicodeText4Repr6resizeEi:
  127|  1.10k|void UnicodeText::Repr::resize(int new_size) {
  128|  1.10k|  if (new_size == 0) {
  ------------------
  |  Branch (128:7): [True: 0, False: 1.10k]
  ------------------
  129|      0|    clear();
  130|  1.10k|  } else {
  131|  1.10k|    if (!ours_ || new_size > capacity_) reserve(new_size);
  ------------------
  |  Branch (131:9): [True: 0, False: 1.10k]
  |  Branch (131:19): [True: 1.10k, False: 0]
  ------------------
  132|       |    // Clear the memory in the expanded part.
  133|  1.10k|    if (size_ < new_size) memset(data_ + size_, 0, new_size - size_);
  ------------------
  |  Branch (133:9): [True: 1.10k, False: 0]
  ------------------
  134|  1.10k|    size_ = new_size;
  135|  1.10k|    ours_ = true;
  136|  1.10k|  }
  137|  1.10k|}
_ZN4i18n12phonenumbers11UnicodeText4Repr4CopyEPKci:
  148|  1.10k|void UnicodeText::Repr::Copy(const char* data, int size) {
  149|  1.10k|  resize(size);
  150|  1.10k|  memcpy(data_, data, size);
  151|  1.10k|}
_ZN4i18n12phonenumbers11UnicodeText4Repr7PointToEPKci:
  162|  19.1k|void UnicodeText::Repr::PointTo(const char* data, int size) {
  163|  19.1k|  if (ours_ && data_) delete[] data_;  // If we owned the old buffer, free it.
  ------------------
  |  Branch (163:7): [True: 19.1k, False: 0]
  |  Branch (163:16): [True: 0, False: 19.1k]
  ------------------
  164|  19.1k|  data_ = const_cast<char*>(data);
  165|  19.1k|  size_ = size;
  166|  19.1k|  capacity_ = size;
  167|  19.1k|  ours_ = false;
  168|  19.1k|}
_ZN4i18n12phonenumbers11UnicodeTextC2Ev:
  196|  20.2k|UnicodeText::UnicodeText() {
  197|  20.2k|}
_ZN4i18n12phonenumbers11UnicodeText13UTF8SubstringERKNS1_14const_iteratorES4_:
  212|  14.8k|                                  const const_iterator& last) {
  213|  14.8k|  assert(first <= last && "Incompatible iterators");
  214|  14.8k|  return string(first.it_, last.it_ - first.it_);
  215|  14.8k|}
_ZN4i18n12phonenumbers11UnicodeText11PointToUTF8EPKci:
  271|  20.2k|UnicodeText& UnicodeText::PointToUTF8(const char* buffer, int byte_length) {
  272|  20.2k|  repr_.utf8_was_valid_ = UniLib:: IsInterchangeValid(buffer, byte_length);
  273|  20.2k|  if (repr_.utf8_was_valid_) {
  ------------------
  |  Branch (273:7): [True: 19.1k, False: 1.10k]
  ------------------
  274|  19.1k|    repr_.PointTo(buffer, byte_length);
  275|  19.1k|  } else {
  276|  1.10k|    LOG(WARNING) << "UTF-8 buffer is not interchange-valid.";
  277|  1.10k|    repr_.Copy(buffer, byte_length);
  278|  1.10k|    repr_.size_ = ConvertToInterchangeValid(repr_.data_, byte_length);
  279|  1.10k|  }
  280|  20.2k|  return *this;
  281|  20.2k|}
_ZN4i18n12phonenumbers11UnicodeTextD2Ev:
  363|  20.2k|UnicodeText::~UnicodeText() {}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratorC2Ev:
  417|  8.31k|UnicodeText::const_iterator::const_iterator() : it_(0) {}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratorC2ERKS2_:
  420|  46.0k|    : it_(other.it_) {
  421|  46.0k|}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratoraSERKS2_:
  424|  8.31k|UnicodeText::const_iterator::operator=(const const_iterator& other) {
  425|  8.31k|  if (&other != this)
  ------------------
  |  Branch (425:7): [True: 8.31k, False: 0]
  ------------------
  426|  8.31k|    it_ = other.it_;
  427|  8.31k|  return *this;
  428|  8.31k|}
_ZNK4i18n12phonenumbers11UnicodeText5beginEv:
  430|  27.2k|UnicodeText::const_iterator UnicodeText::begin() const {
  431|  27.2k|  return const_iterator(repr_.data_);
  432|  27.2k|}
_ZNK4i18n12phonenumbers11UnicodeText3endEv:
  434|  62.3k|UnicodeText::const_iterator UnicodeText::end() const {
  435|  62.3k|  return const_iterator(repr_.data_ + repr_.size_);
  436|  62.3k|}
_ZN4i18n12phonenumbersltERKNS0_11UnicodeText14const_iteratorES4_:
  439|  14.8k|               const UnicodeText::const_iterator& rhs) {
  440|  14.8k|  return lhs.it_ < rhs.it_;
  441|  14.8k|}
_ZNK4i18n12phonenumbers11UnicodeText14const_iteratordeEv:
  443|  21.6k|char32 UnicodeText::const_iterator::operator*() const {
  444|       |  // (We could call chartorune here, but that does some
  445|       |  // error-checking, and we're guaranteed that our data is valid
  446|       |  // UTF-8. Also, we expect this routine to be called very often. So
  447|       |  // for speed, we do the calculation ourselves.)
  448|       |
  449|       |  // Convert from UTF-8
  450|  21.6k|  uint8 byte1 = static_cast<uint8>(it_[0]);
  451|  21.6k|  if (byte1 < 0x80)
  ------------------
  |  Branch (451:7): [True: 20.9k, False: 661]
  ------------------
  452|  20.9k|    return byte1;
  453|       |
  454|    661|  uint8 byte2 = static_cast<uint8>(it_[1]);
  455|    661|  if (byte1 < 0xE0)
  ------------------
  |  Branch (455:7): [True: 302, False: 359]
  ------------------
  456|    302|    return ((byte1 & 0x1F) << 6)
  457|    302|          | (byte2 & 0x3F);
  458|       |
  459|    359|  uint8 byte3 = static_cast<uint8>(it_[2]);
  460|    359|  if (byte1 < 0xF0)
  ------------------
  |  Branch (460:7): [True: 167, False: 192]
  ------------------
  461|    167|    return ((byte1 & 0x0F) << 12)
  462|    167|         | ((byte2 & 0x3F) << 6)
  463|    167|         |  (byte3 & 0x3F);
  464|       |
  465|    192|  uint8 byte4 = static_cast<uint8>(it_[3]);
  466|    192|  return ((byte1 & 0x07) << 18)
  467|    192|       | ((byte2 & 0x3F) << 12)
  468|    192|       | ((byte3 & 0x3F) << 6)
  469|    192|       |  (byte4 & 0x3F);
  470|    359|}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratorppEv:
  472|  27.4k|UnicodeText::const_iterator& UnicodeText::const_iterator::operator++() {
  473|  27.4k|  it_ += UniLib::OneCharLen(it_);
  474|  27.4k|  return *this;
  475|  27.4k|}
_ZN4i18n12phonenumbers11UnicodeText14const_iteratormmEv:
  477|  8.82k|UnicodeText::const_iterator& UnicodeText::const_iterator::operator--() {
  478|  11.0k|  while (UniLib::IsTrailByte(*--it_)) { }
  ------------------
  |  Branch (478:10): [True: 2.22k, False: 8.82k]
  ------------------
  479|  8.82k|  return *this;
  480|  8.82k|}
_ZNK4i18n12phonenumbers11UnicodeText14const_iterator8get_utf8EPc:
  482|  21.3k|int UnicodeText::const_iterator::get_utf8(char* utf8_output) const {
  483|  21.3k|  utf8_output[0] = it_[0];
  484|  21.3k|  if (static_cast<unsigned char>(it_[0]) < 0x80)
  ------------------
  |  Branch (484:7): [True: 19.5k, False: 1.88k]
  ------------------
  485|  19.5k|    return 1;
  486|       |
  487|  1.88k|  utf8_output[1] = it_[1];
  488|  1.88k|  if (static_cast<unsigned char>(it_[0]) < 0xE0)
  ------------------
  |  Branch (488:7): [True: 614, False: 1.27k]
  ------------------
  489|    614|    return 2;
  490|       |
  491|  1.27k|  utf8_output[2] = it_[2];
  492|  1.27k|  if (static_cast<unsigned char>(it_[0]) < 0xF0)
  ------------------
  |  Branch (492:7): [True: 757, False: 514]
  ------------------
  493|    757|    return 3;
  494|       |
  495|    514|  utf8_output[3] = it_[3];
  496|    514|  return 4;
  497|  1.27k|}
unicodetext.cc:_ZN4i18n12phonenumbersL25ConvertToInterchangeValidEPci:
   58|  1.10k|static int ConvertToInterchangeValid(char* start, int len) {
   59|       |  // This routine is called only when we've discovered that a UTF-8 buffer
   60|       |  // that was passed to CopyUTF8, TakeOwnershipOfUTF8, or PointToUTF8
   61|       |  // was not interchange valid. This indicates a bug in the caller, and
   62|       |  // a LOG(WARNING) is done in that case.
   63|       |  // This is similar to CoerceToInterchangeValid, but it replaces each
   64|       |  // structurally valid byte with a space, and each non-interchange
   65|       |  // character with a space, even when that character requires more
   66|       |  // than one byte in UTF8. E.g., "\xEF\xB7\x90" (U+FDD0) is
   67|       |  // structurally valid UTF8, but U+FDD0 is not an interchange-valid
   68|       |  // code point. The result should contain one space, not three.
   69|       |  //
   70|       |  // Since the conversion never needs to write more data than it
   71|       |  // reads, it is safe to change the buffer in place. It returns the
   72|       |  // number of bytes written.
   73|  1.10k|  char* const in = start;
   74|  1.10k|  char* out = start;
   75|  1.10k|  char* const end = start + len;
   76|  6.76k|  while (start < end) {
  ------------------
  |  Branch (76:10): [True: 5.99k, False: 772]
  ------------------
   77|  5.99k|    int good = UniLib::SpanInterchangeValid(start, static_cast<int>(end - start));
   78|  5.99k|    if (good > 0) {
  ------------------
  |  Branch (78:9): [True: 1.24k, False: 4.74k]
  ------------------
   79|  1.24k|      if (out != start) {
  ------------------
  |  Branch (79:11): [True: 83, False: 1.16k]
  ------------------
   80|     83|        memmove(out, start, good);
   81|     83|      }
   82|  1.24k|      out += good;
   83|  1.24k|      start += good;
   84|  1.24k|      if (start == end) {
  ------------------
  |  Branch (84:11): [True: 332, False: 914]
  ------------------
   85|    332|        break;
   86|    332|      }
   87|  1.24k|    }
   88|       |    // Is the current string invalid UTF8 or just non-interchange UTF8?
   89|  5.65k|    Rune rune;
   90|  5.65k|    int n;
   91|  5.65k|    if (isvalidcharntorune(start, static_cast<int>(end - start), &rune, &n)) {
  ------------------
  |  Branch (91:9): [True: 1.83k, False: 3.82k]
  ------------------
   92|       |      // structurally valid UTF8, but not interchange valid
   93|  1.83k|      start += n;  // Skip over the whole character.
   94|  3.82k|    } else {  // bad UTF8
   95|  3.82k|      start += 1;  // Skip over just one byte
   96|  3.82k|    }
   97|  5.65k|    *out++ = ' ';
   98|  5.65k|  }
   99|  1.10k|  return static_cast<int>(out - in);
  100|  1.10k|}

_ZN4i18n12phonenumberseqERKNS0_11UnicodeText14const_iteratorES4_:
  214|  55.5k|    friend bool operator==(const CI& lhs, const CI& rhs) {
  215|  55.5k|      return lhs.it_ == rhs.it_; }
_ZN4i18n12phonenumbersneERKNS0_11UnicodeText14const_iteratorES4_:
  216|  47.2k|    friend bool operator!=(const CI& lhs, const CI& rhs) {
  217|  47.2k|      return !(lhs == rhs); }
_ZN4i18n12phonenumbersleERKNS0_11UnicodeText14const_iteratorES4_:
  221|  14.8k|    friend bool operator<=(const CI& lhs, const CI& rhs) {
  222|  14.8k|      return !(rhs < lhs); }
_ZN4i18n12phonenumbers11UnicodeText14const_iteratorC2EPKc:
  242|  89.5k|    explicit const_iterator(const char* it) : it_(it) {}
_ZN4i18n12phonenumbers11UnicodeText22const_reverse_iteratorC2ENS1_14const_iteratorE:
  253|  7.44k|        std::reverse_iterator<const_iterator>(it) {}
_ZNK4i18n12phonenumbers11UnicodeText22const_reverse_iterator8get_utf8EPc:
  258|  8.11k|    int get_utf8(char* buf) const {
  259|  8.11k|      const_iterator tmp_it = base();
  260|  8.11k|      return (--tmp_it).get_utf8(buf);
  261|  8.11k|    }
_ZNK4i18n12phonenumbers11UnicodeText12UTF8WasValidEv:
  317|  20.2k|  bool UTF8WasValid() const { return repr_.utf8_was_valid_; }
_ZN4i18n12phonenumbers11UnicodeText4ReprC2Ev:
  340|  20.2k|    Repr() : data_(NULL), size_(0), capacity_(0), ours_(true), utf8_was_valid_(true) {}
_ZN4i18n12phonenumbers11UnicodeText4ReprD2Ev:
  341|  20.2k|    ~Repr() { if (ours_) delete[] data_; }
  ------------------
  |  Branch (341:19): [True: 1.10k, False: 19.1k]
  ------------------

_ZN4i18n12phonenumbers6UniLib20SpanInterchangeValidEPKci:
   48|  26.2k|int SpanInterchangeValid(const char* begin, int byte_length) {
   49|  26.2k|  Rune rune;
   50|  26.2k|  const char* p = begin;
   51|  26.2k|  const char* end = begin + byte_length;
   52|   188k|  while (p < end) {
  ------------------
  |  Branch (52:10): [True: 168k, False: 19.4k]
  ------------------
   53|   168k|    int bytes_consumed = charntorune(&rune, p, static_cast<int>(end - p));
   54|       |    // We want to accept Runeerror == U+FFFD as a valid char, but it is used
   55|       |    // by chartorune to indicate error. Luckily, the real codepoint is size 3
   56|       |    // while errors return bytes_consumed <= 1.
   57|   168k|    if ((rune == Runeerror && bytes_consumed <= 1) ||
  ------------------
  |  Branch (57:10): [True: 4.69k, False: 164k]
  |  Branch (57:31): [True: 4.61k, False: 83]
  ------------------
   58|   168k|        !IsInterchangeValidCodepoint(rune)) {
  ------------------
  |  Branch (58:9): [True: 2.15k, False: 162k]
  ------------------
   59|  6.76k|      break;  // Found
   60|  6.76k|    }
   61|   162k|    p += bytes_consumed;
   62|   162k|  }
   63|  26.2k|  return static_cast<int>(p - begin);
   64|  26.2k|}
unilib.cc:_ZN4i18n12phonenumbers6UniLib12_GLOBAL__N_127IsInterchangeValidCodepointEi:
   39|   164k|inline bool IsInterchangeValidCodepoint(char32 c) {
   40|   164k|  return !((c >= 0x00 && c <= 0x08) || c == 0x0B || (c >= 0x0E && c <= 0x1F) ||
  ------------------
  |  Branch (40:13): [True: 164k, False: 0]
  |  Branch (40:26): [True: 1.41k, False: 162k]
  |  Branch (40:40): [True: 152, False: 162k]
  |  Branch (40:54): [True: 160k, False: 1.63k]
  |  Branch (40:67): [True: 223, False: 160k]
  ------------------
   41|   164k|           (c >= 0x7F && c <= 0x9F) ||
  ------------------
  |  Branch (41:13): [True: 7.69k, False: 154k]
  |  Branch (41:26): [True: 226, False: 7.47k]
  ------------------
   42|   164k|           (c >= 0xD800 && c <= 0xDFFF) ||
  ------------------
  |  Branch (42:13): [True: 3.51k, False: 158k]
  |  Branch (42:28): [True: 0, False: 3.51k]
  ------------------
   43|   164k|           (c >= 0xFDD0 && c <= 0xFDEF) || (c&0xFFFE) == 0xFFFE);
  ------------------
  |  Branch (43:13): [True: 3.28k, False: 158k]
  |  Branch (43:28): [True: 95, False: 3.19k]
  |  Branch (43:44): [True: 36, False: 162k]
  ------------------
   44|   164k|}

_ZN4i18n12phonenumbers6UniLib10OneCharLenEPKc:
   62|  27.4k|inline int OneCharLen(const char* src) {
   63|  27.4k|  return kUTF8LenTbl[*reinterpret_cast<const uint8*>(src)];
   64|  27.4k|}
_ZN4i18n12phonenumbers6UniLib11IsTrailByteEc:
   72|  11.0k|inline bool IsTrailByte(char x) {
   73|       |  // return (x & 0xC0) == 0x80;
   74|       |  // Since trail bytes are always in [0x80, 0xBF], we can optimize:
   75|  11.0k|  return static_cast<signed char>(x) < -0x40;
   76|  11.0k|}
_ZN4i18n12phonenumbers6UniLib18IsInterchangeValidEPKci:
   88|  20.2k|inline bool IsInterchangeValid(const char* src, int byte_length) {
   89|  20.2k|  return (byte_length == SpanInterchangeValid(src, byte_length));
   90|  20.2k|}

_Z22ConsumeShortNumberCostR18FuzzedDataProvider:
   35|  3.06k|    FuzzedDataProvider& fuzzed_data) {
   36|  3.06k|  switch (fuzzed_data.ConsumeIntegralInRange(0, 4)) {
   37|  3.01k|    case 0: return i18n::phonenumbers::ShortNumberInfo::TOLL_FREE;
  ------------------
  |  Branch (37:5): [True: 3.01k, False: 48]
  ------------------
   38|     10|    case 1: return i18n::phonenumbers::ShortNumberInfo::STANDARD_RATE;
  ------------------
  |  Branch (38:5): [True: 10, False: 3.05k]
  ------------------
   39|     17|    case 2: return i18n::phonenumbers::ShortNumberInfo::PREMIUM_RATE;
  ------------------
  |  Branch (39:5): [True: 17, False: 3.04k]
  ------------------
   40|     21|    default: return i18n::phonenumbers::ShortNumberInfo::UNKNOWN_COST;
  ------------------
  |  Branch (40:5): [True: 21, False: 3.04k]
  ------------------
   41|  3.06k|  }
   42|  3.06k|}
LLVMFuzzerTestOneInput:
   44|  3.06k|extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
   45|       |  // setup the data provider and util
   46|  3.06k|  FuzzedDataProvider fuzzed_data(data, size);
   47|  3.06k|  i18n::phonenumbers::PhoneNumberUtil* phone_util = 
   48|  3.06k|      i18n::phonenumbers::PhoneNumberUtil::GetInstance();
   49|       |
   50|       |  // setup all the data we need to pass to the target methods
   51|  3.06k|  i18n::phonenumbers::PhoneNumber phone_number;
   52|  3.06k|  std::string number = fuzzed_data.ConsumeRandomLengthString(32);
   53|  3.06k|  bool region_is_2_bytes = fuzzed_data.ConsumeBool();
   54|  3.06k|  std::string region = fuzzed_data.ConsumeBytesAsString(region_is_2_bytes ? 2 : 3);
  ------------------
  |  Branch (54:57): [True: 265, False: 2.80k]
  ------------------
   55|  3.06k|  if (fuzzed_data.ConsumeBool()) {
  ------------------
  |  Branch (55:7): [True: 56, False: 3.00k]
  ------------------
   56|     56|    phone_util->ParseAndKeepRawInput(number, region, &phone_number);
   57|  3.00k|  } else {
   58|  3.00k|    phone_util->Parse(number, region, &phone_number);
   59|  3.00k|  }
   60|       |
   61|       |  // fuzz the public methods
   62|  3.06k|  i18n::phonenumbers::ShortNumberInfo short_info;
   63|  3.06k|  short_info.IsPossibleShortNumberForRegion(phone_number, region);
   64|  3.06k|  short_info.IsPossibleShortNumber(phone_number);
   65|  3.06k|  short_info.IsValidShortNumber(phone_number);
   66|  3.06k|  short_info.GetExpectedCostForRegion(phone_number, region);
   67|  3.06k|  short_info.GetExpectedCost(phone_number);
   68|  3.06k|  short_info.GetExampleShortNumber(region);
   69|  3.06k|  i18n::phonenumbers::ShortNumberInfo::ShortNumberCost cost = 
   70|  3.06k|      ConsumeShortNumberCost(fuzzed_data);
   71|  3.06k|  short_info.GetExampleShortNumberForCost(region, cost);
   72|  3.06k|  short_info.ConnectsToEmergencyNumber(number, region);
   73|  3.06k|  short_info.IsEmergencyNumber(number, region);
   74|  3.06k|  short_info.IsCarrierSpecific(phone_number);
   75|  3.06k|  short_info.IsCarrierSpecificForRegion(phone_number, region);
   76|  3.06k|  short_info.IsSmsServiceForRegion(phone_number, region);
   77|       |
   78|  3.06k|  return 0;
   79|  3.06k|}

