message AnonymousDevice {
  optional string user_name = 1;
  
}

message AnonymousDeviceAddRequest {
  optional ClientRequestHeader request_header = 1;
  repeated AnonymousDevice device = 2;
  
}

message AnonymousDeviceAddResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  repeated AnonymousDevice device = 3;
  
}

message ClientClientVersion {
  optional ClientClientVersion.ClientId client_id = 1;
  optional ClientClientVersion.ClientBuildType build_type = 2;
  optional string major_version = 3;
  optional int64 version = 4;
  optional string device_os_version = 5;
  optional string device_hardware = 6;
  
}

message ClientId {
  UNKNOWN_CLIENT_ID = 0;
  ANDROID = 1;
  IOS = 2;
  QUASAR = 3;
  BOT = 7;
  GLASS_SERVER = 9;
  PSTN_BOT = 10;
  TEE = 11;
  ROOM_SERVER = 14;
  SPEAKEASY = 16;
  GOOGLE_VOICE = 17;
  PROBER = 18;
  ANDROID_PSTN_ONLY = 27;
  TEST_CLIENT = 35;
  
}

message ClientBuildType {
  UNKNOWN_CLIENT_BUILD_TYPE = 0;
  DEVELOPER = 1;
  DOGFOOD = 2;
  PRODUCTION = 3;
  
}

message ClientClientIdentifier {
  optional string resource = 1;
  optional string client_id = 2;
  optional string participant_log_id = 4;
  
}

message ClientRequestHeader {
  optional ClientClientVersion client_version = 1;
  optional ClientClientIdentifier client_identifier = 2;
  optional string language_code = 4;
  optional bool include_updated_conversation = 5 [default = false];
  optional uint32 retry_attempt = 6 [default = 0];
  optional RtcClient rtc_client = 7;
  
}

message ClientResponseHeader {
  optional ClientResponseStatus status = 1;
  optional string error_description = 2;
  optional string debug_url = 3;
  optional uint64 request_trace_id = 4;
  optional uint64 current_server_time = 5;
  optional uint64 backoff_duration_millis = 6;
  optional string localized_user_visible_error_message = 8;
  
}

message ClientParticipantId {
  optional string chat_id = 2;
  optional string gaia_id = 1;
  
}

message ClientConversationId {
  optional string id = 1;
  
}

message CommonAnnouncement {
  optional string hangout_id = 1;
  optional string announcement_id = 2;
  optional AnnouncementType announcement_type = 3;
  optional string sender_id = 4;
  optional string subject_id = 5;
  repeated string recipient_id = 6;
  optional string locale = 7;
  optional CommonAnnouncement.Action action = 8;
  optional string title = 9;
  optional string body = 10;
  optional CommonAnnouncement.LifeTime life_time = 11 [default = FIRE_AND_FORGET];
  
}

message Action {
  FYI = 0;
  CONFIRM = 1;
  INTERRUPT = 2;
  
}

message LifeTime {
  UNKNOWN = 0;
  FIRE_AND_FORGET = 1;
  STICKY = 2;
  
}

message CommonAnnouncementAddRequest {
  optional ClientRequestHeader request_header = 1;
  optional CommonAnnouncement announcement = 2;
  optional SyncMetadata sync_metadata = 3;
  repeated CommonAnnouncement resource = 4;
  
}

message CommonAnnouncementAddResponse {
  optional ClientResponseHeader response_header = 1;
  optional CommonAnnouncement announcement = 2;
  optional SyncMetadata sync_metadata = 3;
  repeated CommonAnnouncement resource = 4;
  
}

message CommonAnnouncementSearchRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional SyncMetadata sync_metadata = 3;
  optional string locale = 4;
  
}

message CommonAnnouncementSearchResponse {
  optional ClientResponseHeader response_header = 1;
  repeated CommonAnnouncement announcement = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message CommonAnnouncementRemoveRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional string announcement_id = 3;
  optional SyncMetadata sync_metadata = 4;
  repeated string resource_id = 5;
  
}

message CommonAnnouncementRemoveResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  
}

message HangoutBulkRequestEntry {
  optional HangoutParticipantAddRequest hangout_participant_add_request = 1;
  optional MediaSessionAddRequest media_session_add_request = 2;
  optional MediaStreamAddRequest media_stream_add_request = 3;
  optional MediaStreamSearchRequest media_stream_search_request = 4;
  optional MediaSourceAddRequest media_source_add_request = 5;
  optional MediaSourceSearchRequest media_source_search_request = 6;
  optional HangoutParticipantSearchRequest hangout_participant_search_request = 7;
  optional HangoutQueryRequest hangout_query_request = 8;
  optional HangoutAddRequest hangout_add_request = 9;
  optional HangoutResolveRequest hangout_resolve_request = 10;
  optional HangoutInvitationAddRequest hangout_invitation_add_request = 11;
  optional HangoutInvitationAddPhoneRequest hangout_invitation_add_phone_request = 12;
  optional MediaSessionQueryRequest media_session_query_request = 13;
  
}

message HangoutBulkResponseEntry {
  optional HangoutParticipantAddResponse hangout_participant_add_response = 1;
  optional MediaSessionAddResponse media_session_add_response = 2;
  optional MediaStreamAddResponse media_stream_add_response = 3;
  optional MediaStreamSearchResponse media_stream_search_response = 4;
  optional MediaSourceAddResponse media_source_add_response = 5;
  optional MediaSourceSearchResponse media_source_search_response = 6;
  optional HangoutParticipantSearchResponse hangout_participant_search_response = 7;
  optional HangoutQueryResponse hangout_query_response = 8;
  optional HangoutAddResponse hangout_add_response = 9;
  optional HangoutResolveResponse hangout_resolve_response = 10;
  optional HangoutInvitationAddResponse hangout_invitation_add_response = 11;
  optional HangoutInvitationAddPhoneResponse hangout_invitation_add_phone_response = 12;
  optional MediaSessionQueryResponse media_session_query_response = 13;
  
}

