Upgrade to protobuf-3.0.0-beta-1
diff --git a/compiler/Dockerfile b/compiler/Dockerfile
index 32c4850..df92927 100644
--- a/compiler/Dockerfile
+++ b/compiler/Dockerfile
@@ -2,7 +2,7 @@
 
 RUN scl enable devtoolset-1.1 'bash -c "cd /protobuf && \
     git fetch && \
-    git checkout v3.0.0-alpha-3.1 && \
+    git checkout v3.0.0-beta-1 && \
     ./autogen.sh && \
     CXXFLAGS=-m32 ./configure --disable-shared --prefix=/protobuf-32 && \
     make clean && make && make install"'
diff --git a/compiler/README.md b/compiler/README.md
index 561f118..ce89ca5 100644
--- a/compiler/README.md
+++ b/compiler/README.md
@@ -13,7 +13,7 @@
 
 * Linux, Mac OS X with Clang, or Windows with MSYS2
 * Java 7 or up
-* [Protobuf](https://github.com/google/protobuf) 3.0.0-alpha-3.1 or up
+* [Protobuf](https://github.com/google/protobuf) 3.0.0-beta-1 or up
 
 ## Compiling and testing the codegen
 Change to the `compiler` directory:
diff --git a/compiler/src/java_plugin/cpp/java_generator.cpp b/compiler/src/java_plugin/cpp/java_generator.cpp
index a777af9..6152dc5 100644
--- a/compiler/src/java_plugin/cpp/java_generator.cpp
+++ b/compiler/src/java_plugin/cpp/java_generator.cpp
@@ -3,6 +3,7 @@
 #include <iostream>
 #include <map>
 #include <google/protobuf/compiler/java/java_names.h>
+#include <google/protobuf/descriptor.pb.h>
 #include <google/protobuf/io/printer.h>
 #include <google/protobuf/io/zero_copy_stream.h>
 
@@ -55,11 +56,23 @@
   return "METHOD_" + ToAllUpperCase(method->name());
 }
 
-static inline string MessageFullJavaName(const Descriptor* desc) {
-  return google::protobuf::compiler::java::ClassName(desc);
+static inline string MessageFullJavaName(
+    const FileDescriptor* file, bool nano, const Descriptor* desc) {
+  string name = google::protobuf::compiler::java::ClassName(desc);
+  if (nano  && !file->options().javanano_use_deprecated_package()) {
+    // XXX: Add "nano" to the original package
+    // (https://github.com/grpc/grpc-java/issues/900)
+    for (int i = 0; i < name.size(); ++i) {
+      if ((name[i] == '.') && (i < (name.size() - 1)) && isupper(name[i + 1])) {
+        return name.substr(0, i + 1) + "nano." + name.substr(i + 1);
+      }
+    }
+  }
+  return name;
 }
 
 static void PrintMethodFields(
+    const FileDescriptor* file,
     const ServiceDescriptor* service, map<string, string>* vars, Printer* p,
     bool generate_nano) {
   p->Print("// Static method descriptors that strictly reflect the proto.\n");
@@ -67,8 +80,10 @@
   for (int i = 0; i < service->method_count(); ++i) {
     const MethodDescriptor* method = service->method(i);
     (*vars)["method_name"] = method->name();
-    (*vars)["input_type"] = MessageFullJavaName(method->input_type());
-    (*vars)["output_type"] = MessageFullJavaName(method->output_type());
+    (*vars)["input_type"] = MessageFullJavaName(file, generate_nano,
+                                                method->input_type());
+    (*vars)["output_type"] = MessageFullJavaName(file, generate_nano,
+                                                 method->output_type());
     (*vars)["method_field_name"] = MethodPropertiesFieldName(method);
     bool client_streaming = method->client_streaming();
     bool server_streaming = method->server_streaming();
@@ -147,9 +162,11 @@
 };
 
 // Prints a client interface or implementation class, or a server interface.
-static void PrintStub(const google::protobuf::ServiceDescriptor* service,
-                        map<string, string>* vars,
-                        Printer* p, StubType type) {
+static void PrintStub(
+    const FileDescriptor* file,
+    const ServiceDescriptor* service,
+    map<string, string>* vars,
+    Printer* p, StubType type, bool generate_nano) {
   (*vars)["service_name"] = service->name();
   string interface_name = service->name();
   string impl_name = service->name();
@@ -254,8 +271,10 @@
   // RPC methods
   for (int i = 0; i < service->method_count(); ++i) {
     const MethodDescriptor* method = service->method(i);
-    (*vars)["input_type"] = MessageFullJavaName(method->input_type());
-    (*vars)["output_type"] = MessageFullJavaName(method->output_type());
+    (*vars)["input_type"] = MessageFullJavaName(file, generate_nano,
+                                                method->input_type());
+    (*vars)["output_type"] = MessageFullJavaName(file, generate_nano,
+                                                 method->output_type());
     (*vars)["lower_method_name"] = LowerMethodName(method);
     (*vars)["method_field_name"] = MethodPropertiesFieldName(method);
     bool client_streaming = method->client_streaming();
@@ -391,9 +410,11 @@
   p->Print("}\n\n");
 }
 
-static void PrintBindServiceMethod(const ServiceDescriptor* service,
+static void PrintBindServiceMethod(const FileDescriptor* file,
+                                   const ServiceDescriptor* service,
                                    map<string, string>* vars,
-                                   Printer* p) {
+                                   Printer* p,
+                                   bool generate_nano) {
   (*vars)["service_name"] = service->name();
   p->Print(
       *vars,
@@ -408,8 +429,10 @@
     const MethodDescriptor* method = service->method(i);
     (*vars)["lower_method_name"] = LowerMethodName(method);
     (*vars)["method_field_name"] = MethodPropertiesFieldName(method);
-    (*vars)["input_type"] = MessageFullJavaName(method->input_type());
-    (*vars)["output_type"] = MessageFullJavaName(method->output_type());
+    (*vars)["input_type"] = MessageFullJavaName(file, generate_nano,
+                                                method->input_type());
+    (*vars)["output_type"] = MessageFullJavaName(file, generate_nano,
+                                                 method->output_type());
     bool client_streaming = method->client_streaming();
     bool server_streaming = method->server_streaming();
     if (client_streaming) {
@@ -481,7 +504,8 @@
   p->Print("}\n");
 }
 
-static void PrintService(const ServiceDescriptor* service,
+static void PrintService(const FileDescriptor* file,
+                         const ServiceDescriptor* service,
                          map<string, string>* vars,
                          Printer* p,
                          bool generate_nano) {
@@ -493,7 +517,7 @@
       "public class $service_class_name$ {\n\n");
   p->Indent();
 
-  PrintMethodFields(service, vars, p, generate_nano);
+  PrintMethodFields(file, service, vars, p, generate_nano);
 
   p->Print(
       *vars,
@@ -525,13 +549,13 @@
   p->Outdent();
   p->Print("}\n\n");
 
-  PrintStub(service, vars, p, ASYNC_INTERFACE);
-  PrintStub(service, vars, p, BLOCKING_CLIENT_INTERFACE);
-  PrintStub(service, vars, p, FUTURE_CLIENT_INTERFACE);
-  PrintStub(service, vars, p, ASYNC_CLIENT_IMPL);
-  PrintStub(service, vars, p, BLOCKING_CLIENT_IMPL);
-  PrintStub(service, vars, p, FUTURE_CLIENT_IMPL);
-  PrintBindServiceMethod(service, vars, p);
+  PrintStub(file, service, vars, p, ASYNC_INTERFACE, generate_nano);
+  PrintStub(file, service, vars, p, BLOCKING_CLIENT_INTERFACE, generate_nano);
+  PrintStub(file, service, vars, p, FUTURE_CLIENT_INTERFACE, generate_nano);
+  PrintStub(file, service, vars, p, ASYNC_CLIENT_IMPL, generate_nano);
+  PrintStub(file, service, vars, p, BLOCKING_CLIENT_IMPL, generate_nano);
+  PrintStub(file, service, vars, p, FUTURE_CLIENT_IMPL, generate_nano);
+  PrintBindServiceMethod(file, service, vars, p, generate_nano);
   p->Outdent();
   p->Print("}\n");
 }
@@ -567,7 +591,8 @@
   }
 }
 
-void GenerateService(const ServiceDescriptor* service,
+void GenerateService(const FileDescriptor* file,
+                     const ServiceDescriptor* service,
                      google::protobuf::io::ZeroCopyOutputStream* out,
                      bool generate_nano) {
   // All non-generated classes must be referred by fully qualified names to
@@ -611,7 +636,7 @@
   if (!vars["Package"].empty()) {
     vars["Package"].append(".");
   }
-  PrintService(service, &vars, &printer, generate_nano);
+  PrintService(file, service, &vars, &printer, generate_nano);
 }
 
 string ServiceJavaPackage(const FileDescriptor* file) {
diff --git a/compiler/src/java_plugin/cpp/java_generator.h b/compiler/src/java_plugin/cpp/java_generator.h
index 6494192..f0adcea 100644
--- a/compiler/src/java_plugin/cpp/java_generator.h
+++ b/compiler/src/java_plugin/cpp/java_generator.h
@@ -46,7 +46,8 @@
 string ServiceClassName(const google::protobuf::ServiceDescriptor* service);
 
 // Writes the generated service interface into the given ZeroCopyOutputStream
-void GenerateService(const google::protobuf::ServiceDescriptor* service,
+void GenerateService(const google::protobuf::FileDescriptor* file,
+                     const google::protobuf::ServiceDescriptor* service,
                      google::protobuf::io::ZeroCopyOutputStream* out,
                      bool generate_nano);
 
diff --git a/compiler/src/java_plugin/cpp/java_plugin.cpp b/compiler/src/java_plugin/cpp/java_plugin.cpp
index 41c8999..ece8e2a 100644
--- a/compiler/src/java_plugin/cpp/java_plugin.cpp
+++ b/compiler/src/java_plugin/cpp/java_plugin.cpp
@@ -49,7 +49,7 @@
           + java_grpc_generator::ServiceClassName(service) + ".java";
       std::unique_ptr<google::protobuf::io::ZeroCopyOutputStream> output(
           context->Open(filename));
-      java_grpc_generator::GenerateService(service, output.get(), generate_nano);
+      java_grpc_generator::GenerateService(file, service, output.get(), generate_nano);
     }
     return true;
   }
diff --git a/compiler/src/test/golden/TestServiceNano.java.txt b/compiler/src/test/golden/TestServiceNano.java.txt
index 188555d..a98a80f 100644
--- a/compiler/src/test/golden/TestServiceNano.java.txt
+++ b/compiler/src/test/golden/TestServiceNano.java.txt
@@ -19,104 +19,104 @@
 public class TestServiceGrpc {
 
   // Static method descriptors that strictly reflect the proto.
-  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.SimpleRequest,
-      io.grpc.testing.integration.Test.SimpleResponse> METHOD_UNARY_CALL =
+  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.nano.Test.SimpleRequest,
+      io.grpc.testing.integration.nano.Test.SimpleResponse> METHOD_UNARY_CALL =
       io.grpc.MethodDescriptor.create(
           io.grpc.MethodDescriptor.MethodType.UNARY,
           generateFullMethodName(
               "grpc.testing.TestService", "UnaryCall"),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.SimpleRequest>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.SimpleRequest>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.SimpleRequest>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.SimpleRequest>() {
                   @Override
-                  public io.grpc.testing.integration.Test.SimpleRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.SimpleRequest.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.SimpleRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.SimpleRequest.parseFrom(input);
                   }
           }),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.SimpleResponse>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.SimpleResponse>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.SimpleResponse>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.SimpleResponse>() {
                   @Override
-                  public io.grpc.testing.integration.Test.SimpleResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.SimpleResponse.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.SimpleResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.SimpleResponse.parseFrom(input);
                   }
           }));
-  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_STREAMING_OUTPUT_CALL =
+  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest,
+      io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> METHOD_STREAMING_OUTPUT_CALL =
       io.grpc.MethodDescriptor.create(
           io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING,
           generateFullMethodName(
               "grpc.testing.TestService", "StreamingOutputCall"),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingOutputCallRequest>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingOutputCallRequest>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest>() {
                   @Override
-                  public io.grpc.testing.integration.Test.StreamingOutputCallRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.StreamingOutputCallRequest.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest.parseFrom(input);
                   }
           }),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingOutputCallResponse>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>() {
                   @Override
-                  public io.grpc.testing.integration.Test.StreamingOutputCallResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.StreamingOutputCallResponse.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse.parseFrom(input);
                   }
           }));
-  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingInputCallRequest,
-      io.grpc.testing.integration.Test.StreamingInputCallResponse> METHOD_STREAMING_INPUT_CALL =
+  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.nano.Test.StreamingInputCallRequest,
+      io.grpc.testing.integration.nano.Test.StreamingInputCallResponse> METHOD_STREAMING_INPUT_CALL =
       io.grpc.MethodDescriptor.create(
           io.grpc.MethodDescriptor.MethodType.CLIENT_STREAMING,
           generateFullMethodName(
               "grpc.testing.TestService", "StreamingInputCall"),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingInputCallRequest>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingInputCallRequest>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.StreamingInputCallRequest>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.StreamingInputCallRequest>() {
                   @Override
-                  public io.grpc.testing.integration.Test.StreamingInputCallRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.StreamingInputCallRequest.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.StreamingInputCallRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.StreamingInputCallRequest.parseFrom(input);
                   }
           }),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingInputCallResponse>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingInputCallResponse>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.StreamingInputCallResponse>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.StreamingInputCallResponse>() {
                   @Override
-                  public io.grpc.testing.integration.Test.StreamingInputCallResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.StreamingInputCallResponse.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.StreamingInputCallResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.StreamingInputCallResponse.parseFrom(input);
                   }
           }));
