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

import sys
_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
from google.protobuf import descriptor as _descriptor
from google.protobuf import message as _message
from google.protobuf import reflection as _reflection
from google.protobuf import symbol_database as _symbol_database
from google.protobuf import descriptor_pb2
# @@protoc_insertion_point(imports)

_sym_db = _symbol_database.Default()




DESCRIPTOR = _descriptor.FileDescriptor(
  name='google/protobuf/unittest_no_arena_import.proto',
  package='proto2_arena_unittest',
  syntax='proto2',
  serialized_pb=_b('\n.google/protobuf/unittest_no_arena_import.proto\x12\x15proto2_arena_unittest\"\'\n\x1aImportNoArenaNestedMessage\x12\t\n\x01\x64\x18\x01 \x01(\x05')
)
_sym_db.RegisterFileDescriptor(DESCRIPTOR)




_IMPORTNOARENANESTEDMESSAGE = _descriptor.Descriptor(
  name='ImportNoArenaNestedMessage',
  full_name='proto2_arena_unittest.ImportNoArenaNestedMessage',
  filename=None,
  file=DESCRIPTOR,
  containing_type=None,
  fields=[
    _descriptor.FieldDescriptor(
      name='d', full_name='proto2_arena_unittest.ImportNoArenaNestedMessage.d', index=0,
      number=1, type=5, cpp_type=1, label=1,
      has_default_value=False, default_value=0,
      message_type=None, enum_type=None, containing_type=None,
      is_extension=False, extension_scope=None,
      options=None),
  ],
  extensions=[
  ],
  nested_types=[],
  enum_types=[
  ],
  options=None,
  is_extendable=False,
  syntax='proto2',
  extension_ranges=[],
  oneofs=[
  ],
  serialized_start=73,
  serialized_end=112,
)

DESCRIPTOR.message_types_by_name['ImportNoArenaNestedMessage'] = _IMPORTNOARENANESTEDMESSAGE

ImportNoArenaNestedMessage = _reflection.GeneratedProtocolMessageType('ImportNoArenaNestedMessage', (_message.Message,), dict(
  DESCRIPTOR = _IMPORTNOARENANESTEDMESSAGE,
  __module__ = 'google.protobuf.unittest_no_arena_import_pb2'
  # @@protoc_insertion_point(class_scope:proto2_arena_unittest.ImportNoArenaNestedMessage)
  ))
_sym_db.RegisterMessage(ImportNoArenaNestedMessage)


# @@protoc_insertion_point(module_scope)
