// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/protobuf/unittest_proto3_arena.proto

#include <google/protobuf/unittest_proto3_arena.pb.h>

#include <algorithm>

#include <google/protobuf/stubs/common.h>
#include <google/protobuf/stubs/port.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/wire_format_lite_inl.h>
#include <google/protobuf/descriptor.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/reflection_ops.h>
#include <google/protobuf/wire_format.h>
// This is a temporary google only hack
#ifdef GOOGLE_PROTOBUF_ENFORCE_UNIQUENESS
#include "third_party/protobuf/version.h"
#endif
// @@protoc_insertion_point(includes)

namespace protobuf_google_2fprotobuf_2funittest_5fimport_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2funittest_5fimport_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ImportMessage;
}  // namespace protobuf_google_2fprotobuf_2funittest_5fimport_2eproto
namespace protobuf_google_2fprotobuf_2funittest_5fimport_5fpublic_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2funittest_5fimport_5fpublic_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_PublicImportMessage;
}  // namespace protobuf_google_2fprotobuf_2funittest_5fimport_5fpublic_2eproto
namespace protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto {
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_ForeignMessage;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto ::google::protobuf::internal::SCCInfo<0> scc_info_TestAllTypes_NestedMessage;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto ::google::protobuf::internal::SCCInfo<1> scc_info_NestedTestAllTypes;
extern PROTOBUF_INTERNAL_EXPORT_protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto ::google::protobuf::internal::SCCInfo<4> scc_info_TestAllTypes;
}  // namespace protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto
namespace proto3_arena_unittest {
class TestAllTypes_NestedMessageDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestAllTypes_NestedMessage>
      _instance;
} _TestAllTypes_NestedMessage_default_instance_;
class TestAllTypesDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestAllTypes>
      _instance;
  ::google::protobuf::uint32 oneof_uint32_;
  const ::proto3_arena_unittest::TestAllTypes_NestedMessage* oneof_nested_message_;
  ::google::protobuf::internal::ArenaStringPtr oneof_string_;
  ::google::protobuf::internal::ArenaStringPtr oneof_bytes_;
} _TestAllTypes_default_instance_;
class TestPackedTypesDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestPackedTypes>
      _instance;
} _TestPackedTypes_default_instance_;
class TestUnpackedTypesDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestUnpackedTypes>
      _instance;
} _TestUnpackedTypes_default_instance_;
class NestedTestAllTypesDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<NestedTestAllTypes>
      _instance;
} _NestedTestAllTypes_default_instance_;
class ForeignMessageDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<ForeignMessage>
      _instance;
} _ForeignMessage_default_instance_;
class TestEmptyMessageDefaultTypeInternal {
 public:
  ::google::protobuf::internal::ExplicitlyConstructed<TestEmptyMessage>
      _instance;
} _TestEmptyMessage_default_instance_;
}  // namespace proto3_arena_unittest
namespace protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto {
static void InitDefaultsTestAllTypes_NestedMessage() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3_arena_unittest::_TestAllTypes_NestedMessage_default_instance_;
    new (ptr) ::proto3_arena_unittest::TestAllTypes_NestedMessage();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3_arena_unittest::TestAllTypes_NestedMessage::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestAllTypes_NestedMessage =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestAllTypes_NestedMessage}, {}};

static void InitDefaultsTestAllTypes() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3_arena_unittest::_TestAllTypes_default_instance_;
    new (ptr) ::proto3_arena_unittest::TestAllTypes();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3_arena_unittest::TestAllTypes::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<4> scc_info_TestAllTypes =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 4, InitDefaultsTestAllTypes}, {
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestAllTypes_NestedMessage.base,
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_ForeignMessage.base,
      &protobuf_google_2fprotobuf_2funittest_5fimport_2eproto::scc_info_ImportMessage.base,
      &protobuf_google_2fprotobuf_2funittest_5fimport_5fpublic_2eproto::scc_info_PublicImportMessage.base,}};

static void InitDefaultsTestPackedTypes() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3_arena_unittest::_TestPackedTypes_default_instance_;
    new (ptr) ::proto3_arena_unittest::TestPackedTypes();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3_arena_unittest::TestPackedTypes::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestPackedTypes =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestPackedTypes}, {}};

static void InitDefaultsTestUnpackedTypes() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3_arena_unittest::_TestUnpackedTypes_default_instance_;
    new (ptr) ::proto3_arena_unittest::TestUnpackedTypes();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3_arena_unittest::TestUnpackedTypes::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestUnpackedTypes =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestUnpackedTypes}, {}};

static void InitDefaultsNestedTestAllTypes() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3_arena_unittest::_NestedTestAllTypes_default_instance_;
    new (ptr) ::proto3_arena_unittest::NestedTestAllTypes();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3_arena_unittest::NestedTestAllTypes::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<1> scc_info_NestedTestAllTypes =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 1, InitDefaultsNestedTestAllTypes}, {
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestAllTypes.base,}};

static void InitDefaultsForeignMessage() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3_arena_unittest::_ForeignMessage_default_instance_;
    new (ptr) ::proto3_arena_unittest::ForeignMessage();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3_arena_unittest::ForeignMessage::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_ForeignMessage =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsForeignMessage}, {}};

static void InitDefaultsTestEmptyMessage() {
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  {
    void* ptr = &::proto3_arena_unittest::_TestEmptyMessage_default_instance_;
    new (ptr) ::proto3_arena_unittest::TestEmptyMessage();
    ::google::protobuf::internal::OnShutdownDestroyMessage(ptr);
  }
  ::proto3_arena_unittest::TestEmptyMessage::InitAsDefaultInstance();
}

::google::protobuf::internal::SCCInfo<0> scc_info_TestEmptyMessage =
    {{ATOMIC_VAR_INIT(::google::protobuf::internal::SCCInfoBase::kUninitialized), 0, InitDefaultsTestEmptyMessage}, {}};

void InitDefaults() {
  ::google::protobuf::internal::InitSCC(&scc_info_TestAllTypes_NestedMessage.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestAllTypes.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestPackedTypes.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestUnpackedTypes.base);
  ::google::protobuf::internal::InitSCC(&scc_info_NestedTestAllTypes.base);
  ::google::protobuf::internal::InitSCC(&scc_info_ForeignMessage.base);
  ::google::protobuf::internal::InitSCC(&scc_info_TestEmptyMessage.base);
}

::google::protobuf::Metadata file_level_metadata[7];
const ::google::protobuf::EnumDescriptor* file_level_enum_descriptors[2];

const ::google::protobuf::uint32 TableStruct::offsets[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes_NestedMessage, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes_NestedMessage, bb_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, _internal_metadata_),
  ~0u,  // no _extensions_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, _oneof_case_[0]),
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_int32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_int64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_uint32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_uint64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_sint32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_sint64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_fixed32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_fixed64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_sfixed32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_sfixed64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_float_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_double_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_bool_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_string_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_bytes_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_nested_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_foreign_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_import_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_nested_enum_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_foreign_enum_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_string_piece_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_cord_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_public_import_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_lazy_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, optional_lazy_import_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_int32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_int64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_uint32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_uint64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_sint32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_sint64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_fixed32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_fixed64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_sfixed32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_sfixed64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_float_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_double_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_bool_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_string_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_bytes_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_nested_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_foreign_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_import_message_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_nested_enum_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_foreign_enum_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_string_piece_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_cord_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, repeated_lazy_message_),
  offsetof(::proto3_arena_unittest::TestAllTypesDefaultTypeInternal, oneof_uint32_),
  offsetof(::proto3_arena_unittest::TestAllTypesDefaultTypeInternal, oneof_nested_message_),
  offsetof(::proto3_arena_unittest::TestAllTypesDefaultTypeInternal, oneof_string_),
  offsetof(::proto3_arena_unittest::TestAllTypesDefaultTypeInternal, oneof_bytes_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestAllTypes, oneof_field_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_int32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_int64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_uint32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_uint64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_sint32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_sint64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_fixed32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_fixed64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_sfixed32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_sfixed64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_float_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_double_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_bool_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestPackedTypes, packed_enum_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_int32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_int64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_uint32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_uint64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_sint32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_sint64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_fixed32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_fixed64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_sfixed32_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_sfixed64_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_float_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_double_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_bool_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestUnpackedTypes, repeated_nested_enum_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::NestedTestAllTypes, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::NestedTestAllTypes, child_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::NestedTestAllTypes, payload_),
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::NestedTestAllTypes, repeated_child_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::ForeignMessage, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::ForeignMessage, c_),
  ~0u,  // no _has_bits_
  GOOGLE_PROTOBUF_GENERATED_MESSAGE_FIELD_OFFSET(::proto3_arena_unittest::TestEmptyMessage, _internal_metadata_),
  ~0u,  // no _extensions_
  ~0u,  // no _oneof_case_
  ~0u,  // no _weak_field_map_
};
static const ::google::protobuf::internal::MigrationSchema schemas[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
  { 0, -1, sizeof(::proto3_arena_unittest::TestAllTypes_NestedMessage)},
  { 6, -1, sizeof(::proto3_arena_unittest::TestAllTypes)},
  { 64, -1, sizeof(::proto3_arena_unittest::TestPackedTypes)},
  { 83, -1, sizeof(::proto3_arena_unittest::TestUnpackedTypes)},
  { 102, -1, sizeof(::proto3_arena_unittest::NestedTestAllTypes)},
  { 110, -1, sizeof(::proto3_arena_unittest::ForeignMessage)},
  { 116, -1, sizeof(::proto3_arena_unittest::TestEmptyMessage)},
};

static ::google::protobuf::Message const * const file_default_instances[] = {
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3_arena_unittest::_TestAllTypes_NestedMessage_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3_arena_unittest::_TestAllTypes_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3_arena_unittest::_TestPackedTypes_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3_arena_unittest::_TestUnpackedTypes_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3_arena_unittest::_NestedTestAllTypes_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3_arena_unittest::_ForeignMessage_default_instance_),
  reinterpret_cast<const ::google::protobuf::Message*>(&::proto3_arena_unittest::_TestEmptyMessage_default_instance_),
};

void protobuf_AssignDescriptors() {
  AddDescriptors();
  AssignDescriptors(
      "google/protobuf/unittest_proto3_arena.proto", schemas, file_default_instances, TableStruct::offsets,
      file_level_metadata, file_level_enum_descriptors, NULL);
}

void protobuf_AssignDescriptorsOnce() {
  static ::google::protobuf::internal::once_flag once;
  ::google::protobuf::internal::call_once(once, protobuf_AssignDescriptors);
}

void protobuf_RegisterTypes(const ::std::string&) GOOGLE_PROTOBUF_ATTRIBUTE_COLD;
void protobuf_RegisterTypes(const ::std::string&) {
  protobuf_AssignDescriptorsOnce();
  ::google::protobuf::internal::RegisterAllTypes(file_level_metadata, 7);
}

void AddDescriptorsImpl() {
  InitDefaults();
  static const char descriptor[] GOOGLE_PROTOBUF_ATTRIBUTE_SECTION_VARIABLE(protodesc_cold) = {
      "\n+google/protobuf/unittest_proto3_arena."
      "proto\022\025proto3_arena_unittest\032%google/pro"
      "tobuf/unittest_import.proto\"\311\021\n\014TestAllT"
      "ypes\022\026\n\016optional_int32\030\001 \001(\005\022\026\n\016optional"
      "_int64\030\002 \001(\003\022\027\n\017optional_uint32\030\003 \001(\r\022\027\n"
      "\017optional_uint64\030\004 \001(\004\022\027\n\017optional_sint3"
      "2\030\005 \001(\021\022\027\n\017optional_sint64\030\006 \001(\022\022\030\n\020opti"
      "onal_fixed32\030\007 \001(\007\022\030\n\020optional_fixed64\030\010"
      " \001(\006\022\031\n\021optional_sfixed32\030\t \001(\017\022\031\n\021optio"
      "nal_sfixed64\030\n \001(\020\022\026\n\016optional_float\030\013 \001"
      "(\002\022\027\n\017optional_double\030\014 \001(\001\022\025\n\roptional_"
      "bool\030\r \001(\010\022\027\n\017optional_string\030\016 \001(\t\022\026\n\016o"
      "ptional_bytes\030\017 \001(\014\022R\n\027optional_nested_m"
      "essage\030\022 \001(\01321.proto3_arena_unittest.Tes"
      "tAllTypes.NestedMessage\022G\n\030optional_fore"
      "ign_message\030\023 \001(\0132%.proto3_arena_unittes"
      "t.ForeignMessage\022H\n\027optional_import_mess"
      "age\030\024 \001(\0132\'.protobuf_unittest_import.Imp"
      "ortMessage\022L\n\024optional_nested_enum\030\025 \001(\016"
      "2..proto3_arena_unittest.TestAllTypes.Ne"
      "stedEnum\022A\n\025optional_foreign_enum\030\026 \001(\0162"
      "\".proto3_arena_unittest.ForeignEnum\022!\n\025o"
      "ptional_string_piece\030\030 \001(\tB\002\010\002\022\031\n\roption"
      "al_cord\030\031 \001(\tB\002\010\001\022U\n\036optional_public_imp"
      "ort_message\030\032 \001(\0132-.protobuf_unittest_im"
      "port.PublicImportMessage\022T\n\025optional_laz"
      "y_message\030\033 \001(\01321.proto3_arena_unittest."
      "TestAllTypes.NestedMessageB\002(\001\022Q\n\034option"
      "al_lazy_import_message\030s \001(\0132\'.protobuf_"
      "unittest_import.ImportMessageB\002(\001\022\026\n\016rep"
      "eated_int32\030\037 \003(\005\022\026\n\016repeated_int64\030  \003("
      "\003\022\027\n\017repeated_uint32\030! \003(\r\022\027\n\017repeated_u"
      "int64\030\" \003(\004\022\027\n\017repeated_sint32\030# \003(\021\022\027\n\017"
      "repeated_sint64\030$ \003(\022\022\030\n\020repeated_fixed3"
      "2\030% \003(\007\022\030\n\020repeated_fixed64\030& \003(\006\022\031\n\021rep"
      "eated_sfixed32\030\' \003(\017\022\031\n\021repeated_sfixed6"
      "4\030( \003(\020\022\026\n\016repeated_float\030) \003(\002\022\027\n\017repea"
      "ted_double\030* \003(\001\022\025\n\rrepeated_bool\030+ \003(\010\022"
      "\027\n\017repeated_string\030, \003(\t\022\026\n\016repeated_byt"
      "es\030- \003(\014\022R\n\027repeated_nested_message\0300 \003("
      "\01321.proto3_arena_unittest.TestAllTypes.N"
      "estedMessage\022G\n\030repeated_foreign_message"
      "\0301 \003(\0132%.proto3_arena_unittest.ForeignMe"
      "ssage\022H\n\027repeated_import_message\0302 \003(\0132\'"
      ".protobuf_unittest_import.ImportMessage\022"
      "L\n\024repeated_nested_enum\0303 \003(\0162..proto3_a"
      "rena_unittest.TestAllTypes.NestedEnum\022A\n"
      "\025repeated_foreign_enum\0304 \003(\0162\".proto3_ar"
      "ena_unittest.ForeignEnum\022!\n\025repeated_str"
      "ing_piece\0306 \003(\tB\002\010\002\022\031\n\rrepeated_cord\0307 \003"
      "(\tB\002\010\001\022T\n\025repeated_lazy_message\0309 \003(\01321."
      "proto3_arena_unittest.TestAllTypes.Neste"
      "dMessageB\002(\001\022\026\n\014oneof_uint32\030o \001(\rH\000\022Q\n\024"
      "oneof_nested_message\030p \001(\01321.proto3_aren"
      "a_unittest.TestAllTypes.NestedMessageH\000\022"
      "\026\n\014oneof_string\030q \001(\tH\000\022\025\n\013oneof_bytes\030r"
      " \001(\014H\000\032\033\n\rNestedMessage\022\n\n\002bb\030\001 \001(\005\"C\n\nN"
      "estedEnum\022\010\n\004ZERO\020\000\022\007\n\003FOO\020\001\022\007\n\003BAR\020\002\022\007\n"
      "\003BAZ\020\003\022\020\n\003NEG\020\377\377\377\377\377\377\377\377\377\001B\r\n\013oneof_field\""
      "\256\003\n\017TestPackedTypes\022\030\n\014packed_int32\030Z \003("
      "\005B\002\020\001\022\030\n\014packed_int64\030[ \003(\003B\002\020\001\022\031\n\rpacke"
      "d_uint32\030\\ \003(\rB\002\020\001\022\031\n\rpacked_uint64\030] \003("
      "\004B\002\020\001\022\031\n\rpacked_sint32\030^ \003(\021B\002\020\001\022\031\n\rpack"
      "ed_sint64\030_ \003(\022B\002\020\001\022\032\n\016packed_fixed32\030` "
      "\003(\007B\002\020\001\022\032\n\016packed_fixed64\030a \003(\006B\002\020\001\022\033\n\017p"
      "acked_sfixed32\030b \003(\017B\002\020\001\022\033\n\017packed_sfixe"
      "d64\030c \003(\020B\002\020\001\022\030\n\014packed_float\030d \003(\002B\002\020\001\022"
      "\031\n\rpacked_double\030e \003(\001B\002\020\001\022\027\n\013packed_boo"
      "l\030f \003(\010B\002\020\001\022;\n\013packed_enum\030g \003(\0162\".proto"
      "3_arena_unittest.ForeignEnumB\002\020\001\"\337\003\n\021Tes"
      "tUnpackedTypes\022\032\n\016repeated_int32\030\001 \003(\005B\002"
      "\020\000\022\032\n\016repeated_int64\030\002 \003(\003B\002\020\000\022\033\n\017repeat"
      "ed_uint32\030\003 \003(\rB\002\020\000\022\033\n\017repeated_uint64\030\004"
      " \003(\004B\002\020\000\022\033\n\017repeated_sint32\030\005 \003(\021B\002\020\000\022\033\n"
      "\017repeated_sint64\030\006 \003(\022B\002\020\000\022\034\n\020repeated_f"
      "ixed32\030\007 \003(\007B\002\020\000\022\034\n\020repeated_fixed64\030\010 \003"
      "(\006B\002\020\000\022\035\n\021repeated_sfixed32\030\t \003(\017B\002\020\000\022\035\n"
      "\021repeated_sfixed64\030\n \003(\020B\002\020\000\022\032\n\016repeated"
      "_float\030\013 \003(\002B\002\020\000\022\033\n\017repeated_double\030\014 \003("
      "\001B\002\020\000\022\031\n\rrepeated_bool\030\r \003(\010B\002\020\000\022P\n\024repe"
      "ated_nested_enum\030\016 \003(\0162..proto3_arena_un"
      "ittest.TestAllTypes.NestedEnumB\002\020\000\"\307\001\n\022N"
      "estedTestAllTypes\0228\n\005child\030\001 \001(\0132).proto"
      "3_arena_unittest.NestedTestAllTypes\0224\n\007p"
      "ayload\030\002 \001(\0132#.proto3_arena_unittest.Tes"
      "tAllTypes\022A\n\016repeated_child\030\003 \003(\0132).prot"
      "o3_arena_unittest.NestedTestAllTypes\"\033\n\016"
      "ForeignMessage\022\t\n\001c\030\001 \001(\005\"\022\n\020TestEmptyMe"
      "ssage*R\n\013ForeignEnum\022\020\n\014FOREIGN_ZERO\020\000\022\017"
      "\n\013FOREIGN_FOO\020\004\022\017\n\013FOREIGN_BAR\020\005\022\017\n\013FORE"
      "IGN_BAZ\020\006B\003\370\001\001b\006proto3"
  };
  ::google::protobuf::DescriptorPool::InternalAddGeneratedFile(
      descriptor, 3622);
  ::google::protobuf::MessageFactory::InternalRegisterGeneratedFile(
    "google/protobuf/unittest_proto3_arena.proto", &protobuf_RegisterTypes);
  ::protobuf_google_2fprotobuf_2funittest_5fimport_2eproto::AddDescriptors();
}