-  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_FULL_BIDI_CALL =
+  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest,
+      io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> METHOD_FULL_BIDI_CALL =
       io.grpc.MethodDescriptor.create(
           io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING,
           generateFullMethodName(
               "grpc.testing.TestService", "FullBidiCall"),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingOutputCallRequest>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingOutputCallRequest>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest>() {
                   @Override
-                  public io.grpc.testing.integration.Test.StreamingOutputCallRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.StreamingOutputCallRequest.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest.parseFrom(input);
                   }
           }),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingOutputCallResponse>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>() {
                   @Override
-                  public io.grpc.testing.integration.Test.StreamingOutputCallResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.StreamingOutputCallResponse.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse.parseFrom(input);
                   }
           }));
-  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-      io.grpc.testing.integration.Test.StreamingOutputCallResponse> METHOD_HALF_BIDI_CALL =
+  public static final io.grpc.MethodDescriptor<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest,
+      io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> METHOD_HALF_BIDI_CALL =
       io.grpc.MethodDescriptor.create(
           io.grpc.MethodDescriptor.MethodType.BIDI_STREAMING,
           generateFullMethodName(
               "grpc.testing.TestService", "HalfBidiCall"),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingOutputCallRequest>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingOutputCallRequest>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest>() {
                   @Override
-                  public io.grpc.testing.integration.Test.StreamingOutputCallRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.StreamingOutputCallRequest.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest.parseFrom(input);
                   }
           }),