message HangoutBulkRequest {
  optional ClientRequestHeader request_header = 1;
  repeated HangoutBulkRequestEntry entry = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message HangoutBulkResponse {
  optional ClientResponseHeader response_header = 1;
  repeated HangoutBulkResponseEntry entry = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message ExternalKey {
  optional string service = 1;
  optional string value = 2;
  
}

message Presenter {
  optional string presenter_participant_id = 1;
  optional string by_participant_id = 2;
  
}

message Hangout {
  optional string hangout_id = 1;
  optional Hangout.HangoutType type = 2;
  optional ExternalKey external_key = 3;
  optional bool active = 4;
  optional int64 created_ms = 6;
  optional int64 last_activity_ms = 7;
  optional string topic = 8;
  optional ClientConversationId conversation_id = 9;
  optional bool by_invitation_only = 10;
  optional int64 start_time_ms = 11;
  optional int64 duration_ms = 12;
  optional string organizer_id = 13;
  optional Hangout.HangoutMediaType media_type = 14;
  [unknown type 0x42][unknown type 0x2]optional bool allows_minors = 1;
  optional Presenter presenter = 17;
  [unknown type 0x42][unknown type 0x2]optional bool knockable = 1;
  optional Tristate knocking_enabled = 25;
  optional Tristate external_invited = 21;
  repeated Hangout.RecordingType active_recording = 26;
  optional string company_title = 27;
  optional string meeting_room_name = 28;
  optional string meeting_domain = 29;
  
}

message HangoutType {
  CONSUMER = 1;
  BUSINESS = 2;
  BROADCAST = 3;
  LITE = 4;
  SINGLE_PARTICIPANT_BROADCAST = 5;
  SPEAKEASY = 6;
  EXPRESS_LANE = 7;
  HOT_LANE = 8;
  
}

message HangoutMediaType {
  AUDIO_VIDEO = 1;
  AUDIO_ONLY = 2;
  
}

message RecordingType {
  UNKNOWN_RECORDING = 0;
  CONSUMER_RECORDING = 1;
  GVC_RECORDING = 2;
  
}

message PhoneCallId {
  optional PhoneNumber from_number = 1;
  optional PhoneNumber to_number = 2;
  
}

message HangoutParticipant {
  optional string hangout_id = 1;
  optional string participant_id = 2;
  optional string user_id = 3;
  optional string display_name = 4;
  optional string avatar_url = 5;
  [unknown type 0x42][unknown type 0x2]optional bool recording = 1;
  [unknown type 0x42][unknown type 0x2]optional bool presenting = 1;
  repeated HangoutParticipant.BlockedUser blocked_user = 20;
  optional bool in_circles = 9;
  optional string given_name = 10;
  optional string family_name = 11;
  optional Role role = 12;
  optional HangoutParticipant.ClientType client_type = 13 [default = OTHER];
  optional PhoneCallId phone_call_id = 16;
  optional HangoutParticipant.ParticipantState participant_state = 17 [default = UNKNOWN];
  repeated HangoutParticipant.Privilege privilege = 19;
  [unknown type 0x42][unknown type 0x2]optional bool accepted_tos = 1 [default = false];
  optional E911UserLocationInfo e911_user_location_info = 22;
  optional int64 invitation_id = 23;
  [unknown type 0x42][unknown type 0x2]optional string user_message = 1;
  message BlockedUser {
  optional string user_id = 1;
  optional HangoutParticipant.BlockType block_type = 2 [default = HANGOUT_IGNORE];
  
}

message BlockType {
  HANGOUT_IGNORE = 1;
  GPLUS_BLOCK = 2;
  
}

message ClientType {
  OTHER = 1;
  DESKTOP = 2;
  MOBILE = 3;
  TABLET = 4;
  PHONE = 5;
  VC_ROOM = 6;
  
}

message ParticipantState {
  UNKNOWN = 0;
  JOINED = 1;
  RINGING = 2;
  KNOCKING = 10;
  KNOCKING_DENIED = 11;
  KNOCKING_ACCEPTED = 12;
  RINGING_CONNECTING = 20;
  RINGING_NOEARLYMEDIA = 21;
  RINGING_EARLYMEDIA = 22;
  
}

message Privilege {
  UNUSED = 0;
  MAY_ACCEPT_KNOCK = 1;
  MAY_SET_PRESENTER = 2;
  MAY_INVITE = 3;
  MAY_KICK = 4;
  
}

message NamedHangout {
  optional string name = 1;
  optional string domain = 2;
  optional string calendar_id = 3;
  optional string event_id = 4;
  
}

message HangoutSearchResult {
  optional Hangout hangout = 1;
  repeated HangoutParticipant participant = 2;
  repeated Broadcast broadcast = 3;
  
}

message HangoutSearchRequest {
  optional ClientRequestHeader request_header = 1;
  optional bool active_only = 2;
  optional bool is_public = 3;
  optional int32 limit = 4 [default = 10];
  optional int64 oldest_timestamp = 6;
  
}

message HangoutSearchResponse {
  optional ClientResponseHeader response_header = 1;
  repeated HangoutSearchResult result = 2;
  
}

message HangoutAddRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional Hangout hangout = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated Hangout resource = 4;
  
}

message HangoutAddResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional Hangout hangout = 1;
  optional string sharing_url = 4;
  optional SyncMetadata sync_metadata = 3;
  repeated Hangout resource = 5;
  
}

message HangoutQueryRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message HangoutQueryResponse {
  optional ClientResponseHeader response_header = 1;
  optional Hangout hangout = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message HangoutResolveRequest {
  optional ClientRequestHeader request_header = 1;
  optional ExternalKey external_key = 2;
  optional NamedHangout named_hangout = 4;
  optional bool is_joining = 5 [default = false];
  optional Hangout.HangoutMediaType media_type = 6 [default = AUDIO_VIDEO];
  optional string sharing_url = 7;
  optional SyncMetadata sync_metadata = 8;
  
}

message HangoutResolveResponse {
  optional ClientResponseHeader response_header = 1;
  optional string hangout_id = 2;
  optional HangoutResolveResponse.HangoutResolveError error_code = 3;
  optional string sharing_url = 4;
  optional SyncMetadata sync_metadata = 5;
  
}

message HangoutResolveError {
  INVALID_ROOM_NAME = 0;
  HANGOUT_NOT_FOUND = 1;
  
}

message HangoutModifyRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional Hangout hangout = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated Hangout resource = 4;
  
}

message HangoutModifyResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional Hangout hangout = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated Hangout resource = 4;
  
}

message HangoutRemoveRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional string hangout_id = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated string resource_id = 4;
  
}

message HangoutRemoveResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  
}

message HangoutParticipantSearchRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message RemovedParticipant {
  optional string participant_id = 1;
  optional RemovalReason removal_reason = 2 [default = UNKNOWN_REASON];
  
}

message HangoutParticipantSearchResponse {
  optional ClientResponseHeader response_header = 1;
  repeated HangoutParticipant participant = 2;
  optional SyncMetadata sync_metadata = 3;
  repeated RemovedParticipant removed = 4;
  
}

message HangoutParticipantAddPrerequisite {
  optional Hangout hangout = 1;
  repeated ClientParticipantId participant = 2;
  optional bool hoa_tos_accepted = 3 [default = false];
  optional bool customer_recording_tos_accepted = 4 [default = false];
  
}

message HangoutParticipantAddRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional HangoutParticipant participant = 1;
  optional HangoutParticipantAddPrerequisite prerequisite = 3;
  optional SyncMetadata sync_metadata = 5;
  repeated HangoutParticipant resource = 6;
  
}

message HangoutParticipantAddResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional HangoutParticipant participant = 1;
  optional SyncMetadata sync_metadata = 3;
  optional HangoutParticipantAddErrorCode error_code = 4;
  repeated HangoutParticipant resource = 5;
  
}

message HangoutParticipantQueryRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional string participant_id = 3;
  optional SyncMetadata sync_metadata = 4;
  
}

message HangoutParticipantQueryResponse {
  optional ClientResponseHeader response_header = 1;
  optional HangoutParticipant participant = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message HangoutParticipantModifyRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional HangoutParticipant participant = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated HangoutParticipant resource = 4;
  
}

message HangoutParticipantModifyResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional HangoutParticipant participant = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated HangoutParticipant resource = 4;
  
}

message HangoutParticipantRemoveRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional string hangout_id = 1;
  [unknown type 0x42][unknown type 0x2]optional string participant_id = 1;
  optional EndCause end_cause = 5;
  optional SyncMetadata sync_metadata = 4;
  [unknown type 0x42][unknown type 0x2]repeated string resource_id = 1;
  repeated HangoutParticipantIdentifier resource = 7;
  
}

message HangoutParticipantRemoveResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  
}

message SyncMetadata {
  optional int64 version = 1;
  optional string changed_by = 2;
  optional SyncMetadata.HangoutCookie hangout_cookie = 3;
  message HangoutCookie {
  optional string cookie = 1;
  optional int64 timestamp = 2;
  
}

message HangoutParticipantIdentifier {
  optional string hangout_id = 1;
  optional string participant_id = 2;
  
}

message MediaSourceIdentifier {
  optional string hangout_id = 1;
  optional string participant_id = 2;
  optional string source_id = 3;
  
}

message BroadcastIdentifier {
  optional string hangout_id = 1;
  optional string broadcast_id = 2;
  
}

message DTMFEvent {
  repeated DTMFEvent.DTMF dtmf = 1;
  message DTMF {
  optional DTMFEvent.DTMFCode code = 1;
  
}

message DTMFCode {
  ZERO = 0;
  ONE = 1;
  TWO = 2;
  THREE = 3;
  FOUR = 4;
  FIVE = 5;
  SIX = 6;
  SEVEN = 7;
  EIGHT = 8;
  NINE = 9;
  ASTERISK = 10;
  POUND = 11;
  A = 12;
  B = 13;
  C = 14;
  D = 15;
  
}

message HangoutPushEvent {
  optional string hangout_id = 1;
  optional string sender_participant_id = 2;
  repeated string receiver_participant_id = 3;
  optional PushEventType event_type = 4;
  optional DTMFEvent dtmf_event = 5;
  optional bool should_ack = 6;
  
}

message HangoutPushEventAddRequest {
  optional ClientRequestHeader request_header = 1;
  optional HangoutPushEvent event = 2;
  repeated HangoutPushEvent resource = 3;
  
}

message HangoutPushEventAddResponse {
  optional ClientResponseHeader response_header = 1;
  optional HangoutPushEvent event = 2;
  optional SyncMetadata sync_metadata = 3;
  repeated HangoutPushEvent resource = 4;
  
}

message HangoutPushEventAckRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message HangoutPushEventAckResponse {
  optional ClientResponseHeader response_header = 1;
  
}

message VideoResolution {
  optional int32 height = 1;
  optional int32 width = 2;
  optional int32 frame_rate = 3;
  
}

message StreamRequest {
  optional bool ssrcs_known = 1;
  optional bool send = 2;
  optional VideoResolution resolution = 3;
  optional uint32 priority = 4;
  repeated int32 ssrc = 5;
  
}

message MediaSource {
  optional string hangout_id = 1;
  optional string participant_id = 2;
  optional string source_id = 3;
  optional MediaType media_type = 4;
  optional MediaSource.MuteState mute_state = 5;
  optional MediaSource.MuteRequest mute_request = 6;
  optional MediaSource.VideoDetails video_details = 7;
  optional MediaSource.PlayLevelRequest play_level_request = 8;
  message MuteState {
  required bool muted = 1;
  optional string by_participant_id = 2;
  optional float play_level = 3;
  message MuteRequest {
  required string by_participant_id = 1;
  message VideoDetails {
  optional MediaSource.VideoDetails.CaptureType capture_type = 1;
  optional VideoResolution captured_resolution = 2;
  repeated MediaSource.VideoDetails.Region interest_region = 3;
  message Region {
  required float x = 1;
  required float y = 2;
  required float width = 3;
  required float height = 4;
  
}

message CaptureType {
  CAMERA = 1;
  SCREENCAST = 2;
  
}

[unknown type 0x6c][unknown type 0x61][unknown type 0x79][unknown type 0x4c][unknown type 0x65][unknown type 0x76][unknown type 0x65][unknown type 0x6c][unknown type 0x52]
}

[unknown type 0x71][unknown type 0x75][unknown type 0x65][unknown type 0x73][unknown type 0x74] = 80;
  required string by_participant_id = 1;
  optional float play_level = 2;
  
}

message DefaultSourceId {
  AUDIO = 1;
  VIDEO = 2;
  DATA = 3;
  
}

message MediaIceCandidate {
  optional MediaIceCandidate.Component component = 1;
  optional MediaIceCandidate.Protocol protocol = 2;
  optional string ip = 3;
  optional int32 port = 4;
  optional MediaIceCandidate.Type type = 5;
  optional int32 priority = 6;
  optional string network = 7;
  optional int32 generation = 8;
  optional MediaType media_type = 9;
  
}

message Component {
  RTP = 1;
  RTCP = 2;
  
}

message Protocol {
  UDP = 1;
  TCP = 2;
  SSLTCP = 3;
  
}

message Type {
  HOST = 1;
  PEER_REFLEXIVE = 2;
  SERVER_REFLEXIVE = 3;
  RELAY = 4;
  
}

message MediaTransport {
  optional MediaTransport.IceVersion ice_version = 1;
  optional MediaTransport.SslFingerprint ssl_fingerprint = 2;
  repeated string option = 3;
  optional string username = 4;
  optional string password = 5;
  repeated MediaIceCandidate candidate = 6;
  message SslFingerprint {
  optional string algorithm = 1;
  optional string fingerprint = 2;
  
}

message IceVersion {
  ICE_GOOGLE_DRAFT = 1;
  ICE_RFC_5245 = 2;
  
}

message MediaCodec {
  optional int32 payload_id = 1;
  optional string name = 2;
  optional MediaType media_type = 3;
  optional int32 preference = 4;
  optional int32 bit_rate = 5;
  optional int32 sample_rate = 6;
  optional int32 channel_count = 7;
  repeated MediaCodec.Param param = 8;
  message Param {
  optional string key = 1;
  optional string value = 2;
  
}

message MediaCryptoParams {
  optional MediaCryptoParams.CryptoSuite suite = 1;
  optional string key_params = 2;
  optional string session_params = 3;
  optional int32 tag = 4;
  
}

message CryptoSuite {
  AES_CM_128_HMAC_SHA1_80 = 1;
  AES_CM_128_HMAC_SHA1_32 = 2;
  
}

message MediaRtpHeaderExtension {
  optional int32 id = 1;
  optional string uri = 2;
  optional MediaType media_type = 3;
  
}

message MediaRequest {
  optional MediaType media_type = 1;
  optional StreamRequest stream_request = 2;
  
}

message MediaContent {
  optional MediaType media_type = 1 [default = BUNDLE];
  optional MediaTransport transport = 2;
  repeated MediaCodec codec = 3;
  repeated MediaCryptoParams crypto_param = 4;
  repeated MediaRtpHeaderExtension rtp_header_extension = 5;
  repeated MediaRequest default_request = 6;
  
}

message PushChannel {
  optional string channel_id = 1;
  optional PushChannel.Format format = 2;
  optional int32 ssrc = 3;
  optional string label = 4;
  
}

message Format {
  FORMAT_PROTOJSON = 1;
  FORMAT_PROTOTEXT = 2;
  FORMAT_PROTOBUF = 3;
  
}

message MediaSession {
  optional string session_id = 1;
  repeated MediaContent client_content = 3;
  repeated MediaContent server_content = 4;
  repeated PushChannel push_channel = 5;
  repeated string hangout_id = 6;
  optional MediaSession.Type type = 7;
  
}

message Type {
  TYPE_CLOUD = 1;
  TYPE_P2P = 2;
  
}

message MediaStream {
  optional MediaStreamDirection direction = 1;
  optional MediaType media_type = 2;
  optional string session_id = 3;
  optional string stream_id = 4;
  optional string hangout_id = 5;
  optional string participant_id = 6;
  optional string source_id = 7;
  optional MediaStream.Offer offer = 8;
  optional StreamRequest request = 9;
  message Offer {
  repeated uint32 ssrc = 1;
  repeated MediaStream.Offer.SsrcGroup ssrc_group = 2;
  message SsrcGroup {
  optional string semantics = 1;
  repeated uint32 ssrc = 2;
  
}

message MediaSourceSearchRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional string participant_id = 3;
  optional SyncMetadata sync_metadata = 4;
  
}

message MediaSourceSearchResponse {
  optional ClientResponseHeader response_header = 1;
  repeated MediaSource result = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message MediaSourceAddRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaSource source = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaSource resource = 4;
  
}

message MediaSourceAddResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaSource source = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaSource resource = 4;
  
}

message MediaSourceQueryRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional string participant_id = 3;
  optional string source_id = 4;
  
}

message MediaSourceQueryResponse {
  optional ClientResponseHeader response_header = 1;
  optional MediaSource source = 2;
  
}

message MediaSourceModifyRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaSource source = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaSource resource = 4;
  
}

message MediaSourceModifyResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaSource source = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaSource resource = 4;
  
}

message MediaSourceRemoveRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional string participant_id = 3;
  [unknown type 0x42][unknown type 0x2]optional string source_id = 1;
  optional SyncMetadata sync_metadata = 5;
  repeated string resource_id = 6;
  
}

message MediaSourceRemoveResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  
}

message MediaSessionSearchRequest {
  optional ClientRequestHeader request_header = 1;
  optional SyncMetadata sync_metadata = 2;
  optional string hangout_id = 3;
  
}

message MediaSessionSearchResponse {
  optional ClientResponseHeader response_header = 1;
  repeated MediaSession result = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message MediaSessionAddRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaSession session = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaSession resource = 4;
  
}

message MediaSessionAddResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaSession session = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaSession resource = 4;
  
}