void AddDescriptors() {
  static ::google::protobuf::internal::once_flag once;
  ::google::protobuf::internal::call_once(once, AddDescriptorsImpl);
}
// Force AddDescriptors() to be called at dynamic initialization time.
struct StaticDescriptorInitializer {
  StaticDescriptorInitializer() {
    AddDescriptors();
  }
} static_descriptor_initializer;
}  // namespace protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto
namespace proto3_arena_unittest {
const ::google::protobuf::EnumDescriptor* TestAllTypes_NestedEnum_descriptor() {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_enum_descriptors[0];
}
bool TestAllTypes_NestedEnum_IsValid(int value) {
  switch (value) {
    case -1:
    case 0:
    case 1:
    case 2:
    case 3:
      return true;
    default:
      return false;
  }
}

#if !defined(_MSC_VER) || _MSC_VER >= 1900
const TestAllTypes_NestedEnum TestAllTypes::ZERO;
const TestAllTypes_NestedEnum TestAllTypes::FOO;
const TestAllTypes_NestedEnum TestAllTypes::BAR;
const TestAllTypes_NestedEnum TestAllTypes::BAZ;
const TestAllTypes_NestedEnum TestAllTypes::NEG;
const TestAllTypes_NestedEnum TestAllTypes::NestedEnum_MIN;
const TestAllTypes_NestedEnum TestAllTypes::NestedEnum_MAX;
const int TestAllTypes::NestedEnum_ARRAYSIZE;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900
const ::google::protobuf::EnumDescriptor* ForeignEnum_descriptor() {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_enum_descriptors[1];
}
bool ForeignEnum_IsValid(int value) {
  switch (value) {
    case 0:
    case 4:
    case 5:
    case 6:
      return true;
    default:
      return false;
  }
}


// ===================================================================

void TestAllTypes_NestedMessage::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestAllTypes_NestedMessage::kBbFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestAllTypes_NestedMessage::TestAllTypes_NestedMessage()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestAllTypes_NestedMessage.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3_arena_unittest.TestAllTypes.NestedMessage)
}
TestAllTypes_NestedMessage::TestAllTypes_NestedMessage(::google::protobuf::Arena* arena)
  : ::google::protobuf::Message(),
  _internal_metadata_(arena) {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestAllTypes_NestedMessage.base);
  SharedCtor();
  RegisterArenaDtor(arena);
  // @@protoc_insertion_point(arena_constructor:proto3_arena_unittest.TestAllTypes.NestedMessage)
}
TestAllTypes_NestedMessage::TestAllTypes_NestedMessage(const TestAllTypes_NestedMessage& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  bb_ = from.bb_;
  // @@protoc_insertion_point(copy_constructor:proto3_arena_unittest.TestAllTypes.NestedMessage)
}

void TestAllTypes_NestedMessage::SharedCtor() {
  bb_ = 0;
}

TestAllTypes_NestedMessage::~TestAllTypes_NestedMessage() {
  // @@protoc_insertion_point(destructor:proto3_arena_unittest.TestAllTypes.NestedMessage)
  SharedDtor();
}

void TestAllTypes_NestedMessage::SharedDtor() {
  GOOGLE_DCHECK(GetArenaNoVirtual() == NULL);
}

void TestAllTypes_NestedMessage::ArenaDtor(void* object) {
  TestAllTypes_NestedMessage* _this = reinterpret_cast< TestAllTypes_NestedMessage* >(object);
  (void)_this;
}
void TestAllTypes_NestedMessage::RegisterArenaDtor(::google::protobuf::Arena* arena) {
}
void TestAllTypes_NestedMessage::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestAllTypes_NestedMessage::descriptor() {
  ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestAllTypes_NestedMessage& TestAllTypes_NestedMessage::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestAllTypes_NestedMessage.base);
  return *internal_default_instance();
}


void TestAllTypes_NestedMessage::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  bb_ = 0;
  _internal_metadata_.Clear();
}

bool TestAllTypes_NestedMessage::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // int32 bb = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &bb_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3_arena_unittest.TestAllTypes.NestedMessage)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3_arena_unittest.TestAllTypes.NestedMessage)
  return false;
#undef DO_
}

void TestAllTypes_NestedMessage::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 bb = 1;
  if (this->bb() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->bb(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3_arena_unittest.TestAllTypes.NestedMessage)
}

::google::protobuf::uint8* TestAllTypes_NestedMessage::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 bb = 1;
  if (this->bb() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->bb(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3_arena_unittest.TestAllTypes.NestedMessage)
  return target;
}

size_t TestAllTypes_NestedMessage::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // int32 bb = 1;
  if (this->bb() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->bb());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestAllTypes_NestedMessage::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  GOOGLE_DCHECK_NE(&from, this);
  const TestAllTypes_NestedMessage* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestAllTypes_NestedMessage>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3_arena_unittest.TestAllTypes.NestedMessage)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3_arena_unittest.TestAllTypes.NestedMessage)
    MergeFrom(*source);
  }
}

void TestAllTypes_NestedMessage::MergeFrom(const TestAllTypes_NestedMessage& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.bb() != 0) {
    set_bb(from.bb());
  }
}

void TestAllTypes_NestedMessage::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestAllTypes_NestedMessage::CopyFrom(const TestAllTypes_NestedMessage& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3_arena_unittest.TestAllTypes.NestedMessage)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestAllTypes_NestedMessage::IsInitialized() const {
  return true;
}

void TestAllTypes_NestedMessage::Swap(TestAllTypes_NestedMessage* other) {
  if (other == this) return;
  if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) {
    InternalSwap(other);
  } else {
    TestAllTypes_NestedMessage* temp = New(GetArenaNoVirtual());
    temp->MergeFrom(*other);
    other->CopyFrom(*this);
    InternalSwap(temp);
    if (GetArenaNoVirtual() == NULL) {
      delete temp;
    }
  }
}
void TestAllTypes_NestedMessage::UnsafeArenaSwap(TestAllTypes_NestedMessage* other) {
  if (other == this) return;
  GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual());
  InternalSwap(other);
}
void TestAllTypes_NestedMessage::InternalSwap(TestAllTypes_NestedMessage* other) {
  using std::swap;
  swap(bb_, other->bb_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestAllTypes_NestedMessage::GetMetadata() const {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void TestAllTypes::InitAsDefaultInstance() {
  ::proto3_arena_unittest::_TestAllTypes_default_instance_._instance.get_mutable()->optional_nested_message_ = const_cast< ::proto3_arena_unittest::TestAllTypes_NestedMessage*>(
      ::proto3_arena_unittest::TestAllTypes_NestedMessage::internal_default_instance());
  ::proto3_arena_unittest::_TestAllTypes_default_instance_._instance.get_mutable()->optional_foreign_message_ = const_cast< ::proto3_arena_unittest::ForeignMessage*>(
      ::proto3_arena_unittest::ForeignMessage::internal_default_instance());
  ::proto3_arena_unittest::_TestAllTypes_default_instance_._instance.get_mutable()->optional_import_message_ = const_cast< ::protobuf_unittest_import::ImportMessage*>(
      ::protobuf_unittest_import::ImportMessage::internal_default_instance());
  ::proto3_arena_unittest::_TestAllTypes_default_instance_._instance.get_mutable()->optional_public_import_message_ = const_cast< ::protobuf_unittest_import::PublicImportMessage*>(
      ::protobuf_unittest_import::PublicImportMessage::internal_default_instance());
  ::proto3_arena_unittest::_TestAllTypes_default_instance_._instance.get_mutable()->optional_lazy_message_ = const_cast< ::proto3_arena_unittest::TestAllTypes_NestedMessage*>(
      ::proto3_arena_unittest::TestAllTypes_NestedMessage::internal_default_instance());
  ::proto3_arena_unittest::_TestAllTypes_default_instance_._instance.get_mutable()->optional_lazy_import_message_ = const_cast< ::protobuf_unittest_import::ImportMessage*>(
      ::protobuf_unittest_import::ImportMessage::internal_default_instance());
  ::proto3_arena_unittest::_TestAllTypes_default_instance_.oneof_uint32_ = 0u;
  ::proto3_arena_unittest::_TestAllTypes_default_instance_.oneof_nested_message_ = const_cast< ::proto3_arena_unittest::TestAllTypes_NestedMessage*>(
      ::proto3_arena_unittest::TestAllTypes_NestedMessage::internal_default_instance());
  ::proto3_arena_unittest::_TestAllTypes_default_instance_.oneof_string_.UnsafeSetDefault(
      &::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::proto3_arena_unittest::_TestAllTypes_default_instance_.oneof_bytes_.UnsafeSetDefault(
      &::google::protobuf::internal::GetEmptyStringAlreadyInited());
}
void TestAllTypes::unsafe_arena_set_allocated_optional_nested_message(
    ::proto3_arena_unittest::TestAllTypes_NestedMessage* optional_nested_message) {
  if (GetArenaNoVirtual() == NULL) {
    delete optional_nested_message_;
  }
  optional_nested_message_ = optional_nested_message;
  if (optional_nested_message) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:proto3_arena_unittest.TestAllTypes.optional_nested_message)
}
void TestAllTypes::unsafe_arena_set_allocated_optional_foreign_message(
    ::proto3_arena_unittest::ForeignMessage* optional_foreign_message) {
  if (GetArenaNoVirtual() == NULL) {
    delete optional_foreign_message_;
  }
  optional_foreign_message_ = optional_foreign_message;
  if (optional_foreign_message) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:proto3_arena_unittest.TestAllTypes.optional_foreign_message)
}
void TestAllTypes::unsafe_arena_set_allocated_optional_import_message(
    ::protobuf_unittest_import::ImportMessage* optional_import_message) {
  if (GetArenaNoVirtual() == NULL) {
    delete optional_import_message_;
  }
  optional_import_message_ = optional_import_message;
  if (optional_import_message) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:proto3_arena_unittest.TestAllTypes.optional_import_message)
}
void TestAllTypes::clear_optional_import_message() {
  if (GetArenaNoVirtual() == NULL && optional_import_message_ != NULL) {
    delete optional_import_message_;
  }
  optional_import_message_ = NULL;
}
void TestAllTypes::unsafe_arena_set_allocated_optional_public_import_message(
    ::protobuf_unittest_import::PublicImportMessage* optional_public_import_message) {
  if (GetArenaNoVirtual() == NULL) {
    delete optional_public_import_message_;
  }
  optional_public_import_message_ = optional_public_import_message;
  if (optional_public_import_message) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:proto3_arena_unittest.TestAllTypes.optional_public_import_message)
}
void TestAllTypes::clear_optional_public_import_message() {
  if (GetArenaNoVirtual() == NULL && optional_public_import_message_ != NULL) {
    delete optional_public_import_message_;
  }
  optional_public_import_message_ = NULL;
}
void TestAllTypes::unsafe_arena_set_allocated_optional_lazy_message(
    ::proto3_arena_unittest::TestAllTypes_NestedMessage* optional_lazy_message) {
  if (GetArenaNoVirtual() == NULL) {
    delete optional_lazy_message_;
  }
  optional_lazy_message_ = optional_lazy_message;
  if (optional_lazy_message) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:proto3_arena_unittest.TestAllTypes.optional_lazy_message)
}
void TestAllTypes::unsafe_arena_set_allocated_optional_lazy_import_message(
    ::protobuf_unittest_import::ImportMessage* optional_lazy_import_message) {
  if (GetArenaNoVirtual() == NULL) {
    delete optional_lazy_import_message_;
  }
  optional_lazy_import_message_ = optional_lazy_import_message;
  if (optional_lazy_import_message) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:proto3_arena_unittest.TestAllTypes.optional_lazy_import_message)
}
void TestAllTypes::clear_optional_lazy_import_message() {
  if (GetArenaNoVirtual() == NULL && optional_lazy_import_message_ != NULL) {
    delete optional_lazy_import_message_;
  }
  optional_lazy_import_message_ = NULL;
}
void TestAllTypes::clear_repeated_import_message() {
  repeated_import_message_.Clear();
}
void TestAllTypes::set_allocated_oneof_nested_message(::proto3_arena_unittest::TestAllTypes_NestedMessage* oneof_nested_message) {
  ::google::protobuf::Arena* message_arena = GetArenaNoVirtual();
  clear_oneof_field();
  if (oneof_nested_message) {
    ::google::protobuf::Arena* submessage_arena =
      ::google::protobuf::Arena::GetArena(oneof_nested_message);
    if (message_arena != submessage_arena) {
      oneof_nested_message = ::google::protobuf::internal::GetOwnedMessage(
          message_arena, oneof_nested_message, submessage_arena);
    }
    set_has_oneof_nested_message();
    oneof_field_.oneof_nested_message_ = oneof_nested_message;
  }
  // @@protoc_insertion_point(field_set_allocated:proto3_arena_unittest.TestAllTypes.oneof_nested_message)
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestAllTypes::kOptionalInt32FieldNumber;
const int TestAllTypes::kOptionalInt64FieldNumber;
const int TestAllTypes::kOptionalUint32FieldNumber;
const int TestAllTypes::kOptionalUint64FieldNumber;
const int TestAllTypes::kOptionalSint32FieldNumber;
const int TestAllTypes::kOptionalSint64FieldNumber;
const int TestAllTypes::kOptionalFixed32FieldNumber;
const int TestAllTypes::kOptionalFixed64FieldNumber;
const int TestAllTypes::kOptionalSfixed32FieldNumber;
const int TestAllTypes::kOptionalSfixed64FieldNumber;
const int TestAllTypes::kOptionalFloatFieldNumber;
const int TestAllTypes::kOptionalDoubleFieldNumber;
const int TestAllTypes::kOptionalBoolFieldNumber;
const int TestAllTypes::kOptionalStringFieldNumber;
const int TestAllTypes::kOptionalBytesFieldNumber;
const int TestAllTypes::kOptionalNestedMessageFieldNumber;
const int TestAllTypes::kOptionalForeignMessageFieldNumber;
const int TestAllTypes::kOptionalImportMessageFieldNumber;
const int TestAllTypes::kOptionalNestedEnumFieldNumber;
const int TestAllTypes::kOptionalForeignEnumFieldNumber;
const int TestAllTypes::kOptionalStringPieceFieldNumber;
const int TestAllTypes::kOptionalCordFieldNumber;
const int TestAllTypes::kOptionalPublicImportMessageFieldNumber;
const int TestAllTypes::kOptionalLazyMessageFieldNumber;
const int TestAllTypes::kOptionalLazyImportMessageFieldNumber;
const int TestAllTypes::kRepeatedInt32FieldNumber;
const int TestAllTypes::kRepeatedInt64FieldNumber;
const int TestAllTypes::kRepeatedUint32FieldNumber;
const int TestAllTypes::kRepeatedUint64FieldNumber;
const int TestAllTypes::kRepeatedSint32FieldNumber;
const int TestAllTypes::kRepeatedSint64FieldNumber;
const int TestAllTypes::kRepeatedFixed32FieldNumber;
const int TestAllTypes::kRepeatedFixed64FieldNumber;
const int TestAllTypes::kRepeatedSfixed32FieldNumber;
const int TestAllTypes::kRepeatedSfixed64FieldNumber;
const int TestAllTypes::kRepeatedFloatFieldNumber;
const int TestAllTypes::kRepeatedDoubleFieldNumber;
const int TestAllTypes::kRepeatedBoolFieldNumber;
const int TestAllTypes::kRepeatedStringFieldNumber;
const int TestAllTypes::kRepeatedBytesFieldNumber;
const int TestAllTypes::kRepeatedNestedMessageFieldNumber;
const int TestAllTypes::kRepeatedForeignMessageFieldNumber;
const int TestAllTypes::kRepeatedImportMessageFieldNumber;
const int TestAllTypes::kRepeatedNestedEnumFieldNumber;
const int TestAllTypes::kRepeatedForeignEnumFieldNumber;
const int TestAllTypes::kRepeatedStringPieceFieldNumber;
const int TestAllTypes::kRepeatedCordFieldNumber;
const int TestAllTypes::kRepeatedLazyMessageFieldNumber;
const int TestAllTypes::kOneofUint32FieldNumber;
const int TestAllTypes::kOneofNestedMessageFieldNumber;
const int TestAllTypes::kOneofStringFieldNumber;
const int TestAllTypes::kOneofBytesFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestAllTypes::TestAllTypes()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestAllTypes.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3_arena_unittest.TestAllTypes)
}
TestAllTypes::TestAllTypes(::google::protobuf::Arena* arena)
  : ::google::protobuf::Message(),
  _internal_metadata_(arena),
  repeated_int32_(arena),
  repeated_int64_(arena),
  repeated_uint32_(arena),
  repeated_uint64_(arena),
  repeated_sint32_(arena),
  repeated_sint64_(arena),
  repeated_fixed32_(arena),
  repeated_fixed64_(arena),
  repeated_sfixed32_(arena),
  repeated_sfixed64_(arena),
  repeated_float_(arena),
  repeated_double_(arena),
  repeated_bool_(arena),
  repeated_string_(arena),
  repeated_bytes_(arena),
  repeated_nested_message_(arena),
  repeated_foreign_message_(arena),
  repeated_import_message_(arena),
  repeated_nested_enum_(arena),
  repeated_foreign_enum_(arena),
  repeated_string_piece_(arena),
  repeated_cord_(arena),
  repeated_lazy_message_(arena) {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestAllTypes.base);
  SharedCtor();
  RegisterArenaDtor(arena);
  // @@protoc_insertion_point(arena_constructor:proto3_arena_unittest.TestAllTypes)
}
TestAllTypes::TestAllTypes(const TestAllTypes& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_int32_(from.repeated_int32_),
      repeated_int64_(from.repeated_int64_),
      repeated_uint32_(from.repeated_uint32_),
      repeated_uint64_(from.repeated_uint64_),
      repeated_sint32_(from.repeated_sint32_),
      repeated_sint64_(from.repeated_sint64_),
      repeated_fixed32_(from.repeated_fixed32_),
      repeated_fixed64_(from.repeated_fixed64_),
      repeated_sfixed32_(from.repeated_sfixed32_),
      repeated_sfixed64_(from.repeated_sfixed64_),
      repeated_float_(from.repeated_float_),
      repeated_double_(from.repeated_double_),
      repeated_bool_(from.repeated_bool_),
      repeated_string_(from.repeated_string_),
      repeated_bytes_(from.repeated_bytes_),
      repeated_nested_message_(from.repeated_nested_message_),
      repeated_foreign_message_(from.repeated_foreign_message_),
      repeated_import_message_(from.repeated_import_message_),
      repeated_nested_enum_(from.repeated_nested_enum_),
      repeated_foreign_enum_(from.repeated_foreign_enum_),
      repeated_string_piece_(from.repeated_string_piece_),
      repeated_cord_(from.repeated_cord_),
      repeated_lazy_message_(from.repeated_lazy_message_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  optional_string_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.optional_string().size() > 0) {
    optional_string_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.optional_string(),
      GetArenaNoVirtual());
  }
  optional_bytes_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.optional_bytes().size() > 0) {
    optional_bytes_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.optional_bytes(),
      GetArenaNoVirtual());
  }
  optional_string_piece_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.optional_string_piece().size() > 0) {
    optional_string_piece_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.optional_string_piece(),
      GetArenaNoVirtual());
  }
  optional_cord_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (from.optional_cord().size() > 0) {
    optional_cord_.Set(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), from.optional_cord(),
      GetArenaNoVirtual());
  }
  if (from.has_optional_nested_message()) {
    optional_nested_message_ = new ::proto3_arena_unittest::TestAllTypes_NestedMessage(*from.optional_nested_message_);
  } else {
    optional_nested_message_ = NULL;
  }
  if (from.has_optional_foreign_message()) {
    optional_foreign_message_ = new ::proto3_arena_unittest::ForeignMessage(*from.optional_foreign_message_);
  } else {
    optional_foreign_message_ = NULL;
  }
  if (from.has_optional_import_message()) {
    optional_import_message_ = new ::protobuf_unittest_import::ImportMessage(*from.optional_import_message_);
  } else {
    optional_import_message_ = NULL;
  }
  if (from.has_optional_public_import_message()) {
    optional_public_import_message_ = new ::protobuf_unittest_import::PublicImportMessage(*from.optional_public_import_message_);
  } else {
    optional_public_import_message_ = NULL;
  }
  if (from.has_optional_lazy_message()) {
    optional_lazy_message_ = new ::proto3_arena_unittest::TestAllTypes_NestedMessage(*from.optional_lazy_message_);
  } else {
    optional_lazy_message_ = NULL;
  }
  if (from.has_optional_lazy_import_message()) {
    optional_lazy_import_message_ = new ::protobuf_unittest_import::ImportMessage(*from.optional_lazy_import_message_);
  } else {
    optional_lazy_import_message_ = NULL;
  }
  ::memcpy(&optional_int64_, &from.optional_int64_,
    static_cast<size_t>(reinterpret_cast<char*>(&optional_foreign_enum_) -
    reinterpret_cast<char*>(&optional_int64_)) + sizeof(optional_foreign_enum_));
  clear_has_oneof_field();
  switch (from.oneof_field_case()) {
    case kOneofUint32: {
      set_oneof_uint32(from.oneof_uint32());
      break;
    }
    case kOneofNestedMessage: {
      mutable_oneof_nested_message()->::proto3_arena_unittest::TestAllTypes_NestedMessage::MergeFrom(from.oneof_nested_message());
      break;
    }
    case kOneofString: {
      set_oneof_string(from.oneof_string());
      break;
    }
    case kOneofBytes: {
      set_oneof_bytes(from.oneof_bytes());
      break;
    }
    case ONEOF_FIELD_NOT_SET: {
      break;
    }
  }
  // @@protoc_insertion_point(copy_constructor:proto3_arena_unittest.TestAllTypes)
}