-          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.Test.StreamingOutputCallResponse>marshaller(
-              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
+          io.grpc.protobuf.nano.NanoUtils.<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>marshaller(
+              new io.grpc.protobuf.nano.Parser<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>() {
                   @Override
-                  public io.grpc.testing.integration.Test.StreamingOutputCallResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
-                      return io.grpc.testing.integration.Test.StreamingOutputCallResponse.parseFrom(input);
+                  public io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse parse(com.google.protobuf.nano.CodedInputByteBufferNano input) throws IOException {
+                      return io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse.parseFrom(input);
                   }
           }));
 
@@ -136,34 +136,34 @@
 
   public static interface TestService {
 
-    public void unaryCall(io.grpc.testing.integration.Test.SimpleRequest request,
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.SimpleResponse> responseObserver);
+    public void unaryCall(io.grpc.testing.integration.nano.Test.SimpleRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.SimpleResponse> responseObserver);
 
-    public void streamingOutputCall(io.grpc.testing.integration.Test.StreamingOutputCallRequest request,
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
+    public void streamingOutputCall(io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver);
 
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallRequest> streamingInputCall(
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallResponse> responseObserver);
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingInputCallRequest> streamingInputCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingInputCallResponse> responseObserver);
 
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullBidiCall(
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest> fullBidiCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver);
 
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfBidiCall(
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver);
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest> halfBidiCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver);
   }
 
   public static interface TestServiceBlockingClient {
 
-    public io.grpc.testing.integration.Test.SimpleResponse unaryCall(io.grpc.testing.integration.Test.SimpleRequest request);
+    public io.grpc.testing.integration.nano.Test.SimpleResponse unaryCall(io.grpc.testing.integration.nano.Test.SimpleRequest request);
 
-    public java.util.Iterator<io.grpc.testing.integration.Test.StreamingOutputCallResponse> streamingOutputCall(
-        io.grpc.testing.integration.Test.StreamingOutputCallRequest request);
+    public java.util.Iterator<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> streamingOutputCall(
+        io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest request);
   }
 
   public static interface TestServiceFutureClient {
 
-    public com.google.common.util.concurrent.ListenableFuture<io.grpc.testing.integration.Test.SimpleResponse> unaryCall(
-        io.grpc.testing.integration.Test.SimpleRequest request);
+    public com.google.common.util.concurrent.ListenableFuture<io.grpc.testing.integration.nano.Test.SimpleResponse> unaryCall(
+        io.grpc.testing.integration.nano.Test.SimpleRequest request);
   }
 
   public static class TestServiceStub extends io.grpc.stub.AbstractStub<TestServiceStub>