message MediaSessionQueryRequest {
  optional ClientRequestHeader request_header = 1;
  optional string session_id = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message MediaSessionQueryResponse {
  optional ClientResponseHeader response_header = 1;
  optional MediaSession session = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message MediaSessionModifyRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaSession session = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaSession resource = 4;
  
}

message MediaSessionModifyResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaSession session = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaSession resource = 4;
  
}

message MediaSessionLogRequest {
  optional ClientRequestHeader request_header = 1;
  optional string session_id = 2;
  optional LogData log_data = 3;
  optional SyncMetadata sync_metadata = 4;
  
}

message MediaSessionLogResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  
}

message MediaSessionRemoveRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional string session_id = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated string resource_id = 4;
  
}

message MediaSessionRemoveResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  
}

message MediaStreamSearchRequest {
  optional ClientRequestHeader request_header = 1;
  optional MediaStreamDirection direction = 2;
  optional string session_id = 3;
  optional string hangout_id = 4;
  optional SyncMetadata sync_metadata = 5;
  
}

message MediaStreamSearchResponse {
  optional ClientResponseHeader response_header = 1;
  repeated MediaStream result = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message MediaStreamAddRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaStream stream = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaStream resource = 4;
  
}

message MediaStreamAddResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaStream stream = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaStream resource = 4;
  
}

message MediaStreamQueryRequest {
  optional ClientRequestHeader request_header = 1;
  optional MediaStreamDirection direction = 2;
  optional string session_id = 3;
  optional string stream_id = 4;
  optional string hangout_id = 5;
  
}

message MediaStreamQueryResponse {
  optional ClientResponseHeader response_header = 1;
  optional MediaStream stream = 2;
  
}

message MediaStreamModifyRequest {
  optional ClientRequestHeader request_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaStream stream = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaStream resource = 4;
  
}

message MediaStreamModifyResponse {
  optional ClientResponseHeader response_header = 1;
  [unknown type 0x42][unknown type 0x2]optional MediaStream stream = 1;
  optional SyncMetadata sync_metadata = 3;
  repeated MediaStream resource = 4;
  
}

message MediaStreamRemoveRequest {
  optional ClientRequestHeader request_header = 1;
  optional MediaStreamDirection direction = 2;
  optional string session_id = 3;
  [unknown type 0x42][unknown type 0x2]optional string stream_id = 1;
  optional string hangout_id = 5;
  optional SyncMetadata sync_metadata = 6;
  repeated string resource_id = 7;
  
}

message MediaStreamRemoveResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  
}

message HangoutClientBatchNotification {
  repeated HangoutClientPushNotification notification = 1;
  
}

message HangoutIdentifier {
  optional string hangout_id = 1;
  
}

message MediaSessionIdentifier {
  optional string session_id = 1;
  
}

message MediaStreamIdentifier {
  optional string hangout_id = 1;
  optional string session_id = 2;
  optional string stream_id = 3;
  optional MediaStreamDirection direction = 4;
  
}

message CommonAnnouncementIdentifier {
  optional string hangout_id = 1;
  optional string announcement_id = 2;
  
}

message HangoutsPushNotification {
  optional SyncMetadata sync_metadata = 1;
  repeated Hangout modified = 2;
  repeated HangoutIdentifier deleted = 3;
  optional HangoutIdentifier resync_collection = 4;
  
}

message HangoutParticipantsPushNotification {
  optional SyncMetadata sync_metadata = 1;
  repeated HangoutParticipant modified = 2;
  repeated HangoutParticipantIdentifier deleted = 3;
  [unknown type 0x42][unknown type 0x2]optional EndCause end_cause = 1;
  optional HangoutParticipantIdentifier resync_collection = 5;
  optional RemovalReason removal_reason = 6;
  
}

message MediaSessionsPushNotification {
  optional SyncMetadata sync_metadata = 1;
  repeated MediaSession modified = 2;
  repeated MediaSessionIdentifier deleted = 3;
  optional MediaSessionIdentifier resync_collection = 4;
  
}

message MediaSourcesPushNotification {
  optional SyncMetadata sync_metadata = 1;
  repeated MediaSource modified = 2;
  repeated MediaSourceIdentifier deleted = 3;
  optional MediaSourceIdentifier resync_collection = 4;
  
}

message MediaStreamsPushNotification {
  optional SyncMetadata sync_metadata = 1;
  repeated MediaStream modified = 2;
  repeated MediaStreamIdentifier deleted = 3;
  optional MediaStreamIdentifier resync_collection = 4;
  
}

message BroadcastsPushNotification {
  optional SyncMetadata sync_metadata = 1;
  repeated Broadcast modified = 2;
  repeated BroadcastIdentifier deleted = 3;
  optional BroadcastIdentifier resync_collection = 4;
  
}

message CommonAnnouncementsPushNotification {
  optional SyncMetadata sync_metadata = 1;
  repeated CommonAnnouncement modified = 2;
  repeated CommonAnnouncementIdentifier deleted = 3;
  optional CommonAnnouncementIdentifier resync_collection = 4;
  
}

message PushNotification {
  optional HangoutParticipantsPushNotification hangout_participants_update = 1;
  optional MediaSessionsPushNotification media_sessions_update = 2;
  optional MediaStreamsPushNotification media_streams_update = 3;
  optional MediaSourcesPushNotification media_sources_update = 5;
  optional BroadcastsPushNotification hangout_broadcasts_update = 7;
  optional HangoutsPushNotification hangouts_update = 8;
  optional CommonAnnouncementsPushNotification common_announcements_update = 9;
  
}

message HangoutClientPushNotification {
  optional PushNotification notification = 2;
  
}

message HangoutInvitee {
  optional HangoutInvitee.HangoutSharingTargetId invitee = 1;
  repeated HangoutInvitee.NotificationSent notifications_sent = 2;
  optional string display_name = 3;
  optional string avatar_url = 4;
  message HangoutSharingTargetId {
  optional HangoutInvitee.HangoutSharingTargetId.PersonId person_id = 1;
  optional string circle_id = 2;
  optional HangoutInvitee.HangoutSharingTargetId.SystemGroupType group_type = 3;
  message PersonId {
  optional string email = 1;
  optional string user_id = 2;
  
}

message SystemGroupType {
  PUBLIC = 1;
  DASHER_DOMAIN = 2;
  YOUR_CIRCLES = 3;
  EXTENDED_CIRCLES = 4;
  
}

message NotificationSent {
  UNKNOWN = 0;
  EMAIL = 1;
  JINGLE = 2;
  RING = 3;
  DING = 4;
  STREAM_POST = 5;
  QUIET = 6;
  INVITE = 7;
  CALENDAR = 8;
  NONE = 9;
  
}

message HangoutInvitation {
  optional int64 invitation_id = 8 [default = 0];
  optional string hangout_id = 1;
  repeated HangoutInvitee invited_entity = 11;
  optional HangoutInvitation.NotificationType notification_type = 3 [default = RING];
  
}

message NotificationType {
  RING = 1;
  DING = 2;
  NONE = 3;
  AMBIENT = 4;
  
}

message HangoutPhoneInvitation {
  optional int64 invitation_id = 1 [default = 0];
  optional string hangout_id = 2;
  optional PhoneNumber phone = 3;
  optional bool is_emergency_call = 4;
  optional bool is_caller_id_blocked = 5;
  optional EligibleCallerIdToken eligible_caller_id_token = 6;
  
}

message HangoutInvitationAddRequest {
  optional ClientRequestHeader request_header = 1;
  optional HangoutInvitation invitation = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message HangoutInvitationAddResponse {
  optional ClientResponseHeader response_header = 1;
  optional HangoutInvitation invitation = 2;
  optional HangoutInvitationAddResponse.HangoutInvitationAddErrorCode error_code = 3;
  optional SyncMetadata sync_metadata = 4;
  
}

message HangoutInvitationAddErrorCode {
  PUBLIC_OR_EXTENDED_BLOCKED = 1;
  
}

message HangoutInvitationAddPhoneRequest {
  optional ClientRequestHeader request_header = 1;
  optional HangoutPhoneInvitation invitation = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message HangoutInvitationAddPhoneResponse {
  optional ClientResponseHeader response_header = 1;
  optional HangoutPhoneInvitation invitation = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message BroadcastRecordingDetailsExtension {
  
}

message Broadcast {
  optional string hangout_id = 1;
  optional string broadcast_id = 2;
  optional string project_id = 3;
  optional string owner_profile_id = 10;
  optional string producer_participant_id = 5;
  optional Broadcast.RecordingDetails recording_details = 8;
  optional Broadcast.LiveStreamDetails live_stream_details = 9;
  optional Broadcast.LiveStreamStatus live_stream_status = 11;
  optional Broadcast.RecordingStatus recording_status = 12;
  optional BroadcastUseCase use_case = 13;
  message RecordingDetails {
  optional int64 start_time_ms = 1;
  optional Broadcast.TimeSpan stop_time = 2;
  optional string fixed_main_screen_participant_id = 3;
  optional Broadcast.GooglePlusRecordingDetails gplus_recording = 5;
  optional Broadcast.AbuseRecordingDetails abuse_recording = 6;
  optional BroadcastRecordingDetailsExtension details_extension = 7;
  message TimeSpan {
  optional int64 walltime_ms = 1;
  optional int64 offset_ms = 2;
  message GooglePlusRecordingDetails {
  optional string owner_id = 1;
  optional int64 album_id = 2;
  optional string title = 3;
  message LiveStreamDetails {
  optional string youtube_live_id = 1;
  optional string topic = 2;
  optional bool enable_monitor_stream = 3 [default = true];
  optional Broadcast.LiveStreamDetails.PrivacyStatus privacy_status = 4;
  repeated string tag = 5;
  
}

message PrivacyStatus {
  PUBLIC = 0;
  UNLISTED = 1;
  PRIVATE = 2;
  
}


}

[unknown type 0x56]
}

[unknown type 0x7][unknown type 0x55][unknown type 0x4e][unknown type 0x4b][unknown type 0x4e][unknown type 0x4f][unknown type 0x57][unknown type 0x4e]optional .g status = 1;
  optional string defendant_participant_id = 2;
  
}

[unknown type 0x3]message user_comments {
  
}

message Status {
  UNKNOWN = 0;
  INITIALIZE = 1;
  CONFIRM = 2;
  
}


}

[unknown type 0x4f]
}

[unknown type 0xe][unknown type 0x32][unknown type 0x38][unknown type 0x2e][unknown type 0x67][unknown type 0x6f][unknown type 0x6f][unknown type 0x67][unknown type 0x6c][unknown type 0x65][unknown type 0x2e][unknown type 0x68][unknown type 0x61][unknown type 0x6e][unknown type 0x67][unknown type 0x6f][unknown type 0x75][unknown type 0x74][unknown type 0x73][unknown type 0x2e][unknown type 0x6d][unknown type 0x65][unknown type 0x64][unknown type 0x69][unknown type 0x61][unknown type 0x2e][unknown type 0x42][unknown type 0x72][unknown type 0x6f][unknown type 0x61][unknown type 0x64][unknown type 0x63][unknown type 0x61][unknown type 0x73][unknown type 0x74][unknown type 0x2e][unknown type 0x4c][unknown type 0x69][unknown type 0x76][unknown type 0x65][unknown type 0x53]
}

[unknown type 0x72][unknown type 0x65][unknown type 0x61][unknown type 0x6d][unknown type 0x53][unknown type 0x74][unknown type 0x61][unknown type 0x74][unknown type 0x75][unknown type 0x73][unknown type 0x2e][unknown type 0x53][unknown type 0x74][unknown type 0x61][unknown type 0x74][unknown type 0x75][unknown type 0x73]UNKNOWN (0)  current_state = 3;
  optional int64 live_start_time_ms = 4;
  optional bool should_go_live = 5 [default = false];
  
}

message Status {
  UNKNOWN = 0;
  INITIALIZING = 1;
  PREVIEW_AVAILABLE = 2;
  PREPARING_LIVE = 3;
  LIVE = 4;
  FINISHED = 5;
  
}


}

[unknown type 0x4f]
}

