syntax = "proto2";

package a;

message A1 {
  extensions 100 to 1000;
  optional string s1 = 1;
  repeated string s2 = 2;
  map<string, string> s3 = 3;

  optional uint32 other1 = 11;
  repeated double other2 = 12;
  map<uint64, bytes> other3 = 13;
  optional A1 other4 = 14;
}

message B1 {
  extensions 100 to 1000;
  optional string s1 = 1;
  repeated string s2 = 2;
  map<string, string> s3 = 3;

  optional uint32 other1 = 11;
  repeated double other2 = 12;
  map<uint64, bytes> other3 = 13;
  optional B1 other4 = 14;
}

message C1 {
  optional string s1 = 1;
  repeated string s2 = 2;
  map<string, string> s3 = 3;

  optional uint32 other1 = 11;
  repeated double other2 = 12;
  map<uint64, bytes> other3 = 13;
  optional C1 other4 = 14;
}

message D1 {
  extensions 100 to 1000;
  optional string s1 = 1;
  repeated string s2 = 2;
  map<string, string> s3 = 3;

  optional uint32 other1 = 11;
  repeated double other2 = 12;
  map<uint64, bytes> other3 = 13;
  optional D1 other4 = 14;
}

message E1 {
  extensions 100 to 1000;
  optional string s1 = 1;
  repeated string s2 = 2;
  map<string, string> s3 = 3;

  optional uint32 other1 = 11;
  repeated double other2 = 12;
  map<uint64, bytes> other3 = 13;
  optional E1 other4 = 14;
}

message F1 {
  extensions 100 to 1000;
  optional string s1 = 1;
  repeated string s2 = 2;
  map<string, string> s3 = 3;

  optional uint32 other1 = 11;
  repeated double other2 = 12;
  map<uint64, bytes> other3 = 13;
  optional F1 other4 = 14;
}