void TestAllTypes::SharedCtor() {
  optional_string_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  optional_bytes_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  optional_string_piece_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  optional_cord_.UnsafeSetDefault(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  ::memset(&optional_nested_message_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&optional_foreign_enum_) -
      reinterpret_cast<char*>(&optional_nested_message_)) + sizeof(optional_foreign_enum_));
  clear_has_oneof_field();
}

TestAllTypes::~TestAllTypes() {
  // @@protoc_insertion_point(destructor:proto3_arena_unittest.TestAllTypes)
  SharedDtor();
}

void TestAllTypes::SharedDtor() {
  GOOGLE_DCHECK(GetArenaNoVirtual() == NULL);
  optional_string_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  optional_bytes_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  optional_string_piece_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  optional_cord_.DestroyNoArena(&::google::protobuf::internal::GetEmptyStringAlreadyInited());
  if (this != internal_default_instance()) delete optional_nested_message_;
  if (this != internal_default_instance()) delete optional_foreign_message_;
  if (this != internal_default_instance()) delete optional_import_message_;
  if (this != internal_default_instance()) delete optional_public_import_message_;
  if (this != internal_default_instance()) delete optional_lazy_message_;
  if (this != internal_default_instance()) delete optional_lazy_import_message_;
  if (has_oneof_field()) {
    clear_oneof_field();
  }
}

void TestAllTypes::ArenaDtor(void* object) {
  TestAllTypes* _this = reinterpret_cast< TestAllTypes* >(object);
  (void)_this;
}
void TestAllTypes::RegisterArenaDtor(::google::protobuf::Arena* arena) {
}
void TestAllTypes::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestAllTypes::descriptor() {
  ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestAllTypes& TestAllTypes::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestAllTypes.base);
  return *internal_default_instance();
}


void TestAllTypes::clear_oneof_field() {
// @@protoc_insertion_point(one_of_clear_start:proto3_arena_unittest.TestAllTypes)
  switch (oneof_field_case()) {
    case kOneofUint32: {
      // No need to clear
      break;
    }
    case kOneofNestedMessage: {
      if (GetArenaNoVirtual() == NULL) {
        delete oneof_field_.oneof_nested_message_;
      }
      break;
    }
    case kOneofString: {
      oneof_field_.oneof_string_.Destroy(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
          GetArenaNoVirtual());
      break;
    }
    case kOneofBytes: {
      oneof_field_.oneof_bytes_.Destroy(&::google::protobuf::internal::GetEmptyStringAlreadyInited(),
          GetArenaNoVirtual());
      break;
    }
    case ONEOF_FIELD_NOT_SET: {
      break;
    }
  }
  _oneof_case_[0] = ONEOF_FIELD_NOT_SET;
}


void TestAllTypes::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3_arena_unittest.TestAllTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_int32_.Clear();
  repeated_int64_.Clear();
  repeated_uint32_.Clear();
  repeated_uint64_.Clear();
  repeated_sint32_.Clear();
  repeated_sint64_.Clear();
  repeated_fixed32_.Clear();
  repeated_fixed64_.Clear();
  repeated_sfixed32_.Clear();
  repeated_sfixed64_.Clear();
  repeated_float_.Clear();
  repeated_double_.Clear();
  repeated_bool_.Clear();
  repeated_string_.Clear();
  repeated_bytes_.Clear();
  repeated_nested_message_.Clear();
  repeated_foreign_message_.Clear();
  repeated_import_message_.Clear();
  repeated_nested_enum_.Clear();
  repeated_foreign_enum_.Clear();
  repeated_string_piece_.Clear();
  repeated_cord_.Clear();
  repeated_lazy_message_.Clear();
  optional_string_.ClearToEmpty(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual());
  optional_bytes_.ClearToEmpty(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual());
  optional_string_piece_.ClearToEmpty(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual());
  optional_cord_.ClearToEmpty(&::google::protobuf::internal::GetEmptyStringAlreadyInited(), GetArenaNoVirtual());
  if (GetArenaNoVirtual() == NULL && optional_nested_message_ != NULL) {
    delete optional_nested_message_;
  }
  optional_nested_message_ = NULL;
  if (GetArenaNoVirtual() == NULL && optional_foreign_message_ != NULL) {
    delete optional_foreign_message_;
  }
  optional_foreign_message_ = NULL;
  if (GetArenaNoVirtual() == NULL && optional_import_message_ != NULL) {
    delete optional_import_message_;
  }
  optional_import_message_ = NULL;
  if (GetArenaNoVirtual() == NULL && optional_public_import_message_ != NULL) {
    delete optional_public_import_message_;
  }
  optional_public_import_message_ = NULL;
  if (GetArenaNoVirtual() == NULL && optional_lazy_message_ != NULL) {
    delete optional_lazy_message_;
  }
  optional_lazy_message_ = NULL;
  if (GetArenaNoVirtual() == NULL && optional_lazy_import_message_ != NULL) {
    delete optional_lazy_import_message_;
  }
  optional_lazy_import_message_ = NULL;
  ::memset(&optional_int64_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&optional_foreign_enum_) -
      reinterpret_cast<char*>(&optional_int64_)) + sizeof(optional_foreign_enum_));
  clear_oneof_field();
  _internal_metadata_.Clear();
}