[unknown type 0x1]
}

[unknown type 0x68] Broad Status = 1;
  UNKNOWN = 0;
  
}

[unknown type 0x1]message INITIALIZ {
  READY = 6;
  
}

[unknown type 0x4]message S {
  STARTED = 2;
  
}

[unknown type 0x54][unknown type 0x4f][unknown type 0x50][unknown type 0x50][unknown type 0x49][unknown type 0x4e][unknown type 0x47] = 5;
  STOPPED = 3;
  
}

message FullScreen {
  UNKNOWN_FULLSCREEN = 0;
  ON = 1;
  OFF = 2;
  AUTO = 3;
  
}

message BroadcastAddRequest {
  optional ClientRequestHeader request_header = 1;
  optional Broadcast broadcast = 2;
  optional SyncMetadata sync_metadata = 3;
  repeated Broadcast resource = 4;
  
}

message BroadcastAddResponse {
  optional ClientResponseHeader response_header = 1;
  optional Broadcast broadcast = 2;
  optional SyncMetadata sync_metadata = 3;
  repeated Broadcast resource = 4;
  
}

message BroadcastRemoveRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional string broadcast_id = 3;
  optional SyncMetadata sync_metadata = 4;
  optional string on_behalf_of_participant_id = 5;
  [unknown type 0x42][unknown type 0x2]repeated string resource_id = 1;
  repeated BroadcastIdentifier resource = 7;
  
}

message BroadcastRemoveResponse {
  optional ClientResponseHeader response_header = 1;
  optional SyncMetadata sync_metadata = 2;
  
}

message BroadcastModifyRequest {
  optional ClientRequestHeader request_header = 1;
  optional Broadcast broadcast = 2;
  optional SyncMetadata sync_metadata = 3;
  repeated Broadcast resource = 4;
  
}

message BroadcastModifyResponse {
  optional ClientResponseHeader response_header = 1;
  optional Broadcast broadcast = 2;
  optional SyncMetadata sync_metadata = 3;
  repeated Broadcast resource = 4;
  
}

message BroadcastResolveRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  
}

message BroadcastResolveResponse {
  optional ClientResponseHeader response_header = 1;
  optional string broadcast_id = 2;
  optional bool is_owner = 3;
  
}

message BroadcastQueryRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional string broadcast_id = 3;
  optional SyncMetadata sync_metadata = 4;
  
}