@@ -184,36 +184,36 @@
     }
 
     @java.lang.Override
-    public void unaryCall(io.grpc.testing.integration.Test.SimpleRequest request,
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.SimpleResponse> responseObserver) {
+    public void unaryCall(io.grpc.testing.integration.nano.Test.SimpleRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.SimpleResponse> responseObserver) {
       asyncUnaryCall(
           channel.newCall(METHOD_UNARY_CALL, callOptions), request, responseObserver);
     }
 
     @java.lang.Override
-    public void streamingOutputCall(io.grpc.testing.integration.Test.StreamingOutputCallRequest request,
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+    public void streamingOutputCall(io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest request,
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver) {
       asyncServerStreamingCall(
           channel.newCall(METHOD_STREAMING_OUTPUT_CALL, callOptions), request, responseObserver);
     }
 
     @java.lang.Override
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallRequest> streamingInputCall(
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallResponse> responseObserver) {
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingInputCallRequest> streamingInputCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingInputCallResponse> responseObserver) {
       return asyncClientStreamingCall(
           channel.newCall(METHOD_STREAMING_INPUT_CALL, callOptions), responseObserver);
     }
 
     @java.lang.Override
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> fullBidiCall(
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest> fullBidiCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver) {
       return asyncBidiStreamingCall(
           channel.newCall(METHOD_FULL_BIDI_CALL, callOptions), responseObserver);
     }
 
     @java.lang.Override
-    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> halfBidiCall(
-        io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+    public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest> halfBidiCall(
+        io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver) {
       return asyncBidiStreamingCall(
           channel.newCall(METHOD_HALF_BIDI_CALL, callOptions), responseObserver);
     }
@@ -237,14 +237,14 @@
     }
 
     @java.lang.Override
-    public io.grpc.testing.integration.Test.SimpleResponse unaryCall(io.grpc.testing.integration.Test.SimpleRequest request) {
+    public io.grpc.testing.integration.nano.Test.SimpleResponse unaryCall(io.grpc.testing.integration.nano.Test.SimpleRequest request) {
       return blockingUnaryCall(
           channel.newCall(METHOD_UNARY_CALL, callOptions), request);
     }
 
     @java.lang.Override
-    public java.util.Iterator<io.grpc.testing.integration.Test.StreamingOutputCallResponse> streamingOutputCall(
-        io.grpc.testing.integration.Test.StreamingOutputCallRequest request) {
+    public java.util.Iterator<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> streamingOutputCall(
+        io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest request) {
       return blockingServerStreamingCall(
           channel.newCall(METHOD_STREAMING_OUTPUT_CALL, callOptions), request);
     }
@@ -268,8 +268,8 @@
     }
 
     @java.lang.Override
-    public com.google.common.util.concurrent.ListenableFuture<io.grpc.testing.integration.Test.SimpleResponse> unaryCall(
-        io.grpc.testing.integration.Test.SimpleRequest request) {
+    public com.google.common.util.concurrent.ListenableFuture<io.grpc.testing.integration.nano.Test.SimpleResponse> unaryCall(
+        io.grpc.testing.integration.nano.Test.SimpleRequest request) {
       return futureUnaryCall(
           channel.newCall(METHOD_UNARY_CALL, callOptions), request);
     }
@@ -282,12 +282,12 @@
           METHOD_UNARY_CALL,
           asyncUnaryCall(
             new io.grpc.stub.ServerCalls.UnaryMethod<
-                io.grpc.testing.integration.Test.SimpleRequest,
-                io.grpc.testing.integration.Test.SimpleResponse>() {
+                io.grpc.testing.integration.nano.Test.SimpleRequest,
+                io.grpc.testing.integration.nano.Test.SimpleResponse>() {
               @java.lang.Override
               public void invoke(
-                  io.grpc.testing.integration.Test.SimpleRequest request,
-                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.SimpleResponse> responseObserver) {
+                  io.grpc.testing.integration.nano.Test.SimpleRequest request,
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.SimpleResponse> responseObserver) {
                 serviceImpl.unaryCall(request, responseObserver);
               }
             })))
@@ -295,12 +295,12 @@
           METHOD_STREAMING_OUTPUT_CALL,
           asyncServerStreamingCall(
             new io.grpc.stub.ServerCalls.ServerStreamingMethod<
-                io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-                io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
+                io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest,
+                io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
               public void invoke(
-                  io.grpc.testing.integration.Test.StreamingOutputCallRequest request,
-                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+                  io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest request,
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver) {
                 serviceImpl.streamingOutputCall(request, responseObserver);
               }
             })))