bool TestAllTypes::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3_arena_unittest.TestAllTypes)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // int32 optional_int32 = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &optional_int32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // int64 optional_int64 = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, &optional_int64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // uint32 optional_uint32 = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, &optional_uint32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // uint64 optional_uint64 = 4;
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, &optional_uint64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // sint32 optional_sint32 = 5;
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 input, &optional_sint32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // sint64 optional_sint64 = 6;
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(48u /* 48 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 input, &optional_sint64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // fixed32 optional_fixed32 = 7;
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(61u /* 61 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 input, &optional_fixed32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // fixed64 optional_fixed64 = 8;
      case 8: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(65u /* 65 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 input, &optional_fixed64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // sfixed32 optional_sfixed32 = 9;
      case 9: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(77u /* 77 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 input, &optional_sfixed32_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // sfixed64 optional_sfixed64 = 10;
      case 10: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(81u /* 81 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 input, &optional_sfixed64_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // float optional_float = 11;
      case 11: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(93u /* 93 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, &optional_float_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // double optional_double = 12;
      case 12: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(97u /* 97 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, &optional_double_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // bool optional_bool = 13;
      case 13: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(104u /* 104 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, &optional_bool_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // string optional_string = 14;
      case 14: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(114u /* 114 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_optional_string()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->optional_string().data(), static_cast<int>(this->optional_string().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3_arena_unittest.TestAllTypes.optional_string"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // bytes optional_bytes = 15;
      case 15: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(122u /* 122 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->mutable_optional_bytes()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3_arena_unittest.TestAllTypes.NestedMessage optional_nested_message = 18;
      case 18: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(146u /* 146 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_optional_nested_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3_arena_unittest.ForeignMessage optional_foreign_message = 19;
      case 19: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(154u /* 154 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_optional_foreign_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .protobuf_unittest_import.ImportMessage optional_import_message = 20;
      case 20: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(162u /* 162 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_optional_import_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3_arena_unittest.TestAllTypes.NestedEnum optional_nested_enum = 21;
      case 21: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(168u /* 168 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_optional_nested_enum(static_cast< ::proto3_arena_unittest::TestAllTypes_NestedEnum >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3_arena_unittest.ForeignEnum optional_foreign_enum = 22;
      case 22: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(176u /* 176 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          set_optional_foreign_enum(static_cast< ::proto3_arena_unittest::ForeignEnum >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // string optional_string_piece = 24 [ctype = STRING_PIECE];
      case 24: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(194u /* 194 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_optional_string_piece()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->optional_string_piece().data(), static_cast<int>(this->optional_string_piece().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3_arena_unittest.TestAllTypes.optional_string_piece"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // string optional_cord = 25 [ctype = CORD];
      case 25: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(202u /* 202 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_optional_cord()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->optional_cord().data(), static_cast<int>(this->optional_cord().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3_arena_unittest.TestAllTypes.optional_cord"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .protobuf_unittest_import.PublicImportMessage optional_public_import_message = 26;
      case 26: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(210u /* 210 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_optional_public_import_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3_arena_unittest.TestAllTypes.NestedMessage optional_lazy_message = 27 [lazy = true];
      case 27: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(218u /* 218 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_optional_lazy_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int32 repeated_int32 = 31;
      case 31: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(250u /* 250 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, this->mutable_repeated_int32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(248u /* 248 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 2, 250u, input, this->mutable_repeated_int32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int64 repeated_int64 = 32;
      case 32: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(2u /* 258 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, this->mutable_repeated_int64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(0u /* 256 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 2, 258u, input, this->mutable_repeated_int64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint32 repeated_uint32 = 33;
      case 33: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 266 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, this->mutable_repeated_uint32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 264 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 2, 266u, input, this->mutable_repeated_uint32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint64 repeated_uint64 = 34;
      case 34: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 274 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, this->mutable_repeated_uint64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 272 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 2, 274u, input, this->mutable_repeated_uint64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint32 repeated_sint32 = 35;
      case 35: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 282 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 input, this->mutable_repeated_sint32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u /* 280 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 2, 282u, input, this->mutable_repeated_sint32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint64 repeated_sint64 = 36;
      case 36: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 290 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 input, this->mutable_repeated_sint64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u /* 288 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 2, 290u, input, this->mutable_repeated_sint64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed32 repeated_fixed32 = 37;
      case 37: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 298 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 input, this->mutable_repeated_fixed32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(45u /* 301 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 2, 298u, input, this->mutable_repeated_fixed32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed64 repeated_fixed64 = 38;
      case 38: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(50u /* 306 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 input, this->mutable_repeated_fixed64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(49u /* 305 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 2, 306u, input, this->mutable_repeated_fixed64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed32 repeated_sfixed32 = 39;
      case 39: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(58u /* 314 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 input, this->mutable_repeated_sfixed32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(61u /* 317 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 2, 314u, input, this->mutable_repeated_sfixed32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed64 repeated_sfixed64 = 40;
      case 40: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(66u /* 322 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 input, this->mutable_repeated_sfixed64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(65u /* 321 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 2, 322u, input, this->mutable_repeated_sfixed64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated float repeated_float = 41;
      case 41: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(74u /* 330 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, this->mutable_repeated_float())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(77u /* 333 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 2, 330u, input, this->mutable_repeated_float())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated double repeated_double = 42;
      case 42: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(82u /* 338 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, this->mutable_repeated_double())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(81u /* 337 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 2, 338u, input, this->mutable_repeated_double())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bool repeated_bool = 43;
      case 43: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(90u /* 346 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, this->mutable_repeated_bool())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(88u /* 344 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 2, 346u, input, this->mutable_repeated_bool())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated string repeated_string = 44;
      case 44: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(98u /* 354 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->add_repeated_string()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->repeated_string(this->repeated_string_size() - 1).data(),
            static_cast<int>(this->repeated_string(this->repeated_string_size() - 1).length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3_arena_unittest.TestAllTypes.repeated_string"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bytes repeated_bytes = 45;
      case 45: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(106u /* 362 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->add_repeated_bytes()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3_arena_unittest.TestAllTypes.NestedMessage repeated_nested_message = 48;
      case 48: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(130u /* 386 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_nested_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3_arena_unittest.ForeignMessage repeated_foreign_message = 49;
      case 49: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(138u /* 394 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_foreign_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .protobuf_unittest_import.ImportMessage repeated_import_message = 50;
      case 50: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(146u /* 402 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_import_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3_arena_unittest.TestAllTypes.NestedEnum repeated_nested_enum = 51;
      case 51: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(154u /* 410 & 0xFF */)) {
          ::google::protobuf::uint32 length;
          DO_(input->ReadVarint32(&length));
          ::google::protobuf::io::CodedInputStream::Limit limit = input->PushLimit(static_cast<int>(length));
          while (input->BytesUntilLimit() > 0) {
            int value;
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
            add_repeated_nested_enum(static_cast< ::proto3_arena_unittest::TestAllTypes_NestedEnum >(value));
          }
          input->PopLimit(limit);
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(152u /* 408 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          add_repeated_nested_enum(static_cast< ::proto3_arena_unittest::TestAllTypes_NestedEnum >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3_arena_unittest.ForeignEnum repeated_foreign_enum = 52;
      case 52: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(162u /* 418 & 0xFF */)) {
          ::google::protobuf::uint32 length;
          DO_(input->ReadVarint32(&length));
          ::google::protobuf::io::CodedInputStream::Limit limit = input->PushLimit(static_cast<int>(length));
          while (input->BytesUntilLimit() > 0) {
            int value;
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
            add_repeated_foreign_enum(static_cast< ::proto3_arena_unittest::ForeignEnum >(value));
          }
          input->PopLimit(limit);
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(160u /* 416 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          add_repeated_foreign_enum(static_cast< ::proto3_arena_unittest::ForeignEnum >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated string repeated_string_piece = 54 [ctype = STRING_PIECE];
      case 54: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(178u /* 434 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->add_repeated_string_piece()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->repeated_string_piece(this->repeated_string_piece_size() - 1).data(),
            static_cast<int>(this->repeated_string_piece(this->repeated_string_piece_size() - 1).length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3_arena_unittest.TestAllTypes.repeated_string_piece"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated string repeated_cord = 55 [ctype = CORD];
      case 55: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(186u /* 442 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->add_repeated_cord()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->repeated_cord(this->repeated_cord_size() - 1).data(),
            static_cast<int>(this->repeated_cord(this->repeated_cord_size() - 1).length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3_arena_unittest.TestAllTypes.repeated_cord"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3_arena_unittest.TestAllTypes.NestedMessage repeated_lazy_message = 57 [lazy = true];
      case 57: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(202u /* 458 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_lazy_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // uint32 oneof_uint32 = 111;
      case 111: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(120u /* 888 & 0xFF */)) {
          clear_oneof_field();
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, &oneof_field_.oneof_uint32_)));
          set_has_oneof_uint32();
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3_arena_unittest.TestAllTypes.NestedMessage oneof_nested_message = 112;
      case 112: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(130u /* 898 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_oneof_nested_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // string oneof_string = 113;
      case 113: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(138u /* 906 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadString(
                input, this->mutable_oneof_string()));
          DO_(::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
            this->oneof_string().data(), static_cast<int>(this->oneof_string().length()),
            ::google::protobuf::internal::WireFormatLite::PARSE,
            "proto3_arena_unittest.TestAllTypes.oneof_string"));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // bytes oneof_bytes = 114;
      case 114: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(146u /* 914 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadBytes(
                input, this->mutable_oneof_bytes()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .protobuf_unittest_import.ImportMessage optional_lazy_import_message = 115 [lazy = true];
      case 115: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(154u /* 922 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_optional_lazy_import_message()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3_arena_unittest.TestAllTypes)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3_arena_unittest.TestAllTypes)
  return false;
#undef DO_
}

void TestAllTypes::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3_arena_unittest.TestAllTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 optional_int32 = 1;
  if (this->optional_int32() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->optional_int32(), output);
  }

  // int64 optional_int64 = 2;
  if (this->optional_int64() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64(2, this->optional_int64(), output);
  }

  // uint32 optional_uint32 = 3;
  if (this->optional_uint32() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(3, this->optional_uint32(), output);
  }

  // uint64 optional_uint64 = 4;
  if (this->optional_uint64() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64(4, this->optional_uint64(), output);
  }

  // sint32 optional_sint32 = 5;
  if (this->optional_sint32() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt32(5, this->optional_sint32(), output);
  }

  // sint64 optional_sint64 = 6;
  if (this->optional_sint64() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt64(6, this->optional_sint64(), output);
  }

  // fixed32 optional_fixed32 = 7;
  if (this->optional_fixed32() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteFixed32(7, this->optional_fixed32(), output);
  }

  // fixed64 optional_fixed64 = 8;
  if (this->optional_fixed64() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteFixed64(8, this->optional_fixed64(), output);
  }

  // sfixed32 optional_sfixed32 = 9;
  if (this->optional_sfixed32() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteSFixed32(9, this->optional_sfixed32(), output);
  }

  // sfixed64 optional_sfixed64 = 10;
  if (this->optional_sfixed64() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteSFixed64(10, this->optional_sfixed64(), output);
  }

  // float optional_float = 11;
  if (this->optional_float() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteFloat(11, this->optional_float(), output);
  }

  // double optional_double = 12;
  if (this->optional_double() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteDouble(12, this->optional_double(), output);
  }

  // bool optional_bool = 13;
  if (this->optional_bool() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(13, this->optional_bool(), output);
  }

  // string optional_string = 14;
  if (this->optional_string().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->optional_string().data(), static_cast<int>(this->optional_string().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.optional_string");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      14, this->optional_string(), output);
  }

  // bytes optional_bytes = 15;
  if (this->optional_bytes().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
      15, this->optional_bytes(), output);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedMessage optional_nested_message = 18;
  if (this->has_optional_nested_message()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      18, this->_internal_optional_nested_message(), output);
  }

  // .proto3_arena_unittest.ForeignMessage optional_foreign_message = 19;
  if (this->has_optional_foreign_message()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      19, this->_internal_optional_foreign_message(), output);
  }

  // .protobuf_unittest_import.ImportMessage optional_import_message = 20;
  if (this->has_optional_import_message()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      20, this->_internal_optional_import_message(), output);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedEnum optional_nested_enum = 21;
  if (this->optional_nested_enum() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      21, this->optional_nested_enum(), output);
  }

  // .proto3_arena_unittest.ForeignEnum optional_foreign_enum = 22;
  if (this->optional_foreign_enum() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      22, this->optional_foreign_enum(), output);
  }

  // string optional_string_piece = 24 [ctype = STRING_PIECE];
  if (this->optional_string_piece().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->optional_string_piece().data(), static_cast<int>(this->optional_string_piece().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.optional_string_piece");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      24, this->optional_string_piece(), output);
  }

  // string optional_cord = 25 [ctype = CORD];
  if (this->optional_cord().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->optional_cord().data(), static_cast<int>(this->optional_cord().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.optional_cord");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      25, this->optional_cord(), output);
  }

  // .protobuf_unittest_import.PublicImportMessage optional_public_import_message = 26;
  if (this->has_optional_public_import_message()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      26, this->_internal_optional_public_import_message(), output);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedMessage optional_lazy_message = 27 [lazy = true];
  if (this->has_optional_lazy_message()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      27, this->_internal_optional_lazy_message(), output);
  }

  // repeated int32 repeated_int32 = 31;
  if (this->repeated_int32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(31, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_int32_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_int32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
      this->repeated_int32(i), output);
  }

  // repeated int64 repeated_int64 = 32;
  if (this->repeated_int64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(32, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_int64_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_int64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64NoTag(
      this->repeated_int64(i), output);
  }

  // repeated uint32 repeated_uint32 = 33;
  if (this->repeated_uint32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(33, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_uint32_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_uint32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32NoTag(
      this->repeated_uint32(i), output);
  }

  // repeated uint64 repeated_uint64 = 34;
  if (this->repeated_uint64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(34, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_uint64_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_uint64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64NoTag(
      this->repeated_uint64(i), output);
  }

  // repeated sint32 repeated_sint32 = 35;
  if (this->repeated_sint32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(35, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_sint32_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_sint32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt32NoTag(
      this->repeated_sint32(i), output);
  }

  // repeated sint64 repeated_sint64 = 36;
  if (this->repeated_sint64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(36, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_sint64_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_sint64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt64NoTag(
      this->repeated_sint64(i), output);
  }

  // repeated fixed32 repeated_fixed32 = 37;
  if (this->repeated_fixed32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(37, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_fixed32_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFixed32Array(
      this->repeated_fixed32().data(), this->repeated_fixed32_size(), output);
  }

  // repeated fixed64 repeated_fixed64 = 38;
  if (this->repeated_fixed64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(38, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_fixed64_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFixed64Array(
      this->repeated_fixed64().data(), this->repeated_fixed64_size(), output);
  }

  // repeated sfixed32 repeated_sfixed32 = 39;
  if (this->repeated_sfixed32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(39, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_sfixed32_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteSFixed32Array(
      this->repeated_sfixed32().data(), this->repeated_sfixed32_size(), output);
  }

  // repeated sfixed64 repeated_sfixed64 = 40;
  if (this->repeated_sfixed64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(40, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_sfixed64_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteSFixed64Array(
      this->repeated_sfixed64().data(), this->repeated_sfixed64_size(), output);
  }

  // repeated float repeated_float = 41;
  if (this->repeated_float_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(41, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_float_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFloatArray(
      this->repeated_float().data(), this->repeated_float_size(), output);
  }

  // repeated double repeated_double = 42;
  if (this->repeated_double_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(42, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_double_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteDoubleArray(
      this->repeated_double().data(), this->repeated_double_size(), output);
  }

  // repeated bool repeated_bool = 43;
  if (this->repeated_bool_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(43, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _repeated_bool_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteBoolArray(
      this->repeated_bool().data(), this->repeated_bool_size(), output);
  }

  // repeated string repeated_string = 44;
  for (int i = 0, n = this->repeated_string_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->repeated_string(i).data(), static_cast<int>(this->repeated_string(i).length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.repeated_string");
    ::google::protobuf::internal::WireFormatLite::WriteString(
      44, this->repeated_string(i), output);
  }

  // repeated bytes repeated_bytes = 45;
  for (int i = 0, n = this->repeated_bytes_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBytes(
      45, this->repeated_bytes(i), output);
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedMessage repeated_nested_message = 48;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_nested_message_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      48,
      this->repeated_nested_message(static_cast<int>(i)),
      output);
  }

  // repeated .proto3_arena_unittest.ForeignMessage repeated_foreign_message = 49;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_foreign_message_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      49,
      this->repeated_foreign_message(static_cast<int>(i)),
      output);
  }

  // repeated .protobuf_unittest_import.ImportMessage repeated_import_message = 50;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_import_message_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      50,
      this->repeated_import_message(static_cast<int>(i)),
      output);
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedEnum repeated_nested_enum = 51;
  if (this->repeated_nested_enum_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(
      51,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      output);
    output->WriteVarint32(
        static_cast< ::google::protobuf::uint32>(_repeated_nested_enum_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_nested_enum_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteEnumNoTag(
      this->repeated_nested_enum(i), output);
  }

  // repeated .proto3_arena_unittest.ForeignEnum repeated_foreign_enum = 52;
  if (this->repeated_foreign_enum_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(
      52,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      output);
    output->WriteVarint32(
        static_cast< ::google::protobuf::uint32>(_repeated_foreign_enum_cached_byte_size_));
  }
  for (int i = 0, n = this->repeated_foreign_enum_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteEnumNoTag(
      this->repeated_foreign_enum(i), output);
  }

  // repeated string repeated_string_piece = 54 [ctype = STRING_PIECE];
  for (int i = 0, n = this->repeated_string_piece_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->repeated_string_piece(i).data(), static_cast<int>(this->repeated_string_piece(i).length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.repeated_string_piece");
    ::google::protobuf::internal::WireFormatLite::WriteString(
      54, this->repeated_string_piece(i), output);
  }

  // repeated string repeated_cord = 55 [ctype = CORD];
  for (int i = 0, n = this->repeated_cord_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->repeated_cord(i).data(), static_cast<int>(this->repeated_cord(i).length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.repeated_cord");
    ::google::protobuf::internal::WireFormatLite::WriteString(
      55, this->repeated_cord(i), output);
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedMessage repeated_lazy_message = 57 [lazy = true];
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_lazy_message_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      57,
      this->repeated_lazy_message(static_cast<int>(i)),
      output);
  }

  // uint32 oneof_uint32 = 111;
  if (has_oneof_uint32()) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(111, this->oneof_uint32(), output);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedMessage oneof_nested_message = 112;
  if (has_oneof_nested_message()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      112, this->_internal_oneof_nested_message(), output);
  }

  // string oneof_string = 113;
  if (has_oneof_string()) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->oneof_string().data(), static_cast<int>(this->oneof_string().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.oneof_string");
    ::google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(
      113, this->oneof_string(), output);
  }

  // bytes oneof_bytes = 114;
  if (has_oneof_bytes()) {
    ::google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(
      114, this->oneof_bytes(), output);
  }

  // .protobuf_unittest_import.ImportMessage optional_lazy_import_message = 115 [lazy = true];
  if (this->has_optional_lazy_import_message()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      115, this->_internal_optional_lazy_import_message(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3_arena_unittest.TestAllTypes)
}

::google::protobuf::uint8* TestAllTypes::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3_arena_unittest.TestAllTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 optional_int32 = 1;
  if (this->optional_int32() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->optional_int32(), target);
  }

  // int64 optional_int64 = 2;
  if (this->optional_int64() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt64ToArray(2, this->optional_int64(), target);
  }

  // uint32 optional_uint32 = 3;
  if (this->optional_uint32() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(3, this->optional_uint32(), target);
  }

  // uint64 optional_uint64 = 4;
  if (this->optional_uint64() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt64ToArray(4, this->optional_uint64(), target);
  }

  // sint32 optional_sint32 = 5;
  if (this->optional_sint32() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteSInt32ToArray(5, this->optional_sint32(), target);
  }

  // sint64 optional_sint64 = 6;
  if (this->optional_sint64() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteSInt64ToArray(6, this->optional_sint64(), target);
  }

  // fixed32 optional_fixed32 = 7;
  if (this->optional_fixed32() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteFixed32ToArray(7, this->optional_fixed32(), target);
  }

  // fixed64 optional_fixed64 = 8;
  if (this->optional_fixed64() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteFixed64ToArray(8, this->optional_fixed64(), target);
  }

  // sfixed32 optional_sfixed32 = 9;
  if (this->optional_sfixed32() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteSFixed32ToArray(9, this->optional_sfixed32(), target);
  }

  // sfixed64 optional_sfixed64 = 10;
  if (this->optional_sfixed64() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteSFixed64ToArray(10, this->optional_sfixed64(), target);
  }

  // float optional_float = 11;
  if (this->optional_float() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteFloatToArray(11, this->optional_float(), target);
  }

  // double optional_double = 12;
  if (this->optional_double() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteDoubleToArray(12, this->optional_double(), target);
  }

  // bool optional_bool = 13;
  if (this->optional_bool() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteBoolToArray(13, this->optional_bool(), target);
  }

  // string optional_string = 14;
  if (this->optional_string().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->optional_string().data(), static_cast<int>(this->optional_string().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.optional_string");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        14, this->optional_string(), target);
  }

  // bytes optional_bytes = 15;
  if (this->optional_bytes().size() > 0) {
    target =
      ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
        15, this->optional_bytes(), target);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedMessage optional_nested_message = 18;
  if (this->has_optional_nested_message()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        18, this->_internal_optional_nested_message(), deterministic, target);
  }

  // .proto3_arena_unittest.ForeignMessage optional_foreign_message = 19;
  if (this->has_optional_foreign_message()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        19, this->_internal_optional_foreign_message(), deterministic, target);
  }

  // .protobuf_unittest_import.ImportMessage optional_import_message = 20;
  if (this->has_optional_import_message()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        20, this->_internal_optional_import_message(), deterministic, target);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedEnum optional_nested_enum = 21;
  if (this->optional_nested_enum() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      21, this->optional_nested_enum(), target);
  }

  // .proto3_arena_unittest.ForeignEnum optional_foreign_enum = 22;
  if (this->optional_foreign_enum() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
      22, this->optional_foreign_enum(), target);
  }

  // string optional_string_piece = 24 [ctype = STRING_PIECE];
  if (this->optional_string_piece().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->optional_string_piece().data(), static_cast<int>(this->optional_string_piece().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.optional_string_piece");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        24, this->optional_string_piece(), target);
  }

  // string optional_cord = 25 [ctype = CORD];
  if (this->optional_cord().size() > 0) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->optional_cord().data(), static_cast<int>(this->optional_cord().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.optional_cord");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        25, this->optional_cord(), target);
  }

  // .protobuf_unittest_import.PublicImportMessage optional_public_import_message = 26;
  if (this->has_optional_public_import_message()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        26, this->_internal_optional_public_import_message(), deterministic, target);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedMessage optional_lazy_message = 27 [lazy = true];
  if (this->has_optional_lazy_message()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        27, this->_internal_optional_lazy_message(), deterministic, target);
  }

  // repeated int32 repeated_int32 = 31;
  if (this->repeated_int32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      31,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_int32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteInt32NoTagToArray(this->repeated_int32_, target);
  }

  // repeated int64 repeated_int64 = 32;
  if (this->repeated_int64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      32,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_int64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteInt64NoTagToArray(this->repeated_int64_, target);
  }

  // repeated uint32 repeated_uint32 = 33;
  if (this->repeated_uint32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      33,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_uint32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt32NoTagToArray(this->repeated_uint32_, target);
  }

  // repeated uint64 repeated_uint64 = 34;
  if (this->repeated_uint64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      34,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_uint64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt64NoTagToArray(this->repeated_uint64_, target);
  }

  // repeated sint32 repeated_sint32 = 35;
  if (this->repeated_sint32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      35,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_sint32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSInt32NoTagToArray(this->repeated_sint32_, target);
  }

  // repeated sint64 repeated_sint64 = 36;
  if (this->repeated_sint64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      36,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_sint64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSInt64NoTagToArray(this->repeated_sint64_, target);
  }

  // repeated fixed32 repeated_fixed32 = 37;
  if (this->repeated_fixed32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      37,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_fixed32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFixed32NoTagToArray(this->repeated_fixed32_, target);
  }

  // repeated fixed64 repeated_fixed64 = 38;
  if (this->repeated_fixed64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      38,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_fixed64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFixed64NoTagToArray(this->repeated_fixed64_, target);
  }

  // repeated sfixed32 repeated_sfixed32 = 39;
  if (this->repeated_sfixed32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      39,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_sfixed32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSFixed32NoTagToArray(this->repeated_sfixed32_, target);
  }

  // repeated sfixed64 repeated_sfixed64 = 40;
  if (this->repeated_sfixed64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      40,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_sfixed64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSFixed64NoTagToArray(this->repeated_sfixed64_, target);
  }

  // repeated float repeated_float = 41;
  if (this->repeated_float_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      41,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_float_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFloatNoTagToArray(this->repeated_float_, target);
  }

  // repeated double repeated_double = 42;
  if (this->repeated_double_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      42,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_double_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteDoubleNoTagToArray(this->repeated_double_, target);
  }

  // repeated bool repeated_bool = 43;
  if (this->repeated_bool_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      43,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _repeated_bool_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBoolNoTagToArray(this->repeated_bool_, target);
  }

  // repeated string repeated_string = 44;
  for (int i = 0, n = this->repeated_string_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->repeated_string(i).data(), static_cast<int>(this->repeated_string(i).length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.repeated_string");
    target = ::google::protobuf::internal::WireFormatLite::
      WriteStringToArray(44, this->repeated_string(i), target);
  }

  // repeated bytes repeated_bytes = 45;
  for (int i = 0, n = this->repeated_bytes_size(); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBytesToArray(45, this->repeated_bytes(i), target);
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedMessage repeated_nested_message = 48;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_nested_message_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        48, this->repeated_nested_message(static_cast<int>(i)), deterministic, target);
  }

  // repeated .proto3_arena_unittest.ForeignMessage repeated_foreign_message = 49;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_foreign_message_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        49, this->repeated_foreign_message(static_cast<int>(i)), deterministic, target);
  }

  // repeated .protobuf_unittest_import.ImportMessage repeated_import_message = 50;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_import_message_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        50, this->repeated_import_message(static_cast<int>(i)), deterministic, target);
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedEnum repeated_nested_enum = 51;
  if (this->repeated_nested_enum_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      51,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(      static_cast< ::google::protobuf::uint32>(
            _repeated_nested_enum_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumNoTagToArray(
      this->repeated_nested_enum_, target);
  }

  // repeated .proto3_arena_unittest.ForeignEnum repeated_foreign_enum = 52;
  if (this->repeated_foreign_enum_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      52,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(      static_cast< ::google::protobuf::uint32>(
            _repeated_foreign_enum_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumNoTagToArray(
      this->repeated_foreign_enum_, target);
  }

  // repeated string repeated_string_piece = 54 [ctype = STRING_PIECE];
  for (int i = 0, n = this->repeated_string_piece_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->repeated_string_piece(i).data(), static_cast<int>(this->repeated_string_piece(i).length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.repeated_string_piece");
    target = ::google::protobuf::internal::WireFormatLite::
      WriteStringToArray(54, this->repeated_string_piece(i), target);
  }

  // repeated string repeated_cord = 55 [ctype = CORD];
  for (int i = 0, n = this->repeated_cord_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->repeated_cord(i).data(), static_cast<int>(this->repeated_cord(i).length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.repeated_cord");
    target = ::google::protobuf::internal::WireFormatLite::
      WriteStringToArray(55, this->repeated_cord(i), target);
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedMessage repeated_lazy_message = 57 [lazy = true];
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_lazy_message_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        57, this->repeated_lazy_message(static_cast<int>(i)), deterministic, target);
  }

  // uint32 oneof_uint32 = 111;
  if (has_oneof_uint32()) {
    target = ::google::protobuf::internal::WireFormatLite::WriteUInt32ToArray(111, this->oneof_uint32(), target);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedMessage oneof_nested_message = 112;
  if (has_oneof_nested_message()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        112, this->_internal_oneof_nested_message(), deterministic, target);
  }

  // string oneof_string = 113;
  if (has_oneof_string()) {
    ::google::protobuf::internal::WireFormatLite::VerifyUtf8String(
      this->oneof_string().data(), static_cast<int>(this->oneof_string().length()),
      ::google::protobuf::internal::WireFormatLite::SERIALIZE,
      "proto3_arena_unittest.TestAllTypes.oneof_string");
    target =
      ::google::protobuf::internal::WireFormatLite::WriteStringToArray(
        113, this->oneof_string(), target);
  }

  // bytes oneof_bytes = 114;
  if (has_oneof_bytes()) {
    target =
      ::google::protobuf::internal::WireFormatLite::WriteBytesToArray(
        114, this->oneof_bytes(), target);
  }

  // .protobuf_unittest_import.ImportMessage optional_lazy_import_message = 115 [lazy = true];
  if (this->has_optional_lazy_import_message()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        115, this->_internal_optional_lazy_import_message(), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3_arena_unittest.TestAllTypes)
  return target;
}

size_t TestAllTypes::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3_arena_unittest.TestAllTypes)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated int32 repeated_int32 = 31;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int32Size(this->repeated_int32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_int32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated int64 repeated_int64 = 32;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int64Size(this->repeated_int64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_int64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated uint32 repeated_uint32 = 33;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt32Size(this->repeated_uint32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_uint32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated uint64 repeated_uint64 = 34;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt64Size(this->repeated_uint64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_uint64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sint32 repeated_sint32 = 35;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt32Size(this->repeated_sint32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_sint32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sint64 repeated_sint64 = 36;
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt64Size(this->repeated_sint64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_sint64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated fixed32 repeated_fixed32 = 37;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_fixed32_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_fixed32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated fixed64 repeated_fixed64 = 38;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_fixed64_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_fixed64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sfixed32 repeated_sfixed32 = 39;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_sfixed32_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_sfixed32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sfixed64 repeated_sfixed64 = 40;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_sfixed64_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_sfixed64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated float repeated_float = 41;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_float_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_float_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated double repeated_double = 42;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_double_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_double_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated bool repeated_bool = 43;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_bool_size());
    size_t data_size = 1UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_bool_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated string repeated_string = 44;
  total_size += 2 *
      ::google::protobuf::internal::FromIntSize(this->repeated_string_size());
  for (int i = 0, n = this->repeated_string_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
      this->repeated_string(i));
  }

  // repeated bytes repeated_bytes = 45;
  total_size += 2 *
      ::google::protobuf::internal::FromIntSize(this->repeated_bytes_size());
  for (int i = 0, n = this->repeated_bytes_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::BytesSize(
      this->repeated_bytes(i));
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedMessage repeated_nested_message = 48;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_nested_message_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_nested_message(static_cast<int>(i)));
    }
  }

  // repeated .proto3_arena_unittest.ForeignMessage repeated_foreign_message = 49;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_foreign_message_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_foreign_message(static_cast<int>(i)));
    }
  }

  // repeated .protobuf_unittest_import.ImportMessage repeated_import_message = 50;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_import_message_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_import_message(static_cast<int>(i)));
    }
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedEnum repeated_nested_enum = 51;
  {
    size_t data_size = 0;
    unsigned int count = static_cast<unsigned int>(this->repeated_nested_enum_size());for (unsigned int i = 0; i < count; i++) {
      data_size += ::google::protobuf::internal::WireFormatLite::EnumSize(
        this->repeated_nested_enum(static_cast<int>(i)));
    }
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_nested_enum_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated .proto3_arena_unittest.ForeignEnum repeated_foreign_enum = 52;
  {
    size_t data_size = 0;
    unsigned int count = static_cast<unsigned int>(this->repeated_foreign_enum_size());for (unsigned int i = 0; i < count; i++) {
      data_size += ::google::protobuf::internal::WireFormatLite::EnumSize(
        this->repeated_foreign_enum(static_cast<int>(i)));
    }
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _repeated_foreign_enum_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated string repeated_string_piece = 54 [ctype = STRING_PIECE];
  total_size += 2 *
      ::google::protobuf::internal::FromIntSize(this->repeated_string_piece_size());
  for (int i = 0, n = this->repeated_string_piece_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
      this->repeated_string_piece(i));
  }

  // repeated string repeated_cord = 55 [ctype = CORD];
  total_size += 2 *
      ::google::protobuf::internal::FromIntSize(this->repeated_cord_size());
  for (int i = 0, n = this->repeated_cord_size(); i < n; i++) {
    total_size += ::google::protobuf::internal::WireFormatLite::StringSize(
      this->repeated_cord(i));
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedMessage repeated_lazy_message = 57 [lazy = true];
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_lazy_message_size());
    total_size += 2UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_lazy_message(static_cast<int>(i)));
    }
  }

  // string optional_string = 14;
  if (this->optional_string().size() > 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::StringSize(
        this->optional_string());
  }

  // bytes optional_bytes = 15;
  if (this->optional_bytes().size() > 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::BytesSize(
        this->optional_bytes());
  }

  // string optional_string_piece = 24 [ctype = STRING_PIECE];
  if (this->optional_string_piece().size() > 0) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::StringSize(
        this->optional_string_piece());
  }

  // string optional_cord = 25 [ctype = CORD];
  if (this->optional_cord().size() > 0) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::StringSize(
        this->optional_cord());
  }

  // .proto3_arena_unittest.TestAllTypes.NestedMessage optional_nested_message = 18;
  if (this->has_optional_nested_message()) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *optional_nested_message_);
  }

  // .proto3_arena_unittest.ForeignMessage optional_foreign_message = 19;
  if (this->has_optional_foreign_message()) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *optional_foreign_message_);
  }

  // .protobuf_unittest_import.ImportMessage optional_import_message = 20;
  if (this->has_optional_import_message()) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *optional_import_message_);
  }

  // .protobuf_unittest_import.PublicImportMessage optional_public_import_message = 26;
  if (this->has_optional_public_import_message()) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *optional_public_import_message_);
  }

  // .proto3_arena_unittest.TestAllTypes.NestedMessage optional_lazy_message = 27 [lazy = true];
  if (this->has_optional_lazy_message()) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *optional_lazy_message_);
  }

  // .protobuf_unittest_import.ImportMessage optional_lazy_import_message = 115 [lazy = true];
  if (this->has_optional_lazy_import_message()) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *optional_lazy_import_message_);
  }

  // int64 optional_int64 = 2;
  if (this->optional_int64() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int64Size(
        this->optional_int64());
  }

  // int32 optional_int32 = 1;
  if (this->optional_int32() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->optional_int32());
  }

  // uint32 optional_uint32 = 3;
  if (this->optional_uint32() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt32Size(
        this->optional_uint32());
  }

  // uint64 optional_uint64 = 4;
  if (this->optional_uint64() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::UInt64Size(
        this->optional_uint64());
  }

  // sint64 optional_sint64 = 6;
  if (this->optional_sint64() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::SInt64Size(
        this->optional_sint64());
  }

  // sint32 optional_sint32 = 5;
  if (this->optional_sint32() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::SInt32Size(
        this->optional_sint32());
  }

  // fixed32 optional_fixed32 = 7;
  if (this->optional_fixed32() != 0) {
    total_size += 1 + 4;
  }

  // fixed64 optional_fixed64 = 8;
  if (this->optional_fixed64() != 0) {
    total_size += 1 + 8;
  }

  // sfixed64 optional_sfixed64 = 10;
  if (this->optional_sfixed64() != 0) {
    total_size += 1 + 8;
  }

  // sfixed32 optional_sfixed32 = 9;
  if (this->optional_sfixed32() != 0) {
    total_size += 1 + 4;
  }

  // float optional_float = 11;
  if (this->optional_float() != 0) {
    total_size += 1 + 4;
  }

  // double optional_double = 12;
  if (this->optional_double() != 0) {
    total_size += 1 + 8;
  }

  // bool optional_bool = 13;
  if (this->optional_bool() != 0) {
    total_size += 1 + 1;
  }

  // .proto3_arena_unittest.TestAllTypes.NestedEnum optional_nested_enum = 21;
  if (this->optional_nested_enum() != 0) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->optional_nested_enum());
  }

  // .proto3_arena_unittest.ForeignEnum optional_foreign_enum = 22;
  if (this->optional_foreign_enum() != 0) {
    total_size += 2 +
      ::google::protobuf::internal::WireFormatLite::EnumSize(this->optional_foreign_enum());
  }

  switch (oneof_field_case()) {
    // uint32 oneof_uint32 = 111;
    case kOneofUint32: {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::UInt32Size(
          this->oneof_uint32());
      break;
    }
    // .proto3_arena_unittest.TestAllTypes.NestedMessage oneof_nested_message = 112;
    case kOneofNestedMessage: {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          *oneof_field_.oneof_nested_message_);
      break;
    }
    // string oneof_string = 113;
    case kOneofString: {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::StringSize(
          this->oneof_string());
      break;
    }
    // bytes oneof_bytes = 114;
    case kOneofBytes: {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::BytesSize(
          this->oneof_bytes());
      break;
    }
    case ONEOF_FIELD_NOT_SET: {
      break;
    }
  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestAllTypes::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3_arena_unittest.TestAllTypes)
  GOOGLE_DCHECK_NE(&from, this);
  const TestAllTypes* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestAllTypes>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3_arena_unittest.TestAllTypes)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3_arena_unittest.TestAllTypes)
    MergeFrom(*source);
  }
}

void TestAllTypes::MergeFrom(const TestAllTypes& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3_arena_unittest.TestAllTypes)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_int32_.MergeFrom(from.repeated_int32_);
  repeated_int64_.MergeFrom(from.repeated_int64_);
  repeated_uint32_.MergeFrom(from.repeated_uint32_);
  repeated_uint64_.MergeFrom(from.repeated_uint64_);
  repeated_sint32_.MergeFrom(from.repeated_sint32_);
  repeated_sint64_.MergeFrom(from.repeated_sint64_);
  repeated_fixed32_.MergeFrom(from.repeated_fixed32_);
  repeated_fixed64_.MergeFrom(from.repeated_fixed64_);
  repeated_sfixed32_.MergeFrom(from.repeated_sfixed32_);
  repeated_sfixed64_.MergeFrom(from.repeated_sfixed64_);
  repeated_float_.MergeFrom(from.repeated_float_);
  repeated_double_.MergeFrom(from.repeated_double_);
  repeated_bool_.MergeFrom(from.repeated_bool_);
  repeated_string_.MergeFrom(from.repeated_string_);
  repeated_bytes_.MergeFrom(from.repeated_bytes_);
  repeated_nested_message_.MergeFrom(from.repeated_nested_message_);
  repeated_foreign_message_.MergeFrom(from.repeated_foreign_message_);
  repeated_import_message_.MergeFrom(from.repeated_import_message_);
  repeated_nested_enum_.MergeFrom(from.repeated_nested_enum_);
  repeated_foreign_enum_.MergeFrom(from.repeated_foreign_enum_);
  repeated_string_piece_.MergeFrom(from.repeated_string_piece_);
  repeated_cord_.MergeFrom(from.repeated_cord_);
  repeated_lazy_message_.MergeFrom(from.repeated_lazy_message_);
  if (from.optional_string().size() > 0) {
    set_optional_string(from.optional_string());
  }
  if (from.optional_bytes().size() > 0) {
    set_optional_bytes(from.optional_bytes());
  }
  if (from.optional_string_piece().size() > 0) {
    set_optional_string_piece(from.optional_string_piece());
  }
  if (from.optional_cord().size() > 0) {
    set_optional_cord(from.optional_cord());
  }
  if (from.has_optional_nested_message()) {
    mutable_optional_nested_message()->::proto3_arena_unittest::TestAllTypes_NestedMessage::MergeFrom(from.optional_nested_message());
  }
  if (from.has_optional_foreign_message()) {
    mutable_optional_foreign_message()->::proto3_arena_unittest::ForeignMessage::MergeFrom(from.optional_foreign_message());
  }
  if (from.has_optional_import_message()) {
    mutable_optional_import_message()->::protobuf_unittest_import::ImportMessage::MergeFrom(from.optional_import_message());
  }
  if (from.has_optional_public_import_message()) {
    mutable_optional_public_import_message()->::protobuf_unittest_import::PublicImportMessage::MergeFrom(from.optional_public_import_message());
  }
  if (from.has_optional_lazy_message()) {
    mutable_optional_lazy_message()->::proto3_arena_unittest::TestAllTypes_NestedMessage::MergeFrom(from.optional_lazy_message());
  }
  if (from.has_optional_lazy_import_message()) {
    mutable_optional_lazy_import_message()->::protobuf_unittest_import::ImportMessage::MergeFrom(from.optional_lazy_import_message());
  }
  if (from.optional_int64() != 0) {
    set_optional_int64(from.optional_int64());
  }
  if (from.optional_int32() != 0) {
    set_optional_int32(from.optional_int32());
  }
  if (from.optional_uint32() != 0) {
    set_optional_uint32(from.optional_uint32());
  }
  if (from.optional_uint64() != 0) {
    set_optional_uint64(from.optional_uint64());
  }
  if (from.optional_sint64() != 0) {
    set_optional_sint64(from.optional_sint64());
  }
  if (from.optional_sint32() != 0) {
    set_optional_sint32(from.optional_sint32());
  }
  if (from.optional_fixed32() != 0) {
    set_optional_fixed32(from.optional_fixed32());
  }
  if (from.optional_fixed64() != 0) {
    set_optional_fixed64(from.optional_fixed64());
  }
  if (from.optional_sfixed64() != 0) {
    set_optional_sfixed64(from.optional_sfixed64());
  }
  if (from.optional_sfixed32() != 0) {
    set_optional_sfixed32(from.optional_sfixed32());
  }
  if (from.optional_float() != 0) {
    set_optional_float(from.optional_float());
  }
  if (from.optional_double() != 0) {
    set_optional_double(from.optional_double());
  }
  if (from.optional_bool() != 0) {
    set_optional_bool(from.optional_bool());
  }
  if (from.optional_nested_enum() != 0) {
    set_optional_nested_enum(from.optional_nested_enum());
  }
  if (from.optional_foreign_enum() != 0) {
    set_optional_foreign_enum(from.optional_foreign_enum());
  }
  switch (from.oneof_field_case()) {
    case kOneofUint32: {
      set_oneof_uint32(from.oneof_uint32());
      break;
    }
    case kOneofNestedMessage: {
      mutable_oneof_nested_message()->::proto3_arena_unittest::TestAllTypes_NestedMessage::MergeFrom(from.oneof_nested_message());
      break;
    }
    case kOneofString: {
      set_oneof_string(from.oneof_string());
      break;
    }
    case kOneofBytes: {
      set_oneof_bytes(from.oneof_bytes());
      break;
    }
    case ONEOF_FIELD_NOT_SET: {
      break;
    }
  }
}

void TestAllTypes::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3_arena_unittest.TestAllTypes)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestAllTypes::CopyFrom(const TestAllTypes& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3_arena_unittest.TestAllTypes)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestAllTypes::IsInitialized() const {
  return true;
}

void TestAllTypes::Swap(TestAllTypes* other) {
  if (other == this) return;
  if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) {
    InternalSwap(other);
  } else {
    TestAllTypes* temp = New(GetArenaNoVirtual());
    temp->MergeFrom(*other);
    other->CopyFrom(*this);
    InternalSwap(temp);
    if (GetArenaNoVirtual() == NULL) {
      delete temp;
    }
  }
}
void TestAllTypes::UnsafeArenaSwap(TestAllTypes* other) {
  if (other == this) return;
  GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual());
  InternalSwap(other);
}
void TestAllTypes::InternalSwap(TestAllTypes* other) {
  using std::swap;
  repeated_int32_.InternalSwap(&other->repeated_int32_);
  repeated_int64_.InternalSwap(&other->repeated_int64_);
  repeated_uint32_.InternalSwap(&other->repeated_uint32_);
  repeated_uint64_.InternalSwap(&other->repeated_uint64_);
  repeated_sint32_.InternalSwap(&other->repeated_sint32_);
  repeated_sint64_.InternalSwap(&other->repeated_sint64_);
  repeated_fixed32_.InternalSwap(&other->repeated_fixed32_);
  repeated_fixed64_.InternalSwap(&other->repeated_fixed64_);
  repeated_sfixed32_.InternalSwap(&other->repeated_sfixed32_);
  repeated_sfixed64_.InternalSwap(&other->repeated_sfixed64_);
  repeated_float_.InternalSwap(&other->repeated_float_);
  repeated_double_.InternalSwap(&other->repeated_double_);
  repeated_bool_.InternalSwap(&other->repeated_bool_);
  repeated_string_.InternalSwap(CastToBase(&other->repeated_string_));
  repeated_bytes_.InternalSwap(CastToBase(&other->repeated_bytes_));
  CastToBase(&repeated_nested_message_)->InternalSwap(CastToBase(&other->repeated_nested_message_));
  CastToBase(&repeated_foreign_message_)->InternalSwap(CastToBase(&other->repeated_foreign_message_));
  CastToBase(&repeated_import_message_)->InternalSwap(CastToBase(&other->repeated_import_message_));
  repeated_nested_enum_.InternalSwap(&other->repeated_nested_enum_);
  repeated_foreign_enum_.InternalSwap(&other->repeated_foreign_enum_);
  repeated_string_piece_.InternalSwap(CastToBase(&other->repeated_string_piece_));
  repeated_cord_.InternalSwap(CastToBase(&other->repeated_cord_));
  CastToBase(&repeated_lazy_message_)->InternalSwap(CastToBase(&other->repeated_lazy_message_));
  optional_string_.Swap(&other->optional_string_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  optional_bytes_.Swap(&other->optional_bytes_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  optional_string_piece_.Swap(&other->optional_string_piece_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  optional_cord_.Swap(&other->optional_cord_, &::google::protobuf::internal::GetEmptyStringAlreadyInited(),
    GetArenaNoVirtual());
  swap(optional_nested_message_, other->optional_nested_message_);
  swap(optional_foreign_message_, other->optional_foreign_message_);
  swap(optional_import_message_, other->optional_import_message_);
  swap(optional_public_import_message_, other->optional_public_import_message_);
  swap(optional_lazy_message_, other->optional_lazy_message_);
  swap(optional_lazy_import_message_, other->optional_lazy_import_message_);
  swap(optional_int64_, other->optional_int64_);
  swap(optional_int32_, other->optional_int32_);
  swap(optional_uint32_, other->optional_uint32_);
  swap(optional_uint64_, other->optional_uint64_);
  swap(optional_sint64_, other->optional_sint64_);
  swap(optional_sint32_, other->optional_sint32_);
  swap(optional_fixed32_, other->optional_fixed32_);
  swap(optional_fixed64_, other->optional_fixed64_);
  swap(optional_sfixed64_, other->optional_sfixed64_);
  swap(optional_sfixed32_, other->optional_sfixed32_);
  swap(optional_float_, other->optional_float_);
  swap(optional_double_, other->optional_double_);
  swap(optional_bool_, other->optional_bool_);
  swap(optional_nested_enum_, other->optional_nested_enum_);
  swap(optional_foreign_enum_, other->optional_foreign_enum_);
  swap(oneof_field_, other->oneof_field_);
  swap(_oneof_case_[0], other->_oneof_case_[0]);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestAllTypes::GetMetadata() const {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void TestPackedTypes::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestPackedTypes::kPackedInt32FieldNumber;
const int TestPackedTypes::kPackedInt64FieldNumber;
const int TestPackedTypes::kPackedUint32FieldNumber;
const int TestPackedTypes::kPackedUint64FieldNumber;
const int TestPackedTypes::kPackedSint32FieldNumber;
const int TestPackedTypes::kPackedSint64FieldNumber;
const int TestPackedTypes::kPackedFixed32FieldNumber;
const int TestPackedTypes::kPackedFixed64FieldNumber;
const int TestPackedTypes::kPackedSfixed32FieldNumber;
const int TestPackedTypes::kPackedSfixed64FieldNumber;
const int TestPackedTypes::kPackedFloatFieldNumber;
const int TestPackedTypes::kPackedDoubleFieldNumber;
const int TestPackedTypes::kPackedBoolFieldNumber;
const int TestPackedTypes::kPackedEnumFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestPackedTypes::TestPackedTypes()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestPackedTypes.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3_arena_unittest.TestPackedTypes)
}
TestPackedTypes::TestPackedTypes(::google::protobuf::Arena* arena)
  : ::google::protobuf::Message(),
  _internal_metadata_(arena),
  packed_int32_(arena),
  packed_int64_(arena),
  packed_uint32_(arena),
  packed_uint64_(arena),
  packed_sint32_(arena),
  packed_sint64_(arena),
  packed_fixed32_(arena),
  packed_fixed64_(arena),
  packed_sfixed32_(arena),
  packed_sfixed64_(arena),
  packed_float_(arena),
  packed_double_(arena),
  packed_bool_(arena),
  packed_enum_(arena) {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestPackedTypes.base);
  SharedCtor();
  RegisterArenaDtor(arena);
  // @@protoc_insertion_point(arena_constructor:proto3_arena_unittest.TestPackedTypes)
}
TestPackedTypes::TestPackedTypes(const TestPackedTypes& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      packed_int32_(from.packed_int32_),
      packed_int64_(from.packed_int64_),
      packed_uint32_(from.packed_uint32_),
      packed_uint64_(from.packed_uint64_),
      packed_sint32_(from.packed_sint32_),
      packed_sint64_(from.packed_sint64_),
      packed_fixed32_(from.packed_fixed32_),
      packed_fixed64_(from.packed_fixed64_),
      packed_sfixed32_(from.packed_sfixed32_),
      packed_sfixed64_(from.packed_sfixed64_),
      packed_float_(from.packed_float_),
      packed_double_(from.packed_double_),
      packed_bool_(from.packed_bool_),
      packed_enum_(from.packed_enum_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:proto3_arena_unittest.TestPackedTypes)
}

void TestPackedTypes::SharedCtor() {
}

TestPackedTypes::~TestPackedTypes() {
  // @@protoc_insertion_point(destructor:proto3_arena_unittest.TestPackedTypes)
  SharedDtor();
}

void TestPackedTypes::SharedDtor() {
  GOOGLE_DCHECK(GetArenaNoVirtual() == NULL);
}

void TestPackedTypes::ArenaDtor(void* object) {
  TestPackedTypes* _this = reinterpret_cast< TestPackedTypes* >(object);
  (void)_this;
}
void TestPackedTypes::RegisterArenaDtor(::google::protobuf::Arena* arena) {
}
void TestPackedTypes::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestPackedTypes::descriptor() {
  ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestPackedTypes& TestPackedTypes::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestPackedTypes.base);
  return *internal_default_instance();
}


void TestPackedTypes::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3_arena_unittest.TestPackedTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  packed_int32_.Clear();
  packed_int64_.Clear();
  packed_uint32_.Clear();
  packed_uint64_.Clear();
  packed_sint32_.Clear();
  packed_sint64_.Clear();
  packed_fixed32_.Clear();
  packed_fixed64_.Clear();
  packed_sfixed32_.Clear();
  packed_sfixed64_.Clear();
  packed_float_.Clear();
  packed_double_.Clear();
  packed_bool_.Clear();
  packed_enum_.Clear();
  _internal_metadata_.Clear();
}

bool TestPackedTypes::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3_arena_unittest.TestPackedTypes)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(16383u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // repeated int32 packed_int32 = 90 [packed = true];
      case 90: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(210u /* 722 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, this->mutable_packed_int32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(208u /* 720 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 2, 722u, input, this->mutable_packed_int32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int64 packed_int64 = 91 [packed = true];
      case 91: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(218u /* 730 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, this->mutable_packed_int64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(216u /* 728 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 2, 730u, input, this->mutable_packed_int64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint32 packed_uint32 = 92 [packed = true];
      case 92: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(226u /* 738 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, this->mutable_packed_uint32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(224u /* 736 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 2, 738u, input, this->mutable_packed_uint32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint64 packed_uint64 = 93 [packed = true];
      case 93: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(234u /* 746 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, this->mutable_packed_uint64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(232u /* 744 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 2, 746u, input, this->mutable_packed_uint64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint32 packed_sint32 = 94 [packed = true];
      case 94: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(242u /* 754 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 input, this->mutable_packed_sint32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(240u /* 752 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 2, 754u, input, this->mutable_packed_sint32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint64 packed_sint64 = 95 [packed = true];
      case 95: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(250u /* 762 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 input, this->mutable_packed_sint64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(248u /* 760 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 2, 762u, input, this->mutable_packed_sint64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed32 packed_fixed32 = 96 [packed = true];
      case 96: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(2u /* 770 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 input, this->mutable_packed_fixed32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(5u /* 773 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 2, 770u, input, this->mutable_packed_fixed32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed64 packed_fixed64 = 97 [packed = true];
      case 97: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 778 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 input, this->mutable_packed_fixed64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(9u /* 777 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 2, 778u, input, this->mutable_packed_fixed64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed32 packed_sfixed32 = 98 [packed = true];
      case 98: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 786 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 input, this->mutable_packed_sfixed32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(21u /* 789 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 2, 786u, input, this->mutable_packed_sfixed32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed64 packed_sfixed64 = 99 [packed = true];
      case 99: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 794 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 input, this->mutable_packed_sfixed64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(25u /* 793 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 2, 794u, input, this->mutable_packed_sfixed64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated float packed_float = 100 [packed = true];
      case 100: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 802 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, this->mutable_packed_float())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(37u /* 805 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 2, 802u, input, this->mutable_packed_float())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated double packed_double = 101 [packed = true];
      case 101: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 810 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, this->mutable_packed_double())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(41u /* 809 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 2, 810u, input, this->mutable_packed_double())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bool packed_bool = 102 [packed = true];
      case 102: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(50u /* 818 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, this->mutable_packed_bool())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(48u /* 816 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitiveNoInline<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 2, 818u, input, this->mutable_packed_bool())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3_arena_unittest.ForeignEnum packed_enum = 103 [packed = true];
      case 103: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(58u /* 826 & 0xFF */)) {
          ::google::protobuf::uint32 length;
          DO_(input->ReadVarint32(&length));
          ::google::protobuf::io::CodedInputStream::Limit limit = input->PushLimit(static_cast<int>(length));
          while (input->BytesUntilLimit() > 0) {
            int value;
            DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
            add_packed_enum(static_cast< ::proto3_arena_unittest::ForeignEnum >(value));
          }
          input->PopLimit(limit);
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(56u /* 824 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          add_packed_enum(static_cast< ::proto3_arena_unittest::ForeignEnum >(value));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3_arena_unittest.TestPackedTypes)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3_arena_unittest.TestPackedTypes)
  return false;
#undef DO_
}

void TestPackedTypes::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3_arena_unittest.TestPackedTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated int32 packed_int32 = 90 [packed = true];
  if (this->packed_int32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(90, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_int32_cached_byte_size_));
  }
  for (int i = 0, n = this->packed_int32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32NoTag(
      this->packed_int32(i), output);
  }

  // repeated int64 packed_int64 = 91 [packed = true];
  if (this->packed_int64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(91, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_int64_cached_byte_size_));
  }
  for (int i = 0, n = this->packed_int64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64NoTag(
      this->packed_int64(i), output);
  }

  // repeated uint32 packed_uint32 = 92 [packed = true];
  if (this->packed_uint32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(92, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_uint32_cached_byte_size_));
  }
  for (int i = 0, n = this->packed_uint32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32NoTag(
      this->packed_uint32(i), output);
  }

  // repeated uint64 packed_uint64 = 93 [packed = true];
  if (this->packed_uint64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(93, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_uint64_cached_byte_size_));
  }
  for (int i = 0, n = this->packed_uint64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64NoTag(
      this->packed_uint64(i), output);
  }

  // repeated sint32 packed_sint32 = 94 [packed = true];
  if (this->packed_sint32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(94, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_sint32_cached_byte_size_));
  }
  for (int i = 0, n = this->packed_sint32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt32NoTag(
      this->packed_sint32(i), output);
  }

  // repeated sint64 packed_sint64 = 95 [packed = true];
  if (this->packed_sint64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(95, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_sint64_cached_byte_size_));
  }
  for (int i = 0, n = this->packed_sint64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt64NoTag(
      this->packed_sint64(i), output);
  }

  // repeated fixed32 packed_fixed32 = 96 [packed = true];
  if (this->packed_fixed32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(96, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_fixed32_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFixed32Array(
      this->packed_fixed32().data(), this->packed_fixed32_size(), output);
  }

  // repeated fixed64 packed_fixed64 = 97 [packed = true];
  if (this->packed_fixed64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(97, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_fixed64_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFixed64Array(
      this->packed_fixed64().data(), this->packed_fixed64_size(), output);
  }

  // repeated sfixed32 packed_sfixed32 = 98 [packed = true];
  if (this->packed_sfixed32_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(98, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_sfixed32_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteSFixed32Array(
      this->packed_sfixed32().data(), this->packed_sfixed32_size(), output);
  }

  // repeated sfixed64 packed_sfixed64 = 99 [packed = true];
  if (this->packed_sfixed64_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(99, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_sfixed64_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteSFixed64Array(
      this->packed_sfixed64().data(), this->packed_sfixed64_size(), output);
  }

  // repeated float packed_float = 100 [packed = true];
  if (this->packed_float_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(100, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_float_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteFloatArray(
      this->packed_float().data(), this->packed_float_size(), output);
  }

  // repeated double packed_double = 101 [packed = true];
  if (this->packed_double_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(101, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_double_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteDoubleArray(
      this->packed_double().data(), this->packed_double_size(), output);
  }

  // repeated bool packed_bool = 102 [packed = true];
  if (this->packed_bool_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(102, ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED, output);
    output->WriteVarint32(static_cast< ::google::protobuf::uint32>(
        _packed_bool_cached_byte_size_));
    ::google::protobuf::internal::WireFormatLite::WriteBoolArray(
      this->packed_bool().data(), this->packed_bool_size(), output);
  }

  // repeated .proto3_arena_unittest.ForeignEnum packed_enum = 103 [packed = true];
  if (this->packed_enum_size() > 0) {
    ::google::protobuf::internal::WireFormatLite::WriteTag(
      103,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      output);
    output->WriteVarint32(
        static_cast< ::google::protobuf::uint32>(_packed_enum_cached_byte_size_));
  }
  for (int i = 0, n = this->packed_enum_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteEnumNoTag(
      this->packed_enum(i), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3_arena_unittest.TestPackedTypes)
}

::google::protobuf::uint8* TestPackedTypes::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3_arena_unittest.TestPackedTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated int32 packed_int32 = 90 [packed = true];
  if (this->packed_int32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      90,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_int32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteInt32NoTagToArray(this->packed_int32_, target);
  }

  // repeated int64 packed_int64 = 91 [packed = true];
  if (this->packed_int64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      91,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_int64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteInt64NoTagToArray(this->packed_int64_, target);
  }

  // repeated uint32 packed_uint32 = 92 [packed = true];
  if (this->packed_uint32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      92,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_uint32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt32NoTagToArray(this->packed_uint32_, target);
  }

  // repeated uint64 packed_uint64 = 93 [packed = true];
  if (this->packed_uint64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      93,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_uint64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteUInt64NoTagToArray(this->packed_uint64_, target);
  }

  // repeated sint32 packed_sint32 = 94 [packed = true];
  if (this->packed_sint32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      94,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_sint32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSInt32NoTagToArray(this->packed_sint32_, target);
  }

  // repeated sint64 packed_sint64 = 95 [packed = true];
  if (this->packed_sint64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      95,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_sint64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSInt64NoTagToArray(this->packed_sint64_, target);
  }

  // repeated fixed32 packed_fixed32 = 96 [packed = true];
  if (this->packed_fixed32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      96,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_fixed32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFixed32NoTagToArray(this->packed_fixed32_, target);
  }

  // repeated fixed64 packed_fixed64 = 97 [packed = true];
  if (this->packed_fixed64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      97,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_fixed64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFixed64NoTagToArray(this->packed_fixed64_, target);
  }

  // repeated sfixed32 packed_sfixed32 = 98 [packed = true];
  if (this->packed_sfixed32_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      98,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_sfixed32_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSFixed32NoTagToArray(this->packed_sfixed32_, target);
  }

  // repeated sfixed64 packed_sfixed64 = 99 [packed = true];
  if (this->packed_sfixed64_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      99,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_sfixed64_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteSFixed64NoTagToArray(this->packed_sfixed64_, target);
  }

  // repeated float packed_float = 100 [packed = true];
  if (this->packed_float_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      100,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_float_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteFloatNoTagToArray(this->packed_float_, target);
  }

  // repeated double packed_double = 101 [packed = true];
  if (this->packed_double_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      101,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_double_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteDoubleNoTagToArray(this->packed_double_, target);
  }

  // repeated bool packed_bool = 102 [packed = true];
  if (this->packed_bool_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      102,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(
        static_cast< ::google::protobuf::int32>(
            _packed_bool_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::
      WriteBoolNoTagToArray(this->packed_bool_, target);
  }

  // repeated .proto3_arena_unittest.ForeignEnum packed_enum = 103 [packed = true];
  if (this->packed_enum_size() > 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteTagToArray(
      103,
      ::google::protobuf::internal::WireFormatLite::WIRETYPE_LENGTH_DELIMITED,
      target);
    target = ::google::protobuf::io::CodedOutputStream::WriteVarint32ToArray(      static_cast< ::google::protobuf::uint32>(
            _packed_enum_cached_byte_size_), target);
    target = ::google::protobuf::internal::WireFormatLite::WriteEnumNoTagToArray(
      this->packed_enum_, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3_arena_unittest.TestPackedTypes)
  return target;
}

size_t TestPackedTypes::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3_arena_unittest.TestPackedTypes)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated int32 packed_int32 = 90 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int32Size(this->packed_int32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_int32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated int64 packed_int64 = 91 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int64Size(this->packed_int64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_int64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated uint32 packed_uint32 = 92 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt32Size(this->packed_uint32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_uint32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated uint64 packed_uint64 = 93 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt64Size(this->packed_uint64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_uint64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sint32 packed_sint32 = 94 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt32Size(this->packed_sint32_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_sint32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sint64 packed_sint64 = 95 [packed = true];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt64Size(this->packed_sint64_);
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_sint64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated fixed32 packed_fixed32 = 96 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->packed_fixed32_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_fixed32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated fixed64 packed_fixed64 = 97 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->packed_fixed64_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_fixed64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sfixed32 packed_sfixed32 = 98 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->packed_sfixed32_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_sfixed32_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated sfixed64 packed_sfixed64 = 99 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->packed_sfixed64_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_sfixed64_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated float packed_float = 100 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->packed_float_size());
    size_t data_size = 4UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_float_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated double packed_double = 101 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->packed_double_size());
    size_t data_size = 8UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_double_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated bool packed_bool = 102 [packed = true];
  {
    unsigned int count = static_cast<unsigned int>(this->packed_bool_size());
    size_t data_size = 1UL * count;
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_bool_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  // repeated .proto3_arena_unittest.ForeignEnum packed_enum = 103 [packed = true];
  {
    size_t data_size = 0;
    unsigned int count = static_cast<unsigned int>(this->packed_enum_size());for (unsigned int i = 0; i < count; i++) {
      data_size += ::google::protobuf::internal::WireFormatLite::EnumSize(
        this->packed_enum(static_cast<int>(i)));
    }
    if (data_size > 0) {
      total_size += 2 +
        ::google::protobuf::internal::WireFormatLite::Int32Size(
            static_cast< ::google::protobuf::int32>(data_size));
    }
    int cached_size = ::google::protobuf::internal::ToCachedSize(data_size);
    GOOGLE_SAFE_CONCURRENT_WRITES_BEGIN();
    _packed_enum_cached_byte_size_ = cached_size;
    GOOGLE_SAFE_CONCURRENT_WRITES_END();
    total_size += data_size;
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestPackedTypes::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3_arena_unittest.TestPackedTypes)
  GOOGLE_DCHECK_NE(&from, this);
  const TestPackedTypes* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestPackedTypes>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3_arena_unittest.TestPackedTypes)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3_arena_unittest.TestPackedTypes)
    MergeFrom(*source);
  }
}

void TestPackedTypes::MergeFrom(const TestPackedTypes& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3_arena_unittest.TestPackedTypes)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  packed_int32_.MergeFrom(from.packed_int32_);
  packed_int64_.MergeFrom(from.packed_int64_);
  packed_uint32_.MergeFrom(from.packed_uint32_);
  packed_uint64_.MergeFrom(from.packed_uint64_);
  packed_sint32_.MergeFrom(from.packed_sint32_);
  packed_sint64_.MergeFrom(from.packed_sint64_);
  packed_fixed32_.MergeFrom(from.packed_fixed32_);
  packed_fixed64_.MergeFrom(from.packed_fixed64_);
  packed_sfixed32_.MergeFrom(from.packed_sfixed32_);
  packed_sfixed64_.MergeFrom(from.packed_sfixed64_);
  packed_float_.MergeFrom(from.packed_float_);
  packed_double_.MergeFrom(from.packed_double_);
  packed_bool_.MergeFrom(from.packed_bool_);
  packed_enum_.MergeFrom(from.packed_enum_);
}

void TestPackedTypes::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3_arena_unittest.TestPackedTypes)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestPackedTypes::CopyFrom(const TestPackedTypes& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3_arena_unittest.TestPackedTypes)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestPackedTypes::IsInitialized() const {
  return true;
}

void TestPackedTypes::Swap(TestPackedTypes* other) {
  if (other == this) return;
  if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) {
    InternalSwap(other);
  } else {
    TestPackedTypes* temp = New(GetArenaNoVirtual());
    temp->MergeFrom(*other);
    other->CopyFrom(*this);
    InternalSwap(temp);
    if (GetArenaNoVirtual() == NULL) {
      delete temp;
    }
  }
}
void TestPackedTypes::UnsafeArenaSwap(TestPackedTypes* other) {
  if (other == this) return;
  GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual());
  InternalSwap(other);
}
void TestPackedTypes::InternalSwap(TestPackedTypes* other) {
  using std::swap;
  packed_int32_.InternalSwap(&other->packed_int32_);
  packed_int64_.InternalSwap(&other->packed_int64_);
  packed_uint32_.InternalSwap(&other->packed_uint32_);
  packed_uint64_.InternalSwap(&other->packed_uint64_);
  packed_sint32_.InternalSwap(&other->packed_sint32_);
  packed_sint64_.InternalSwap(&other->packed_sint64_);
  packed_fixed32_.InternalSwap(&other->packed_fixed32_);
  packed_fixed64_.InternalSwap(&other->packed_fixed64_);
  packed_sfixed32_.InternalSwap(&other->packed_sfixed32_);
  packed_sfixed64_.InternalSwap(&other->packed_sfixed64_);
  packed_float_.InternalSwap(&other->packed_float_);
  packed_double_.InternalSwap(&other->packed_double_);
  packed_bool_.InternalSwap(&other->packed_bool_);
  packed_enum_.InternalSwap(&other->packed_enum_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestPackedTypes::GetMetadata() const {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void TestUnpackedTypes::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int TestUnpackedTypes::kRepeatedInt32FieldNumber;
const int TestUnpackedTypes::kRepeatedInt64FieldNumber;
const int TestUnpackedTypes::kRepeatedUint32FieldNumber;
const int TestUnpackedTypes::kRepeatedUint64FieldNumber;
const int TestUnpackedTypes::kRepeatedSint32FieldNumber;
const int TestUnpackedTypes::kRepeatedSint64FieldNumber;
const int TestUnpackedTypes::kRepeatedFixed32FieldNumber;
const int TestUnpackedTypes::kRepeatedFixed64FieldNumber;
const int TestUnpackedTypes::kRepeatedSfixed32FieldNumber;
const int TestUnpackedTypes::kRepeatedSfixed64FieldNumber;
const int TestUnpackedTypes::kRepeatedFloatFieldNumber;
const int TestUnpackedTypes::kRepeatedDoubleFieldNumber;
const int TestUnpackedTypes::kRepeatedBoolFieldNumber;
const int TestUnpackedTypes::kRepeatedNestedEnumFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestUnpackedTypes::TestUnpackedTypes()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestUnpackedTypes.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3_arena_unittest.TestUnpackedTypes)
}
TestUnpackedTypes::TestUnpackedTypes(::google::protobuf::Arena* arena)
  : ::google::protobuf::Message(),
  _internal_metadata_(arena),
  repeated_int32_(arena),
  repeated_int64_(arena),
  repeated_uint32_(arena),
  repeated_uint64_(arena),
  repeated_sint32_(arena),
  repeated_sint64_(arena),
  repeated_fixed32_(arena),
  repeated_fixed64_(arena),
  repeated_sfixed32_(arena),
  repeated_sfixed64_(arena),
  repeated_float_(arena),
  repeated_double_(arena),
  repeated_bool_(arena),
  repeated_nested_enum_(arena) {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestUnpackedTypes.base);
  SharedCtor();
  RegisterArenaDtor(arena);
  // @@protoc_insertion_point(arena_constructor:proto3_arena_unittest.TestUnpackedTypes)
}
TestUnpackedTypes::TestUnpackedTypes(const TestUnpackedTypes& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_int32_(from.repeated_int32_),
      repeated_int64_(from.repeated_int64_),
      repeated_uint32_(from.repeated_uint32_),
      repeated_uint64_(from.repeated_uint64_),
      repeated_sint32_(from.repeated_sint32_),
      repeated_sint64_(from.repeated_sint64_),
      repeated_fixed32_(from.repeated_fixed32_),
      repeated_fixed64_(from.repeated_fixed64_),
      repeated_sfixed32_(from.repeated_sfixed32_),
      repeated_sfixed64_(from.repeated_sfixed64_),
      repeated_float_(from.repeated_float_),
      repeated_double_(from.repeated_double_),
      repeated_bool_(from.repeated_bool_),
      repeated_nested_enum_(from.repeated_nested_enum_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:proto3_arena_unittest.TestUnpackedTypes)
}

void TestUnpackedTypes::SharedCtor() {
}

TestUnpackedTypes::~TestUnpackedTypes() {
  // @@protoc_insertion_point(destructor:proto3_arena_unittest.TestUnpackedTypes)
  SharedDtor();
}

void TestUnpackedTypes::SharedDtor() {
  GOOGLE_DCHECK(GetArenaNoVirtual() == NULL);
}

void TestUnpackedTypes::ArenaDtor(void* object) {
  TestUnpackedTypes* _this = reinterpret_cast< TestUnpackedTypes* >(object);
  (void)_this;
}
void TestUnpackedTypes::RegisterArenaDtor(::google::protobuf::Arena* arena) {
}
void TestUnpackedTypes::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestUnpackedTypes::descriptor() {
  ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestUnpackedTypes& TestUnpackedTypes::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestUnpackedTypes.base);
  return *internal_default_instance();
}


void TestUnpackedTypes::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3_arena_unittest.TestUnpackedTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_int32_.Clear();
  repeated_int64_.Clear();
  repeated_uint32_.Clear();
  repeated_uint64_.Clear();
  repeated_sint32_.Clear();
  repeated_sint64_.Clear();
  repeated_fixed32_.Clear();
  repeated_fixed64_.Clear();
  repeated_sfixed32_.Clear();
  repeated_sfixed64_.Clear();
  repeated_float_.Clear();
  repeated_double_.Clear();
  repeated_bool_.Clear();
  repeated_nested_enum_.Clear();
  _internal_metadata_.Clear();
}

bool TestUnpackedTypes::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3_arena_unittest.TestUnpackedTypes)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // repeated int32 repeated_int32 = 1 [packed = false];
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 1, 8u, input, this->mutable_repeated_int32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, this->mutable_repeated_int32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated int64 repeated_int64 = 2 [packed = false];
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(16u /* 16 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 1, 16u, input, this->mutable_repeated_int64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_INT64>(
                 input, this->mutable_repeated_int64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint32 repeated_uint32 = 3 [packed = false];
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(24u /* 24 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 1, 24u, input, this->mutable_repeated_uint32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_UINT32>(
                 input, this->mutable_repeated_uint32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated uint64 repeated_uint64 = 4 [packed = false];
      case 4: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(32u /* 32 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 1, 32u, input, this->mutable_repeated_uint64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(34u /* 34 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_UINT64>(
                 input, this->mutable_repeated_uint64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint32 repeated_sint32 = 5 [packed = false];
      case 5: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(40u /* 40 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 1, 40u, input, this->mutable_repeated_sint32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(42u /* 42 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SINT32>(
                 input, this->mutable_repeated_sint32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sint64 repeated_sint64 = 6 [packed = false];
      case 6: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(48u /* 48 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 1, 48u, input, this->mutable_repeated_sint64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(50u /* 50 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SINT64>(
                 input, this->mutable_repeated_sint64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed32 repeated_fixed32 = 7 [packed = false];
      case 7: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(61u /* 61 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 1, 61u, input, this->mutable_repeated_fixed32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(58u /* 58 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint32, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED32>(
                 input, this->mutable_repeated_fixed32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated fixed64 repeated_fixed64 = 8 [packed = false];
      case 8: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(65u /* 65 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 1, 65u, input, this->mutable_repeated_fixed64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(66u /* 66 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::uint64, ::google::protobuf::internal::WireFormatLite::TYPE_FIXED64>(
                 input, this->mutable_repeated_fixed64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed32 repeated_sfixed32 = 9 [packed = false];
      case 9: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(77u /* 77 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 1, 77u, input, this->mutable_repeated_sfixed32())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(74u /* 74 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED32>(
                 input, this->mutable_repeated_sfixed32())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated sfixed64 repeated_sfixed64 = 10 [packed = false];
      case 10: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(81u /* 81 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 1, 81u, input, this->mutable_repeated_sfixed64())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(82u /* 82 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   ::google::protobuf::int64, ::google::protobuf::internal::WireFormatLite::TYPE_SFIXED64>(
                 input, this->mutable_repeated_sfixed64())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated float repeated_float = 11 [packed = false];
      case 11: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(93u /* 93 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 1, 93u, input, this->mutable_repeated_float())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(90u /* 90 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   float, ::google::protobuf::internal::WireFormatLite::TYPE_FLOAT>(
                 input, this->mutable_repeated_float())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated double repeated_double = 12 [packed = false];
      case 12: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(97u /* 97 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 1, 97u, input, this->mutable_repeated_double())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(98u /* 98 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   double, ::google::protobuf::internal::WireFormatLite::TYPE_DOUBLE>(
                 input, this->mutable_repeated_double())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated bool repeated_bool = 13 [packed = false];
      case 13: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(104u /* 104 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadRepeatedPrimitive<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 1, 104u, input, this->mutable_repeated_bool())));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(106u /* 106 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedPrimitiveNoInline<
                   bool, ::google::protobuf::internal::WireFormatLite::TYPE_BOOL>(
                 input, this->mutable_repeated_bool())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3_arena_unittest.TestAllTypes.NestedEnum repeated_nested_enum = 14 [packed = false];
      case 14: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(112u /* 112 & 0xFF */)) {
          int value;
          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   int, ::google::protobuf::internal::WireFormatLite::TYPE_ENUM>(
                 input, &value)));
          add_repeated_nested_enum(static_cast< ::proto3_arena_unittest::TestAllTypes_NestedEnum >(value));
        } else if (
            static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(114u /* 114 & 0xFF */)) {
          DO_((::google::protobuf::internal::WireFormatLite::ReadPackedEnumPreserveUnknowns(
                 input,
                 14,
                 NULL,
                 NULL,
                 this->mutable_repeated_nested_enum())));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3_arena_unittest.TestUnpackedTypes)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3_arena_unittest.TestUnpackedTypes)
  return false;