message BroadcastQueryResponse {
  optional ClientResponseHeader response_header = 1;
  optional Broadcast broadcast = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message BroadcastSearchRequest {
  optional ClientRequestHeader request_header = 1;
  optional string hangout_id = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message BroadcastSearchResponse {
  optional ClientResponseHeader response_header = 1;
  repeated Broadcast broadcast = 2;
  optional SyncMetadata sync_metadata = 3;
  
}

message E911UserLocationInfo {
  optional E911UserLocationInfo.NetworkInfo network_info = 1;
  optional E911UserLocationInfo.GeoLocationInfo device_location = 2;
  optional E911UserLocationInfo.GeoLocationInfo emergency_address_location = 3;
  optional E911UserLocationInfo.CellularNetworkInfo last_cellular_network_info = 4;
  message NetworkInfo {
  optional string bssid = 1;
  optional E911UserLocationInfo.NetworkInfo.NetworkType network_type = 2;
  
}

message NetworkType {
  UNUSED = 0;
  ETHERNET = 1;
  WIFI802_11A = 2;
  WIFI802_11B = 3;
  WIFI802_11G = 4;
  WIFI802_11N = 5;
  
}

[unknown type 0xf][unknown type 0x47][unknown type 0x65][unknown type 0x6f][unknown type 0x4c][unknown type 0x6f][unknown type 0x63][unknown type 0x61][unknown type 0x74][unknown type 0x69][unknown type 0x6f]
}

[unknown type 0x49][unknown type 0x6e][unknown type 0x66][unknown type 0x6f]message  {
  optional int32 latitude_e6 = 1;
  optional int32 longitude_e6 = 2;
  optional double accuracy = 3;
  message CellularNetworkInfo {
  
}

[unknown type 0x67][unknown type 0x6f][unknown type 0x6f][unknown type 0x67][unknown type 0x6c][unknown type 0x65][unknown type 0x2e][unknown type 0x68][unknown type 0x61][unknown type 0x6e][unknown type 0x67][unknown type 0x6f][unknown type 0x75][unknown type 0x74][unknown type 0x73][unknown type 0x2e][unknown type 0x6d][unknown type 0x65][unknown type 0x64][unknown type 0x69][unknown type 0x61][unknown type 0x2e][unknown type 0x45][unknown type 0x39][unknown type 0x31][unknown type 0x31][unknown type 0x55][unknown type 0x73][unknown type 0x65][unknown type 0x72][unknown type 0x4c][unknown type 0x6f][unknown type 0x63][unknown type 0x61][unknown type 0x74][unknown type 0x69][unknown type 0x6f][unknown type 0x6e][unknown type 0x49][unknown type 0x6e][unknown type 0x66][unknown type 0x6f][unknown type 0x2e][unknown type 0x43][unknown type 0x65][unknown type 0x6c][unknown type 0x6c]
}

[unknown type 0x6c][unknown type 0x61][unknown type 0x72][unknown type 0x4e][unknown type 0x65][unknown type 0x74][unknown type 0x77][unknown type 0x6f][unknown type 0x72][unknown type 0x6b][unknown type 0x49][unknown type 0x6e][unknown type 0x66][unknown type 0x6f][unknown type 0x2e][unknown type 0x41][unknown type 0x63][unknown type 0x63][unknown type 0x65][unknown type 0x73][unknown type 0x73][unknown type 0x54][unknown type 0x79][unknown type 0x70][unknown type 0x65]optional  access_type = 1;
  optional string access_info = 2;
  optional int64 p_lani_timestamp_ms = 3;
  optional int64 registration_timestamp_ms = 4;
  
}

message AccessType {
  UNUSED = 0;
  THREEGPP_GERAN = 1;
  THREEGPP_UTRAN_FDD = 2;
  THREEGPP_UTRAN_TDD = 3;
  THREEGPP_CDMA2000 = 4;
  THREEGPP_E_UTRAN_FDD = 5;
  THREEGPP_E_UTRAN_TDD = 6;
  
}

message PhoneNumber {
  optional string e164 = 1;
  
}

message EligibleCallerIdToken {
  optional PhoneNumber caller_id_phone_number = 1;
  optional bytes signature = 2;
  optional uint64 signature_ttl_usec = 3;
  
}

message RtcClient {
  optional Device device = 1;
  optional Application application = 2;
  optional Platform platform = 3;
  
}

message LogData {
  optional string participant_log_id = 14;
  optional HandoffLogEntry handoff_log_entry = 15;
  
}

message HandoffLogEntry {
  optional HandoffLogEntry.HandoffType type = 1;
  optional CallStartupEventCode event_code = 2;
  optional string previous_session_id = 3;
  optional string next_session_id = 4;
  
}

message HandoffType {
  HANDOFF_TYPE_NO_HANDOFF = 0;
  NOVA_WIFI_TO_PSTN = 1;
  NOVA_PSTN_TO_WIFI = 2;
  HANDOFF_TYPE_UNKNOWN = 3;
  HANGOUT_CLOUD_P2P = 4;
  [unknown type 0x2a]
}

ClientResponseStatus = 5;
  UNKNOWN = 0;
  OK = 1;
  ERROR_BUSY = 2;
  ERROR_UNEXPECTED = 3;
  ERROR_INVALID_REQUEST = 4;
  ERROR_RETRY_LIMIT = 5;
  ERROR_FORWARDED = 6;
  ERROR_QUOTA_EXCEEDED = 7;
  ERROR_INVALID_CONVERSATION = 8;
  ERROR_VERSION_MISMATCH = 9;
  ERROR_ACCESS_CHECK_FAILED = 10;
  [unknown type 0x2a]
}

AnnouncementType = 11;
  UNKNOWN_ANNOUNCEMENT = 0;
  CAMERA_APP_ON = 1;
  [unknown type 0x2a]
}

EndCause = 2;
  USER_ENDED = 0;
  DECLINE = 1;
  TIMEOUT = 2;
  ERROR = 3;
  LAPTOP_SLEEPING = 4;
  BUSY = 5;
  FLUTE_NOT_ENABLED = 7;
  CLIENT_GONE = 8;
  BLOCKED = 9;
  CONNECTIVITY_LOST = 10;
  RETRYING = 11;
  TIE_BREAK = 12;
  PLAYER_ERROR = 13;
  ADMIN_ENDED = 14;
  FATAL_RESPONSE = 15;
  INITIATE_FAILED = 16;
  UNKNOWN_SESSION = 17;
  ANOTHER_CLIENT_ACCEPTED = 18;
  INCOMPATIBLE_PARAMETERS = 19;
  SECURITY_ERROR = 20;
  MUC_DROPOUT = 21;
  COMMUNICATION_CHANNEL = 22;
  FAILED_TRANSPORT = 23;
  NO_CANDIDATES = 24;
  SESSION_EXPIRED = 25;
  SERVER_GONE = 26;
  NO_CONNECTIVITY = 27;
  INTERNAL_SERVER_ERROR = 28;
  UNDEFINED_CONDITION = 29;
  RESOURCE_CONSTRAINT = 30;
  NETWORK_GONE = 31;
  BROWSER_CHANNEL_FAILED = 32;
  BAD_REQUEST = 33;
  UNEXPECTED_CODEPATH = 34;
  PAYMENT_REQUIRED = 35;
  WCS_DRAINED = 36;
  USER_AUTO_KICKED = 37;
  HOA_COPYRIGHT_VIOLATION = 38;
  HOA_ABUSE_VIOLATION = 39;
  HOA_FINGERPRINT_VIOLATION = 40;
  USER_TAKE_OVER = 41;
  PLUGIN_CONNECTIVITY_LOST = 42;
  EJECTED_BY_MODERATOR = 43;
  FAILOVER_FAILED = 44;
  USER_RTCP_BYE = 45;
  AUTH_EXPIRED = 46;
  NEVER_STARTED = 47;
  PARTIAL_FAILED_TRANSPORT = 48;
  NEVER_CONNECTED = 49;
  PARTIAL_NEVER_CONNECTED = 50;
  P2P_3RD_PARTY_JOINED = 51;
  P2P_OTHER_SIDE_ENDED = 52;
  P2P_JID_MISMATCH = 53;
  P2P_STATE_MISMATCH = 54;
  P2P_SETUP_FAILED = 55;
  SESSION_SERVER_UNBIND = 56;
  FLUTE_CRASH = 57;
  WEBRTC_DENIED = 58;
  LEFT_CONVERSATION = 59;
  JOIN_CALL_NOT_IN_PROGRESS = 60;
  AUTO_EXIT_ON_EMPTY = 61;
  ANOTHER_CALL_ANSWERED = 62;
  CLIENT_CLOSE_OR_REFRESH = 63;
  KNOCKING_DENIED = 64;
  HANDOFF_TO_PSTN = 65;
  [unknown type 0x2a]
}