@@ -308,11 +308,11 @@
           METHOD_STREAMING_INPUT_CALL,
           asyncClientStreamingCall(
             new io.grpc.stub.ServerCalls.ClientStreamingMethod<
-                io.grpc.testing.integration.Test.StreamingInputCallRequest,
-                io.grpc.testing.integration.Test.StreamingInputCallResponse>() {
+                io.grpc.testing.integration.nano.Test.StreamingInputCallRequest,
+                io.grpc.testing.integration.nano.Test.StreamingInputCallResponse>() {
               @java.lang.Override
-              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallRequest> invoke(
-                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingInputCallResponse> responseObserver) {
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingInputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingInputCallResponse> responseObserver) {
                 return serviceImpl.streamingInputCall(responseObserver);
               }
             })))
@@ -320,11 +320,11 @@
           METHOD_FULL_BIDI_CALL,
           asyncBidiStreamingCall(
             new io.grpc.stub.ServerCalls.BidiStreamingMethod<
-                io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-                io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
+                io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest,
+                io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
-              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> invoke(
-                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver) {
                 return serviceImpl.fullBidiCall(responseObserver);
               }
             })))
@@ -332,11 +332,11 @@
           METHOD_HALF_BIDI_CALL,
           asyncBidiStreamingCall(
             new io.grpc.stub.ServerCalls.BidiStreamingMethod<
-                io.grpc.testing.integration.Test.StreamingOutputCallRequest,
-                io.grpc.testing.integration.Test.StreamingOutputCallResponse>() {
+                io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest,
+                io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse>() {
               @java.lang.Override
-              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallRequest> invoke(
-                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.Test.StreamingOutputCallResponse> responseObserver) {
+              public io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallRequest> invoke(
+                  io.grpc.stub.StreamObserver<io.grpc.testing.integration.nano.Test.StreamingOutputCallResponse> responseObserver) {
                 return serviceImpl.halfBidiCall(responseObserver);
               }
             }))).build();