#undef DO_
}

void TestUnpackedTypes::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3_arena_unittest.TestUnpackedTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated int32 repeated_int32 = 1 [packed = false];
  for (int i = 0, n = this->repeated_int32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(
      1, this->repeated_int32(i), output);
  }

  // repeated int64 repeated_int64 = 2 [packed = false];
  for (int i = 0, n = this->repeated_int64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteInt64(
      2, this->repeated_int64(i), output);
  }

  // repeated uint32 repeated_uint32 = 3 [packed = false];
  for (int i = 0, n = this->repeated_uint32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt32(
      3, this->repeated_uint32(i), output);
  }

  // repeated uint64 repeated_uint64 = 4 [packed = false];
  for (int i = 0, n = this->repeated_uint64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteUInt64(
      4, this->repeated_uint64(i), output);
  }

  // repeated sint32 repeated_sint32 = 5 [packed = false];
  for (int i = 0, n = this->repeated_sint32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt32(
      5, this->repeated_sint32(i), output);
  }

  // repeated sint64 repeated_sint64 = 6 [packed = false];
  for (int i = 0, n = this->repeated_sint64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSInt64(
      6, this->repeated_sint64(i), output);
  }

  // repeated fixed32 repeated_fixed32 = 7 [packed = false];
  for (int i = 0, n = this->repeated_fixed32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteFixed32(
      7, this->repeated_fixed32(i), output);
  }

  // repeated fixed64 repeated_fixed64 = 8 [packed = false];
  for (int i = 0, n = this->repeated_fixed64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteFixed64(
      8, this->repeated_fixed64(i), output);
  }

  // repeated sfixed32 repeated_sfixed32 = 9 [packed = false];
  for (int i = 0, n = this->repeated_sfixed32_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSFixed32(
      9, this->repeated_sfixed32(i), output);
  }

  // repeated sfixed64 repeated_sfixed64 = 10 [packed = false];
  for (int i = 0, n = this->repeated_sfixed64_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteSFixed64(
      10, this->repeated_sfixed64(i), output);
  }

  // repeated float repeated_float = 11 [packed = false];
  for (int i = 0, n = this->repeated_float_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteFloat(
      11, this->repeated_float(i), output);
  }

  // repeated double repeated_double = 12 [packed = false];
  for (int i = 0, n = this->repeated_double_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteDouble(
      12, this->repeated_double(i), output);
  }

  // repeated bool repeated_bool = 13 [packed = false];
  for (int i = 0, n = this->repeated_bool_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteBool(
      13, this->repeated_bool(i), output);
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedEnum repeated_nested_enum = 14 [packed = false];
  for (int i = 0, n = this->repeated_nested_enum_size(); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteEnum(
      14, this->repeated_nested_enum(i), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3_arena_unittest.TestUnpackedTypes)
}

::google::protobuf::uint8* TestUnpackedTypes::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3_arena_unittest.TestUnpackedTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // repeated int32 repeated_int32 = 1 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteInt32ToArray(1, this->repeated_int32_, target);

  // repeated int64 repeated_int64 = 2 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteInt64ToArray(2, this->repeated_int64_, target);

  // repeated uint32 repeated_uint32 = 3 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteUInt32ToArray(3, this->repeated_uint32_, target);

  // repeated uint64 repeated_uint64 = 4 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteUInt64ToArray(4, this->repeated_uint64_, target);

  // repeated sint32 repeated_sint32 = 5 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteSInt32ToArray(5, this->repeated_sint32_, target);

  // repeated sint64 repeated_sint64 = 6 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteSInt64ToArray(6, this->repeated_sint64_, target);

  // repeated fixed32 repeated_fixed32 = 7 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteFixed32ToArray(7, this->repeated_fixed32_, target);

  // repeated fixed64 repeated_fixed64 = 8 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteFixed64ToArray(8, this->repeated_fixed64_, target);

  // repeated sfixed32 repeated_sfixed32 = 9 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteSFixed32ToArray(9, this->repeated_sfixed32_, target);

  // repeated sfixed64 repeated_sfixed64 = 10 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteSFixed64ToArray(10, this->repeated_sfixed64_, target);

  // repeated float repeated_float = 11 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteFloatToArray(11, this->repeated_float_, target);

  // repeated double repeated_double = 12 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteDoubleToArray(12, this->repeated_double_, target);

  // repeated bool repeated_bool = 13 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::
    WriteBoolToArray(13, this->repeated_bool_, target);

  // repeated .proto3_arena_unittest.TestAllTypes.NestedEnum repeated_nested_enum = 14 [packed = false];
  target = ::google::protobuf::internal::WireFormatLite::WriteEnumToArray(
    14, this->repeated_nested_enum_, target);

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3_arena_unittest.TestUnpackedTypes)
  return target;
}