Role = 66;
  UNKNOWN_ROLE = 0;
  DEFAULT = 1;
  ORGANIZER = 2;
  MODERATOR = 3;
  [unknown type 0x2a]
}

PushEventType = 4;
  UNKNOWN_PUSH_EVENT = 0;
  DTMF_EVENT = 1;
  [unknown type 0x2a]
}

MediaType = 2;
  AUDIO = 1;
  VIDEO = 2;
  DATA = 3;
  [unknown type 0x2a]
}

MediaStreamDirection = 4;
  DOWN = 1;
  [unknown type 0x2a]
}

BroadcastUseCase = 2;
  HANGOUTS_ON_AIR = 0;
  CONSUMER_RECORDING = 1;
  VIDEO_VOICEMAIL = 2;
  ENTERPRISE_RECORDING = 3;
  ENTERPRISE_STREAMING = 4;
  HANGOUT_ABUSE_RECORDING = 5;
  [unknown type 0x2a]
}

Tristate = 8;
  TRISTATE_UNKNOWN = 0;
  TRISTATE_FALSE = 1;
  [unknown type 0x2a]
}

RemovalReason = 2;
  UNKNOWN_REASON = 0;
  REMOVED_HANGUP = 1;
  REMOVED_EJECTED = 2;
  REMOVED_ERROR = 3;
  REMOVED_INSUFFICIENT_FUNDS = 4;
  REMOVED_BUSY = 5;
  REMOVED_CONNECTION_FAILED = 6;
  REMOVED_CANNOT_CALL_YOURSELF = 7;
  REMOVED_USER_ALREADY_IN_CALL = 8;
  [unknown type 0x2a]
}

HangoutParticipantAddErrorCode = 9;
  HPA_UNKNOWN_ERROR_CODE = 0;
  HPA_USER_ABUSE_BLOCKED = 1;
  HPA_BLOCKED = 2;
  HPA_BLOCKING = 3;
  HPA_MINORS_NOT_ALLOWED = 4;
  HPA_MINORS_NOT_SUPPORTED = 5;
  HPA_NOT_ALLOWED = 6;
  HPA_CALL_IS_FULL = 7;
  HPA_HANGOUTS_ON_AIR_TOS_NOT_ACCEPTED = 8;
  HPA_CUSTOMER_RECORDING_TOS_NOT_ACCEPTED = 9;
  HPA_ABUSE_RECORDING_TOS_NOT_ACCEPTED = 10;
  [unknown type 0x2a]
}

Device = 11;
  ANDROID_PHONE = 2;
  ANDROID_TABLET = 3;
  IOS_PHONE = 4;
  [unknown type 0x2a]
}

Application = 5;
  [unknown type 0x2a]
}

Platform = 407;
  [unknown type 0x2a]
}

CallStartupEventCode = 2;
  SUCCESS = 0;
  OTHER_DEVICE_RESPONDED = 101;
  RING_TIMEOUT_CLIENT = 102;
  RING_TIMEOUT_SERVER = 103;
  ABUSE_BLOCKED = 200;
  ALREADY_IN_CALL = 221;
  BLOCKING = 202;
  BROWSER_NOT_SUPPORTED = 203;
  GEO_BLOCKED = 204;
  GOOGLE_PLUS_DISABLED = 205;
  MINORS_NOT_ALLOWED = 206;
  MINORS_NOT_SUPPORTED = 207;
  MOBILE_DATA_NOT_SUPPORTED = 208;
  NOT_ALLOWED = 209;
  NO_PLUGIN = 211;
  NON_GPLUS_NOT_ALLOWED = 222;
  UNICORN_CHILD_BLOCKED = 223;
  OBSOLETE_CLIENT_VERSION = 212;
  PLUSSPAGE_NOT_IN_CIRCLE = 213;
  PLUSPAGE_NO_ACCESS = 214;
  PROFILE_SUSPENDED = 215;
  ROOM_FULL = 216;
  ROOM_NOT_FOUND_LINK = 217;
  UNAUTHORIZED_HOA = 218;
  USER_CANCELED = 219;
  VIDEO_CHAT_DISABLED = 220;
  DISALLOWED_BY_CONFIG = 224;
  NO_LOCAL_PHONE_ACCOUNT = 225;
  NO_HANGOUT_TO_JOIN = 226;
  UNABLE_TO_HANDOFF_INACTIVE_CALL = 227;
  CONFERENCE_CALL_NOT_SUPPORTED = 228;
  AUTHENTICATION_FAILURE = 300;
  BROKEN_PLUGIN = 301;
  CLIENT_ERROR = 302;
  JOIN_ERROR = 303;
  JOIN_TIMEOUT = 304;
  NETWORK_ERROR = 305;
  ROOM_NOT_FOUND_ERROR = 306;
  SERVICE_UNAVAILBLE = 307;
  CREATE_CONV_TIMEOUT = 308;
  SIGN_IN_TIMEOUT = 309;
  JID_LOOKUP_TIMEOUT = 310;
  DOWNLOADING_CODE_TIMEOUT = 311;
  ROOM_DISCOVERY_TIMEOUT = 312;
  ROOM_CONFIG_TIMEOUT = 313;
  JOIN_MUC_TIMEOUT = 314;
  INITIATE_SESSION_TIMEOUT = 315;
  CREATE_HANGOUT_ID_TIMEOUT = 316;
  HANDOFF_TO_CELLULAR_DUE_TO_ERROR = 317;
  CALL_COULD_NOT_START = 318;
  ANDROID_TELEPHONY_API_ERROR = 319;
  NO_HANDOFF_NUMBER = 320;
  [unknown type 0x42]
}