size_t TestUnpackedTypes::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3_arena_unittest.TestUnpackedTypes)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated int32 repeated_int32 = 1 [packed = false];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int32Size(this->repeated_int32_);
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_int32_size());
    total_size += data_size;
  }

  // repeated int64 repeated_int64 = 2 [packed = false];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      Int64Size(this->repeated_int64_);
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_int64_size());
    total_size += data_size;
  }

  // repeated uint32 repeated_uint32 = 3 [packed = false];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt32Size(this->repeated_uint32_);
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_uint32_size());
    total_size += data_size;
  }

  // repeated uint64 repeated_uint64 = 4 [packed = false];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      UInt64Size(this->repeated_uint64_);
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_uint64_size());
    total_size += data_size;
  }

  // repeated sint32 repeated_sint32 = 5 [packed = false];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt32Size(this->repeated_sint32_);
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_sint32_size());
    total_size += data_size;
  }

  // repeated sint64 repeated_sint64 = 6 [packed = false];
  {
    size_t data_size = ::google::protobuf::internal::WireFormatLite::
      SInt64Size(this->repeated_sint64_);
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_sint64_size());
    total_size += data_size;
  }

  // repeated fixed32 repeated_fixed32 = 7 [packed = false];
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_fixed32_size());
    size_t data_size = 4UL * count;
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_fixed32_size());
    total_size += data_size;
  }

  // repeated fixed64 repeated_fixed64 = 8 [packed = false];
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_fixed64_size());
    size_t data_size = 8UL * count;
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_fixed64_size());
    total_size += data_size;
  }

  // repeated sfixed32 repeated_sfixed32 = 9 [packed = false];
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_sfixed32_size());
    size_t data_size = 4UL * count;
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_sfixed32_size());
    total_size += data_size;
  }

  // repeated sfixed64 repeated_sfixed64 = 10 [packed = false];
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_sfixed64_size());
    size_t data_size = 8UL * count;
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_sfixed64_size());
    total_size += data_size;
  }

  // repeated float repeated_float = 11 [packed = false];
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_float_size());
    size_t data_size = 4UL * count;
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_float_size());
    total_size += data_size;
  }

  // repeated double repeated_double = 12 [packed = false];
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_double_size());
    size_t data_size = 8UL * count;
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_double_size());
    total_size += data_size;
  }

  // repeated bool repeated_bool = 13 [packed = false];
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_bool_size());
    size_t data_size = 1UL * count;
    total_size += 1 *
                  ::google::protobuf::internal::FromIntSize(this->repeated_bool_size());
    total_size += data_size;
  }

  // repeated .proto3_arena_unittest.TestAllTypes.NestedEnum repeated_nested_enum = 14 [packed = false];
  {
    size_t data_size = 0;
    unsigned int count = static_cast<unsigned int>(this->repeated_nested_enum_size());for (unsigned int i = 0; i < count; i++) {
      data_size += ::google::protobuf::internal::WireFormatLite::EnumSize(
        this->repeated_nested_enum(static_cast<int>(i)));
    }
    total_size += (1UL * count) + data_size;
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestUnpackedTypes::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3_arena_unittest.TestUnpackedTypes)
  GOOGLE_DCHECK_NE(&from, this);
  const TestUnpackedTypes* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestUnpackedTypes>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3_arena_unittest.TestUnpackedTypes)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3_arena_unittest.TestUnpackedTypes)
    MergeFrom(*source);
  }
}

void TestUnpackedTypes::MergeFrom(const TestUnpackedTypes& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3_arena_unittest.TestUnpackedTypes)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_int32_.MergeFrom(from.repeated_int32_);
  repeated_int64_.MergeFrom(from.repeated_int64_);
  repeated_uint32_.MergeFrom(from.repeated_uint32_);
  repeated_uint64_.MergeFrom(from.repeated_uint64_);
  repeated_sint32_.MergeFrom(from.repeated_sint32_);
  repeated_sint64_.MergeFrom(from.repeated_sint64_);
  repeated_fixed32_.MergeFrom(from.repeated_fixed32_);
  repeated_fixed64_.MergeFrom(from.repeated_fixed64_);
  repeated_sfixed32_.MergeFrom(from.repeated_sfixed32_);
  repeated_sfixed64_.MergeFrom(from.repeated_sfixed64_);
  repeated_float_.MergeFrom(from.repeated_float_);
  repeated_double_.MergeFrom(from.repeated_double_);
  repeated_bool_.MergeFrom(from.repeated_bool_);
  repeated_nested_enum_.MergeFrom(from.repeated_nested_enum_);
}

void TestUnpackedTypes::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3_arena_unittest.TestUnpackedTypes)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestUnpackedTypes::CopyFrom(const TestUnpackedTypes& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3_arena_unittest.TestUnpackedTypes)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestUnpackedTypes::IsInitialized() const {
  return true;
}

void TestUnpackedTypes::Swap(TestUnpackedTypes* other) {
  if (other == this) return;
  if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) {
    InternalSwap(other);
  } else {
    TestUnpackedTypes* temp = New(GetArenaNoVirtual());
    temp->MergeFrom(*other);
    other->CopyFrom(*this);
    InternalSwap(temp);
    if (GetArenaNoVirtual() == NULL) {
      delete temp;
    }
  }
}
void TestUnpackedTypes::UnsafeArenaSwap(TestUnpackedTypes* other) {
  if (other == this) return;
  GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual());
  InternalSwap(other);
}
void TestUnpackedTypes::InternalSwap(TestUnpackedTypes* other) {
  using std::swap;
  repeated_int32_.InternalSwap(&other->repeated_int32_);
  repeated_int64_.InternalSwap(&other->repeated_int64_);
  repeated_uint32_.InternalSwap(&other->repeated_uint32_);
  repeated_uint64_.InternalSwap(&other->repeated_uint64_);
  repeated_sint32_.InternalSwap(&other->repeated_sint32_);
  repeated_sint64_.InternalSwap(&other->repeated_sint64_);
  repeated_fixed32_.InternalSwap(&other->repeated_fixed32_);
  repeated_fixed64_.InternalSwap(&other->repeated_fixed64_);
  repeated_sfixed32_.InternalSwap(&other->repeated_sfixed32_);
  repeated_sfixed64_.InternalSwap(&other->repeated_sfixed64_);
  repeated_float_.InternalSwap(&other->repeated_float_);
  repeated_double_.InternalSwap(&other->repeated_double_);
  repeated_bool_.InternalSwap(&other->repeated_bool_);
  repeated_nested_enum_.InternalSwap(&other->repeated_nested_enum_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestUnpackedTypes::GetMetadata() const {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void NestedTestAllTypes::InitAsDefaultInstance() {
  ::proto3_arena_unittest::_NestedTestAllTypes_default_instance_._instance.get_mutable()->child_ = const_cast< ::proto3_arena_unittest::NestedTestAllTypes*>(
      ::proto3_arena_unittest::NestedTestAllTypes::internal_default_instance());
  ::proto3_arena_unittest::_NestedTestAllTypes_default_instance_._instance.get_mutable()->payload_ = const_cast< ::proto3_arena_unittest::TestAllTypes*>(
      ::proto3_arena_unittest::TestAllTypes::internal_default_instance());
}
void NestedTestAllTypes::unsafe_arena_set_allocated_child(
    ::proto3_arena_unittest::NestedTestAllTypes* child) {
  if (GetArenaNoVirtual() == NULL) {
    delete child_;
  }
  child_ = child;
  if (child) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:proto3_arena_unittest.NestedTestAllTypes.child)
}
void NestedTestAllTypes::unsafe_arena_set_allocated_payload(
    ::proto3_arena_unittest::TestAllTypes* payload) {
  if (GetArenaNoVirtual() == NULL) {
    delete payload_;
  }
  payload_ = payload;
  if (payload) {
    
  } else {
    
  }
  // @@protoc_insertion_point(field_unsafe_arena_set_allocated:proto3_arena_unittest.NestedTestAllTypes.payload)
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int NestedTestAllTypes::kChildFieldNumber;
const int NestedTestAllTypes::kPayloadFieldNumber;
const int NestedTestAllTypes::kRepeatedChildFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

NestedTestAllTypes::NestedTestAllTypes()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_NestedTestAllTypes.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3_arena_unittest.NestedTestAllTypes)
}
NestedTestAllTypes::NestedTestAllTypes(::google::protobuf::Arena* arena)
  : ::google::protobuf::Message(),
  _internal_metadata_(arena),
  repeated_child_(arena) {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_NestedTestAllTypes.base);
  SharedCtor();
  RegisterArenaDtor(arena);
  // @@protoc_insertion_point(arena_constructor:proto3_arena_unittest.NestedTestAllTypes)
}
NestedTestAllTypes::NestedTestAllTypes(const NestedTestAllTypes& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL),
      repeated_child_(from.repeated_child_) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  if (from.has_child()) {
    child_ = new ::proto3_arena_unittest::NestedTestAllTypes(*from.child_);
  } else {
    child_ = NULL;
  }
  if (from.has_payload()) {
    payload_ = new ::proto3_arena_unittest::TestAllTypes(*from.payload_);
  } else {
    payload_ = NULL;
  }
  // @@protoc_insertion_point(copy_constructor:proto3_arena_unittest.NestedTestAllTypes)
}

void NestedTestAllTypes::SharedCtor() {
  ::memset(&child_, 0, static_cast<size_t>(
      reinterpret_cast<char*>(&payload_) -
      reinterpret_cast<char*>(&child_)) + sizeof(payload_));
}

NestedTestAllTypes::~NestedTestAllTypes() {
  // @@protoc_insertion_point(destructor:proto3_arena_unittest.NestedTestAllTypes)
  SharedDtor();
}

void NestedTestAllTypes::SharedDtor() {
  GOOGLE_DCHECK(GetArenaNoVirtual() == NULL);
  if (this != internal_default_instance()) delete child_;
  if (this != internal_default_instance()) delete payload_;
}

void NestedTestAllTypes::ArenaDtor(void* object) {
  NestedTestAllTypes* _this = reinterpret_cast< NestedTestAllTypes* >(object);
  (void)_this;
}
void NestedTestAllTypes::RegisterArenaDtor(::google::protobuf::Arena* arena) {
}
void NestedTestAllTypes::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* NestedTestAllTypes::descriptor() {
  ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const NestedTestAllTypes& NestedTestAllTypes::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_NestedTestAllTypes.base);
  return *internal_default_instance();
}


void NestedTestAllTypes::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3_arena_unittest.NestedTestAllTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  repeated_child_.Clear();
  if (GetArenaNoVirtual() == NULL && child_ != NULL) {
    delete child_;
  }
  child_ = NULL;
  if (GetArenaNoVirtual() == NULL && payload_ != NULL) {
    delete payload_;
  }
  payload_ = NULL;
  _internal_metadata_.Clear();
}

bool NestedTestAllTypes::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3_arena_unittest.NestedTestAllTypes)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // .proto3_arena_unittest.NestedTestAllTypes child = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(10u /* 10 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_child()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // .proto3_arena_unittest.TestAllTypes payload = 2;
      case 2: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(18u /* 18 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
               input, mutable_payload()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      // repeated .proto3_arena_unittest.NestedTestAllTypes repeated_child = 3;
      case 3: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(26u /* 26 & 0xFF */)) {
          DO_(::google::protobuf::internal::WireFormatLite::ReadMessage(
                input, add_repeated_child()));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3_arena_unittest.NestedTestAllTypes)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3_arena_unittest.NestedTestAllTypes)
  return false;
#undef DO_
}

void NestedTestAllTypes::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3_arena_unittest.NestedTestAllTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .proto3_arena_unittest.NestedTestAllTypes child = 1;
  if (this->has_child()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      1, this->_internal_child(), output);
  }

  // .proto3_arena_unittest.TestAllTypes payload = 2;
  if (this->has_payload()) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      2, this->_internal_payload(), output);
  }

  // repeated .proto3_arena_unittest.NestedTestAllTypes repeated_child = 3;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_child_size()); i < n; i++) {
    ::google::protobuf::internal::WireFormatLite::WriteMessageMaybeToArray(
      3,
      this->repeated_child(static_cast<int>(i)),
      output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3_arena_unittest.NestedTestAllTypes)
}

::google::protobuf::uint8* NestedTestAllTypes::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3_arena_unittest.NestedTestAllTypes)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // .proto3_arena_unittest.NestedTestAllTypes child = 1;
  if (this->has_child()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        1, this->_internal_child(), deterministic, target);
  }

  // .proto3_arena_unittest.TestAllTypes payload = 2;
  if (this->has_payload()) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        2, this->_internal_payload(), deterministic, target);
  }

  // repeated .proto3_arena_unittest.NestedTestAllTypes repeated_child = 3;
  for (unsigned int i = 0,
      n = static_cast<unsigned int>(this->repeated_child_size()); i < n; i++) {
    target = ::google::protobuf::internal::WireFormatLite::
      InternalWriteMessageToArray(
        3, this->repeated_child(static_cast<int>(i)), deterministic, target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3_arena_unittest.NestedTestAllTypes)
  return target;
}

size_t NestedTestAllTypes::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3_arena_unittest.NestedTestAllTypes)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // repeated .proto3_arena_unittest.NestedTestAllTypes repeated_child = 3;
  {
    unsigned int count = static_cast<unsigned int>(this->repeated_child_size());
    total_size += 1UL * count;
    for (unsigned int i = 0; i < count; i++) {
      total_size +=
        ::google::protobuf::internal::WireFormatLite::MessageSize(
          this->repeated_child(static_cast<int>(i)));
    }
  }

  // .proto3_arena_unittest.NestedTestAllTypes child = 1;
  if (this->has_child()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *child_);
  }

  // .proto3_arena_unittest.TestAllTypes payload = 2;
  if (this->has_payload()) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::MessageSize(
        *payload_);
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void NestedTestAllTypes::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3_arena_unittest.NestedTestAllTypes)
  GOOGLE_DCHECK_NE(&from, this);
  const NestedTestAllTypes* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const NestedTestAllTypes>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3_arena_unittest.NestedTestAllTypes)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3_arena_unittest.NestedTestAllTypes)
    MergeFrom(*source);
  }
}

void NestedTestAllTypes::MergeFrom(const NestedTestAllTypes& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3_arena_unittest.NestedTestAllTypes)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  repeated_child_.MergeFrom(from.repeated_child_);
  if (from.has_child()) {
    mutable_child()->::proto3_arena_unittest::NestedTestAllTypes::MergeFrom(from.child());
  }
  if (from.has_payload()) {
    mutable_payload()->::proto3_arena_unittest::TestAllTypes::MergeFrom(from.payload());
  }
}

void NestedTestAllTypes::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3_arena_unittest.NestedTestAllTypes)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void NestedTestAllTypes::CopyFrom(const NestedTestAllTypes& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3_arena_unittest.NestedTestAllTypes)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool NestedTestAllTypes::IsInitialized() const {
  return true;
}

void NestedTestAllTypes::Swap(NestedTestAllTypes* other) {
  if (other == this) return;
  if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) {
    InternalSwap(other);
  } else {
    NestedTestAllTypes* temp = New(GetArenaNoVirtual());
    temp->MergeFrom(*other);
    other->CopyFrom(*this);
    InternalSwap(temp);
    if (GetArenaNoVirtual() == NULL) {
      delete temp;
    }
  }
}
void NestedTestAllTypes::UnsafeArenaSwap(NestedTestAllTypes* other) {
  if (other == this) return;
  GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual());
  InternalSwap(other);
}
void NestedTestAllTypes::InternalSwap(NestedTestAllTypes* other) {
  using std::swap;
  CastToBase(&repeated_child_)->InternalSwap(CastToBase(&other->repeated_child_));
  swap(child_, other->child_);
  swap(payload_, other->payload_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata NestedTestAllTypes::GetMetadata() const {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void ForeignMessage::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
const int ForeignMessage::kCFieldNumber;
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

ForeignMessage::ForeignMessage()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_ForeignMessage.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3_arena_unittest.ForeignMessage)
}
ForeignMessage::ForeignMessage(::google::protobuf::Arena* arena)
  : ::google::protobuf::Message(),
  _internal_metadata_(arena) {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_ForeignMessage.base);
  SharedCtor();
  RegisterArenaDtor(arena);
  // @@protoc_insertion_point(arena_constructor:proto3_arena_unittest.ForeignMessage)
}
ForeignMessage::ForeignMessage(const ForeignMessage& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  c_ = from.c_;
  // @@protoc_insertion_point(copy_constructor:proto3_arena_unittest.ForeignMessage)
}

void ForeignMessage::SharedCtor() {
  c_ = 0;
}

ForeignMessage::~ForeignMessage() {
  // @@protoc_insertion_point(destructor:proto3_arena_unittest.ForeignMessage)
  SharedDtor();
}

void ForeignMessage::SharedDtor() {
  GOOGLE_DCHECK(GetArenaNoVirtual() == NULL);
}

void ForeignMessage::ArenaDtor(void* object) {
  ForeignMessage* _this = reinterpret_cast< ForeignMessage* >(object);
  (void)_this;
}
void ForeignMessage::RegisterArenaDtor(::google::protobuf::Arena* arena) {
}
void ForeignMessage::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* ForeignMessage::descriptor() {
  ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const ForeignMessage& ForeignMessage::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_ForeignMessage.base);
  return *internal_default_instance();
}


void ForeignMessage::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3_arena_unittest.ForeignMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  c_ = 0;
  _internal_metadata_.Clear();
}

bool ForeignMessage::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3_arena_unittest.ForeignMessage)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
    switch (::google::protobuf::internal::WireFormatLite::GetTagFieldNumber(tag)) {
      // int32 c = 1;
      case 1: {
        if (static_cast< ::google::protobuf::uint8>(tag) ==
            static_cast< ::google::protobuf::uint8>(8u /* 8 & 0xFF */)) {

          DO_((::google::protobuf::internal::WireFormatLite::ReadPrimitive<
                   ::google::protobuf::int32, ::google::protobuf::internal::WireFormatLite::TYPE_INT32>(
                 input, &c_)));
        } else {
          goto handle_unusual;
        }
        break;
      }

      default: {
      handle_unusual:
        if (tag == 0) {
          goto success;
        }
        DO_(::google::protobuf::internal::WireFormat::SkipField(
              input, tag, _internal_metadata_.mutable_unknown_fields()));
        break;
      }
    }
  }
success:
  // @@protoc_insertion_point(parse_success:proto3_arena_unittest.ForeignMessage)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3_arena_unittest.ForeignMessage)
  return false;
#undef DO_
}

void ForeignMessage::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3_arena_unittest.ForeignMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 c = 1;
  if (this->c() != 0) {
    ::google::protobuf::internal::WireFormatLite::WriteInt32(1, this->c(), output);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3_arena_unittest.ForeignMessage)
}

::google::protobuf::uint8* ForeignMessage::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3_arena_unittest.ForeignMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  // int32 c = 1;
  if (this->c() != 0) {
    target = ::google::protobuf::internal::WireFormatLite::WriteInt32ToArray(1, this->c(), target);
  }

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3_arena_unittest.ForeignMessage)
  return target;
}

size_t ForeignMessage::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3_arena_unittest.ForeignMessage)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  // int32 c = 1;
  if (this->c() != 0) {
    total_size += 1 +
      ::google::protobuf::internal::WireFormatLite::Int32Size(
        this->c());
  }

  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void ForeignMessage::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3_arena_unittest.ForeignMessage)
  GOOGLE_DCHECK_NE(&from, this);
  const ForeignMessage* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const ForeignMessage>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3_arena_unittest.ForeignMessage)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3_arena_unittest.ForeignMessage)
    MergeFrom(*source);
  }
}

void ForeignMessage::MergeFrom(const ForeignMessage& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3_arena_unittest.ForeignMessage)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if (from.c() != 0) {
    set_c(from.c());
  }
}

void ForeignMessage::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3_arena_unittest.ForeignMessage)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void ForeignMessage::CopyFrom(const ForeignMessage& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3_arena_unittest.ForeignMessage)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool ForeignMessage::IsInitialized() const {
  return true;
}

void ForeignMessage::Swap(ForeignMessage* other) {
  if (other == this) return;
  if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) {
    InternalSwap(other);
  } else {
    ForeignMessage* temp = New(GetArenaNoVirtual());
    temp->MergeFrom(*other);
    other->CopyFrom(*this);
    InternalSwap(temp);
    if (GetArenaNoVirtual() == NULL) {
      delete temp;
    }
  }
}
void ForeignMessage::UnsafeArenaSwap(ForeignMessage* other) {
  if (other == this) return;
  GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual());
  InternalSwap(other);
}
void ForeignMessage::InternalSwap(ForeignMessage* other) {
  using std::swap;
  swap(c_, other->c_);
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata ForeignMessage::GetMetadata() const {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages];
}


// ===================================================================

void TestEmptyMessage::InitAsDefaultInstance() {
}
#if !defined(_MSC_VER) || _MSC_VER >= 1900
#endif  // !defined(_MSC_VER) || _MSC_VER >= 1900

TestEmptyMessage::TestEmptyMessage()
  : ::google::protobuf::Message(), _internal_metadata_(NULL) {
  ::google::protobuf::internal::InitSCC(
      &protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestEmptyMessage.base);
  SharedCtor();
  // @@protoc_insertion_point(constructor:proto3_arena_unittest.TestEmptyMessage)
}
TestEmptyMessage::TestEmptyMessage(::google::protobuf::Arena* arena)
  : ::google::protobuf::Message(),
  _internal_metadata_(arena) {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestEmptyMessage.base);
  SharedCtor();
  RegisterArenaDtor(arena);
  // @@protoc_insertion_point(arena_constructor:proto3_arena_unittest.TestEmptyMessage)
}
TestEmptyMessage::TestEmptyMessage(const TestEmptyMessage& from)
  : ::google::protobuf::Message(),
      _internal_metadata_(NULL) {
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  // @@protoc_insertion_point(copy_constructor:proto3_arena_unittest.TestEmptyMessage)
}

void TestEmptyMessage::SharedCtor() {
}

TestEmptyMessage::~TestEmptyMessage() {
  // @@protoc_insertion_point(destructor:proto3_arena_unittest.TestEmptyMessage)
  SharedDtor();
}

void TestEmptyMessage::SharedDtor() {
  GOOGLE_DCHECK(GetArenaNoVirtual() == NULL);
}

void TestEmptyMessage::ArenaDtor(void* object) {
  TestEmptyMessage* _this = reinterpret_cast< TestEmptyMessage* >(object);
  (void)_this;
}
void TestEmptyMessage::RegisterArenaDtor(::google::protobuf::Arena* arena) {
}
void TestEmptyMessage::SetCachedSize(int size) const {
  _cached_size_.Set(size);
}
const ::google::protobuf::Descriptor* TestEmptyMessage::descriptor() {
  ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages].descriptor;
}

const TestEmptyMessage& TestEmptyMessage::default_instance() {
  ::google::protobuf::internal::InitSCC(&protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::scc_info_TestEmptyMessage.base);
  return *internal_default_instance();
}


void TestEmptyMessage::Clear() {
// @@protoc_insertion_point(message_clear_start:proto3_arena_unittest.TestEmptyMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  // Prevent compiler warnings about cached_has_bits being unused
  (void) cached_has_bits;

  _internal_metadata_.Clear();
}

bool TestEmptyMessage::MergePartialFromCodedStream(
    ::google::protobuf::io::CodedInputStream* input) {
#define DO_(EXPRESSION) if (!GOOGLE_PREDICT_TRUE(EXPRESSION)) goto failure
  ::google::protobuf::uint32 tag;
  // @@protoc_insertion_point(parse_start:proto3_arena_unittest.TestEmptyMessage)
  for (;;) {
    ::std::pair<::google::protobuf::uint32, bool> p = input->ReadTagWithCutoffNoLastTag(127u);
    tag = p.first;
    if (!p.second) goto handle_unusual;
  handle_unusual:
    if (tag == 0) {
      goto success;
    }
    DO_(::google::protobuf::internal::WireFormat::SkipField(
          input, tag, _internal_metadata_.mutable_unknown_fields()));
  }
success:
  // @@protoc_insertion_point(parse_success:proto3_arena_unittest.TestEmptyMessage)
  return true;
failure:
  // @@protoc_insertion_point(parse_failure:proto3_arena_unittest.TestEmptyMessage)
  return false;
#undef DO_
}

void TestEmptyMessage::SerializeWithCachedSizes(
    ::google::protobuf::io::CodedOutputStream* output) const {
  // @@protoc_insertion_point(serialize_start:proto3_arena_unittest.TestEmptyMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    ::google::protobuf::internal::WireFormat::SerializeUnknownFields(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), output);
  }
  // @@protoc_insertion_point(serialize_end:proto3_arena_unittest.TestEmptyMessage)
}

::google::protobuf::uint8* TestEmptyMessage::InternalSerializeWithCachedSizesToArray(
    bool deterministic, ::google::protobuf::uint8* target) const {
  (void)deterministic; // Unused
  // @@protoc_insertion_point(serialize_to_array_start:proto3_arena_unittest.TestEmptyMessage)
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    target = ::google::protobuf::internal::WireFormat::SerializeUnknownFieldsToArray(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()), target);
  }
  // @@protoc_insertion_point(serialize_to_array_end:proto3_arena_unittest.TestEmptyMessage)
  return target;
}

size_t TestEmptyMessage::ByteSizeLong() const {
// @@protoc_insertion_point(message_byte_size_start:proto3_arena_unittest.TestEmptyMessage)
  size_t total_size = 0;

  if ((_internal_metadata_.have_unknown_fields() &&  ::google::protobuf::internal::GetProto3PreserveUnknownsDefault())) {
    total_size +=
      ::google::protobuf::internal::WireFormat::ComputeUnknownFieldsSize(
        (::google::protobuf::internal::GetProto3PreserveUnknownsDefault()   ? _internal_metadata_.unknown_fields()   : _internal_metadata_.default_instance()));
  }
  int cached_size = ::google::protobuf::internal::ToCachedSize(total_size);
  SetCachedSize(cached_size);
  return total_size;
}

void TestEmptyMessage::MergeFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_merge_from_start:proto3_arena_unittest.TestEmptyMessage)
  GOOGLE_DCHECK_NE(&from, this);
  const TestEmptyMessage* source =
      ::google::protobuf::internal::DynamicCastToGenerated<const TestEmptyMessage>(
          &from);
  if (source == NULL) {
  // @@protoc_insertion_point(generalized_merge_from_cast_fail:proto3_arena_unittest.TestEmptyMessage)
    ::google::protobuf::internal::ReflectionOps::Merge(from, this);
  } else {
  // @@protoc_insertion_point(generalized_merge_from_cast_success:proto3_arena_unittest.TestEmptyMessage)
    MergeFrom(*source);
  }
}

void TestEmptyMessage::MergeFrom(const TestEmptyMessage& from) {
// @@protoc_insertion_point(class_specific_merge_from_start:proto3_arena_unittest.TestEmptyMessage)
  GOOGLE_DCHECK_NE(&from, this);
  _internal_metadata_.MergeFrom(from._internal_metadata_);
  ::google::protobuf::uint32 cached_has_bits = 0;
  (void) cached_has_bits;

}

void TestEmptyMessage::CopyFrom(const ::google::protobuf::Message& from) {
// @@protoc_insertion_point(generalized_copy_from_start:proto3_arena_unittest.TestEmptyMessage)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

void TestEmptyMessage::CopyFrom(const TestEmptyMessage& from) {
// @@protoc_insertion_point(class_specific_copy_from_start:proto3_arena_unittest.TestEmptyMessage)
  if (&from == this) return;
  Clear();
  MergeFrom(from);
}

bool TestEmptyMessage::IsInitialized() const {
  return true;
}

void TestEmptyMessage::Swap(TestEmptyMessage* other) {
  if (other == this) return;
  if (GetArenaNoVirtual() == other->GetArenaNoVirtual()) {
    InternalSwap(other);
  } else {
    TestEmptyMessage* temp = New(GetArenaNoVirtual());
    temp->MergeFrom(*other);
    other->CopyFrom(*this);
    InternalSwap(temp);
    if (GetArenaNoVirtual() == NULL) {
      delete temp;
    }
  }
}
void TestEmptyMessage::UnsafeArenaSwap(TestEmptyMessage* other) {
  if (other == this) return;
  GOOGLE_DCHECK(GetArenaNoVirtual() == other->GetArenaNoVirtual());
  InternalSwap(other);
}
void TestEmptyMessage::InternalSwap(TestEmptyMessage* other) {
  using std::swap;
  _internal_metadata_.Swap(&other->_internal_metadata_);
}

::google::protobuf::Metadata TestEmptyMessage::GetMetadata() const {
  protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::protobuf_AssignDescriptorsOnce();
  return ::protobuf_google_2fprotobuf_2funittest_5fproto3_5farena_2eproto::file_level_metadata[kIndexInFileMessages];
}


// @@protoc_insertion_point(namespace_scope)
}  // namespace proto3_arena_unittest
namespace google {
namespace protobuf {
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3_arena_unittest::TestAllTypes_NestedMessage* Arena::CreateMaybeMessage< ::proto3_arena_unittest::TestAllTypes_NestedMessage >(Arena* arena) {
  return Arena::CreateMessageInternal< ::proto3_arena_unittest::TestAllTypes_NestedMessage >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3_arena_unittest::TestAllTypes* Arena::CreateMaybeMessage< ::proto3_arena_unittest::TestAllTypes >(Arena* arena) {
  return Arena::CreateMessageInternal< ::proto3_arena_unittest::TestAllTypes >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3_arena_unittest::TestPackedTypes* Arena::CreateMaybeMessage< ::proto3_arena_unittest::TestPackedTypes >(Arena* arena) {
  return Arena::CreateMessageInternal< ::proto3_arena_unittest::TestPackedTypes >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3_arena_unittest::TestUnpackedTypes* Arena::CreateMaybeMessage< ::proto3_arena_unittest::TestUnpackedTypes >(Arena* arena) {
  return Arena::CreateMessageInternal< ::proto3_arena_unittest::TestUnpackedTypes >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3_arena_unittest::NestedTestAllTypes* Arena::CreateMaybeMessage< ::proto3_arena_unittest::NestedTestAllTypes >(Arena* arena) {
  return Arena::CreateMessageInternal< ::proto3_arena_unittest::NestedTestAllTypes >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3_arena_unittest::ForeignMessage* Arena::CreateMaybeMessage< ::proto3_arena_unittest::ForeignMessage >(Arena* arena) {
  return Arena::CreateMessageInternal< ::proto3_arena_unittest::ForeignMessage >(arena);
}
template<> GOOGLE_PROTOBUF_ATTRIBUTE_NOINLINE ::proto3_arena_unittest::TestEmptyMessage* Arena::CreateMaybeMessage< ::proto3_arena_unittest::TestEmptyMessage >(Arena* arena) {
  return Arena::CreateMessageInternal< ::proto3_arena_unittest::TestEmptyMessage >(arena);
}
}  // namespace protobuf
}  // namespace google

// @@protoc_insertion_point(global_scope)
