Bump protobuf dependency to 3.0.0-beta-3

This allows us to play with zero-copy and proto3 support for lite.
Unfortunately, it introduced some warnings, so deprecated warnings are
now ignored for benchmarks and interop-testing.
diff --git a/.travis.yml b/.travis.yml
index eed620b..7443fa7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,7 +5,7 @@
 env:
   global:
     - GRADLE_OPTS=-Xmx512m
-    - PROTOBUF_VERSION=3.0.0-beta-2
+    - PROTOBUF_VERSION=3.0.0-beta-3
     - LDFLAGS=-L/tmp/protobuf/lib
     - CXXFLAGS=-I/tmp/protobuf/include
     - LD_LIBRARY_PATH=/tmp/protobuf/lib
diff --git a/COMPILING.md b/COMPILING.md
index 9fd2257..f9cecca 100644
--- a/COMPILING.md
+++ b/COMPILING.md
@@ -27,13 +27,13 @@
 generation. Most users only need to use `skipCodegen=true` as discussed above.
 
 ### Build Protobuf
-The codegen plugin is C++ code and requires protobuf 3.0.0-beta-2.
+The codegen plugin is C++ code and requires protobuf 3.0.0-beta-3.
 
 For Linux, Mac and MinGW:
 ```
 $ git clone https://github.com/google/protobuf.git
 $ cd protobuf
-$ git checkout v3.0.0-beta-2
+$ git checkout v3.0.0-beta-3
 $ ./autogen.sh
 $ ./configure
 $ make
@@ -72,16 +72,16 @@
 Gradle to find protobuf:
 ```
 .\gradlew install ^
-    -PvcProtobufInclude=C:\path\to\protobuf-3.0.0-beta-2\src ^
-    -PvcProtobufLibs=C:\path\to\protobuf-3.0.0-beta-2\vsprojects\Release ^
+    -PvcProtobufInclude=C:\path\to\protobuf-3.0.0-beta-3\src ^
+    -PvcProtobufLibs=C:\path\to\protobuf-3.0.0-beta-3\vsprojects\Release ^
     -PtargetArch=x86_32
 ```
 
 Since specifying those properties every build is bothersome, you can instead
 create ``<project-root>\gradle.properties`` with contents like:
 ```
-vcProtobufInclude=C:\\path\\to\\protobuf-3.0.0-beta-2\\src
-vcProtobufLibs=C:\\path\\to\\protobuf-3.0.0-beta-2\\vsprojects\\Release
+vcProtobufInclude=C:\\path\\to\\protobuf-3.0.0-beta-3\\src
+vcProtobufLibs=C:\\path\\to\\protobuf-3.0.0-beta-3\\vsprojects\\Release
 targetArch=x86_32
 ```
 
diff --git a/android-interop-testing/app/build.gradle b/android-interop-testing/app/build.gradle
index a546020..4e833d8 100644
--- a/android-interop-testing/app/build.gradle
+++ b/android-interop-testing/app/build.gradle
@@ -28,7 +28,7 @@
 
 protobuf {
     protoc {
-        artifact = 'com.google.protobuf:protoc:3.0.0-beta-2'
+        artifact = 'com.google.protobuf:protoc:3.0.0-beta-3'
     }
     plugins {
         grpc {
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Control.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Control.java
index 2bad3bb..81f353b 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Control.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Control.java
@@ -16,12 +16,12 @@
     /**
      * <code>SYNC_CLIENT = 0;</code>
      */
-    SYNC_CLIENT(0, 0),
+    SYNC_CLIENT(0),
     /**
      * <code>ASYNC_CLIENT = 1;</code>
      */
-    ASYNC_CLIENT(1, 1),
-    UNRECOGNIZED(-1, -1),
+    ASYNC_CLIENT(1),
+    UNRECOGNIZED(-1),
     ;
 
     /**
@@ -35,14 +35,22 @@
 
 
     public final int getNumber() {
-      if (index == -1) {
+      if (this == UNRECOGNIZED) {
         throw new java.lang.IllegalArgumentException(
             "Can't get the number of an unknown enum value.");
       }
       return value;
     }
 
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static ClientType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static ClientType forNumber(int value) {
       switch (value) {
         case 0: return SYNC_CLIENT;
         case 1: return ASYNC_CLIENT;
@@ -58,13 +66,13 @@
         ClientType> internalValueMap =
           new com.google.protobuf.Internal.EnumLiteMap<ClientType>() {
             public ClientType findValueByNumber(int number) {
-              return ClientType.valueOf(number);
+              return ClientType.forNumber(number);
             }
           };
 
     public final com.google.protobuf.Descriptors.EnumValueDescriptor
         getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
+      return getDescriptor().getValues().get(ordinal());
     }
     public final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptorForType() {
@@ -89,11 +97,9 @@
       return VALUES[desc.getIndex()];
     }
 
-    private final int index;
     private final int value;
 
-    private ClientType(int index, int value) {
-      this.index = index;
+    private ClientType(int value) {
       this.value = value;
     }
 
@@ -108,16 +114,16 @@
     /**
      * <code>SYNC_SERVER = 0;</code>
      */
-    SYNC_SERVER(0, 0),
+    SYNC_SERVER(0),
     /**
      * <code>ASYNC_SERVER = 1;</code>
      */
-    ASYNC_SERVER(1, 1),
+    ASYNC_SERVER(1),
     /**
      * <code>ASYNC_GENERIC_SERVER = 2;</code>
      */
-    ASYNC_GENERIC_SERVER(2, 2),
-    UNRECOGNIZED(-1, -1),
+    ASYNC_GENERIC_SERVER(2),
+    UNRECOGNIZED(-1),
     ;
 
     /**
@@ -135,14 +141,22 @@
 
 
     public final int getNumber() {
-      if (index == -1) {
+      if (this == UNRECOGNIZED) {
         throw new java.lang.IllegalArgumentException(
             "Can't get the number of an unknown enum value.");
       }
       return value;
     }
 
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static ServerType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static ServerType forNumber(int value) {
       switch (value) {
         case 0: return SYNC_SERVER;
         case 1: return ASYNC_SERVER;
@@ -159,13 +173,13 @@
         ServerType> internalValueMap =
           new com.google.protobuf.Internal.EnumLiteMap<ServerType>() {
             public ServerType findValueByNumber(int number) {
-              return ServerType.valueOf(number);
+              return ServerType.forNumber(number);
             }
           };
 
     public final com.google.protobuf.Descriptors.EnumValueDescriptor
         getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
+      return getDescriptor().getValues().get(ordinal());
     }
     public final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptorForType() {
@@ -190,11 +204,9 @@
       return VALUES[desc.getIndex()];
     }
 
-    private final int index;
     private final int value;
 
-    private ServerType(int index, int value) {
-      this.index = index;
+    private ServerType(int value) {
       this.value = value;
     }
 
@@ -209,12 +221,12 @@
     /**
      * <code>UNARY = 0;</code>
      */
-    UNARY(0, 0),
+    UNARY(0),
     /**
      * <code>STREAMING = 1;</code>
      */
-    STREAMING(1, 1),
-    UNRECOGNIZED(-1, -1),
+    STREAMING(1),
+    UNRECOGNIZED(-1),
     ;
 
     /**
@@ -228,14 +240,22 @@
 
 
     public final int getNumber() {
-      if (index == -1) {
+      if (this == UNRECOGNIZED) {
         throw new java.lang.IllegalArgumentException(
             "Can't get the number of an unknown enum value.");
       }
       return value;
     }
 
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static RpcType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static RpcType forNumber(int value) {
       switch (value) {
         case 0: return UNARY;
         case 1: return STREAMING;
@@ -251,13 +271,13 @@
         RpcType> internalValueMap =
           new com.google.protobuf.Internal.EnumLiteMap<RpcType>() {
             public RpcType findValueByNumber(int number) {
-              return RpcType.valueOf(number);
+              return RpcType.forNumber(number);
             }
           };
 
     public final com.google.protobuf.Descriptors.EnumValueDescriptor
         getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
+      return getDescriptor().getValues().get(ordinal());
     }
     public final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptorForType() {
@@ -282,11 +302,9 @@
       return VALUES[desc.getIndex()];
     }
 
-    private final int index;
     private final int value;
 
-    private RpcType(int index, int value) {
-      this.index = index;
+    private RpcType(int value) {
       this.value = value;
     }
 
@@ -298,21 +316,21 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional double offered_load = 1;</code>
-     *
      * <pre>
      * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
      * </pre>
+     *
+     * <code>optional double offered_load = 1;</code>
      */
     double getOfferedLoad();
   }
   /**
-   * Protobuf type {@code grpc.testing.PoissonParams}
-   *
    * <pre>
    * Parameters of poisson process distribution, which is a good representation
    * of activity coming in from independent identical stationary sources.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.PoissonParams}
    */
   public  static final class PoissonParams extends
       com.google.protobuf.GeneratedMessage implements
@@ -333,7 +351,8 @@
     }
     private PoissonParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -358,11 +377,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -382,11 +400,11 @@
     public static final int OFFERED_LOAD_FIELD_NUMBER = 1;
     private double offeredLoad_;
     /**
-     * <code>optional double offered_load = 1;</code>
-     *
      * <pre>
      * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
      * </pre>
+     *
+     * <code>optional double offered_load = 1;</code>
      */
     public double getOfferedLoad() {
       return offeredLoad_;
@@ -446,34 +464,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.PoissonParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.PoissonParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.PoissonParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.PoissonParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.PoissonParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.PoissonParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -495,12 +519,12 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.PoissonParams}
-     *
      * <pre>
      * Parameters of poisson process distribution, which is a good representation
      * of activity coming in from independent identical stationary sources.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.PoissonParams}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -594,7 +618,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.PoissonParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -605,21 +629,21 @@
 
       private double offeredLoad_ ;
       /**
-       * <code>optional double offered_load = 1;</code>
-       *
        * <pre>
        * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
        * </pre>
+       *
+       * <code>optional double offered_load = 1;</code>
        */
       public double getOfferedLoad() {
         return offeredLoad_;
       }
       /**
-       * <code>optional double offered_load = 1;</code>
-       *
        * <pre>
        * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
        * </pre>
+       *
+       * <code>optional double offered_load = 1;</code>
        */
       public Builder setOfferedLoad(double value) {
         
@@ -628,11 +652,11 @@
         return this;
       }
       /**
-       * <code>optional double offered_load = 1;</code>
-       *
        * <pre>
        * The rate of arrivals (a.k.a. lambda parameter of the exp distribution).
        * </pre>
+       *
+       * <code>optional double offered_load = 1;</code>
        */
       public Builder clearOfferedLoad() {
         
@@ -670,16 +694,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new PoissonParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -735,7 +750,8 @@
     }
     private UniformParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -765,11 +781,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -865,34 +880,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.UniformParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.UniformParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.UniformParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.UniformParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.UniformParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.UniformParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1014,7 +1035,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.UniformParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1104,16 +1125,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new UniformParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1163,7 +1175,8 @@
     }
     private DeterministicParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -1188,11 +1201,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -1272,34 +1284,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.DeterministicParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.DeterministicParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.DeterministicParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.DeterministicParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.DeterministicParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.DeterministicParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1415,7 +1433,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.DeterministicParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1479,16 +1497,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new DeterministicParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1544,7 +1553,8 @@
     }
     private ParetoParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -1574,11 +1584,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -1674,34 +1683,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.ParetoParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ParetoParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ParetoParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ParetoParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ParetoParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ParetoParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1823,7 +1838,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.ParetoParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1913,16 +1928,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ParetoParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1946,12 +1952,12 @@
       com.google.protobuf.MessageOrBuilder {
   }
   /**
-   * Protobuf type {@code grpc.testing.ClosedLoopParams}
-   *
    * <pre>
    * Once an RPC finishes, immediately start a new one.
    * No configuration parameters needed.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.ClosedLoopParams}
    */
   public  static final class ClosedLoopParams extends
       com.google.protobuf.GeneratedMessage implements
@@ -1971,7 +1977,8 @@
     }
     private ClosedLoopParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       try {
         boolean done = false;
@@ -1990,11 +1997,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -2058,34 +2064,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.ClosedLoopParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClosedLoopParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ClosedLoopParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClosedLoopParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ClosedLoopParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClosedLoopParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -2107,12 +2119,12 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.ClosedLoopParams}
-     *
      * <pre>
      * Once an RPC finishes, immediately start a new one.
      * No configuration parameters needed.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.ClosedLoopParams}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -2200,7 +2212,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.ClosedLoopParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -2238,16 +2250,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ClosedLoopParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -2338,7 +2341,8 @@
     }
     private LoadParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -2428,11 +2432,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -2459,11 +2462,19 @@
       DETERM(4),
       PARETO(5),
       LOAD_NOT_SET(0);
-      private int value = 0;
+      private final int value;
       private LoadCase(int value) {
         this.value = value;
       }
+      /**
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
       public static LoadCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static LoadCase forNumber(int value) {
         switch (value) {
           case 1: return CLOSED_LOOP;
           case 2: return POISSON;
@@ -2471,8 +2482,7 @@
           case 4: return DETERM;
           case 5: return PARETO;
           case 0: return LOAD_NOT_SET;
-          default: throw new java.lang.IllegalArgumentException(
-            "Value is undefined for this oneof enum.");
+          default: return null;
         }
       }
       public int getNumber() {
@@ -2482,7 +2492,7 @@
 
     public LoadCase
     getLoadCase() {
-      return LoadCase.valueOf(
+      return LoadCase.forNumber(
           loadCase_);
     }
 
@@ -2668,34 +2678,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.LoadParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.LoadParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.LoadParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.LoadParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.LoadParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.LoadParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -2868,7 +2884,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.LoadParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -2880,7 +2896,7 @@
       private java.lang.Object load_;
       public LoadCase
           getLoadCase() {
-        return LoadCase.valueOf(
+        return LoadCase.forNumber(
             loadCase_);
       }
 
@@ -3571,16 +3587,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new LoadParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -3619,11 +3626,11 @@
         getServerHostOverrideBytes();
   }
   /**
-   * Protobuf type {@code grpc.testing.SecurityParams}
-   *
    * <pre>
    * presence of SecurityParams implies use of TLS
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.SecurityParams}
    */
   public  static final class SecurityParams extends
       com.google.protobuf.GeneratedMessage implements
@@ -3645,7 +3652,8 @@
     }
     private SecurityParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -3676,11 +3684,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -3800,34 +3807,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.SecurityParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.SecurityParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.SecurityParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.SecurityParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.SecurityParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.SecurityParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -3849,11 +3862,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.SecurityParams}
-     *
      * <pre>
      * presence of SecurityParams implies use of TLS
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.SecurityParams}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -3954,7 +3967,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.SecurityParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -4087,16 +4100,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new SecurityParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -4120,36 +4124,36 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated string server_targets = 1;</code>
-     *
      * <pre>
      * List of targets to connect to. At least one target needs to be specified.
      * </pre>
+     *
+     * <code>repeated string server_targets = 1;</code>
      */
     com.google.protobuf.ProtocolStringList
         getServerTargetsList();
     /**
-     * <code>repeated string server_targets = 1;</code>
-     *
      * <pre>
      * List of targets to connect to. At least one target needs to be specified.
      * </pre>
+     *
+     * <code>repeated string server_targets = 1;</code>
      */
     int getServerTargetsCount();
     /**
-     * <code>repeated string server_targets = 1;</code>
-     *
      * <pre>
      * List of targets to connect to. At least one target needs to be specified.
      * </pre>
+     *
+     * <code>repeated string server_targets = 1;</code>
      */
     java.lang.String getServerTargets(int index);
     /**
-     * <code>repeated string server_targets = 1;</code>
-     *
      * <pre>
      * List of targets to connect to. At least one target needs to be specified.
      * </pre>
+     *
+     * <code>repeated string server_targets = 1;</code>
      */
     com.google.protobuf.ByteString
         getServerTargetsBytes(int index);
@@ -4177,31 +4181,31 @@
     io.grpc.benchmarks.proto.Control.SecurityParamsOrBuilder getSecurityParamsOrBuilder();
 
     /**
-     * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
-     *
      * <pre>
      * How many concurrent RPCs to start for each channel.
      * For synchronous client, use a separate thread for each outstanding RPC.
      * </pre>
+     *
+     * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
      */
     int getOutstandingRpcsPerChannel();
 
     /**
-     * <code>optional int32 client_channels = 5;</code>
-     *
      * <pre>
      * Number of independent client channels to create.
      * i-th channel will connect to server_target[i % server_targets.size()]
      * </pre>
+     *
+     * <code>optional int32 client_channels = 5;</code>
      */
     int getClientChannels();
 
     /**
-     * <code>optional int32 async_client_threads = 7;</code>
-     *
      * <pre>
      * Only for async client. Number of threads to use to start/manage RPCs.
      * </pre>
+     *
+     * <code>optional int32 async_client_threads = 7;</code>
      */
     int getAsyncClientThreads();
 
@@ -4215,27 +4219,27 @@
     io.grpc.benchmarks.proto.Control.RpcType getRpcType();
 
     /**
-     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-     *
      * <pre>
      * The requested load for the entire client (aggregated over all the threads).
      * </pre>
+     *
+     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
      */
     boolean hasLoadParams();
     /**
-     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-     *
      * <pre>
      * The requested load for the entire client (aggregated over all the threads).
      * </pre>
+     *
+     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
      */
     io.grpc.benchmarks.proto.Control.LoadParams getLoadParams();
     /**
-     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-     *
      * <pre>
      * The requested load for the entire client (aggregated over all the threads).
      * </pre>
+     *
+     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
      */
     io.grpc.benchmarks.proto.Control.LoadParamsOrBuilder getLoadParamsOrBuilder();
 
@@ -4266,27 +4270,27 @@
     io.grpc.benchmarks.proto.Stats.HistogramParamsOrBuilder getHistogramParamsOrBuilder();
 
     /**
-     * <code>repeated int32 core_list = 13;</code>
-     *
      * <pre>
      * Specify the cores we should run the client on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 13;</code>
      */
     java.util.List<java.lang.Integer> getCoreListList();
     /**
-     * <code>repeated int32 core_list = 13;</code>
-     *
      * <pre>
      * Specify the cores we should run the client on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 13;</code>
      */
     int getCoreListCount();
     /**
-     * <code>repeated int32 core_list = 13;</code>
-     *
      * <pre>
      * Specify the cores we should run the client on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 13;</code>
      */
     int getCoreList(int index);
 
@@ -4324,7 +4328,8 @@
     }
     private ClientConfig(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -4458,11 +4463,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
           serverTargets_ = serverTargets_.getUnmodifiableView();
@@ -4489,42 +4493,42 @@
     public static final int SERVER_TARGETS_FIELD_NUMBER = 1;
     private com.google.protobuf.LazyStringList serverTargets_;
     /**
-     * <code>repeated string server_targets = 1;</code>
-     *
      * <pre>
      * List of targets to connect to. At least one target needs to be specified.
      * </pre>
+     *
+     * <code>repeated string server_targets = 1;</code>
      */
     public com.google.protobuf.ProtocolStringList
         getServerTargetsList() {
       return serverTargets_;
     }
     /**
-     * <code>repeated string server_targets = 1;</code>
-     *
      * <pre>
      * List of targets to connect to. At least one target needs to be specified.
      * </pre>
+     *
+     * <code>repeated string server_targets = 1;</code>
      */
     public int getServerTargetsCount() {
       return serverTargets_.size();
     }
     /**
-     * <code>repeated string server_targets = 1;</code>
-     *
      * <pre>
      * List of targets to connect to. At least one target needs to be specified.
      * </pre>
+     *
+     * <code>repeated string server_targets = 1;</code>
      */
     public java.lang.String getServerTargets(int index) {
       return serverTargets_.get(index);
     }
     /**
-     * <code>repeated string server_targets = 1;</code>
-     *
      * <pre>
      * List of targets to connect to. At least one target needs to be specified.
      * </pre>
+     *
+     * <code>repeated string server_targets = 1;</code>
      */
     public com.google.protobuf.ByteString
         getServerTargetsBytes(int index) {
@@ -4543,7 +4547,7 @@
      * <code>optional .grpc.testing.ClientType client_type = 2;</code>
      */
     public io.grpc.benchmarks.proto.Control.ClientType getClientType() {
-      io.grpc.benchmarks.proto.Control.ClientType result = io.grpc.benchmarks.proto.Control.ClientType.valueOf(clientType_);
+      io.grpc.benchmarks.proto.Control.ClientType result = io.grpc.benchmarks.proto.Control.ClientType.forNumber(clientType_);
       return result == null ? io.grpc.benchmarks.proto.Control.ClientType.UNRECOGNIZED : result;
     }
 
@@ -4571,12 +4575,12 @@
     public static final int OUTSTANDING_RPCS_PER_CHANNEL_FIELD_NUMBER = 4;
     private int outstandingRpcsPerChannel_;
     /**
-     * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
-     *
      * <pre>
      * How many concurrent RPCs to start for each channel.
      * For synchronous client, use a separate thread for each outstanding RPC.
      * </pre>
+     *
+     * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
      */
     public int getOutstandingRpcsPerChannel() {
       return outstandingRpcsPerChannel_;
@@ -4585,12 +4589,12 @@
     public static final int CLIENT_CHANNELS_FIELD_NUMBER = 5;
     private int clientChannels_;
     /**
-     * <code>optional int32 client_channels = 5;</code>
-     *
      * <pre>
      * Number of independent client channels to create.
      * i-th channel will connect to server_target[i % server_targets.size()]
      * </pre>
+     *
+     * <code>optional int32 client_channels = 5;</code>
      */
     public int getClientChannels() {
       return clientChannels_;
@@ -4599,11 +4603,11 @@
     public static final int ASYNC_CLIENT_THREADS_FIELD_NUMBER = 7;
     private int asyncClientThreads_;
     /**
-     * <code>optional int32 async_client_threads = 7;</code>
-     *
      * <pre>
      * Only for async client. Number of threads to use to start/manage RPCs.
      * </pre>
+     *
+     * <code>optional int32 async_client_threads = 7;</code>
      */
     public int getAsyncClientThreads() {
       return asyncClientThreads_;
@@ -4621,38 +4625,38 @@
      * <code>optional .grpc.testing.RpcType rpc_type = 8;</code>
      */
     public io.grpc.benchmarks.proto.Control.RpcType getRpcType() {
-      io.grpc.benchmarks.proto.Control.RpcType result = io.grpc.benchmarks.proto.Control.RpcType.valueOf(rpcType_);
+      io.grpc.benchmarks.proto.Control.RpcType result = io.grpc.benchmarks.proto.Control.RpcType.forNumber(rpcType_);
       return result == null ? io.grpc.benchmarks.proto.Control.RpcType.UNRECOGNIZED : result;
     }
 
     public static final int LOAD_PARAMS_FIELD_NUMBER = 10;
     private io.grpc.benchmarks.proto.Control.LoadParams loadParams_;
     /**
-     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-     *
      * <pre>
      * The requested load for the entire client (aggregated over all the threads).
      * </pre>
+     *
+     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
      */
     public boolean hasLoadParams() {
       return loadParams_ != null;
     }
     /**
-     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-     *
      * <pre>
      * The requested load for the entire client (aggregated over all the threads).
      * </pre>
+     *
+     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
      */
     public io.grpc.benchmarks.proto.Control.LoadParams getLoadParams() {
       return loadParams_ == null ? io.grpc.benchmarks.proto.Control.LoadParams.getDefaultInstance() : loadParams_;
     }
     /**
-     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-     *
      * <pre>
      * The requested load for the entire client (aggregated over all the threads).
      * </pre>
+     *
+     * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
      */
     public io.grpc.benchmarks.proto.Control.LoadParamsOrBuilder getLoadParamsOrBuilder() {
       return getLoadParams();
@@ -4703,32 +4707,32 @@
     public static final int CORE_LIST_FIELD_NUMBER = 13;
     private java.util.List<java.lang.Integer> coreList_;
     /**
-     * <code>repeated int32 core_list = 13;</code>
-     *
      * <pre>
      * Specify the cores we should run the client on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 13;</code>
      */
     public java.util.List<java.lang.Integer>
         getCoreListList() {
       return coreList_;
     }
     /**
-     * <code>repeated int32 core_list = 13;</code>
-     *
      * <pre>
      * Specify the cores we should run the client on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 13;</code>
      */
     public int getCoreListCount() {
       return coreList_.size();
     }
     /**
-     * <code>repeated int32 core_list = 13;</code>
-     *
      * <pre>
      * Specify the cores we should run the client on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 13;</code>
      */
     public int getCoreList(int index) {
       return coreList_.get(index);
@@ -4894,34 +4898,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.ClientConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ClientConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ClientConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -5160,7 +5170,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.ClientConfig) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -5178,53 +5188,53 @@
          }
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public com.google.protobuf.ProtocolStringList
           getServerTargetsList() {
         return serverTargets_.getUnmodifiableView();
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public int getServerTargetsCount() {
         return serverTargets_.size();
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public java.lang.String getServerTargets(int index) {
         return serverTargets_.get(index);
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public com.google.protobuf.ByteString
           getServerTargetsBytes(int index) {
         return serverTargets_.getByteString(index);
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public Builder setServerTargets(
           int index, java.lang.String value) {
@@ -5237,11 +5247,11 @@
         return this;
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public Builder addServerTargets(
           java.lang.String value) {
@@ -5254,11 +5264,11 @@
         return this;
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public Builder addAllServerTargets(
           java.lang.Iterable<java.lang.String> values) {
@@ -5269,11 +5279,11 @@
         return this;
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public Builder clearServerTargets() {
         serverTargets_ = com.google.protobuf.LazyStringArrayList.EMPTY;
@@ -5282,11 +5292,11 @@
         return this;
       }
       /**
-       * <code>repeated string server_targets = 1;</code>
-       *
        * <pre>
        * List of targets to connect to. At least one target needs to be specified.
        * </pre>
+       *
+       * <code>repeated string server_targets = 1;</code>
        */
       public Builder addServerTargetsBytes(
           com.google.protobuf.ByteString value) {
@@ -5319,7 +5329,7 @@
        * <code>optional .grpc.testing.ClientType client_type = 2;</code>
        */
       public io.grpc.benchmarks.proto.Control.ClientType getClientType() {
-        io.grpc.benchmarks.proto.Control.ClientType result = io.grpc.benchmarks.proto.Control.ClientType.valueOf(clientType_);
+        io.grpc.benchmarks.proto.Control.ClientType result = io.grpc.benchmarks.proto.Control.ClientType.forNumber(clientType_);
         return result == null ? io.grpc.benchmarks.proto.Control.ClientType.UNRECOGNIZED : result;
       }
       /**
@@ -5463,23 +5473,23 @@
 
       private int outstandingRpcsPerChannel_ ;
       /**
-       * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
-       *
        * <pre>
        * How many concurrent RPCs to start for each channel.
        * For synchronous client, use a separate thread for each outstanding RPC.
        * </pre>
+       *
+       * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
        */
       public int getOutstandingRpcsPerChannel() {
         return outstandingRpcsPerChannel_;
       }
       /**
-       * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
-       *
        * <pre>
        * How many concurrent RPCs to start for each channel.
        * For synchronous client, use a separate thread for each outstanding RPC.
        * </pre>
+       *
+       * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
        */
       public Builder setOutstandingRpcsPerChannel(int value) {
         
@@ -5488,12 +5498,12 @@
         return this;
       }
       /**
-       * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
-       *
        * <pre>
        * How many concurrent RPCs to start for each channel.
        * For synchronous client, use a separate thread for each outstanding RPC.
        * </pre>
+       *
+       * <code>optional int32 outstanding_rpcs_per_channel = 4;</code>
        */
       public Builder clearOutstandingRpcsPerChannel() {
         
@@ -5504,23 +5514,23 @@
 
       private int clientChannels_ ;
       /**
-       * <code>optional int32 client_channels = 5;</code>
-       *
        * <pre>
        * Number of independent client channels to create.
        * i-th channel will connect to server_target[i % server_targets.size()]
        * </pre>
+       *
+       * <code>optional int32 client_channels = 5;</code>
        */
       public int getClientChannels() {
         return clientChannels_;
       }
       /**
-       * <code>optional int32 client_channels = 5;</code>
-       *
        * <pre>
        * Number of independent client channels to create.
        * i-th channel will connect to server_target[i % server_targets.size()]
        * </pre>
+       *
+       * <code>optional int32 client_channels = 5;</code>
        */
       public Builder setClientChannels(int value) {
         
@@ -5529,12 +5539,12 @@
         return this;
       }
       /**
-       * <code>optional int32 client_channels = 5;</code>
-       *
        * <pre>
        * Number of independent client channels to create.
        * i-th channel will connect to server_target[i % server_targets.size()]
        * </pre>
+       *
+       * <code>optional int32 client_channels = 5;</code>
        */
       public Builder clearClientChannels() {
         
@@ -5545,21 +5555,21 @@
 
       private int asyncClientThreads_ ;
       /**
-       * <code>optional int32 async_client_threads = 7;</code>
-       *
        * <pre>
        * Only for async client. Number of threads to use to start/manage RPCs.
        * </pre>
+       *
+       * <code>optional int32 async_client_threads = 7;</code>
        */
       public int getAsyncClientThreads() {
         return asyncClientThreads_;
       }
       /**
-       * <code>optional int32 async_client_threads = 7;</code>
-       *
        * <pre>
        * Only for async client. Number of threads to use to start/manage RPCs.
        * </pre>
+       *
+       * <code>optional int32 async_client_threads = 7;</code>
        */
       public Builder setAsyncClientThreads(int value) {
         
@@ -5568,11 +5578,11 @@
         return this;
       }
       /**
-       * <code>optional int32 async_client_threads = 7;</code>
-       *
        * <pre>
        * Only for async client. Number of threads to use to start/manage RPCs.
        * </pre>
+       *
+       * <code>optional int32 async_client_threads = 7;</code>
        */
       public Builder clearAsyncClientThreads() {
         
@@ -5600,7 +5610,7 @@
        * <code>optional .grpc.testing.RpcType rpc_type = 8;</code>
        */
       public io.grpc.benchmarks.proto.Control.RpcType getRpcType() {
-        io.grpc.benchmarks.proto.Control.RpcType result = io.grpc.benchmarks.proto.Control.RpcType.valueOf(rpcType_);
+        io.grpc.benchmarks.proto.Control.RpcType result = io.grpc.benchmarks.proto.Control.RpcType.forNumber(rpcType_);
         return result == null ? io.grpc.benchmarks.proto.Control.RpcType.UNRECOGNIZED : result;
       }
       /**
@@ -5629,21 +5639,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Control.LoadParams, io.grpc.benchmarks.proto.Control.LoadParams.Builder, io.grpc.benchmarks.proto.Control.LoadParamsOrBuilder> loadParamsBuilder_;
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       public boolean hasLoadParams() {
         return loadParamsBuilder_ != null || loadParams_ != null;
       }
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       public io.grpc.benchmarks.proto.Control.LoadParams getLoadParams() {
         if (loadParamsBuilder_ == null) {
@@ -5653,11 +5663,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       public Builder setLoadParams(io.grpc.benchmarks.proto.Control.LoadParams value) {
         if (loadParamsBuilder_ == null) {
@@ -5673,11 +5683,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       public Builder setLoadParams(
           io.grpc.benchmarks.proto.Control.LoadParams.Builder builderForValue) {
@@ -5691,11 +5701,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       public Builder mergeLoadParams(io.grpc.benchmarks.proto.Control.LoadParams value) {
         if (loadParamsBuilder_ == null) {
@@ -5713,11 +5723,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       public Builder clearLoadParams() {
         if (loadParamsBuilder_ == null) {
@@ -5731,11 +5741,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       public io.grpc.benchmarks.proto.Control.LoadParams.Builder getLoadParamsBuilder() {
         
@@ -5743,11 +5753,11 @@
         return getLoadParamsFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       public io.grpc.benchmarks.proto.Control.LoadParamsOrBuilder getLoadParamsOrBuilder() {
         if (loadParamsBuilder_ != null) {
@@ -5758,11 +5768,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
-       *
        * <pre>
        * The requested load for the entire client (aggregated over all the threads).
        * </pre>
+       *
+       * <code>optional .grpc.testing.LoadParams load_params = 10;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Control.LoadParams, io.grpc.benchmarks.proto.Control.LoadParams.Builder, io.grpc.benchmarks.proto.Control.LoadParamsOrBuilder> 
@@ -6020,42 +6030,42 @@
          }
       }
       /**
-       * <code>repeated int32 core_list = 13;</code>
-       *
        * <pre>
        * Specify the cores we should run the client on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 13;</code>
        */
       public java.util.List<java.lang.Integer>
           getCoreListList() {
         return java.util.Collections.unmodifiableList(coreList_);
       }
       /**
-       * <code>repeated int32 core_list = 13;</code>
-       *
        * <pre>
        * Specify the cores we should run the client on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 13;</code>
        */
       public int getCoreListCount() {
         return coreList_.size();
       }
       /**
-       * <code>repeated int32 core_list = 13;</code>
-       *
        * <pre>
        * Specify the cores we should run the client on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 13;</code>
        */
       public int getCoreList(int index) {
         return coreList_.get(index);
       }
       /**
-       * <code>repeated int32 core_list = 13;</code>
-       *
        * <pre>
        * Specify the cores we should run the client on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 13;</code>
        */
       public Builder setCoreList(
           int index, int value) {
@@ -6065,11 +6075,11 @@
         return this;
       }
       /**
-       * <code>repeated int32 core_list = 13;</code>
-       *
        * <pre>
        * Specify the cores we should run the client on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 13;</code>
        */
       public Builder addCoreList(int value) {
         ensureCoreListIsMutable();
@@ -6078,11 +6088,11 @@
         return this;
       }
       /**
-       * <code>repeated int32 core_list = 13;</code>
-       *
        * <pre>
        * Specify the cores we should run the client on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 13;</code>
        */
       public Builder addAllCoreList(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -6093,11 +6103,11 @@
         return this;
       }
       /**
-       * <code>repeated int32 core_list = 13;</code>
-       *
        * <pre>
        * Specify the cores we should run the client on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 13;</code>
        */
       public Builder clearCoreList() {
         coreList_ = java.util.Collections.emptyList();
@@ -6161,16 +6171,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ClientConfig(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -6227,7 +6228,8 @@
     }
     private ClientStatus(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -6260,11 +6262,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -6356,34 +6357,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.ClientStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientStatus parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ClientStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientStatus parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ClientStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -6507,7 +6514,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.ClientStatus) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -6662,16 +6669,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ClientStatus(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -6695,20 +6693,20 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional bool reset = 1;</code>
-     *
      * <pre>
      * if true, the stats will be reset after taking their snapshot.
      * </pre>
+     *
+     * <code>optional bool reset = 1;</code>
      */
     boolean getReset();
   }
   /**
-   * Protobuf type {@code grpc.testing.Mark}
-   *
    * <pre>
    * Request current stats
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.Mark}
    */
   public  static final class Mark extends
       com.google.protobuf.GeneratedMessage implements
@@ -6729,7 +6727,8 @@
     }
     private Mark(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -6754,11 +6753,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -6778,11 +6776,11 @@
     public static final int RESET_FIELD_NUMBER = 1;
     private boolean reset_;
     /**
-     * <code>optional bool reset = 1;</code>
-     *
      * <pre>
      * if true, the stats will be reset after taking their snapshot.
      * </pre>
+     *
+     * <code>optional bool reset = 1;</code>
      */
     public boolean getReset() {
       return reset_;
@@ -6842,34 +6840,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.Mark parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.Mark parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.Mark parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.Mark parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.Mark parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.Mark parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -6891,11 +6895,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.Mark}
-     *
      * <pre>
      * Request current stats
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.Mark}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -6989,7 +6993,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.Mark) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -7000,21 +7004,21 @@
 
       private boolean reset_ ;
       /**
-       * <code>optional bool reset = 1;</code>
-       *
        * <pre>
        * if true, the stats will be reset after taking their snapshot.
        * </pre>
+       *
+       * <code>optional bool reset = 1;</code>
        */
       public boolean getReset() {
         return reset_;
       }
       /**
-       * <code>optional bool reset = 1;</code>
-       *
        * <pre>
        * if true, the stats will be reset after taking their snapshot.
        * </pre>
+       *
+       * <code>optional bool reset = 1;</code>
        */
       public Builder setReset(boolean value) {
         
@@ -7023,11 +7027,11 @@
         return this;
       }
       /**
-       * <code>optional bool reset = 1;</code>
-       *
        * <pre>
        * if true, the stats will be reset after taking their snapshot.
        * </pre>
+       *
+       * <code>optional bool reset = 1;</code>
        */
       public Builder clearReset() {
         
@@ -7065,16 +7069,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new Mark(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -7138,7 +7133,8 @@
     }
     private ClientArgs(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -7186,11 +7182,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -7214,17 +7209,24 @@
       SETUP(1),
       MARK(2),
       ARGTYPE_NOT_SET(0);
-      private int value = 0;
+      private final int value;
       private ArgtypeCase(int value) {
         this.value = value;
       }
+      /**
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
       public static ArgtypeCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ArgtypeCase forNumber(int value) {
         switch (value) {
           case 1: return SETUP;
           case 2: return MARK;
           case 0: return ARGTYPE_NOT_SET;
-          default: throw new java.lang.IllegalArgumentException(
-            "Value is undefined for this oneof enum.");
+          default: return null;
         }
       }
       public int getNumber() {
@@ -7234,7 +7236,7 @@
 
     public ArgtypeCase
     getArgtypeCase() {
-      return ArgtypeCase.valueOf(
+      return ArgtypeCase.forNumber(
           argtypeCase_);
     }
 
@@ -7339,34 +7341,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.ClientArgs parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientArgs parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ClientArgs parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientArgs parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ClientArgs parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ClientArgs parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -7506,7 +7514,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.ClientArgs) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -7518,7 +7526,7 @@
       private java.lang.Object argtype_;
       public ArgtypeCase
           getArgtypeCase() {
-        return ArgtypeCase.valueOf(
+        return ArgtypeCase.forNumber(
             argtypeCase_);
       }
 
@@ -7819,16 +7827,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ClientArgs(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -7874,79 +7873,79 @@
     io.grpc.benchmarks.proto.Control.SecurityParamsOrBuilder getSecurityParamsOrBuilder();
 
     /**
-     * <code>optional int32 port = 4;</code>
-     *
      * <pre>
      * Port on which to listen. Zero means pick unused port.
      * </pre>
+     *
+     * <code>optional int32 port = 4;</code>
      */
     int getPort();
 
     /**
-     * <code>optional int32 async_server_threads = 7;</code>
-     *
      * <pre>
      * Only for async server. Number of threads used to serve the requests.
      * </pre>
+     *
+     * <code>optional int32 async_server_threads = 7;</code>
      */
     int getAsyncServerThreads();
 
     /**
-     * <code>optional int32 core_limit = 8;</code>
-     *
      * <pre>
      * Specify the number of cores to limit server to, if desired
      * </pre>
+     *
+     * <code>optional int32 core_limit = 8;</code>
      */
     int getCoreLimit();
 
     /**
-     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-     *
      * <pre>
      * payload config, used in generic server
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
      */
     boolean hasPayloadConfig();
     /**
-     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-     *
      * <pre>
      * payload config, used in generic server
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
      */
     io.grpc.benchmarks.proto.Payloads.PayloadConfig getPayloadConfig();
     /**
-     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-     *
      * <pre>
      * payload config, used in generic server
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
      */
     io.grpc.benchmarks.proto.Payloads.PayloadConfigOrBuilder getPayloadConfigOrBuilder();
 
     /**
-     * <code>repeated int32 core_list = 10;</code>
-     *
      * <pre>
      * Specify the cores we should run the server on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 10;</code>
      */
     java.util.List<java.lang.Integer> getCoreListList();
     /**
-     * <code>repeated int32 core_list = 10;</code>
-     *
      * <pre>
      * Specify the cores we should run the server on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 10;</code>
      */
     int getCoreListCount();
     /**
-     * <code>repeated int32 core_list = 10;</code>
-     *
      * <pre>
      * Specify the cores we should run the server on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 10;</code>
      */
     int getCoreList(int index);
   }
@@ -7976,7 +7975,8 @@
     }
     private ServerConfig(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -8064,11 +8064,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000040) == 0x00000040)) {
           coreList_ = java.util.Collections.unmodifiableList(coreList_);
@@ -8101,7 +8100,7 @@
      * <code>optional .grpc.testing.ServerType server_type = 1;</code>
      */
     public io.grpc.benchmarks.proto.Control.ServerType getServerType() {
-      io.grpc.benchmarks.proto.Control.ServerType result = io.grpc.benchmarks.proto.Control.ServerType.valueOf(serverType_);
+      io.grpc.benchmarks.proto.Control.ServerType result = io.grpc.benchmarks.proto.Control.ServerType.forNumber(serverType_);
       return result == null ? io.grpc.benchmarks.proto.Control.ServerType.UNRECOGNIZED : result;
     }
 
@@ -8129,11 +8128,11 @@
     public static final int PORT_FIELD_NUMBER = 4;
     private int port_;
     /**
-     * <code>optional int32 port = 4;</code>
-     *
      * <pre>
      * Port on which to listen. Zero means pick unused port.
      * </pre>
+     *
+     * <code>optional int32 port = 4;</code>
      */
     public int getPort() {
       return port_;
@@ -8142,11 +8141,11 @@
     public static final int ASYNC_SERVER_THREADS_FIELD_NUMBER = 7;
     private int asyncServerThreads_;
     /**
-     * <code>optional int32 async_server_threads = 7;</code>
-     *
      * <pre>
      * Only for async server. Number of threads used to serve the requests.
      * </pre>
+     *
+     * <code>optional int32 async_server_threads = 7;</code>
      */
     public int getAsyncServerThreads() {
       return asyncServerThreads_;
@@ -8155,11 +8154,11 @@
     public static final int CORE_LIMIT_FIELD_NUMBER = 8;
     private int coreLimit_;
     /**
-     * <code>optional int32 core_limit = 8;</code>
-     *
      * <pre>
      * Specify the number of cores to limit server to, if desired
      * </pre>
+     *
+     * <code>optional int32 core_limit = 8;</code>
      */
     public int getCoreLimit() {
       return coreLimit_;
@@ -8168,31 +8167,31 @@
     public static final int PAYLOAD_CONFIG_FIELD_NUMBER = 9;
     private io.grpc.benchmarks.proto.Payloads.PayloadConfig payloadConfig_;
     /**
-     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-     *
      * <pre>
      * payload config, used in generic server
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
      */
     public boolean hasPayloadConfig() {
       return payloadConfig_ != null;
     }
     /**
-     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-     *
      * <pre>
      * payload config, used in generic server
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
      */
     public io.grpc.benchmarks.proto.Payloads.PayloadConfig getPayloadConfig() {
       return payloadConfig_ == null ? io.grpc.benchmarks.proto.Payloads.PayloadConfig.getDefaultInstance() : payloadConfig_;
     }
     /**
-     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-     *
      * <pre>
      * payload config, used in generic server
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
      */
     public io.grpc.benchmarks.proto.Payloads.PayloadConfigOrBuilder getPayloadConfigOrBuilder() {
       return getPayloadConfig();
@@ -8201,32 +8200,32 @@
     public static final int CORE_LIST_FIELD_NUMBER = 10;
     private java.util.List<java.lang.Integer> coreList_;
     /**
-     * <code>repeated int32 core_list = 10;</code>
-     *
      * <pre>
      * Specify the cores we should run the server on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 10;</code>
      */
     public java.util.List<java.lang.Integer>
         getCoreListList() {
       return coreList_;
     }
     /**
-     * <code>repeated int32 core_list = 10;</code>
-     *
      * <pre>
      * Specify the cores we should run the server on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 10;</code>
      */
     public int getCoreListCount() {
       return coreList_.size();
     }
     /**
-     * <code>repeated int32 core_list = 10;</code>
-     *
      * <pre>
      * Specify the cores we should run the server on, if desired
      * </pre>
+     *
+     * <code>repeated int32 core_list = 10;</code>
      */
     public int getCoreList(int index) {
       return coreList_.get(index);
@@ -8344,34 +8343,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.ServerConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ServerConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ServerConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -8553,7 +8558,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.ServerConfig) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -8582,7 +8587,7 @@
        * <code>optional .grpc.testing.ServerType server_type = 1;</code>
        */
       public io.grpc.benchmarks.proto.Control.ServerType getServerType() {
-        io.grpc.benchmarks.proto.Control.ServerType result = io.grpc.benchmarks.proto.Control.ServerType.valueOf(serverType_);
+        io.grpc.benchmarks.proto.Control.ServerType result = io.grpc.benchmarks.proto.Control.ServerType.forNumber(serverType_);
         return result == null ? io.grpc.benchmarks.proto.Control.ServerType.UNRECOGNIZED : result;
       }
       /**
@@ -8726,21 +8731,21 @@
 
       private int port_ ;
       /**
-       * <code>optional int32 port = 4;</code>
-       *
        * <pre>
        * Port on which to listen. Zero means pick unused port.
        * </pre>
+       *
+       * <code>optional int32 port = 4;</code>
        */
       public int getPort() {
         return port_;
       }
       /**
-       * <code>optional int32 port = 4;</code>
-       *
        * <pre>
        * Port on which to listen. Zero means pick unused port.
        * </pre>
+       *
+       * <code>optional int32 port = 4;</code>
        */
       public Builder setPort(int value) {
         
@@ -8749,11 +8754,11 @@
         return this;
       }
       /**
-       * <code>optional int32 port = 4;</code>
-       *
        * <pre>
        * Port on which to listen. Zero means pick unused port.
        * </pre>
+       *
+       * <code>optional int32 port = 4;</code>
        */
       public Builder clearPort() {
         
@@ -8764,21 +8769,21 @@
 
       private int asyncServerThreads_ ;
       /**
-       * <code>optional int32 async_server_threads = 7;</code>
-       *
        * <pre>
        * Only for async server. Number of threads used to serve the requests.
        * </pre>
+       *
+       * <code>optional int32 async_server_threads = 7;</code>
        */
       public int getAsyncServerThreads() {
         return asyncServerThreads_;
       }
       /**
-       * <code>optional int32 async_server_threads = 7;</code>
-       *
        * <pre>
        * Only for async server. Number of threads used to serve the requests.
        * </pre>
+       *
+       * <code>optional int32 async_server_threads = 7;</code>
        */
       public Builder setAsyncServerThreads(int value) {
         
@@ -8787,11 +8792,11 @@
         return this;
       }
       /**
-       * <code>optional int32 async_server_threads = 7;</code>
-       *
        * <pre>
        * Only for async server. Number of threads used to serve the requests.
        * </pre>
+       *
+       * <code>optional int32 async_server_threads = 7;</code>
        */
       public Builder clearAsyncServerThreads() {
         
@@ -8802,21 +8807,21 @@
 
       private int coreLimit_ ;
       /**
-       * <code>optional int32 core_limit = 8;</code>
-       *
        * <pre>
        * Specify the number of cores to limit server to, if desired
        * </pre>
+       *
+       * <code>optional int32 core_limit = 8;</code>
        */
       public int getCoreLimit() {
         return coreLimit_;
       }
       /**
-       * <code>optional int32 core_limit = 8;</code>
-       *
        * <pre>
        * Specify the number of cores to limit server to, if desired
        * </pre>
+       *
+       * <code>optional int32 core_limit = 8;</code>
        */
       public Builder setCoreLimit(int value) {
         
@@ -8825,11 +8830,11 @@
         return this;
       }
       /**
-       * <code>optional int32 core_limit = 8;</code>
-       *
        * <pre>
        * Specify the number of cores to limit server to, if desired
        * </pre>
+       *
+       * <code>optional int32 core_limit = 8;</code>
        */
       public Builder clearCoreLimit() {
         
@@ -8842,21 +8847,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Payloads.PayloadConfig, io.grpc.benchmarks.proto.Payloads.PayloadConfig.Builder, io.grpc.benchmarks.proto.Payloads.PayloadConfigOrBuilder> payloadConfigBuilder_;
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       public boolean hasPayloadConfig() {
         return payloadConfigBuilder_ != null || payloadConfig_ != null;
       }
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       public io.grpc.benchmarks.proto.Payloads.PayloadConfig getPayloadConfig() {
         if (payloadConfigBuilder_ == null) {
@@ -8866,11 +8871,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       public Builder setPayloadConfig(io.grpc.benchmarks.proto.Payloads.PayloadConfig value) {
         if (payloadConfigBuilder_ == null) {
@@ -8886,11 +8891,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       public Builder setPayloadConfig(
           io.grpc.benchmarks.proto.Payloads.PayloadConfig.Builder builderForValue) {
@@ -8904,11 +8909,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       public Builder mergePayloadConfig(io.grpc.benchmarks.proto.Payloads.PayloadConfig value) {
         if (payloadConfigBuilder_ == null) {
@@ -8926,11 +8931,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       public Builder clearPayloadConfig() {
         if (payloadConfigBuilder_ == null) {
@@ -8944,11 +8949,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       public io.grpc.benchmarks.proto.Payloads.PayloadConfig.Builder getPayloadConfigBuilder() {
         
@@ -8956,11 +8961,11 @@
         return getPayloadConfigFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       public io.grpc.benchmarks.proto.Payloads.PayloadConfigOrBuilder getPayloadConfigOrBuilder() {
         if (payloadConfigBuilder_ != null) {
@@ -8971,11 +8976,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
-       *
        * <pre>
        * payload config, used in generic server
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadConfig payload_config = 9;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Payloads.PayloadConfig, io.grpc.benchmarks.proto.Payloads.PayloadConfig.Builder, io.grpc.benchmarks.proto.Payloads.PayloadConfigOrBuilder> 
@@ -8999,42 +9004,42 @@
          }
       }
       /**
-       * <code>repeated int32 core_list = 10;</code>
-       *
        * <pre>
        * Specify the cores we should run the server on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 10;</code>
        */
       public java.util.List<java.lang.Integer>
           getCoreListList() {
         return java.util.Collections.unmodifiableList(coreList_);
       }
       /**
-       * <code>repeated int32 core_list = 10;</code>
-       *
        * <pre>
        * Specify the cores we should run the server on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 10;</code>
        */
       public int getCoreListCount() {
         return coreList_.size();
       }
       /**
-       * <code>repeated int32 core_list = 10;</code>
-       *
        * <pre>
        * Specify the cores we should run the server on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 10;</code>
        */
       public int getCoreList(int index) {
         return coreList_.get(index);
       }
       /**
-       * <code>repeated int32 core_list = 10;</code>
-       *
        * <pre>
        * Specify the cores we should run the server on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 10;</code>
        */
       public Builder setCoreList(
           int index, int value) {
@@ -9044,11 +9049,11 @@
         return this;
       }
       /**
-       * <code>repeated int32 core_list = 10;</code>
-       *
        * <pre>
        * Specify the cores we should run the server on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 10;</code>
        */
       public Builder addCoreList(int value) {
         ensureCoreListIsMutable();
@@ -9057,11 +9062,11 @@
         return this;
       }
       /**
-       * <code>repeated int32 core_list = 10;</code>
-       *
        * <pre>
        * Specify the cores we should run the server on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 10;</code>
        */
       public Builder addAllCoreList(
           java.lang.Iterable<? extends java.lang.Integer> values) {
@@ -9072,11 +9077,11 @@
         return this;
       }
       /**
-       * <code>repeated int32 core_list = 10;</code>
-       *
        * <pre>
        * Specify the cores we should run the server on, if desired
        * </pre>
+       *
+       * <code>repeated int32 core_list = 10;</code>
        */
       public Builder clearCoreList() {
         coreList_ = java.util.Collections.emptyList();
@@ -9114,16 +9119,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ServerConfig(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -9187,7 +9183,8 @@
     }
     private ServerArgs(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -9235,11 +9232,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -9263,17 +9259,24 @@
       SETUP(1),
       MARK(2),
       ARGTYPE_NOT_SET(0);
-      private int value = 0;
+      private final int value;
       private ArgtypeCase(int value) {
         this.value = value;
       }
+      /**
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
       public static ArgtypeCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ArgtypeCase forNumber(int value) {
         switch (value) {
           case 1: return SETUP;
           case 2: return MARK;
           case 0: return ARGTYPE_NOT_SET;
-          default: throw new java.lang.IllegalArgumentException(
-            "Value is undefined for this oneof enum.");
+          default: return null;
         }
       }
       public int getNumber() {
@@ -9283,7 +9286,7 @@
 
     public ArgtypeCase
     getArgtypeCase() {
-      return ArgtypeCase.valueOf(
+      return ArgtypeCase.forNumber(
           argtypeCase_);
     }
 
@@ -9388,34 +9391,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.ServerArgs parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerArgs parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ServerArgs parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerArgs parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ServerArgs parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerArgs parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -9555,7 +9564,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.ServerArgs) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -9567,7 +9576,7 @@
       private java.lang.Object argtype_;
       public ArgtypeCase
           getArgtypeCase() {
-        return ArgtypeCase.valueOf(
+        return ArgtypeCase.forNumber(
             argtypeCase_);
       }
 
@@ -9868,16 +9877,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ServerArgs(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -9914,20 +9914,20 @@
     io.grpc.benchmarks.proto.Stats.ServerStatsOrBuilder getStatsOrBuilder();
 
     /**
-     * <code>optional int32 port = 2;</code>
-     *
      * <pre>
      * the port bound by the server
      * </pre>
+     *
+     * <code>optional int32 port = 2;</code>
      */
     int getPort();
 
     /**
-     * <code>optional int32 cores = 3;</code>
-     *
      * <pre>
      * Number of cores available to the server
      * </pre>
+     *
+     * <code>optional int32 cores = 3;</code>
      */
     int getCores();
   }
@@ -9954,7 +9954,8 @@
     }
     private ServerStatus(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -9997,11 +9998,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -10042,11 +10042,11 @@
     public static final int PORT_FIELD_NUMBER = 2;
     private int port_;
     /**
-     * <code>optional int32 port = 2;</code>
-     *
      * <pre>
      * the port bound by the server
      * </pre>
+     *
+     * <code>optional int32 port = 2;</code>
      */
     public int getPort() {
       return port_;
@@ -10055,11 +10055,11 @@
     public static final int CORES_FIELD_NUMBER = 3;
     private int cores_;
     /**
-     * <code>optional int32 cores = 3;</code>
-     *
      * <pre>
      * Number of cores available to the server
      * </pre>
+     *
+     * <code>optional int32 cores = 3;</code>
      */
     public int getCores() {
       return cores_;
@@ -10133,34 +10133,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.ServerStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerStatus parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ServerStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerStatus parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.ServerStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.ServerStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -10296,7 +10302,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.ServerStatus) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -10424,21 +10430,21 @@
 
       private int port_ ;
       /**
-       * <code>optional int32 port = 2;</code>
-       *
        * <pre>
        * the port bound by the server
        * </pre>
+       *
+       * <code>optional int32 port = 2;</code>
        */
       public int getPort() {
         return port_;
       }
       /**
-       * <code>optional int32 port = 2;</code>
-       *
        * <pre>
        * the port bound by the server
        * </pre>
+       *
+       * <code>optional int32 port = 2;</code>
        */
       public Builder setPort(int value) {
         
@@ -10447,11 +10453,11 @@
         return this;
       }
       /**
-       * <code>optional int32 port = 2;</code>
-       *
        * <pre>
        * the port bound by the server
        * </pre>
+       *
+       * <code>optional int32 port = 2;</code>
        */
       public Builder clearPort() {
         
@@ -10462,21 +10468,21 @@
 
       private int cores_ ;
       /**
-       * <code>optional int32 cores = 3;</code>
-       *
        * <pre>
        * Number of cores available to the server
        * </pre>
+       *
+       * <code>optional int32 cores = 3;</code>
        */
       public int getCores() {
         return cores_;
       }
       /**
-       * <code>optional int32 cores = 3;</code>
-       *
        * <pre>
        * Number of cores available to the server
        * </pre>
+       *
+       * <code>optional int32 cores = 3;</code>
        */
       public Builder setCores(int value) {
         
@@ -10485,11 +10491,11 @@
         return this;
       }
       /**
-       * <code>optional int32 cores = 3;</code>
-       *
        * <pre>
        * Number of cores available to the server
        * </pre>
+       *
+       * <code>optional int32 cores = 3;</code>
        */
       public Builder clearCores() {
         
@@ -10527,16 +10533,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ServerStatus(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -10580,7 +10577,8 @@
     }
     private CoreRequest(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       try {
         boolean done = false;
@@ -10599,11 +10597,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -10667,34 +10664,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.CoreRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.CoreRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.CoreRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.CoreRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.CoreRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.CoreRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -10804,7 +10807,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.CoreRequest) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -10842,16 +10845,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new CoreRequest(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -10875,11 +10869,11 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional int32 cores = 1;</code>
-     *
      * <pre>
      * Number of cores available on the server
      * </pre>
+     *
+     * <code>optional int32 cores = 1;</code>
      */
     int getCores();
   }
@@ -10905,7 +10899,8 @@
     }
     private CoreResponse(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -10930,11 +10925,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -10954,11 +10948,11 @@
     public static final int CORES_FIELD_NUMBER = 1;
     private int cores_;
     /**
-     * <code>optional int32 cores = 1;</code>
-     *
      * <pre>
      * Number of cores available on the server
      * </pre>
+     *
+     * <code>optional int32 cores = 1;</code>
      */
     public int getCores() {
       return cores_;
@@ -11018,34 +11012,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.CoreResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.CoreResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.CoreResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.CoreResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.CoreResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.CoreResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -11161,7 +11161,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.CoreResponse) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -11172,21 +11172,21 @@
 
       private int cores_ ;
       /**
-       * <code>optional int32 cores = 1;</code>
-       *
        * <pre>
        * Number of cores available on the server
        * </pre>
+       *
+       * <code>optional int32 cores = 1;</code>
        */
       public int getCores() {
         return cores_;
       }
       /**
-       * <code>optional int32 cores = 1;</code>
-       *
        * <pre>
        * Number of cores available on the server
        * </pre>
+       *
+       * <code>optional int32 cores = 1;</code>
        */
       public Builder setCores(int value) {
         
@@ -11195,11 +11195,11 @@
         return this;
       }
       /**
-       * <code>optional int32 cores = 1;</code>
-       *
        * <pre>
        * Number of cores available on the server
        * </pre>
+       *
+       * <code>optional int32 cores = 1;</code>
        */
       public Builder clearCores() {
         
@@ -11237,16 +11237,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new CoreResponse(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -11290,7 +11281,8 @@
     }
     private Void(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       try {
         boolean done = false;
@@ -11309,11 +11301,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -11377,34 +11368,40 @@
     }
     public static io.grpc.benchmarks.proto.Control.Void parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.Void parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.Void parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.Void parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Control.Void parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Control.Void parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -11514,7 +11511,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Control.Void) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -11552,16 +11549,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new Void(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -11580,89 +11568,89 @@
 
   }
 
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_PoissonParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_PoissonParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_UniformParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_UniformParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_DeterministicParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_DeterministicParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ParetoParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ParetoParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ClosedLoopParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ClosedLoopParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_LoadParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_LoadParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_SecurityParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_SecurityParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ClientConfig_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ClientConfig_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ClientStatus_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ClientStatus_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_Mark_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_Mark_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ClientArgs_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ClientArgs_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ServerConfig_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ServerConfig_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ServerArgs_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ServerArgs_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ServerStatus_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ServerStatus_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_CoreRequest_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_CoreRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_CoreResponse_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_CoreResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_Void_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_Void_fieldAccessorTable;
 
@@ -11670,7 +11658,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Messages.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Messages.java
index 566664f..65f7fde 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Messages.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Messages.java
@@ -9,76 +9,84 @@
       com.google.protobuf.ExtensionRegistry registry) {
   }
   /**
-   * Protobuf enum {@code grpc.testing.PayloadType}
-   *
    * <pre>
    * The type of payload that should be returned.
    * </pre>
+   *
+   * Protobuf enum {@code grpc.testing.PayloadType}
    */
   public enum PayloadType
       implements com.google.protobuf.ProtocolMessageEnum {
     /**
-     * <code>COMPRESSABLE = 0;</code>
-     *
      * <pre>
      * Compressable text format.
      * </pre>
-     */
-    COMPRESSABLE(0, 0),
-    /**
-     * <code>UNCOMPRESSABLE = 1;</code>
      *
+     * <code>COMPRESSABLE = 0;</code>
+     */
+    COMPRESSABLE(0),
+    /**
      * <pre>
      * Uncompressable binary format.
      * </pre>
-     */
-    UNCOMPRESSABLE(1, 1),
-    /**
-     * <code>RANDOM = 2;</code>
      *
+     * <code>UNCOMPRESSABLE = 1;</code>
+     */
+    UNCOMPRESSABLE(1),
+    /**
      * <pre>
      * Randomly chosen from all other formats defined in this enum.
      * </pre>
+     *
+     * <code>RANDOM = 2;</code>
      */
-    RANDOM(2, 2),
-    UNRECOGNIZED(-1, -1),
+    RANDOM(2),
+    UNRECOGNIZED(-1),
     ;
 
     /**
-     * <code>COMPRESSABLE = 0;</code>
-     *
      * <pre>
      * Compressable text format.
      * </pre>
+     *
+     * <code>COMPRESSABLE = 0;</code>
      */
     public static final int COMPRESSABLE_VALUE = 0;
     /**
-     * <code>UNCOMPRESSABLE = 1;</code>
-     *
      * <pre>
      * Uncompressable binary format.
      * </pre>
+     *
+     * <code>UNCOMPRESSABLE = 1;</code>
      */
     public static final int UNCOMPRESSABLE_VALUE = 1;
     /**
-     * <code>RANDOM = 2;</code>
-     *
      * <pre>
      * Randomly chosen from all other formats defined in this enum.
      * </pre>
+     *
+     * <code>RANDOM = 2;</code>
      */
     public static final int RANDOM_VALUE = 2;
 
 
     public final int getNumber() {
-      if (index == -1) {
+      if (this == UNRECOGNIZED) {
         throw new java.lang.IllegalArgumentException(
             "Can't get the number of an unknown enum value.");
       }
       return value;
     }
 
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static PayloadType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static PayloadType forNumber(int value) {
       switch (value) {
         case 0: return COMPRESSABLE;
         case 1: return UNCOMPRESSABLE;
@@ -95,13 +103,13 @@
         PayloadType> internalValueMap =
           new com.google.protobuf.Internal.EnumLiteMap<PayloadType>() {
             public PayloadType findValueByNumber(int number) {
-              return PayloadType.valueOf(number);
+              return PayloadType.forNumber(number);
             }
           };
 
     public final com.google.protobuf.Descriptors.EnumValueDescriptor
         getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
+      return getDescriptor().getValues().get(ordinal());
     }
     public final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptorForType() {
@@ -126,11 +134,9 @@
       return VALUES[desc.getIndex()];
     }
 
-    private final int index;
     private final int value;
 
-    private PayloadType(int index, int value) {
-      this.index = index;
+    private PayloadType(int value) {
       this.value = value;
     }
 
@@ -138,39 +144,39 @@
   }
 
   /**
-   * Protobuf enum {@code grpc.testing.CompressionType}
-   *
    * <pre>
    * Compression algorithms
    * </pre>
+   *
+   * Protobuf enum {@code grpc.testing.CompressionType}
    */
   public enum CompressionType
       implements com.google.protobuf.ProtocolMessageEnum {
     /**
-     * <code>NONE = 0;</code>
-     *
      * <pre>
      * No compression
      * </pre>
+     *
+     * <code>NONE = 0;</code>
      */
-    NONE(0, 0),
+    NONE(0),
     /**
      * <code>GZIP = 1;</code>
      */
-    GZIP(1, 1),
+    GZIP(1),
     /**
      * <code>DEFLATE = 2;</code>
      */
-    DEFLATE(2, 2),
-    UNRECOGNIZED(-1, -1),
+    DEFLATE(2),
+    UNRECOGNIZED(-1),
     ;
 
     /**
-     * <code>NONE = 0;</code>
-     *
      * <pre>
      * No compression
      * </pre>
+     *
+     * <code>NONE = 0;</code>
      */
     public static final int NONE_VALUE = 0;
     /**
@@ -184,14 +190,22 @@
 
 
     public final int getNumber() {
-      if (index == -1) {
+      if (this == UNRECOGNIZED) {
         throw new java.lang.IllegalArgumentException(
             "Can't get the number of an unknown enum value.");
       }
       return value;
     }
 
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static CompressionType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static CompressionType forNumber(int value) {
       switch (value) {
         case 0: return NONE;
         case 1: return GZIP;
@@ -208,13 +222,13 @@
         CompressionType> internalValueMap =
           new com.google.protobuf.Internal.EnumLiteMap<CompressionType>() {
             public CompressionType findValueByNumber(int number) {
-              return CompressionType.valueOf(number);
+              return CompressionType.forNumber(number);
             }
           };
 
     public final com.google.protobuf.Descriptors.EnumValueDescriptor
         getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
+      return getDescriptor().getValues().get(ordinal());
     }
     public final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptorForType() {
@@ -239,11 +253,9 @@
       return VALUES[desc.getIndex()];
     }
 
-    private final int index;
     private final int value;
 
-    private CompressionType(int index, int value) {
-      this.index = index;
+    private CompressionType(int value) {
       this.value = value;
     }
 
@@ -255,37 +267,37 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.PayloadType type = 1;</code>
-     *
      * <pre>
      * The type of data in body.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType type = 1;</code>
      */
     int getTypeValue();
     /**
-     * <code>optional .grpc.testing.PayloadType type = 1;</code>
-     *
      * <pre>
      * The type of data in body.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType type = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.PayloadType getType();
 
     /**
-     * <code>optional bytes body = 2;</code>
-     *
      * <pre>
      * Primary contents of payload.
      * </pre>
+     *
+     * <code>optional bytes body = 2;</code>
      */
     com.google.protobuf.ByteString getBody();
   }
   /**
-   * Protobuf type {@code grpc.testing.Payload}
-   *
    * <pre>
    * A block of data, to simply increase gRPC message size.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.Payload}
    */
   public  static final class Payload extends
       com.google.protobuf.GeneratedMessage implements
@@ -307,7 +319,8 @@
     }
     private Payload(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -338,11 +351,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -362,35 +374,35 @@
     public static final int TYPE_FIELD_NUMBER = 1;
     private int type_;
     /**
-     * <code>optional .grpc.testing.PayloadType type = 1;</code>
-     *
      * <pre>
      * The type of data in body.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType type = 1;</code>
      */
     public int getTypeValue() {
       return type_;
     }
     /**
-     * <code>optional .grpc.testing.PayloadType type = 1;</code>
-     *
      * <pre>
      * The type of data in body.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType type = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.PayloadType getType() {
-      io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.valueOf(type_);
+      io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.forNumber(type_);
       return result == null ? io.grpc.benchmarks.proto.Messages.PayloadType.UNRECOGNIZED : result;
     }
 
     public static final int BODY_FIELD_NUMBER = 2;
     private com.google.protobuf.ByteString body_;
     /**
-     * <code>optional bytes body = 2;</code>
-     *
      * <pre>
      * Primary contents of payload.
      * </pre>
+     *
+     * <code>optional bytes body = 2;</code>
      */
     public com.google.protobuf.ByteString getBody() {
       return body_;
@@ -457,34 +469,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.Payload parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.Payload parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.Payload parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.Payload parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.Payload parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.Payload parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -506,11 +524,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.Payload}
-     *
      * <pre>
      * A block of data, to simply increase gRPC message size.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.Payload}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -610,7 +628,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.Payload) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -621,21 +639,21 @@
 
       private int type_ = 0;
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public int getTypeValue() {
         return type_;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public Builder setTypeValue(int value) {
         type_ = value;
@@ -643,22 +661,22 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.PayloadType getType() {
-        io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.valueOf(type_);
+        io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.forNumber(type_);
         return result == null ? io.grpc.benchmarks.proto.Messages.PayloadType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public Builder setType(io.grpc.benchmarks.proto.Messages.PayloadType value) {
         if (value == null) {
@@ -670,11 +688,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public Builder clearType() {
         
@@ -685,21 +703,21 @@
 
       private com.google.protobuf.ByteString body_ = com.google.protobuf.ByteString.EMPTY;
       /**
-       * <code>optional bytes body = 2;</code>
-       *
        * <pre>
        * Primary contents of payload.
        * </pre>
+       *
+       * <code>optional bytes body = 2;</code>
        */
       public com.google.protobuf.ByteString getBody() {
         return body_;
       }
       /**
-       * <code>optional bytes body = 2;</code>
-       *
        * <pre>
        * Primary contents of payload.
        * </pre>
+       *
+       * <code>optional bytes body = 2;</code>
        */
       public Builder setBody(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -711,11 +729,11 @@
         return this;
       }
       /**
-       * <code>optional bytes body = 2;</code>
-       *
        * <pre>
        * Primary contents of payload.
        * </pre>
+       *
+       * <code>optional bytes body = 2;</code>
        */
       public Builder clearBody() {
         
@@ -753,16 +771,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new Payload(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -801,12 +810,12 @@
         getMessageBytes();
   }
   /**
-   * Protobuf type {@code grpc.testing.EchoStatus}
-   *
    * <pre>
    * A protobuf representation for grpc status. This is used by test
    * clients to specify a status that the server should attempt to return.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.EchoStatus}
    */
   public  static final class EchoStatus extends
       com.google.protobuf.GeneratedMessage implements
@@ -828,7 +837,8 @@
     }
     private EchoStatus(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -859,11 +869,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -983,34 +992,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.EchoStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.EchoStatus parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.EchoStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.EchoStatus parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.EchoStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.EchoStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1032,12 +1047,12 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.EchoStatus}
-     *
      * <pre>
      * A protobuf representation for grpc status. This is used by test
      * clients to specify a status that the server should attempt to return.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.EchoStatus}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -1138,7 +1153,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.EchoStatus) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1271,16 +1286,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new EchoStatus(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1304,125 +1310,125 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, server randomly chooses one from other formats.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     int getResponseTypeValue();
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, server randomly chooses one from other formats.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.PayloadType getResponseType();
 
     /**
-     * <code>optional int32 response_size = 2;</code>
-     *
      * <pre>
      * Desired payload size in the response from the server.
      * If response_type is COMPRESSABLE, this denotes the size before compression.
      * </pre>
+     *
+     * <code>optional int32 response_size = 2;</code>
      */
     int getResponseSize();
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     io.grpc.benchmarks.proto.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder();
 
     /**
-     * <code>optional bool fill_username = 4;</code>
-     *
      * <pre>
      * Whether SimpleResponse should include username.
      * </pre>
+     *
+     * <code>optional bool fill_username = 4;</code>
      */
     boolean getFillUsername();
 
     /**
-     * <code>optional bool fill_oauth_scope = 5;</code>
-     *
      * <pre>
      * Whether SimpleResponse should include OAuth scope.
      * </pre>
+     *
+     * <code>optional bool fill_oauth_scope = 5;</code>
      */
     boolean getFillOauthScope();
 
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     int getResponseCompressionValue();
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     io.grpc.benchmarks.proto.Messages.CompressionType getResponseCompression();
 
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     boolean hasResponseStatus();
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     io.grpc.benchmarks.proto.Messages.EchoStatus getResponseStatus();
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder();
   }
   /**
-   * Protobuf type {@code grpc.testing.SimpleRequest}
-   *
    * <pre>
    * Unary request.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.SimpleRequest}
    */
   public  static final class SimpleRequest extends
       com.google.protobuf.GeneratedMessage implements
@@ -1447,7 +1453,8 @@
     }
     private SimpleRequest(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -1520,11 +1527,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -1544,38 +1550,38 @@
     public static final int RESPONSE_TYPE_FIELD_NUMBER = 1;
     private int responseType_;
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, server randomly chooses one from other formats.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     public int getResponseTypeValue() {
       return responseType_;
     }
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, server randomly chooses one from other formats.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.PayloadType getResponseType() {
-      io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.valueOf(responseType_);
+      io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.forNumber(responseType_);
       return result == null ? io.grpc.benchmarks.proto.Messages.PayloadType.UNRECOGNIZED : result;
     }
 
     public static final int RESPONSE_SIZE_FIELD_NUMBER = 2;
     private int responseSize_;
     /**
-     * <code>optional int32 response_size = 2;</code>
-     *
      * <pre>
      * Desired payload size in the response from the server.
      * If response_type is COMPRESSABLE, this denotes the size before compression.
      * </pre>
+     *
+     * <code>optional int32 response_size = 2;</code>
      */
     public int getResponseSize() {
       return responseSize_;
@@ -1584,31 +1590,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 3;
     private io.grpc.benchmarks.proto.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.benchmarks.proto.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -1617,11 +1623,11 @@
     public static final int FILL_USERNAME_FIELD_NUMBER = 4;
     private boolean fillUsername_;
     /**
-     * <code>optional bool fill_username = 4;</code>
-     *
      * <pre>
      * Whether SimpleResponse should include username.
      * </pre>
+     *
+     * <code>optional bool fill_username = 4;</code>
      */
     public boolean getFillUsername() {
       return fillUsername_;
@@ -1630,11 +1636,11 @@
     public static final int FILL_OAUTH_SCOPE_FIELD_NUMBER = 5;
     private boolean fillOauthScope_;
     /**
-     * <code>optional bool fill_oauth_scope = 5;</code>
-     *
      * <pre>
      * Whether SimpleResponse should include OAuth scope.
      * </pre>
+     *
+     * <code>optional bool fill_oauth_scope = 5;</code>
      */
     public boolean getFillOauthScope() {
       return fillOauthScope_;
@@ -1643,55 +1649,55 @@
     public static final int RESPONSE_COMPRESSION_FIELD_NUMBER = 6;
     private int responseCompression_;
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     public int getResponseCompressionValue() {
       return responseCompression_;
     }
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     public io.grpc.benchmarks.proto.Messages.CompressionType getResponseCompression() {
-      io.grpc.benchmarks.proto.Messages.CompressionType result = io.grpc.benchmarks.proto.Messages.CompressionType.valueOf(responseCompression_);
+      io.grpc.benchmarks.proto.Messages.CompressionType result = io.grpc.benchmarks.proto.Messages.CompressionType.forNumber(responseCompression_);
       return result == null ? io.grpc.benchmarks.proto.Messages.CompressionType.UNRECOGNIZED : result;
     }
 
     public static final int RESPONSE_STATUS_FIELD_NUMBER = 7;
     private io.grpc.benchmarks.proto.Messages.EchoStatus responseStatus_;
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public boolean hasResponseStatus() {
       return responseStatus_ != null;
     }
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public io.grpc.benchmarks.proto.Messages.EchoStatus getResponseStatus() {
       return responseStatus_ == null ? io.grpc.benchmarks.proto.Messages.EchoStatus.getDefaultInstance() : responseStatus_;
     }
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder() {
       return getResponseStatus();
@@ -1793,34 +1799,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1842,11 +1854,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.SimpleRequest}
-     *
      * <pre>
      * Unary request.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.SimpleRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -1992,7 +2004,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.SimpleRequest) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -2003,23 +2015,23 @@
 
       private int responseType_ = 0;
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public int getResponseTypeValue() {
         return responseType_;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder setResponseTypeValue(int value) {
         responseType_ = value;
@@ -2027,24 +2039,24 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.PayloadType getResponseType() {
-        io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.valueOf(responseType_);
+        io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.forNumber(responseType_);
         return result == null ? io.grpc.benchmarks.proto.Messages.PayloadType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder setResponseType(io.grpc.benchmarks.proto.Messages.PayloadType value) {
         if (value == null) {
@@ -2056,12 +2068,12 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder clearResponseType() {
         
@@ -2072,23 +2084,23 @@
 
       private int responseSize_ ;
       /**
-       * <code>optional int32 response_size = 2;</code>
-       *
        * <pre>
        * Desired payload size in the response from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 response_size = 2;</code>
        */
       public int getResponseSize() {
         return responseSize_;
       }
       /**
-       * <code>optional int32 response_size = 2;</code>
-       *
        * <pre>
        * Desired payload size in the response from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 response_size = 2;</code>
        */
       public Builder setResponseSize(int value) {
         
@@ -2097,12 +2109,12 @@
         return this;
       }
       /**
-       * <code>optional int32 response_size = 2;</code>
-       *
        * <pre>
        * Desired payload size in the response from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 response_size = 2;</code>
        */
       public Builder clearResponseSize() {
         
@@ -2115,21 +2127,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -2139,11 +2151,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder setPayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -2159,11 +2171,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder setPayload(
           io.grpc.benchmarks.proto.Messages.Payload.Builder builderForValue) {
@@ -2177,11 +2189,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder mergePayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -2199,11 +2211,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -2217,11 +2229,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -2229,11 +2241,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -2244,11 +2256,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> 
@@ -2266,21 +2278,21 @@
 
       private boolean fillUsername_ ;
       /**
-       * <code>optional bool fill_username = 4;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include username.
        * </pre>
+       *
+       * <code>optional bool fill_username = 4;</code>
        */
       public boolean getFillUsername() {
         return fillUsername_;
       }
       /**
-       * <code>optional bool fill_username = 4;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include username.
        * </pre>
+       *
+       * <code>optional bool fill_username = 4;</code>
        */
       public Builder setFillUsername(boolean value) {
         
@@ -2289,11 +2301,11 @@
         return this;
       }
       /**
-       * <code>optional bool fill_username = 4;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include username.
        * </pre>
+       *
+       * <code>optional bool fill_username = 4;</code>
        */
       public Builder clearFillUsername() {
         
@@ -2304,21 +2316,21 @@
 
       private boolean fillOauthScope_ ;
       /**
-       * <code>optional bool fill_oauth_scope = 5;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include OAuth scope.
        * </pre>
+       *
+       * <code>optional bool fill_oauth_scope = 5;</code>
        */
       public boolean getFillOauthScope() {
         return fillOauthScope_;
       }
       /**
-       * <code>optional bool fill_oauth_scope = 5;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include OAuth scope.
        * </pre>
+       *
+       * <code>optional bool fill_oauth_scope = 5;</code>
        */
       public Builder setFillOauthScope(boolean value) {
         
@@ -2327,11 +2339,11 @@
         return this;
       }
       /**
-       * <code>optional bool fill_oauth_scope = 5;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include OAuth scope.
        * </pre>
+       *
+       * <code>optional bool fill_oauth_scope = 5;</code>
        */
       public Builder clearFillOauthScope() {
         
@@ -2342,21 +2354,21 @@
 
       private int responseCompression_ = 0;
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public int getResponseCompressionValue() {
         return responseCompression_;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder setResponseCompressionValue(int value) {
         responseCompression_ = value;
@@ -2364,22 +2376,22 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public io.grpc.benchmarks.proto.Messages.CompressionType getResponseCompression() {
-        io.grpc.benchmarks.proto.Messages.CompressionType result = io.grpc.benchmarks.proto.Messages.CompressionType.valueOf(responseCompression_);
+        io.grpc.benchmarks.proto.Messages.CompressionType result = io.grpc.benchmarks.proto.Messages.CompressionType.forNumber(responseCompression_);
         return result == null ? io.grpc.benchmarks.proto.Messages.CompressionType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder setResponseCompression(io.grpc.benchmarks.proto.Messages.CompressionType value) {
         if (value == null) {
@@ -2391,11 +2403,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder clearResponseCompression() {
         
@@ -2408,21 +2420,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.EchoStatus, io.grpc.benchmarks.proto.Messages.EchoStatus.Builder, io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder> responseStatusBuilder_;
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public boolean hasResponseStatus() {
         return responseStatusBuilder_ != null || responseStatus_ != null;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.benchmarks.proto.Messages.EchoStatus getResponseStatus() {
         if (responseStatusBuilder_ == null) {
@@ -2432,11 +2444,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder setResponseStatus(io.grpc.benchmarks.proto.Messages.EchoStatus value) {
         if (responseStatusBuilder_ == null) {
@@ -2452,11 +2464,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder setResponseStatus(
           io.grpc.benchmarks.proto.Messages.EchoStatus.Builder builderForValue) {
@@ -2470,11 +2482,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder mergeResponseStatus(io.grpc.benchmarks.proto.Messages.EchoStatus value) {
         if (responseStatusBuilder_ == null) {
@@ -2492,11 +2504,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder clearResponseStatus() {
         if (responseStatusBuilder_ == null) {
@@ -2510,11 +2522,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.benchmarks.proto.Messages.EchoStatus.Builder getResponseStatusBuilder() {
         
@@ -2522,11 +2534,11 @@
         return getResponseStatusFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder() {
         if (responseStatusBuilder_ != null) {
@@ -2537,11 +2549,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.EchoStatus, io.grpc.benchmarks.proto.Messages.EchoStatus.Builder, io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder> 
@@ -2586,16 +2598,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new SimpleRequest(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -2619,74 +2622,74 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder();
 
     /**
-     * <code>optional string username = 2;</code>
-     *
      * <pre>
      * The user the request came from, for verifying authentication was
      * successful when the client expected it.
      * </pre>
+     *
+     * <code>optional string username = 2;</code>
      */
     java.lang.String getUsername();
     /**
-     * <code>optional string username = 2;</code>
-     *
      * <pre>
      * The user the request came from, for verifying authentication was
      * successful when the client expected it.
      * </pre>
+     *
+     * <code>optional string username = 2;</code>
      */
     com.google.protobuf.ByteString
         getUsernameBytes();
 
     /**
-     * <code>optional string oauth_scope = 3;</code>
-     *
      * <pre>
      * OAuth scope.
      * </pre>
+     *
+     * <code>optional string oauth_scope = 3;</code>
      */
     java.lang.String getOauthScope();
     /**
-     * <code>optional string oauth_scope = 3;</code>
-     *
      * <pre>
      * OAuth scope.
      * </pre>
+     *
+     * <code>optional string oauth_scope = 3;</code>
      */
     com.google.protobuf.ByteString
         getOauthScopeBytes();
   }
   /**
-   * Protobuf type {@code grpc.testing.SimpleResponse}
-   *
    * <pre>
    * Unary response, as configured by the request.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.SimpleResponse}
    */
   public  static final class SimpleResponse extends
       com.google.protobuf.GeneratedMessage implements
@@ -2708,7 +2711,8 @@
     }
     private SimpleResponse(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -2753,11 +2757,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -2777,31 +2780,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 1;
     private io.grpc.benchmarks.proto.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.benchmarks.proto.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -2810,12 +2813,12 @@
     public static final int USERNAME_FIELD_NUMBER = 2;
     private volatile java.lang.Object username_;
     /**
-     * <code>optional string username = 2;</code>
-     *
      * <pre>
      * The user the request came from, for verifying authentication was
      * successful when the client expected it.
      * </pre>
+     *
+     * <code>optional string username = 2;</code>
      */
     public java.lang.String getUsername() {
       java.lang.Object ref = username_;
@@ -2830,12 +2833,12 @@
       }
     }
     /**
-     * <code>optional string username = 2;</code>
-     *
      * <pre>
      * The user the request came from, for verifying authentication was
      * successful when the client expected it.
      * </pre>
+     *
+     * <code>optional string username = 2;</code>
      */
     public com.google.protobuf.ByteString
         getUsernameBytes() {
@@ -2854,11 +2857,11 @@
     public static final int OAUTH_SCOPE_FIELD_NUMBER = 3;
     private volatile java.lang.Object oauthScope_;
     /**
-     * <code>optional string oauth_scope = 3;</code>
-     *
      * <pre>
      * OAuth scope.
      * </pre>
+     *
+     * <code>optional string oauth_scope = 3;</code>
      */
     public java.lang.String getOauthScope() {
       java.lang.Object ref = oauthScope_;
@@ -2873,11 +2876,11 @@
       }
     }
     /**
-     * <code>optional string oauth_scope = 3;</code>
-     *
      * <pre>
      * OAuth scope.
      * </pre>
+     *
+     * <code>optional string oauth_scope = 3;</code>
      */
     public com.google.protobuf.ByteString
         getOauthScopeBytes() {
@@ -2959,34 +2962,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.SimpleResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -3008,11 +3017,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.SimpleResponse}
-     *
      * <pre>
      * Unary response, as configured by the request.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.SimpleResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -3128,7 +3137,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.SimpleResponse) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -3141,21 +3150,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -3165,11 +3174,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -3185,11 +3194,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(
           io.grpc.benchmarks.proto.Messages.Payload.Builder builderForValue) {
@@ -3203,11 +3212,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder mergePayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -3225,11 +3234,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -3243,11 +3252,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -3255,11 +3264,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -3270,11 +3279,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> 
@@ -3292,12 +3301,12 @@
 
       private java.lang.Object username_ = "";
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public java.lang.String getUsername() {
         java.lang.Object ref = username_;
@@ -3312,12 +3321,12 @@
         }
       }
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public com.google.protobuf.ByteString
           getUsernameBytes() {
@@ -3333,12 +3342,12 @@
         }
       }
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public Builder setUsername(
           java.lang.String value) {
@@ -3351,12 +3360,12 @@
         return this;
       }
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public Builder clearUsername() {
         
@@ -3365,12 +3374,12 @@
         return this;
       }
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public Builder setUsernameBytes(
           com.google.protobuf.ByteString value) {
@@ -3386,11 +3395,11 @@
 
       private java.lang.Object oauthScope_ = "";
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public java.lang.String getOauthScope() {
         java.lang.Object ref = oauthScope_;
@@ -3405,11 +3414,11 @@
         }
       }
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public com.google.protobuf.ByteString
           getOauthScopeBytes() {
@@ -3425,11 +3434,11 @@
         }
       }
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public Builder setOauthScope(
           java.lang.String value) {
@@ -3442,11 +3451,11 @@
         return this;
       }
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public Builder clearOauthScope() {
         
@@ -3455,11 +3464,11 @@
         return this;
       }
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public Builder setOauthScopeBytes(
           com.google.protobuf.ByteString value) {
@@ -3502,16 +3511,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new SimpleResponse(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -3535,36 +3535,36 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder();
   }
   /**
-   * Protobuf type {@code grpc.testing.StreamingInputCallRequest}
-   *
    * <pre>
    * Client-streaming request.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.StreamingInputCallRequest}
    */
   public  static final class StreamingInputCallRequest extends
       com.google.protobuf.GeneratedMessage implements
@@ -3584,7 +3584,8 @@
     }
     private StreamingInputCallRequest(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -3617,11 +3618,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -3641,31 +3641,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 1;
     private io.grpc.benchmarks.proto.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.benchmarks.proto.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -3725,34 +3725,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -3774,11 +3780,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.StreamingInputCallRequest}
-     *
      * <pre>
      * Client-streaming request.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.StreamingInputCallRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -3880,7 +3886,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.StreamingInputCallRequest) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -3893,21 +3899,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -3917,11 +3923,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -3937,11 +3943,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(
           io.grpc.benchmarks.proto.Messages.Payload.Builder builderForValue) {
@@ -3955,11 +3961,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder mergePayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -3977,11 +3983,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -3995,11 +4001,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -4007,11 +4013,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -4022,11 +4028,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> 
@@ -4071,16 +4077,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new StreamingInputCallRequest(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -4104,20 +4101,20 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional int32 aggregated_payload_size = 1;</code>
-     *
      * <pre>
      * Aggregated size of payloads received from the client.
      * </pre>
+     *
+     * <code>optional int32 aggregated_payload_size = 1;</code>
      */
     int getAggregatedPayloadSize();
   }
   /**
-   * Protobuf type {@code grpc.testing.StreamingInputCallResponse}
-   *
    * <pre>
    * Client-streaming response.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.StreamingInputCallResponse}
    */
   public  static final class StreamingInputCallResponse extends
       com.google.protobuf.GeneratedMessage implements
@@ -4138,7 +4135,8 @@
     }
     private StreamingInputCallResponse(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -4163,11 +4161,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -4187,11 +4184,11 @@
     public static final int AGGREGATED_PAYLOAD_SIZE_FIELD_NUMBER = 1;
     private int aggregatedPayloadSize_;
     /**
-     * <code>optional int32 aggregated_payload_size = 1;</code>
-     *
      * <pre>
      * Aggregated size of payloads received from the client.
      * </pre>
+     *
+     * <code>optional int32 aggregated_payload_size = 1;</code>
      */
     public int getAggregatedPayloadSize() {
       return aggregatedPayloadSize_;
@@ -4251,34 +4248,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingInputCallResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -4300,11 +4303,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.StreamingInputCallResponse}
-     *
      * <pre>
      * Client-streaming response.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.StreamingInputCallResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -4398,7 +4401,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.StreamingInputCallResponse) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -4409,21 +4412,21 @@
 
       private int aggregatedPayloadSize_ ;
       /**
-       * <code>optional int32 aggregated_payload_size = 1;</code>
-       *
        * <pre>
        * Aggregated size of payloads received from the client.
        * </pre>
+       *
+       * <code>optional int32 aggregated_payload_size = 1;</code>
        */
       public int getAggregatedPayloadSize() {
         return aggregatedPayloadSize_;
       }
       /**
-       * <code>optional int32 aggregated_payload_size = 1;</code>
-       *
        * <pre>
        * Aggregated size of payloads received from the client.
        * </pre>
+       *
+       * <code>optional int32 aggregated_payload_size = 1;</code>
        */
       public Builder setAggregatedPayloadSize(int value) {
         
@@ -4432,11 +4435,11 @@
         return this;
       }
       /**
-       * <code>optional int32 aggregated_payload_size = 1;</code>
-       *
        * <pre>
        * Aggregated size of payloads received from the client.
        * </pre>
+       *
+       * <code>optional int32 aggregated_payload_size = 1;</code>
        */
       public Builder clearAggregatedPayloadSize() {
         
@@ -4474,16 +4477,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new StreamingInputCallResponse(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -4507,31 +4501,31 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional int32 size = 1;</code>
-     *
      * <pre>
      * Desired payload sizes in responses from the server.
      * If response_type is COMPRESSABLE, this denotes the size before compression.
      * </pre>
+     *
+     * <code>optional int32 size = 1;</code>
      */
     int getSize();
 
     /**
-     * <code>optional int32 interval_us = 2;</code>
-     *
      * <pre>
      * Desired interval between consecutive responses in the response stream in
      * microseconds.
      * </pre>
+     *
+     * <code>optional int32 interval_us = 2;</code>
      */
     int getIntervalUs();
   }
   /**
-   * Protobuf type {@code grpc.testing.ResponseParameters}
-   *
    * <pre>
    * Configuration for a particular response.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.ResponseParameters}
    */
   public  static final class ResponseParameters extends
       com.google.protobuf.GeneratedMessage implements
@@ -4553,7 +4547,8 @@
     }
     private ResponseParameters(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -4583,11 +4578,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -4607,12 +4601,12 @@
     public static final int SIZE_FIELD_NUMBER = 1;
     private int size_;
     /**
-     * <code>optional int32 size = 1;</code>
-     *
      * <pre>
      * Desired payload sizes in responses from the server.
      * If response_type is COMPRESSABLE, this denotes the size before compression.
      * </pre>
+     *
+     * <code>optional int32 size = 1;</code>
      */
     public int getSize() {
       return size_;
@@ -4621,12 +4615,12 @@
     public static final int INTERVAL_US_FIELD_NUMBER = 2;
     private int intervalUs_;
     /**
-     * <code>optional int32 interval_us = 2;</code>
-     *
      * <pre>
      * Desired interval between consecutive responses in the response stream in
      * microseconds.
      * </pre>
+     *
+     * <code>optional int32 interval_us = 2;</code>
      */
     public int getIntervalUs() {
       return intervalUs_;
@@ -4693,34 +4687,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.ResponseParameters parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.ResponseParameters parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.ResponseParameters parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.ResponseParameters parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.ResponseParameters parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.ResponseParameters parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -4742,11 +4742,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.ResponseParameters}
-     *
      * <pre>
      * Configuration for a particular response.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.ResponseParameters}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -4846,7 +4846,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.ResponseParameters) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -4857,23 +4857,23 @@
 
       private int size_ ;
       /**
-       * <code>optional int32 size = 1;</code>
-       *
        * <pre>
        * Desired payload sizes in responses from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 size = 1;</code>
        */
       public int getSize() {
         return size_;
       }
       /**
-       * <code>optional int32 size = 1;</code>
-       *
        * <pre>
        * Desired payload sizes in responses from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 size = 1;</code>
        */
       public Builder setSize(int value) {
         
@@ -4882,12 +4882,12 @@
         return this;
       }
       /**
-       * <code>optional int32 size = 1;</code>
-       *
        * <pre>
        * Desired payload sizes in responses from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 size = 1;</code>
        */
       public Builder clearSize() {
         
@@ -4898,23 +4898,23 @@
 
       private int intervalUs_ ;
       /**
-       * <code>optional int32 interval_us = 2;</code>
-       *
        * <pre>
        * Desired interval between consecutive responses in the response stream in
        * microseconds.
        * </pre>
+       *
+       * <code>optional int32 interval_us = 2;</code>
        */
       public int getIntervalUs() {
         return intervalUs_;
       }
       /**
-       * <code>optional int32 interval_us = 2;</code>
-       *
        * <pre>
        * Desired interval between consecutive responses in the response stream in
        * microseconds.
        * </pre>
+       *
+       * <code>optional int32 interval_us = 2;</code>
        */
       public Builder setIntervalUs(int value) {
         
@@ -4923,12 +4923,12 @@
         return this;
       }
       /**
-       * <code>optional int32 interval_us = 2;</code>
-       *
        * <pre>
        * Desired interval between consecutive responses in the response stream in
        * microseconds.
        * </pre>
+       *
+       * <code>optional int32 interval_us = 2;</code>
        */
       public Builder clearIntervalUs() {
         
@@ -4966,16 +4966,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ResponseParameters(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -4999,145 +4990,145 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, the payload from each response in the stream
      * might be of different types. This is to simulate a mixed type of payload
      * stream.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     int getResponseTypeValue();
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, the payload from each response in the stream
      * might be of different types. This is to simulate a mixed type of payload
      * stream.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.PayloadType getResponseType();
 
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     java.util.List<io.grpc.benchmarks.proto.Messages.ResponseParameters> 
         getResponseParametersList();
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     io.grpc.benchmarks.proto.Messages.ResponseParameters getResponseParameters(int index);
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     int getResponseParametersCount();
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     java.util.List<? extends io.grpc.benchmarks.proto.Messages.ResponseParametersOrBuilder> 
         getResponseParametersOrBuilderList();
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     io.grpc.benchmarks.proto.Messages.ResponseParametersOrBuilder getResponseParametersOrBuilder(
         int index);
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     io.grpc.benchmarks.proto.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder();
 
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     int getResponseCompressionValue();
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     io.grpc.benchmarks.proto.Messages.CompressionType getResponseCompression();
 
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     boolean hasResponseStatus();
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     io.grpc.benchmarks.proto.Messages.EchoStatus getResponseStatus();
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder();
   }
   /**
-   * Protobuf type {@code grpc.testing.StreamingOutputCallRequest}
-   *
    * <pre>
    * Server-streaming request.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.StreamingOutputCallRequest}
    */
   public  static final class StreamingOutputCallRequest extends
       com.google.protobuf.GeneratedMessage implements
@@ -5160,7 +5151,8 @@
     }
     private StreamingOutputCallRequest(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -5226,11 +5218,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
           responseParameters_ = java.util.Collections.unmodifiableList(responseParameters_);
@@ -5254,82 +5245,82 @@
     public static final int RESPONSE_TYPE_FIELD_NUMBER = 1;
     private int responseType_;
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, the payload from each response in the stream
      * might be of different types. This is to simulate a mixed type of payload
      * stream.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     public int getResponseTypeValue() {
       return responseType_;
     }
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, the payload from each response in the stream
      * might be of different types. This is to simulate a mixed type of payload
      * stream.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.PayloadType getResponseType() {
-      io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.valueOf(responseType_);
+      io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.forNumber(responseType_);
       return result == null ? io.grpc.benchmarks.proto.Messages.PayloadType.UNRECOGNIZED : result;
     }
 
     public static final int RESPONSE_PARAMETERS_FIELD_NUMBER = 2;
     private java.util.List<io.grpc.benchmarks.proto.Messages.ResponseParameters> responseParameters_;
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public java.util.List<io.grpc.benchmarks.proto.Messages.ResponseParameters> getResponseParametersList() {
       return responseParameters_;
     }
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public java.util.List<? extends io.grpc.benchmarks.proto.Messages.ResponseParametersOrBuilder> 
         getResponseParametersOrBuilderList() {
       return responseParameters_;
     }
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public int getResponseParametersCount() {
       return responseParameters_.size();
     }
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public io.grpc.benchmarks.proto.Messages.ResponseParameters getResponseParameters(int index) {
       return responseParameters_.get(index);
     }
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public io.grpc.benchmarks.proto.Messages.ResponseParametersOrBuilder getResponseParametersOrBuilder(
         int index) {
@@ -5339,31 +5330,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 3;
     private io.grpc.benchmarks.proto.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.benchmarks.proto.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -5372,55 +5363,55 @@
     public static final int RESPONSE_COMPRESSION_FIELD_NUMBER = 6;
     private int responseCompression_;
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     public int getResponseCompressionValue() {
       return responseCompression_;
     }
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     public io.grpc.benchmarks.proto.Messages.CompressionType getResponseCompression() {
-      io.grpc.benchmarks.proto.Messages.CompressionType result = io.grpc.benchmarks.proto.Messages.CompressionType.valueOf(responseCompression_);
+      io.grpc.benchmarks.proto.Messages.CompressionType result = io.grpc.benchmarks.proto.Messages.CompressionType.forNumber(responseCompression_);
       return result == null ? io.grpc.benchmarks.proto.Messages.CompressionType.UNRECOGNIZED : result;
     }
 
     public static final int RESPONSE_STATUS_FIELD_NUMBER = 7;
     private io.grpc.benchmarks.proto.Messages.EchoStatus responseStatus_;
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public boolean hasResponseStatus() {
       return responseStatus_ != null;
     }
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public io.grpc.benchmarks.proto.Messages.EchoStatus getResponseStatus() {
       return responseStatus_ == null ? io.grpc.benchmarks.proto.Messages.EchoStatus.getDefaultInstance() : responseStatus_;
     }
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder() {
       return getResponseStatus();
@@ -5508,34 +5499,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -5557,11 +5554,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.StreamingOutputCallRequest}
-     *
      * <pre>
      * Server-streaming request.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.StreamingOutputCallRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -5734,7 +5731,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.StreamingOutputCallRequest) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -5746,27 +5743,27 @@
 
       private int responseType_ = 0;
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public int getResponseTypeValue() {
         return responseType_;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder setResponseTypeValue(int value) {
         responseType_ = value;
@@ -5774,28 +5771,28 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.PayloadType getResponseType() {
-        io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.valueOf(responseType_);
+        io.grpc.benchmarks.proto.Messages.PayloadType result = io.grpc.benchmarks.proto.Messages.PayloadType.forNumber(responseType_);
         return result == null ? io.grpc.benchmarks.proto.Messages.PayloadType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder setResponseType(io.grpc.benchmarks.proto.Messages.PayloadType value) {
         if (value == null) {
@@ -5807,14 +5804,14 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder clearResponseType() {
         
@@ -5836,11 +5833,11 @@
           io.grpc.benchmarks.proto.Messages.ResponseParameters, io.grpc.benchmarks.proto.Messages.ResponseParameters.Builder, io.grpc.benchmarks.proto.Messages.ResponseParametersOrBuilder> responseParametersBuilder_;
 
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public java.util.List<io.grpc.benchmarks.proto.Messages.ResponseParameters> getResponseParametersList() {
         if (responseParametersBuilder_ == null) {
@@ -5850,11 +5847,11 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public int getResponseParametersCount() {
         if (responseParametersBuilder_ == null) {
@@ -5864,11 +5861,11 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.benchmarks.proto.Messages.ResponseParameters getResponseParameters(int index) {
         if (responseParametersBuilder_ == null) {
@@ -5878,11 +5875,11 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder setResponseParameters(
           int index, io.grpc.benchmarks.proto.Messages.ResponseParameters value) {
@@ -5899,11 +5896,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder setResponseParameters(
           int index, io.grpc.benchmarks.proto.Messages.ResponseParameters.Builder builderForValue) {
@@ -5917,11 +5914,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addResponseParameters(io.grpc.benchmarks.proto.Messages.ResponseParameters value) {
         if (responseParametersBuilder_ == null) {
@@ -5937,11 +5934,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addResponseParameters(
           int index, io.grpc.benchmarks.proto.Messages.ResponseParameters value) {
@@ -5958,11 +5955,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addResponseParameters(
           io.grpc.benchmarks.proto.Messages.ResponseParameters.Builder builderForValue) {
@@ -5976,11 +5973,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addResponseParameters(
           int index, io.grpc.benchmarks.proto.Messages.ResponseParameters.Builder builderForValue) {
@@ -5994,11 +5991,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addAllResponseParameters(
           java.lang.Iterable<? extends io.grpc.benchmarks.proto.Messages.ResponseParameters> values) {
@@ -6013,11 +6010,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder clearResponseParameters() {
         if (responseParametersBuilder_ == null) {
@@ -6030,11 +6027,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder removeResponseParameters(int index) {
         if (responseParametersBuilder_ == null) {
@@ -6047,22 +6044,22 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.benchmarks.proto.Messages.ResponseParameters.Builder getResponseParametersBuilder(
           int index) {
         return getResponseParametersFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.benchmarks.proto.Messages.ResponseParametersOrBuilder getResponseParametersOrBuilder(
           int index) {
@@ -6072,11 +6069,11 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public java.util.List<? extends io.grpc.benchmarks.proto.Messages.ResponseParametersOrBuilder> 
            getResponseParametersOrBuilderList() {
@@ -6087,22 +6084,22 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.benchmarks.proto.Messages.ResponseParameters.Builder addResponseParametersBuilder() {
         return getResponseParametersFieldBuilder().addBuilder(
             io.grpc.benchmarks.proto.Messages.ResponseParameters.getDefaultInstance());
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.benchmarks.proto.Messages.ResponseParameters.Builder addResponseParametersBuilder(
           int index) {
@@ -6110,11 +6107,11 @@
             index, io.grpc.benchmarks.proto.Messages.ResponseParameters.getDefaultInstance());
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public java.util.List<io.grpc.benchmarks.proto.Messages.ResponseParameters.Builder> 
            getResponseParametersBuilderList() {
@@ -6139,21 +6136,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -6163,11 +6160,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder setPayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -6183,11 +6180,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder setPayload(
           io.grpc.benchmarks.proto.Messages.Payload.Builder builderForValue) {
@@ -6201,11 +6198,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder mergePayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -6223,11 +6220,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -6241,11 +6238,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -6253,11 +6250,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -6268,11 +6265,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> 
@@ -6290,21 +6287,21 @@
 
       private int responseCompression_ = 0;
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public int getResponseCompressionValue() {
         return responseCompression_;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder setResponseCompressionValue(int value) {
         responseCompression_ = value;
@@ -6312,22 +6309,22 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public io.grpc.benchmarks.proto.Messages.CompressionType getResponseCompression() {
-        io.grpc.benchmarks.proto.Messages.CompressionType result = io.grpc.benchmarks.proto.Messages.CompressionType.valueOf(responseCompression_);
+        io.grpc.benchmarks.proto.Messages.CompressionType result = io.grpc.benchmarks.proto.Messages.CompressionType.forNumber(responseCompression_);
         return result == null ? io.grpc.benchmarks.proto.Messages.CompressionType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder setResponseCompression(io.grpc.benchmarks.proto.Messages.CompressionType value) {
         if (value == null) {
@@ -6339,11 +6336,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder clearResponseCompression() {
         
@@ -6356,21 +6353,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.EchoStatus, io.grpc.benchmarks.proto.Messages.EchoStatus.Builder, io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder> responseStatusBuilder_;
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public boolean hasResponseStatus() {
         return responseStatusBuilder_ != null || responseStatus_ != null;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.benchmarks.proto.Messages.EchoStatus getResponseStatus() {
         if (responseStatusBuilder_ == null) {
@@ -6380,11 +6377,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder setResponseStatus(io.grpc.benchmarks.proto.Messages.EchoStatus value) {
         if (responseStatusBuilder_ == null) {
@@ -6400,11 +6397,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder setResponseStatus(
           io.grpc.benchmarks.proto.Messages.EchoStatus.Builder builderForValue) {
@@ -6418,11 +6415,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder mergeResponseStatus(io.grpc.benchmarks.proto.Messages.EchoStatus value) {
         if (responseStatusBuilder_ == null) {
@@ -6440,11 +6437,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder clearResponseStatus() {
         if (responseStatusBuilder_ == null) {
@@ -6458,11 +6455,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.benchmarks.proto.Messages.EchoStatus.Builder getResponseStatusBuilder() {
         
@@ -6470,11 +6467,11 @@
         return getResponseStatusFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder() {
         if (responseStatusBuilder_ != null) {
@@ -6485,11 +6482,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.EchoStatus, io.grpc.benchmarks.proto.Messages.EchoStatus.Builder, io.grpc.benchmarks.proto.Messages.EchoStatusOrBuilder> 
@@ -6534,16 +6531,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new StreamingOutputCallRequest(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -6567,36 +6555,36 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder();
   }
   /**
-   * Protobuf type {@code grpc.testing.StreamingOutputCallResponse}
-   *
    * <pre>
    * Server-streaming response, as configured by the request and parameters.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.StreamingOutputCallResponse}
    */
   public  static final class StreamingOutputCallResponse extends
       com.google.protobuf.GeneratedMessage implements
@@ -6616,7 +6604,8 @@
     }
     private StreamingOutputCallResponse(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -6649,11 +6638,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -6673,31 +6661,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 1;
     private io.grpc.benchmarks.proto.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.benchmarks.proto.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -6757,34 +6745,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.StreamingOutputCallResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -6806,11 +6800,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.StreamingOutputCallResponse}
-     *
      * <pre>
      * Server-streaming response, as configured by the request and parameters.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.StreamingOutputCallResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -6912,7 +6906,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.StreamingOutputCallResponse) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -6925,21 +6919,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -6949,11 +6943,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -6969,11 +6963,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(
           io.grpc.benchmarks.proto.Messages.Payload.Builder builderForValue) {
@@ -6987,11 +6981,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder mergePayload(io.grpc.benchmarks.proto.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -7009,11 +7003,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -7027,11 +7021,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -7039,11 +7033,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.benchmarks.proto.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -7054,11 +7048,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Messages.Payload, io.grpc.benchmarks.proto.Messages.Payload.Builder, io.grpc.benchmarks.proto.Messages.PayloadOrBuilder> 
@@ -7103,16 +7097,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new StreamingOutputCallResponse(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -7154,13 +7139,13 @@
     int getBackoffMs(int index);
   }
   /**
-   * Protobuf type {@code grpc.testing.ReconnectInfo}
-   *
    * <pre>
    * For reconnect interop test only.
    * Server tells client whether its reconnects are following the spec and the
    * reconnect backoffs it saw.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.ReconnectInfo}
    */
   public  static final class ReconnectInfo extends
       com.google.protobuf.GeneratedMessage implements
@@ -7182,7 +7167,8 @@
     }
     private ReconnectInfo(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -7228,11 +7214,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
           backoffMs_ = java.util.Collections.unmodifiableList(backoffMs_);
@@ -7361,34 +7346,40 @@
     }
     public static io.grpc.benchmarks.proto.Messages.ReconnectInfo parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.ReconnectInfo parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.ReconnectInfo parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.ReconnectInfo parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Messages.ReconnectInfo parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Messages.ReconnectInfo parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -7410,13 +7401,13 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.ReconnectInfo}
-     *
      * <pre>
      * For reconnect interop test only.
      * Server tells client whether its reconnects are following the spec and the
      * reconnect backoffs it saw.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.ReconnectInfo}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -7530,7 +7521,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Messages.ReconnectInfo) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -7661,16 +7652,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ReconnectInfo(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -7689,54 +7671,54 @@
 
   }
 
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_Payload_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_Payload_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_EchoStatus_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_EchoStatus_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_SimpleRequest_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_SimpleRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_SimpleResponse_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_SimpleResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_StreamingInputCallRequest_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_StreamingInputCallRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_StreamingInputCallResponse_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_StreamingInputCallResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ResponseParameters_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ResponseParameters_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_StreamingOutputCallRequest_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_StreamingOutputCallRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_StreamingOutputCallResponse_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_StreamingOutputCallResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ReconnectInfo_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ReconnectInfo_fieldAccessorTable;
 
@@ -7744,7 +7726,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Payloads.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Payloads.java
index 87deeb4..e351346 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Payloads.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Payloads.java
@@ -45,7 +45,8 @@
     }
     private ByteBufferParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -75,11 +76,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -175,34 +175,40 @@
     }
     public static io.grpc.benchmarks.proto.Payloads.ByteBufferParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.ByteBufferParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Payloads.ByteBufferParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.ByteBufferParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Payloads.ByteBufferParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.ByteBufferParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -324,7 +330,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Payloads.ByteBufferParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -414,16 +420,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ByteBufferParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -479,7 +476,8 @@
     }
     private SimpleProtoParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -509,11 +507,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -609,34 +606,40 @@
     }
     public static io.grpc.benchmarks.proto.Payloads.SimpleProtoParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.SimpleProtoParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Payloads.SimpleProtoParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.SimpleProtoParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Payloads.SimpleProtoParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.SimpleProtoParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -758,7 +761,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Payloads.SimpleProtoParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -848,16 +851,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new SimpleProtoParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -881,12 +875,12 @@
       com.google.protobuf.MessageOrBuilder {
   }
   /**
-   * Protobuf type {@code grpc.testing.ComplexProtoParams}
-   *
    * <pre>
    * TODO (vpai): Fill this in once the details of complex, representative
    *              protos are decided
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.ComplexProtoParams}
    */
   public  static final class ComplexProtoParams extends
       com.google.protobuf.GeneratedMessage implements
@@ -906,7 +900,8 @@
     }
     private ComplexProtoParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       try {
         boolean done = false;
@@ -925,11 +920,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -993,34 +987,40 @@
     }
     public static io.grpc.benchmarks.proto.Payloads.ComplexProtoParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.ComplexProtoParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Payloads.ComplexProtoParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.ComplexProtoParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Payloads.ComplexProtoParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.ComplexProtoParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1042,12 +1042,12 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.ComplexProtoParams}
-     *
      * <pre>
      * TODO (vpai): Fill this in once the details of complex, representative
      *              protos are decided
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.ComplexProtoParams}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -1135,7 +1135,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Payloads.ComplexProtoParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1173,16 +1173,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ComplexProtoParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1255,7 +1246,8 @@
     }
     private PayloadConfig(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -1317,11 +1309,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -1346,18 +1337,25 @@
       SIMPLE_PARAMS(2),
       COMPLEX_PARAMS(3),
       PAYLOAD_NOT_SET(0);
-      private int value = 0;
+      private final int value;
       private PayloadCase(int value) {
         this.value = value;
       }
+      /**
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
       public static PayloadCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static PayloadCase forNumber(int value) {
         switch (value) {
           case 1: return BYTEBUF_PARAMS;
           case 2: return SIMPLE_PARAMS;
           case 3: return COMPLEX_PARAMS;
           case 0: return PAYLOAD_NOT_SET;
-          default: throw new java.lang.IllegalArgumentException(
-            "Value is undefined for this oneof enum.");
+          default: return null;
         }
       }
       public int getNumber() {
@@ -1367,7 +1365,7 @@
 
     public PayloadCase
     getPayloadCase() {
-      return PayloadCase.valueOf(
+      return PayloadCase.forNumber(
           payloadCase_);
     }
 
@@ -1499,34 +1497,40 @@
     }
     public static io.grpc.benchmarks.proto.Payloads.PayloadConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.PayloadConfig parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Payloads.PayloadConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.PayloadConfig parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Payloads.PayloadConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Payloads.PayloadConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1677,7 +1681,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Payloads.PayloadConfig) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1689,7 +1693,7 @@
       private java.lang.Object payload_;
       public PayloadCase
           getPayloadCase() {
-        return PayloadCase.valueOf(
+        return PayloadCase.forNumber(
             payloadCase_);
       }
 
@@ -2120,16 +2124,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new PayloadConfig(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -2148,24 +2143,24 @@
 
   }
 
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ByteBufferParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ByteBufferParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_SimpleProtoParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_SimpleProtoParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ComplexProtoParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ComplexProtoParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_PayloadConfig_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_PayloadConfig_fieldAccessorTable;
 
@@ -2173,7 +2168,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Services.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Services.java
index 8a9298a..6f24cf2 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Services.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Services.java
@@ -13,7 +13,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Stats.java b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Stats.java
index 98b7324..18fd5bf 100644
--- a/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Stats.java
+++ b/benchmarks/src/generated/main/java/io/grpc/benchmarks/proto/Stats.java
@@ -13,30 +13,30 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional double time_elapsed = 1;</code>
-     *
      * <pre>
      * wall clock time change in seconds since last reset
      * </pre>
+     *
+     * <code>optional double time_elapsed = 1;</code>
      */
     double getTimeElapsed();
 
     /**
-     * <code>optional double time_user = 2;</code>
-     *
      * <pre>
      * change in user time (in seconds) used by the server since last reset
      * </pre>
+     *
+     * <code>optional double time_user = 2;</code>
      */
     double getTimeUser();
 
     /**
-     * <code>optional double time_system = 3;</code>
-     *
      * <pre>
      * change in server time (in seconds) used by the server process and all
      * threads since last reset
      * </pre>
+     *
+     * <code>optional double time_system = 3;</code>
      */
     double getTimeSystem();
   }
@@ -64,7 +64,8 @@
     }
     private ServerStats(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -99,11 +100,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -123,11 +123,11 @@
     public static final int TIME_ELAPSED_FIELD_NUMBER = 1;
     private double timeElapsed_;
     /**
-     * <code>optional double time_elapsed = 1;</code>
-     *
      * <pre>
      * wall clock time change in seconds since last reset
      * </pre>
+     *
+     * <code>optional double time_elapsed = 1;</code>
      */
     public double getTimeElapsed() {
       return timeElapsed_;
@@ -136,11 +136,11 @@
     public static final int TIME_USER_FIELD_NUMBER = 2;
     private double timeUser_;
     /**
-     * <code>optional double time_user = 2;</code>
-     *
      * <pre>
      * change in user time (in seconds) used by the server since last reset
      * </pre>
+     *
+     * <code>optional double time_user = 2;</code>
      */
     public double getTimeUser() {
       return timeUser_;
@@ -149,12 +149,12 @@
     public static final int TIME_SYSTEM_FIELD_NUMBER = 3;
     private double timeSystem_;
     /**
-     * <code>optional double time_system = 3;</code>
-     *
      * <pre>
      * change in server time (in seconds) used by the server process and all
      * threads since last reset
      * </pre>
+     *
+     * <code>optional double time_system = 3;</code>
      */
     public double getTimeSystem() {
       return timeSystem_;
@@ -228,34 +228,40 @@
     }
     public static io.grpc.benchmarks.proto.Stats.ServerStats parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.ServerStats parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Stats.ServerStats parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.ServerStats parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Stats.ServerStats parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.ServerStats parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -383,7 +389,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Stats.ServerStats) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -394,21 +400,21 @@
 
       private double timeElapsed_ ;
       /**
-       * <code>optional double time_elapsed = 1;</code>
-       *
        * <pre>
        * wall clock time change in seconds since last reset
        * </pre>
+       *
+       * <code>optional double time_elapsed = 1;</code>
        */
       public double getTimeElapsed() {
         return timeElapsed_;
       }
       /**
-       * <code>optional double time_elapsed = 1;</code>
-       *
        * <pre>
        * wall clock time change in seconds since last reset
        * </pre>
+       *
+       * <code>optional double time_elapsed = 1;</code>
        */
       public Builder setTimeElapsed(double value) {
         
@@ -417,11 +423,11 @@
         return this;
       }
       /**
-       * <code>optional double time_elapsed = 1;</code>
-       *
        * <pre>
        * wall clock time change in seconds since last reset
        * </pre>
+       *
+       * <code>optional double time_elapsed = 1;</code>
        */
       public Builder clearTimeElapsed() {
         
@@ -432,21 +438,21 @@
 
       private double timeUser_ ;
       /**
-       * <code>optional double time_user = 2;</code>
-       *
        * <pre>
        * change in user time (in seconds) used by the server since last reset
        * </pre>
+       *
+       * <code>optional double time_user = 2;</code>
        */
       public double getTimeUser() {
         return timeUser_;
       }
       /**
-       * <code>optional double time_user = 2;</code>
-       *
        * <pre>
        * change in user time (in seconds) used by the server since last reset
        * </pre>
+       *
+       * <code>optional double time_user = 2;</code>
        */
       public Builder setTimeUser(double value) {
         
@@ -455,11 +461,11 @@
         return this;
       }
       /**
-       * <code>optional double time_user = 2;</code>
-       *
        * <pre>
        * change in user time (in seconds) used by the server since last reset
        * </pre>
+       *
+       * <code>optional double time_user = 2;</code>
        */
       public Builder clearTimeUser() {
         
@@ -470,23 +476,23 @@
 
       private double timeSystem_ ;
       /**
-       * <code>optional double time_system = 3;</code>
-       *
        * <pre>
        * change in server time (in seconds) used by the server process and all
        * threads since last reset
        * </pre>
+       *
+       * <code>optional double time_system = 3;</code>
        */
       public double getTimeSystem() {
         return timeSystem_;
       }
       /**
-       * <code>optional double time_system = 3;</code>
-       *
        * <pre>
        * change in server time (in seconds) used by the server process and all
        * threads since last reset
        * </pre>
+       *
+       * <code>optional double time_system = 3;</code>
        */
       public Builder setTimeSystem(double value) {
         
@@ -495,12 +501,12 @@
         return this;
       }
       /**
-       * <code>optional double time_system = 3;</code>
-       *
        * <pre>
        * change in server time (in seconds) used by the server process and all
        * threads since last reset
        * </pre>
+       *
+       * <code>optional double time_system = 3;</code>
        */
       public Builder clearTimeSystem() {
         
@@ -538,16 +544,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ServerStats(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -571,29 +568,29 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional double resolution = 1;</code>
-     *
      * <pre>
      * first bucket is [0, 1 + resolution)
      * </pre>
+     *
+     * <code>optional double resolution = 1;</code>
      */
     double getResolution();
 
     /**
-     * <code>optional double max_possible = 2;</code>
-     *
      * <pre>
      * use enough buckets to allow this value
      * </pre>
+     *
+     * <code>optional double max_possible = 2;</code>
      */
     double getMaxPossible();
   }
   /**
-   * Protobuf type {@code grpc.testing.HistogramParams}
-   *
    * <pre>
    * Histogram params based on grpc/support/histogram.c
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.HistogramParams}
    */
   public  static final class HistogramParams extends
       com.google.protobuf.GeneratedMessage implements
@@ -615,7 +612,8 @@
     }
     private HistogramParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -645,11 +643,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -669,11 +666,11 @@
     public static final int RESOLUTION_FIELD_NUMBER = 1;
     private double resolution_;
     /**
-     * <code>optional double resolution = 1;</code>
-     *
      * <pre>
      * first bucket is [0, 1 + resolution)
      * </pre>
+     *
+     * <code>optional double resolution = 1;</code>
      */
     public double getResolution() {
       return resolution_;
@@ -682,11 +679,11 @@
     public static final int MAX_POSSIBLE_FIELD_NUMBER = 2;
     private double maxPossible_;
     /**
-     * <code>optional double max_possible = 2;</code>
-     *
      * <pre>
      * use enough buckets to allow this value
      * </pre>
+     *
+     * <code>optional double max_possible = 2;</code>
      */
     public double getMaxPossible() {
       return maxPossible_;
@@ -753,34 +750,40 @@
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -802,11 +805,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.HistogramParams}
-     *
      * <pre>
      * Histogram params based on grpc/support/histogram.c
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.HistogramParams}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -906,7 +909,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Stats.HistogramParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -917,21 +920,21 @@
 
       private double resolution_ ;
       /**
-       * <code>optional double resolution = 1;</code>
-       *
        * <pre>
        * first bucket is [0, 1 + resolution)
        * </pre>
+       *
+       * <code>optional double resolution = 1;</code>
        */
       public double getResolution() {
         return resolution_;
       }
       /**
-       * <code>optional double resolution = 1;</code>
-       *
        * <pre>
        * first bucket is [0, 1 + resolution)
        * </pre>
+       *
+       * <code>optional double resolution = 1;</code>
        */
       public Builder setResolution(double value) {
         
@@ -940,11 +943,11 @@
         return this;
       }
       /**
-       * <code>optional double resolution = 1;</code>
-       *
        * <pre>
        * first bucket is [0, 1 + resolution)
        * </pre>
+       *
+       * <code>optional double resolution = 1;</code>
        */
       public Builder clearResolution() {
         
@@ -955,21 +958,21 @@
 
       private double maxPossible_ ;
       /**
-       * <code>optional double max_possible = 2;</code>
-       *
        * <pre>
        * use enough buckets to allow this value
        * </pre>
+       *
+       * <code>optional double max_possible = 2;</code>
        */
       public double getMaxPossible() {
         return maxPossible_;
       }
       /**
-       * <code>optional double max_possible = 2;</code>
-       *
        * <pre>
        * use enough buckets to allow this value
        * </pre>
+       *
+       * <code>optional double max_possible = 2;</code>
        */
       public Builder setMaxPossible(double value) {
         
@@ -978,11 +981,11 @@
         return this;
       }
       /**
-       * <code>optional double max_possible = 2;</code>
-       *
        * <pre>
        * use enough buckets to allow this value
        * </pre>
+       *
+       * <code>optional double max_possible = 2;</code>
        */
       public Builder clearMaxPossible() {
         
@@ -1020,16 +1023,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new HistogramParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1091,11 +1085,11 @@
     double getCount();
   }
   /**
-   * Protobuf type {@code grpc.testing.HistogramData}
-   *
    * <pre>
    * Histogram data based on grpc/support/histogram.c
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.HistogramData}
    */
   public  static final class HistogramData extends
       com.google.protobuf.GeneratedMessage implements
@@ -1121,7 +1115,8 @@
     }
     private HistogramData(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -1187,11 +1182,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
           bucket_ = java.util.Collections.unmodifiableList(bucket_);
@@ -1384,34 +1378,40 @@
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramData parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramData parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramData parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramData parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramData parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.HistogramData parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1433,11 +1433,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.HistogramData}
-     *
      * <pre>
      * Histogram data based on grpc/support/histogram.c
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.HistogramData}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -1575,7 +1575,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Stats.HistogramData) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1810,16 +1810,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new HistogramData(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1843,36 +1834,36 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-     *
      * <pre>
      * Latency histogram. Data points are in nanoseconds.
      * </pre>
+     *
+     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
      */
     boolean hasLatencies();
     /**
-     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-     *
      * <pre>
      * Latency histogram. Data points are in nanoseconds.
      * </pre>
+     *
+     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
      */
     io.grpc.benchmarks.proto.Stats.HistogramData getLatencies();
     /**
-     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-     *
      * <pre>
      * Latency histogram. Data points are in nanoseconds.
      * </pre>
+     *
+     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
      */
     io.grpc.benchmarks.proto.Stats.HistogramDataOrBuilder getLatenciesOrBuilder();
 
     /**
-     * <code>optional double time_elapsed = 2;</code>
-     *
      * <pre>
      * See ServerStats for details.
      * </pre>
+     *
+     * <code>optional double time_elapsed = 2;</code>
      */
     double getTimeElapsed();
 
@@ -1910,7 +1901,8 @@
     }
     private ClientStats(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -1958,11 +1950,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -1982,31 +1973,31 @@
     public static final int LATENCIES_FIELD_NUMBER = 1;
     private io.grpc.benchmarks.proto.Stats.HistogramData latencies_;
     /**
-     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-     *
      * <pre>
      * Latency histogram. Data points are in nanoseconds.
      * </pre>
+     *
+     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
      */
     public boolean hasLatencies() {
       return latencies_ != null;
     }
     /**
-     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-     *
      * <pre>
      * Latency histogram. Data points are in nanoseconds.
      * </pre>
+     *
+     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
      */
     public io.grpc.benchmarks.proto.Stats.HistogramData getLatencies() {
       return latencies_ == null ? io.grpc.benchmarks.proto.Stats.HistogramData.getDefaultInstance() : latencies_;
     }
     /**
-     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-     *
      * <pre>
      * Latency histogram. Data points are in nanoseconds.
      * </pre>
+     *
+     * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
      */
     public io.grpc.benchmarks.proto.Stats.HistogramDataOrBuilder getLatenciesOrBuilder() {
       return getLatencies();
@@ -2015,11 +2006,11 @@
     public static final int TIME_ELAPSED_FIELD_NUMBER = 2;
     private double timeElapsed_;
     /**
-     * <code>optional double time_elapsed = 2;</code>
-     *
      * <pre>
      * See ServerStats for details.
      * </pre>
+     *
+     * <code>optional double time_elapsed = 2;</code>
      */
     public double getTimeElapsed() {
       return timeElapsed_;
@@ -2118,34 +2109,40 @@
     }
     public static io.grpc.benchmarks.proto.Stats.ClientStats parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.ClientStats parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Stats.ClientStats parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.ClientStats parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.benchmarks.proto.Stats.ClientStats parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.benchmarks.proto.Stats.ClientStats parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -2287,7 +2284,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.benchmarks.proto.Stats.ClientStats) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -2300,21 +2297,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Stats.HistogramData, io.grpc.benchmarks.proto.Stats.HistogramData.Builder, io.grpc.benchmarks.proto.Stats.HistogramDataOrBuilder> latenciesBuilder_;
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       public boolean hasLatencies() {
         return latenciesBuilder_ != null || latencies_ != null;
       }
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       public io.grpc.benchmarks.proto.Stats.HistogramData getLatencies() {
         if (latenciesBuilder_ == null) {
@@ -2324,11 +2321,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       public Builder setLatencies(io.grpc.benchmarks.proto.Stats.HistogramData value) {
         if (latenciesBuilder_ == null) {
@@ -2344,11 +2341,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       public Builder setLatencies(
           io.grpc.benchmarks.proto.Stats.HistogramData.Builder builderForValue) {
@@ -2362,11 +2359,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       public Builder mergeLatencies(io.grpc.benchmarks.proto.Stats.HistogramData value) {
         if (latenciesBuilder_ == null) {
@@ -2384,11 +2381,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       public Builder clearLatencies() {
         if (latenciesBuilder_ == null) {
@@ -2402,11 +2399,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       public io.grpc.benchmarks.proto.Stats.HistogramData.Builder getLatenciesBuilder() {
         
@@ -2414,11 +2411,11 @@
         return getLatenciesFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       public io.grpc.benchmarks.proto.Stats.HistogramDataOrBuilder getLatenciesOrBuilder() {
         if (latenciesBuilder_ != null) {
@@ -2429,11 +2426,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
-       *
        * <pre>
        * Latency histogram. Data points are in nanoseconds.
        * </pre>
+       *
+       * <code>optional .grpc.testing.HistogramData latencies = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.benchmarks.proto.Stats.HistogramData, io.grpc.benchmarks.proto.Stats.HistogramData.Builder, io.grpc.benchmarks.proto.Stats.HistogramDataOrBuilder> 
@@ -2451,21 +2448,21 @@
 
       private double timeElapsed_ ;
       /**
-       * <code>optional double time_elapsed = 2;</code>
-       *
        * <pre>
        * See ServerStats for details.
        * </pre>
+       *
+       * <code>optional double time_elapsed = 2;</code>
        */
       public double getTimeElapsed() {
         return timeElapsed_;
       }
       /**
-       * <code>optional double time_elapsed = 2;</code>
-       *
        * <pre>
        * See ServerStats for details.
        * </pre>
+       *
+       * <code>optional double time_elapsed = 2;</code>
        */
       public Builder setTimeElapsed(double value) {
         
@@ -2474,11 +2471,11 @@
         return this;
       }
       /**
-       * <code>optional double time_elapsed = 2;</code>
-       *
        * <pre>
        * See ServerStats for details.
        * </pre>
+       *
+       * <code>optional double time_elapsed = 2;</code>
        */
       public Builder clearTimeElapsed() {
         
@@ -2568,16 +2565,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ClientStats(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -2596,24 +2584,24 @@
 
   }
 
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ServerStats_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ServerStats_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_HistogramParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_HistogramParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_HistogramData_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_HistogramData_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ClientStats_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ClientStats_fieldAccessorTable;
 
@@ -2621,7 +2609,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/build.gradle b/build.gradle
index 62af69b..861bb33 100644
--- a/build.gradle
+++ b/build.gradle
@@ -59,7 +59,7 @@
         javaPluginPath = "$rootDir/compiler/build/exe/java_plugin/$protocPluginBaseName$exeSuffix"
 
         guavaVersion = '19.0'
-        protobufVersion = '3.0.0-beta-2'
+        protobufVersion = '3.0.0-beta-3'
         protobufNanoVersion = '3.0.0-alpha-5'
 
         configureProtoCompilation = {
@@ -123,6 +123,11 @@
               }
             }
           }
+
+          compileJava {
+            // Protobuf-generated code produces some warnings.
+            options.compilerArgs = compileJava.options.compilerArgs + ["-Xlint:-deprecation"]
+          }
         }
 
         def epoll_suffix = "";
diff --git a/buildscripts/jenkins-pre.bat b/buildscripts/jenkins-pre.bat
index f0e6785..229b4e4 100644
--- a/buildscripts/jenkins-pre.bat
+++ b/buildscripts/jenkins-pre.bat
@@ -13,5 +13,5 @@
 set ESCWORKSPACE=%WORKSPACE:\=\\%
 
 echo targetArch=x86_32> gradle.properties
-echo vcProtobufLibs=%ESCWORKSPACE%\\grpc-java-helper\\protobuf-3.0.0-beta-2\\cmake\\build\\Release>> gradle.properties
-echo vcProtobufInclude=%ESCWORKSPACE%\\grpc-java-helper\\protobuf-3.0.0-beta-2\\cmake\\build\\include>> gradle.properties
+echo vcProtobufLibs=%ESCWORKSPACE%\\grpc-java-helper\\protobuf-3.0.0-beta-3\\cmake\\build\\Release>> gradle.properties
+echo vcProtobufInclude=%ESCWORKSPACE%\\grpc-java-helper\\protobuf-3.0.0-beta-3\\cmake\\build\\include>> gradle.properties
diff --git a/buildscripts/make_dependencies.bat b/buildscripts/make_dependencies.bat
index e907ca9..93ff3fc 100644
--- a/buildscripts/make_dependencies.bat
+++ b/buildscripts/make_dependencies.bat
@@ -4,7 +4,7 @@
 REM Prerequisite:
 REM   7za.exe in current directory or PATH
 
-set PROTOBUF_VER=3.0.0-beta-2
+set PROTOBUF_VER=3.0.0-beta-3
 set CMAKE_NAME=cmake-3.3.2-win32-x86
 
 if not exist "protobuf-%PROTOBUF_VER%\cmake\build\Release\" (
@@ -25,7 +25,7 @@
 powershell -command "& { iwr https://github.com/google/protobuf/archive/v%PROTOBUF_VER%.zip -OutFile protobuf.zip }"
 7za X protobuf.zip
 del protobuf.zip
-pushd protobuf-3.0.0-beta-2\cmake
+pushd protobuf-3.0.0-beta-3\cmake
 mkdir build
 cd build
 cmake -Dprotobuf_BUILD_TESTS=OFF ..
diff --git a/compiler/Dockerfile b/compiler/Dockerfile
index e25f285..a51aaca 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-beta-2 && \
+    git checkout v3.0.0-beta-3 && \
     ./autogen.sh && \
     CXXFLAGS=-m32 ./configure --disable-shared --prefix=/protobuf-32 && \
     make clean && make -j$(nproc) && make -j$(nproc) install"'
diff --git a/compiler/README.md b/compiler/README.md
index d09a70b..2cd1aee 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-beta-2 or up
+* [Protobuf](https://github.com/google/protobuf) 3.0.0-beta-3 or up
 
 ## Compiling and testing the codegen
 Change to the `compiler` directory:
@@ -37,6 +37,11 @@
 $ protoc --plugin=protoc-gen-grpc-java=build/binaries/java_pluginExecutable/protoc-gen-grpc-java \
   --grpc-java_out="$OUTPUT_FILE" --proto_path="$DIR_OF_PROTO_FILE" "$PROTO_FILE"
 ```
+To generate Java interfaces with protobuf lite:
+```
+$ protoc --plugin=protoc-gen-grpc-java=build/binaries/java_pluginExecutable/protoc-gen-grpc-java \
+  --grpc-java_out=lite:"$OUTPUT_FILE" --proto_path="$DIR_OF_PROTO_FILE" "$PROTO_FILE"
+```
 To generate Java interfaces with protobuf nano:
 ```
 $ protoc --plugin=protoc-gen-grpc-java=build/binaries/java_pluginExecutable/protoc-gen-grpc-java \
diff --git a/compiler/build.gradle b/compiler/build.gradle
index c9b7c56..e368c36 100644
--- a/compiler/build.gradle
+++ b/compiler/build.gradle
@@ -125,7 +125,11 @@
 }
 
 sourceSets {
-  testLite {}
+  testLite {
+    proto {
+      setSrcDirs(['src/test/proto'])
+    }
+  }
   testNano {
     proto {
       setSrcDirs(['src/test/proto'])
@@ -136,7 +140,7 @@
 compileTestLiteJava {
   // Protobuf-generated Lite produces quite a few warnings.
   options.compilerArgs = compileTestJava.options.compilerArgs +
-      ["-Xlint:-unchecked", "-Xlint:-rawtypes"]
+      ["-Xlint:-unchecked", "-Xlint:-rawtypes", "-Xlint:-fallthrough"]
 }
 
 compileTestNanoJava {
diff --git a/compiler/src/testLite/proto/test.proto b/compiler/src/testLite/proto/test.proto
deleted file mode 100644
index d2a1fd5..0000000
--- a/compiler/src/testLite/proto/test.proto
+++ /dev/null
@@ -1,55 +0,0 @@
-// A simple service definition for testing the protoc plugin.
-syntax = "proto2";
-
-package grpc.testing;
-
-option java_package = "io.grpc.testing.integration";
-option optimize_for = LITE_RUNTIME;
-
-message SimpleRequest {
-}
-
-message SimpleResponse {
-}
-
-message StreamingInputCallRequest {
-}
-
-message StreamingInputCallResponse {
-}
-
-message StreamingOutputCallRequest {
-}
-
-message StreamingOutputCallResponse {
-}
-
-// Test service that supports all call types.
-service TestService {
-  // One request followed by one response.
-  // The server returns the client payload as-is.
-  rpc UnaryCall(SimpleRequest) returns (SimpleResponse);
-
-  // One request followed by a sequence of responses (streamed download).
-  // The server returns the payload with client desired type and sizes.
-  rpc StreamingOutputCall(StreamingOutputCallRequest)
-      returns (stream StreamingOutputCallResponse);
-
-  // A sequence of requests followed by one response (streamed upload).
-  // The server returns the aggregated size of client payload as the result.
-  rpc StreamingInputCall(stream StreamingInputCallRequest)
-      returns (StreamingInputCallResponse);
-
-  // A sequence of requests with each request served by the server immediately.
-  // As one request could lead to multiple responses, this interface
-  // demonstrates the idea of full bidirectionality.
-  rpc FullBidiCall(stream StreamingOutputCallRequest)
-      returns (stream StreamingOutputCallResponse);
-
-  // A sequence of requests followed by a sequence of responses.
-  // The server buffers all the client requests and then serves them in order. A
-  // stream of responses are returned to the client when the server starts with
-  // first request.
-  rpc HalfBidiCall(stream StreamingOutputCallRequest)
-      returns (stream StreamingOutputCallResponse);
-}
diff --git a/examples/android/app/build.gradle b/examples/android/app/build.gradle
index dfd7fa5..ee104af 100644
--- a/examples/android/app/build.gradle
+++ b/examples/android/app/build.gradle
@@ -27,7 +27,7 @@
 
 protobuf {
     protoc {
-        artifact = 'com.google.protobuf:protoc:3.0.0-beta-2'
+        artifact = 'com.google.protobuf:protoc:3.0.0-beta-3'
     }
     plugins {
         grpc {
diff --git a/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloReply.java b/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloReply.java
index a613ec3..c45f263 100644
--- a/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloReply.java
+++ b/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloReply.java
@@ -4,11 +4,11 @@
 package io.grpc.examples.helloworld;
 
 /**
- * Protobuf type {@code helloworld.HelloReply}
- *
  * <pre>
  * The response message containing the greetings
  * </pre>
+ *
+ * Protobuf type {@code helloworld.HelloReply}
  */
 public  final class HelloReply extends
     com.google.protobuf.GeneratedMessage implements
@@ -29,7 +29,8 @@
   }
   private HelloReply(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -55,11 +56,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -163,34 +163,40 @@
   }
   public static io.grpc.examples.helloworld.HelloReply parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.helloworld.HelloReply parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.helloworld.HelloReply parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.examples.helloworld.HelloReply parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.helloworld.HelloReply parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.helloworld.HelloReply parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -212,11 +218,11 @@
     return builder;
   }
   /**
-   * Protobuf type {@code helloworld.HelloReply}
-   *
    * <pre>
    * The response message containing the greetings
    * </pre>
+   *
+   * Protobuf type {@code helloworld.HelloReply}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -311,7 +317,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.examples.helloworld.HelloReply) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -418,16 +424,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new HelloReply(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloRequest.java b/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloRequest.java
index e96df7c..bb5d252 100644
--- a/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloRequest.java
+++ b/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloRequest.java
@@ -4,11 +4,11 @@
 package io.grpc.examples.helloworld;
 
 /**
- * Protobuf type {@code helloworld.HelloRequest}
- *
  * <pre>
  * The request message containing the user's name.
  * </pre>
+ *
+ * Protobuf type {@code helloworld.HelloRequest}
  */
 public  final class HelloRequest extends
     com.google.protobuf.GeneratedMessage implements
@@ -29,7 +29,8 @@
   }
   private HelloRequest(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -55,11 +56,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -163,34 +163,40 @@
   }
   public static io.grpc.examples.helloworld.HelloRequest parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.helloworld.HelloRequest parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.helloworld.HelloRequest parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.examples.helloworld.HelloRequest parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.helloworld.HelloRequest parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.helloworld.HelloRequest parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -212,11 +218,11 @@
     return builder;
   }
   /**
-   * Protobuf type {@code helloworld.HelloRequest}
-   *
    * <pre>
    * The request message containing the user's name.
    * </pre>
+   *
+   * Protobuf type {@code helloworld.HelloRequest}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -311,7 +317,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.examples.helloworld.HelloRequest) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -418,16 +424,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new HelloRequest(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloWorldProto.java b/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloWorldProto.java
index 03e1e6e..32704fe 100644
--- a/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloWorldProto.java
+++ b/examples/src/generated/main/java/io/grpc/examples/helloworld/HelloWorldProto.java
@@ -8,14 +8,14 @@
   public static void registerAllExtensions(
       com.google.protobuf.ExtensionRegistry registry) {
   }
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_helloworld_HelloRequest_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_helloworld_HelloRequest_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_helloworld_HelloReply_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_helloworld_HelloReply_fieldAccessorTable;
 
@@ -23,7 +23,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/Feature.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/Feature.java
index be77f97..9b87e93 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/Feature.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/Feature.java
@@ -4,12 +4,12 @@
 package io.grpc.examples.routeguide;
 
 /**
- * Protobuf type {@code routeguide.Feature}
- *
  * <pre>
  * A feature names something at a given point.
  * If a feature could not be named, the name is empty.
  * </pre>
+ *
+ * Protobuf type {@code routeguide.Feature}
  */
 public  final class Feature extends
     com.google.protobuf.GeneratedMessage implements
@@ -30,7 +30,8 @@
   }
   private Feature(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -69,11 +70,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -93,11 +93,11 @@
   public static final int NAME_FIELD_NUMBER = 1;
   private volatile java.lang.Object name_;
   /**
-   * <code>optional string name = 1;</code>
-   *
    * <pre>
    * The name of the feature.
    * </pre>
+   *
+   * <code>optional string name = 1;</code>
    */
   public java.lang.String getName() {
     java.lang.Object ref = name_;
@@ -112,11 +112,11 @@
     }
   }
   /**
-   * <code>optional string name = 1;</code>
-   *
    * <pre>
    * The name of the feature.
    * </pre>
+   *
+   * <code>optional string name = 1;</code>
    */
   public com.google.protobuf.ByteString
       getNameBytes() {
@@ -135,31 +135,31 @@
   public static final int LOCATION_FIELD_NUMBER = 2;
   private io.grpc.examples.routeguide.Point location_;
   /**
-   * <code>optional .routeguide.Point location = 2;</code>
-   *
    * <pre>
    * The point where the feature is detected.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 2;</code>
    */
   public boolean hasLocation() {
     return location_ != null;
   }
   /**
-   * <code>optional .routeguide.Point location = 2;</code>
-   *
    * <pre>
    * The point where the feature is detected.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 2;</code>
    */
   public io.grpc.examples.routeguide.Point getLocation() {
     return location_ == null ? io.grpc.examples.routeguide.Point.getDefaultInstance() : location_;
   }
   /**
-   * <code>optional .routeguide.Point location = 2;</code>
-   *
    * <pre>
    * The point where the feature is detected.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 2;</code>
    */
   public io.grpc.examples.routeguide.PointOrBuilder getLocationOrBuilder() {
     return getLocation();
@@ -225,34 +225,40 @@
   }
   public static io.grpc.examples.routeguide.Feature parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Feature parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.Feature parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Feature parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.Feature parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Feature parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -274,12 +280,12 @@
     return builder;
   }
   /**
-   * Protobuf type {@code routeguide.Feature}
-   *
    * <pre>
    * A feature names something at a given point.
    * If a feature could not be named, the name is empty.
    * </pre>
+   *
+   * Protobuf type {@code routeguide.Feature}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -388,7 +394,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.examples.routeguide.Feature) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -399,11 +405,11 @@
 
     private java.lang.Object name_ = "";
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * The name of the feature.
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public java.lang.String getName() {
       java.lang.Object ref = name_;
@@ -418,11 +424,11 @@
       }
     }
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * The name of the feature.
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public com.google.protobuf.ByteString
         getNameBytes() {
@@ -438,11 +444,11 @@
       }
     }
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * The name of the feature.
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public Builder setName(
         java.lang.String value) {
@@ -455,11 +461,11 @@
       return this;
     }
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * The name of the feature.
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public Builder clearName() {
       
@@ -468,11 +474,11 @@
       return this;
     }
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * The name of the feature.
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public Builder setNameBytes(
         com.google.protobuf.ByteString value) {
@@ -490,21 +496,21 @@
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.examples.routeguide.Point, io.grpc.examples.routeguide.Point.Builder, io.grpc.examples.routeguide.PointOrBuilder> locationBuilder_;
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     public boolean hasLocation() {
       return locationBuilder_ != null || location_ != null;
     }
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     public io.grpc.examples.routeguide.Point getLocation() {
       if (locationBuilder_ == null) {
@@ -514,11 +520,11 @@
       }
     }
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     public Builder setLocation(io.grpc.examples.routeguide.Point value) {
       if (locationBuilder_ == null) {
@@ -534,11 +540,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     public Builder setLocation(
         io.grpc.examples.routeguide.Point.Builder builderForValue) {
@@ -552,11 +558,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     public Builder mergeLocation(io.grpc.examples.routeguide.Point value) {
       if (locationBuilder_ == null) {
@@ -574,11 +580,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     public Builder clearLocation() {
       if (locationBuilder_ == null) {
@@ -592,11 +598,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     public io.grpc.examples.routeguide.Point.Builder getLocationBuilder() {
       
@@ -604,11 +610,11 @@
       return getLocationFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     public io.grpc.examples.routeguide.PointOrBuilder getLocationOrBuilder() {
       if (locationBuilder_ != null) {
@@ -619,11 +625,11 @@
       }
     }
     /**
-     * <code>optional .routeguide.Point location = 2;</code>
-     *
      * <pre>
      * The point where the feature is detected.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 2;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.examples.routeguide.Point, io.grpc.examples.routeguide.Point.Builder, io.grpc.examples.routeguide.PointOrBuilder> 
@@ -668,16 +674,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new Feature(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/FeatureDatabase.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/FeatureDatabase.java
index ae0a536..21259e8 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/FeatureDatabase.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/FeatureDatabase.java
@@ -4,11 +4,11 @@
 package io.grpc.examples.routeguide;
 
 /**
- * Protobuf type {@code routeguide.FeatureDatabase}
- *
  * <pre>
  * Not used in the RPC.  Instead, this is here for the form serialized to disk.
  * </pre>
+ *
+ * Protobuf type {@code routeguide.FeatureDatabase}
  */
 public  final class FeatureDatabase extends
     com.google.protobuf.GeneratedMessage implements
@@ -29,7 +29,8 @@
   }
   private FeatureDatabase(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -57,11 +58,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
         feature_ = java.util.Collections.unmodifiableList(feature_);
@@ -170,34 +170,40 @@
   }
   public static io.grpc.examples.routeguide.FeatureDatabase parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.FeatureDatabase parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.FeatureDatabase parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.FeatureDatabase parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.FeatureDatabase parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.FeatureDatabase parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -219,11 +225,11 @@
     return builder;
   }
   /**
-   * Protobuf type {@code routeguide.FeatureDatabase}
-   *
    * <pre>
    * Not used in the RPC.  Instead, this is here for the form serialized to disk.
    * </pre>
+   *
+   * Protobuf type {@code routeguide.FeatureDatabase}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -354,7 +360,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.examples.routeguide.FeatureDatabase) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -633,16 +639,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new FeatureDatabase(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/FeatureOrBuilder.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/FeatureOrBuilder.java
index e8fb726..ec173ab 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/FeatureOrBuilder.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/FeatureOrBuilder.java
@@ -8,45 +8,45 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional string name = 1;</code>
-   *
    * <pre>
    * The name of the feature.
    * </pre>
+   *
+   * <code>optional string name = 1;</code>
    */
   java.lang.String getName();
   /**
-   * <code>optional string name = 1;</code>
-   *
    * <pre>
    * The name of the feature.
    * </pre>
+   *
+   * <code>optional string name = 1;</code>
    */
   com.google.protobuf.ByteString
       getNameBytes();
 
   /**
-   * <code>optional .routeguide.Point location = 2;</code>
-   *
    * <pre>
    * The point where the feature is detected.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 2;</code>
    */
   boolean hasLocation();
   /**
-   * <code>optional .routeguide.Point location = 2;</code>
-   *
    * <pre>
    * The point where the feature is detected.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 2;</code>
    */
   io.grpc.examples.routeguide.Point getLocation();
   /**
-   * <code>optional .routeguide.Point location = 2;</code>
-   *
    * <pre>
    * The point where the feature is detected.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 2;</code>
    */
   io.grpc.examples.routeguide.PointOrBuilder getLocationOrBuilder();
 }
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/Point.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/Point.java
index 49aefc7..2b63046 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/Point.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/Point.java
@@ -4,14 +4,14 @@
 package io.grpc.examples.routeguide;
 
 /**
- * Protobuf type {@code routeguide.Point}
- *
  * <pre>
  * Points are represented as latitude-longitude pairs in the E7 representation
  * (degrees multiplied by 10**7 and rounded to the nearest integer).
  * Latitudes should be in the range +/- 90 degrees and longitude should be in
  * the range +/- 180 degrees (inclusive).
  * </pre>
+ *
+ * Protobuf type {@code routeguide.Point}
  */
 public  final class Point extends
     com.google.protobuf.GeneratedMessage implements
@@ -33,7 +33,8 @@
   }
   private Point(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -63,11 +64,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -163,34 +163,40 @@
   }
   public static io.grpc.examples.routeguide.Point parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Point parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.Point parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Point parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.Point parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Point parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -212,14 +218,14 @@
     return builder;
   }
   /**
-   * Protobuf type {@code routeguide.Point}
-   *
    * <pre>
    * Points are represented as latitude-longitude pairs in the E7 representation
    * (degrees multiplied by 10**7 and rounded to the nearest integer).
    * Latitudes should be in the range +/- 90 degrees and longitude should be in
    * the range +/- 180 degrees (inclusive).
    * </pre>
+   *
+   * Protobuf type {@code routeguide.Point}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -319,7 +325,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.examples.routeguide.Point) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -409,16 +415,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new Point(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/Rectangle.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/Rectangle.java
index 8268e7f..f38ed16 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/Rectangle.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/Rectangle.java
@@ -4,12 +4,12 @@
 package io.grpc.examples.routeguide;
 
 /**
- * Protobuf type {@code routeguide.Rectangle}
- *
  * <pre>
  * A latitude-longitude rectangle, represented as two diagonally opposite
  * points "lo" and "hi".
  * </pre>
+ *
+ * Protobuf type {@code routeguide.Rectangle}
  */
 public  final class Rectangle extends
     com.google.protobuf.GeneratedMessage implements
@@ -29,7 +29,8 @@
   }
   private Rectangle(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -75,11 +76,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -99,31 +99,31 @@
   public static final int LO_FIELD_NUMBER = 1;
   private io.grpc.examples.routeguide.Point lo_;
   /**
-   * <code>optional .routeguide.Point lo = 1;</code>
-   *
    * <pre>
    * One corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point lo = 1;</code>
    */
   public boolean hasLo() {
     return lo_ != null;
   }
   /**
-   * <code>optional .routeguide.Point lo = 1;</code>
-   *
    * <pre>
    * One corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point lo = 1;</code>
    */
   public io.grpc.examples.routeguide.Point getLo() {
     return lo_ == null ? io.grpc.examples.routeguide.Point.getDefaultInstance() : lo_;
   }
   /**
-   * <code>optional .routeguide.Point lo = 1;</code>
-   *
    * <pre>
    * One corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point lo = 1;</code>
    */
   public io.grpc.examples.routeguide.PointOrBuilder getLoOrBuilder() {
     return getLo();
@@ -132,31 +132,31 @@
   public static final int HI_FIELD_NUMBER = 2;
   private io.grpc.examples.routeguide.Point hi_;
   /**
-   * <code>optional .routeguide.Point hi = 2;</code>
-   *
    * <pre>
    * The other corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point hi = 2;</code>
    */
   public boolean hasHi() {
     return hi_ != null;
   }
   /**
-   * <code>optional .routeguide.Point hi = 2;</code>
-   *
    * <pre>
    * The other corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point hi = 2;</code>
    */
   public io.grpc.examples.routeguide.Point getHi() {
     return hi_ == null ? io.grpc.examples.routeguide.Point.getDefaultInstance() : hi_;
   }
   /**
-   * <code>optional .routeguide.Point hi = 2;</code>
-   *
    * <pre>
    * The other corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point hi = 2;</code>
    */
   public io.grpc.examples.routeguide.PointOrBuilder getHiOrBuilder() {
     return getHi();
@@ -223,34 +223,40 @@
   }
   public static io.grpc.examples.routeguide.Rectangle parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Rectangle parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.Rectangle parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Rectangle parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.Rectangle parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.Rectangle parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -272,12 +278,12 @@
     return builder;
   }
   /**
-   * Protobuf type {@code routeguide.Rectangle}
-   *
    * <pre>
    * A latitude-longitude rectangle, represented as two diagonally opposite
    * points "lo" and "hi".
    * </pre>
+   *
+   * Protobuf type {@code routeguide.Rectangle}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -393,7 +399,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.examples.routeguide.Rectangle) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -406,21 +412,21 @@
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.examples.routeguide.Point, io.grpc.examples.routeguide.Point.Builder, io.grpc.examples.routeguide.PointOrBuilder> loBuilder_;
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     public boolean hasLo() {
       return loBuilder_ != null || lo_ != null;
     }
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     public io.grpc.examples.routeguide.Point getLo() {
       if (loBuilder_ == null) {
@@ -430,11 +436,11 @@
       }
     }
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     public Builder setLo(io.grpc.examples.routeguide.Point value) {
       if (loBuilder_ == null) {
@@ -450,11 +456,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     public Builder setLo(
         io.grpc.examples.routeguide.Point.Builder builderForValue) {
@@ -468,11 +474,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     public Builder mergeLo(io.grpc.examples.routeguide.Point value) {
       if (loBuilder_ == null) {
@@ -490,11 +496,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     public Builder clearLo() {
       if (loBuilder_ == null) {
@@ -508,11 +514,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     public io.grpc.examples.routeguide.Point.Builder getLoBuilder() {
       
@@ -520,11 +526,11 @@
       return getLoFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     public io.grpc.examples.routeguide.PointOrBuilder getLoOrBuilder() {
       if (loBuilder_ != null) {
@@ -535,11 +541,11 @@
       }
     }
     /**
-     * <code>optional .routeguide.Point lo = 1;</code>
-     *
      * <pre>
      * One corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point lo = 1;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.examples.routeguide.Point, io.grpc.examples.routeguide.Point.Builder, io.grpc.examples.routeguide.PointOrBuilder> 
@@ -559,21 +565,21 @@
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.examples.routeguide.Point, io.grpc.examples.routeguide.Point.Builder, io.grpc.examples.routeguide.PointOrBuilder> hiBuilder_;
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     public boolean hasHi() {
       return hiBuilder_ != null || hi_ != null;
     }
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     public io.grpc.examples.routeguide.Point getHi() {
       if (hiBuilder_ == null) {
@@ -583,11 +589,11 @@
       }
     }
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     public Builder setHi(io.grpc.examples.routeguide.Point value) {
       if (hiBuilder_ == null) {
@@ -603,11 +609,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     public Builder setHi(
         io.grpc.examples.routeguide.Point.Builder builderForValue) {
@@ -621,11 +627,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     public Builder mergeHi(io.grpc.examples.routeguide.Point value) {
       if (hiBuilder_ == null) {
@@ -643,11 +649,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     public Builder clearHi() {
       if (hiBuilder_ == null) {
@@ -661,11 +667,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     public io.grpc.examples.routeguide.Point.Builder getHiBuilder() {
       
@@ -673,11 +679,11 @@
       return getHiFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     public io.grpc.examples.routeguide.PointOrBuilder getHiOrBuilder() {
       if (hiBuilder_ != null) {
@@ -688,11 +694,11 @@
       }
     }
     /**
-     * <code>optional .routeguide.Point hi = 2;</code>
-     *
      * <pre>
      * The other corner of the rectangle.
      * </pre>
+     *
+     * <code>optional .routeguide.Point hi = 2;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.examples.routeguide.Point, io.grpc.examples.routeguide.Point.Builder, io.grpc.examples.routeguide.PointOrBuilder> 
@@ -737,16 +743,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new Rectangle(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/RectangleOrBuilder.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/RectangleOrBuilder.java
index df3961d..d5b534c 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/RectangleOrBuilder.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/RectangleOrBuilder.java
@@ -8,52 +8,52 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional .routeguide.Point lo = 1;</code>
-   *
    * <pre>
    * One corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point lo = 1;</code>
    */
   boolean hasLo();
   /**
-   * <code>optional .routeguide.Point lo = 1;</code>
-   *
    * <pre>
    * One corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point lo = 1;</code>
    */
   io.grpc.examples.routeguide.Point getLo();
   /**
-   * <code>optional .routeguide.Point lo = 1;</code>
-   *
    * <pre>
    * One corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point lo = 1;</code>
    */
   io.grpc.examples.routeguide.PointOrBuilder getLoOrBuilder();
 
   /**
-   * <code>optional .routeguide.Point hi = 2;</code>
-   *
    * <pre>
    * The other corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point hi = 2;</code>
    */
   boolean hasHi();
   /**
-   * <code>optional .routeguide.Point hi = 2;</code>
-   *
    * <pre>
    * The other corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point hi = 2;</code>
    */
   io.grpc.examples.routeguide.Point getHi();
   /**
-   * <code>optional .routeguide.Point hi = 2;</code>
-   *
    * <pre>
    * The other corner of the rectangle.
    * </pre>
+   *
+   * <code>optional .routeguide.Point hi = 2;</code>
    */
   io.grpc.examples.routeguide.PointOrBuilder getHiOrBuilder();
 }
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteGuideProto.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteGuideProto.java
index e751617..2510a2e 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteGuideProto.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteGuideProto.java
@@ -8,34 +8,34 @@
   public static void registerAllExtensions(
       com.google.protobuf.ExtensionRegistry registry) {
   }
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_routeguide_Point_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_routeguide_Point_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_routeguide_Rectangle_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_routeguide_Rectangle_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_routeguide_Feature_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_routeguide_Feature_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_routeguide_FeatureDatabase_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_routeguide_FeatureDatabase_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_routeguide_RouteNote_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_routeguide_RouteNote_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_routeguide_RouteSummary_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_routeguide_RouteSummary_fieldAccessorTable;
 
@@ -43,7 +43,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteNote.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteNote.java
index 1b38c0a..c700545 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteNote.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteNote.java
@@ -4,11 +4,11 @@
 package io.grpc.examples.routeguide;
 
 /**
- * Protobuf type {@code routeguide.RouteNote}
- *
  * <pre>
  * A RouteNote is a message sent while at a given point.
  * </pre>
+ *
+ * Protobuf type {@code routeguide.RouteNote}
  */
 public  final class RouteNote extends
     com.google.protobuf.GeneratedMessage implements
@@ -29,7 +29,8 @@
   }
   private RouteNote(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -68,11 +69,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -92,31 +92,31 @@
   public static final int LOCATION_FIELD_NUMBER = 1;
   private io.grpc.examples.routeguide.Point location_;
   /**
-   * <code>optional .routeguide.Point location = 1;</code>
-   *
    * <pre>
    * The location from which the message is sent.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 1;</code>
    */
   public boolean hasLocation() {
     return location_ != null;
   }
   /**
-   * <code>optional .routeguide.Point location = 1;</code>
-   *
    * <pre>
    * The location from which the message is sent.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 1;</code>
    */
   public io.grpc.examples.routeguide.Point getLocation() {
     return location_ == null ? io.grpc.examples.routeguide.Point.getDefaultInstance() : location_;
   }
   /**
-   * <code>optional .routeguide.Point location = 1;</code>
-   *
    * <pre>
    * The location from which the message is sent.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 1;</code>
    */
   public io.grpc.examples.routeguide.PointOrBuilder getLocationOrBuilder() {
     return getLocation();
@@ -125,11 +125,11 @@
   public static final int MESSAGE_FIELD_NUMBER = 2;
   private volatile java.lang.Object message_;
   /**
-   * <code>optional string message = 2;</code>
-   *
    * <pre>
    * The message to be sent.
    * </pre>
+   *
+   * <code>optional string message = 2;</code>
    */
   public java.lang.String getMessage() {
     java.lang.Object ref = message_;
@@ -144,11 +144,11 @@
     }
   }
   /**
-   * <code>optional string message = 2;</code>
-   *
    * <pre>
    * The message to be sent.
    * </pre>
+   *
+   * <code>optional string message = 2;</code>
    */
   public com.google.protobuf.ByteString
       getMessageBytes() {
@@ -224,34 +224,40 @@
   }
   public static io.grpc.examples.routeguide.RouteNote parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.RouteNote parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.RouteNote parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.RouteNote parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.RouteNote parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.RouteNote parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -273,11 +279,11 @@
     return builder;
   }
   /**
-   * Protobuf type {@code routeguide.RouteNote}
-   *
    * <pre>
    * A RouteNote is a message sent while at a given point.
    * </pre>
+   *
+   * Protobuf type {@code routeguide.RouteNote}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -386,7 +392,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.examples.routeguide.RouteNote) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -399,21 +405,21 @@
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.examples.routeguide.Point, io.grpc.examples.routeguide.Point.Builder, io.grpc.examples.routeguide.PointOrBuilder> locationBuilder_;
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     public boolean hasLocation() {
       return locationBuilder_ != null || location_ != null;
     }
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     public io.grpc.examples.routeguide.Point getLocation() {
       if (locationBuilder_ == null) {
@@ -423,11 +429,11 @@
       }
     }
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     public Builder setLocation(io.grpc.examples.routeguide.Point value) {
       if (locationBuilder_ == null) {
@@ -443,11 +449,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     public Builder setLocation(
         io.grpc.examples.routeguide.Point.Builder builderForValue) {
@@ -461,11 +467,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     public Builder mergeLocation(io.grpc.examples.routeguide.Point value) {
       if (locationBuilder_ == null) {
@@ -483,11 +489,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     public Builder clearLocation() {
       if (locationBuilder_ == null) {
@@ -501,11 +507,11 @@
       return this;
     }
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     public io.grpc.examples.routeguide.Point.Builder getLocationBuilder() {
       
@@ -513,11 +519,11 @@
       return getLocationFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     public io.grpc.examples.routeguide.PointOrBuilder getLocationOrBuilder() {
       if (locationBuilder_ != null) {
@@ -528,11 +534,11 @@
       }
     }
     /**
-     * <code>optional .routeguide.Point location = 1;</code>
-     *
      * <pre>
      * The location from which the message is sent.
      * </pre>
+     *
+     * <code>optional .routeguide.Point location = 1;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.examples.routeguide.Point, io.grpc.examples.routeguide.Point.Builder, io.grpc.examples.routeguide.PointOrBuilder> 
@@ -550,11 +556,11 @@
 
     private java.lang.Object message_ = "";
     /**
-     * <code>optional string message = 2;</code>
-     *
      * <pre>
      * The message to be sent.
      * </pre>
+     *
+     * <code>optional string message = 2;</code>
      */
     public java.lang.String getMessage() {
       java.lang.Object ref = message_;
@@ -569,11 +575,11 @@
       }
     }
     /**
-     * <code>optional string message = 2;</code>
-     *
      * <pre>
      * The message to be sent.
      * </pre>
+     *
+     * <code>optional string message = 2;</code>
      */
     public com.google.protobuf.ByteString
         getMessageBytes() {
@@ -589,11 +595,11 @@
       }
     }
     /**
-     * <code>optional string message = 2;</code>
-     *
      * <pre>
      * The message to be sent.
      * </pre>
+     *
+     * <code>optional string message = 2;</code>
      */
     public Builder setMessage(
         java.lang.String value) {
@@ -606,11 +612,11 @@
       return this;
     }
     /**
-     * <code>optional string message = 2;</code>
-     *
      * <pre>
      * The message to be sent.
      * </pre>
+     *
+     * <code>optional string message = 2;</code>
      */
     public Builder clearMessage() {
       
@@ -619,11 +625,11 @@
       return this;
     }
     /**
-     * <code>optional string message = 2;</code>
-     *
      * <pre>
      * The message to be sent.
      * </pre>
+     *
+     * <code>optional string message = 2;</code>
      */
     public Builder setMessageBytes(
         com.google.protobuf.ByteString value) {
@@ -666,16 +672,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new RouteNote(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteNoteOrBuilder.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteNoteOrBuilder.java
index f6b429a..a7fb973 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteNoteOrBuilder.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteNoteOrBuilder.java
@@ -8,44 +8,44 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional .routeguide.Point location = 1;</code>
-   *
    * <pre>
    * The location from which the message is sent.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 1;</code>
    */
   boolean hasLocation();
   /**
-   * <code>optional .routeguide.Point location = 1;</code>
-   *
    * <pre>
    * The location from which the message is sent.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 1;</code>
    */
   io.grpc.examples.routeguide.Point getLocation();
   /**
-   * <code>optional .routeguide.Point location = 1;</code>
-   *
    * <pre>
    * The location from which the message is sent.
    * </pre>
+   *
+   * <code>optional .routeguide.Point location = 1;</code>
    */
   io.grpc.examples.routeguide.PointOrBuilder getLocationOrBuilder();
 
   /**
-   * <code>optional string message = 2;</code>
-   *
    * <pre>
    * The message to be sent.
    * </pre>
+   *
+   * <code>optional string message = 2;</code>
    */
   java.lang.String getMessage();
   /**
-   * <code>optional string message = 2;</code>
-   *
    * <pre>
    * The message to be sent.
    * </pre>
+   *
+   * <code>optional string message = 2;</code>
    */
   com.google.protobuf.ByteString
       getMessageBytes();
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteSummary.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteSummary.java
index 0ab163e..3e78aee 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteSummary.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteSummary.java
@@ -4,14 +4,14 @@
 package io.grpc.examples.routeguide;
 
 /**
- * Protobuf type {@code routeguide.RouteSummary}
- *
  * <pre>
  * A RouteSummary is received in response to a RecordRoute rpc.
  * It contains the number of individual points received, the number of
  * detected features, and the total distance covered as the cumulative sum of
  * the distance between each point.
  * </pre>
+ *
+ * Protobuf type {@code routeguide.RouteSummary}
  */
 public  final class RouteSummary extends
     com.google.protobuf.GeneratedMessage implements
@@ -35,7 +35,8 @@
   }
   private RouteSummary(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -75,11 +76,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -99,11 +99,11 @@
   public static final int POINT_COUNT_FIELD_NUMBER = 1;
   private int pointCount_;
   /**
-   * <code>optional int32 point_count = 1;</code>
-   *
    * <pre>
    * The number of points received.
    * </pre>
+   *
+   * <code>optional int32 point_count = 1;</code>
    */
   public int getPointCount() {
     return pointCount_;
@@ -112,11 +112,11 @@
   public static final int FEATURE_COUNT_FIELD_NUMBER = 2;
   private int featureCount_;
   /**
-   * <code>optional int32 feature_count = 2;</code>
-   *
    * <pre>
    * The number of known features passed while traversing the route.
    * </pre>
+   *
+   * <code>optional int32 feature_count = 2;</code>
    */
   public int getFeatureCount() {
     return featureCount_;
@@ -125,11 +125,11 @@
   public static final int DISTANCE_FIELD_NUMBER = 3;
   private int distance_;
   /**
-   * <code>optional int32 distance = 3;</code>
-   *
    * <pre>
    * The distance covered in metres.
    * </pre>
+   *
+   * <code>optional int32 distance = 3;</code>
    */
   public int getDistance() {
     return distance_;
@@ -138,11 +138,11 @@
   public static final int ELAPSED_TIME_FIELD_NUMBER = 4;
   private int elapsedTime_;
   /**
-   * <code>optional int32 elapsed_time = 4;</code>
-   *
    * <pre>
    * The duration of the traversal in seconds.
    * </pre>
+   *
+   * <code>optional int32 elapsed_time = 4;</code>
    */
   public int getElapsedTime() {
     return elapsedTime_;
@@ -223,34 +223,40 @@
   }
   public static io.grpc.examples.routeguide.RouteSummary parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.RouteSummary parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.RouteSummary parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.RouteSummary parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.examples.routeguide.RouteSummary parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.examples.routeguide.RouteSummary parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -272,14 +278,14 @@
     return builder;
   }
   /**
-   * Protobuf type {@code routeguide.RouteSummary}
-   *
    * <pre>
    * A RouteSummary is received in response to a RecordRoute rpc.
    * It contains the number of individual points received, the number of
    * detected features, and the total distance covered as the cumulative sum of
    * the distance between each point.
    * </pre>
+   *
+   * Protobuf type {@code routeguide.RouteSummary}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -391,7 +397,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.examples.routeguide.RouteSummary) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -402,21 +408,21 @@
 
     private int pointCount_ ;
     /**
-     * <code>optional int32 point_count = 1;</code>
-     *
      * <pre>
      * The number of points received.
      * </pre>
+     *
+     * <code>optional int32 point_count = 1;</code>
      */
     public int getPointCount() {
       return pointCount_;
     }
     /**
-     * <code>optional int32 point_count = 1;</code>
-     *
      * <pre>
      * The number of points received.
      * </pre>
+     *
+     * <code>optional int32 point_count = 1;</code>
      */
     public Builder setPointCount(int value) {
       
@@ -425,11 +431,11 @@
       return this;
     }
     /**
-     * <code>optional int32 point_count = 1;</code>
-     *
      * <pre>
      * The number of points received.
      * </pre>
+     *
+     * <code>optional int32 point_count = 1;</code>
      */
     public Builder clearPointCount() {
       
@@ -440,21 +446,21 @@
 
     private int featureCount_ ;
     /**
-     * <code>optional int32 feature_count = 2;</code>
-     *
      * <pre>
      * The number of known features passed while traversing the route.
      * </pre>
+     *
+     * <code>optional int32 feature_count = 2;</code>
      */
     public int getFeatureCount() {
       return featureCount_;
     }
     /**
-     * <code>optional int32 feature_count = 2;</code>
-     *
      * <pre>
      * The number of known features passed while traversing the route.
      * </pre>
+     *
+     * <code>optional int32 feature_count = 2;</code>
      */
     public Builder setFeatureCount(int value) {
       
@@ -463,11 +469,11 @@
       return this;
     }
     /**
-     * <code>optional int32 feature_count = 2;</code>
-     *
      * <pre>
      * The number of known features passed while traversing the route.
      * </pre>
+     *
+     * <code>optional int32 feature_count = 2;</code>
      */
     public Builder clearFeatureCount() {
       
@@ -478,21 +484,21 @@
 
     private int distance_ ;
     /**
-     * <code>optional int32 distance = 3;</code>
-     *
      * <pre>
      * The distance covered in metres.
      * </pre>
+     *
+     * <code>optional int32 distance = 3;</code>
      */
     public int getDistance() {
       return distance_;
     }
     /**
-     * <code>optional int32 distance = 3;</code>
-     *
      * <pre>
      * The distance covered in metres.
      * </pre>
+     *
+     * <code>optional int32 distance = 3;</code>
      */
     public Builder setDistance(int value) {
       
@@ -501,11 +507,11 @@
       return this;
     }
     /**
-     * <code>optional int32 distance = 3;</code>
-     *
      * <pre>
      * The distance covered in metres.
      * </pre>
+     *
+     * <code>optional int32 distance = 3;</code>
      */
     public Builder clearDistance() {
       
@@ -516,21 +522,21 @@
 
     private int elapsedTime_ ;
     /**
-     * <code>optional int32 elapsed_time = 4;</code>
-     *
      * <pre>
      * The duration of the traversal in seconds.
      * </pre>
+     *
+     * <code>optional int32 elapsed_time = 4;</code>
      */
     public int getElapsedTime() {
       return elapsedTime_;
     }
     /**
-     * <code>optional int32 elapsed_time = 4;</code>
-     *
      * <pre>
      * The duration of the traversal in seconds.
      * </pre>
+     *
+     * <code>optional int32 elapsed_time = 4;</code>
      */
     public Builder setElapsedTime(int value) {
       
@@ -539,11 +545,11 @@
       return this;
     }
     /**
-     * <code>optional int32 elapsed_time = 4;</code>
-     *
      * <pre>
      * The duration of the traversal in seconds.
      * </pre>
+     *
+     * <code>optional int32 elapsed_time = 4;</code>
      */
     public Builder clearElapsedTime() {
       
@@ -581,16 +587,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new RouteSummary(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteSummaryOrBuilder.java b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteSummaryOrBuilder.java
index bdffc55..a92146a 100644
--- a/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteSummaryOrBuilder.java
+++ b/examples/src/generated/main/java/io/grpc/examples/routeguide/RouteSummaryOrBuilder.java
@@ -8,38 +8,38 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional int32 point_count = 1;</code>
-   *
    * <pre>
    * The number of points received.
    * </pre>
+   *
+   * <code>optional int32 point_count = 1;</code>
    */
   int getPointCount();
 
   /**
-   * <code>optional int32 feature_count = 2;</code>
-   *
    * <pre>
    * The number of known features passed while traversing the route.
    * </pre>
+   *
+   * <code>optional int32 feature_count = 2;</code>
    */
   int getFeatureCount();
 
   /**
-   * <code>optional int32 distance = 3;</code>
-   *
    * <pre>
    * The distance covered in metres.
    * </pre>
+   *
+   * <code>optional int32 distance = 3;</code>
    */
   int getDistance();
 
   /**
-   * <code>optional int32 elapsed_time = 4;</code>
-   *
    * <pre>
    * The duration of the traversal in seconds.
    * </pre>
+   *
+   * <code>optional int32 elapsed_time = 4;</code>
    */
   int getElapsedTime();
 }
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStats.java b/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStats.java
index 6076858..a733021 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStats.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStats.java
@@ -4,12 +4,12 @@
 package io.grpc.grpclb;
 
 /**
- * Protobuf type {@code grpc.lb.v1.ClientStats}
- *
  * <pre>
  * Contains client level statistics that are useful to load balancing. Each
  * count should be reset to zero after reporting the stats.
  * </pre>
+ *
+ * Protobuf type {@code grpc.lb.v1.ClientStats}
  */
 public  final class ClientStats extends
     com.google.protobuf.GeneratedMessage implements
@@ -32,7 +32,8 @@
   }
   private ClientStats(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -67,11 +68,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -91,11 +91,11 @@
   public static final int TOTAL_REQUESTS_FIELD_NUMBER = 1;
   private long totalRequests_;
   /**
-   * <code>optional int64 total_requests = 1;</code>
-   *
    * <pre>
    * The total number of requests sent by the client since the last report.
    * </pre>
+   *
+   * <code>optional int64 total_requests = 1;</code>
    */
   public long getTotalRequests() {
     return totalRequests_;
@@ -104,11 +104,11 @@
   public static final int CLIENT_RPC_ERRORS_FIELD_NUMBER = 2;
   private long clientRpcErrors_;
   /**
-   * <code>optional int64 client_rpc_errors = 2;</code>
-   *
    * <pre>
    * The number of client rpc errors since the last report.
    * </pre>
+   *
+   * <code>optional int64 client_rpc_errors = 2;</code>
    */
   public long getClientRpcErrors() {
     return clientRpcErrors_;
@@ -117,11 +117,11 @@
   public static final int DROPPED_REQUESTS_FIELD_NUMBER = 3;
   private long droppedRequests_;
   /**
-   * <code>optional int64 dropped_requests = 3;</code>
-   *
    * <pre>
    * The number of dropped requests since the last report.
    * </pre>
+   *
+   * <code>optional int64 dropped_requests = 3;</code>
    */
   public long getDroppedRequests() {
     return droppedRequests_;
@@ -195,34 +195,40 @@
   }
   public static io.grpc.grpclb.ClientStats parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.ClientStats parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.ClientStats parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.ClientStats parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.ClientStats parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.ClientStats parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -244,12 +250,12 @@
     return builder;
   }
   /**
-   * Protobuf type {@code grpc.lb.v1.ClientStats}
-   *
    * <pre>
    * Contains client level statistics that are useful to load balancing. Each
    * count should be reset to zero after reporting the stats.
    * </pre>
+   *
+   * Protobuf type {@code grpc.lb.v1.ClientStats}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -355,7 +361,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.grpclb.ClientStats) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -366,21 +372,21 @@
 
     private long totalRequests_ ;
     /**
-     * <code>optional int64 total_requests = 1;</code>
-     *
      * <pre>
      * The total number of requests sent by the client since the last report.
      * </pre>
+     *
+     * <code>optional int64 total_requests = 1;</code>
      */
     public long getTotalRequests() {
       return totalRequests_;
     }
     /**
-     * <code>optional int64 total_requests = 1;</code>
-     *
      * <pre>
      * The total number of requests sent by the client since the last report.
      * </pre>
+     *
+     * <code>optional int64 total_requests = 1;</code>
      */
     public Builder setTotalRequests(long value) {
       
@@ -389,11 +395,11 @@
       return this;
     }
     /**
-     * <code>optional int64 total_requests = 1;</code>
-     *
      * <pre>
      * The total number of requests sent by the client since the last report.
      * </pre>
+     *
+     * <code>optional int64 total_requests = 1;</code>
      */
     public Builder clearTotalRequests() {
       
@@ -404,21 +410,21 @@
 
     private long clientRpcErrors_ ;
     /**
-     * <code>optional int64 client_rpc_errors = 2;</code>
-     *
      * <pre>
      * The number of client rpc errors since the last report.
      * </pre>
+     *
+     * <code>optional int64 client_rpc_errors = 2;</code>
      */
     public long getClientRpcErrors() {
       return clientRpcErrors_;
     }
     /**
-     * <code>optional int64 client_rpc_errors = 2;</code>
-     *
      * <pre>
      * The number of client rpc errors since the last report.
      * </pre>
+     *
+     * <code>optional int64 client_rpc_errors = 2;</code>
      */
     public Builder setClientRpcErrors(long value) {
       
@@ -427,11 +433,11 @@
       return this;
     }
     /**
-     * <code>optional int64 client_rpc_errors = 2;</code>
-     *
      * <pre>
      * The number of client rpc errors since the last report.
      * </pre>
+     *
+     * <code>optional int64 client_rpc_errors = 2;</code>
      */
     public Builder clearClientRpcErrors() {
       
@@ -442,21 +448,21 @@
 
     private long droppedRequests_ ;
     /**
-     * <code>optional int64 dropped_requests = 3;</code>
-     *
      * <pre>
      * The number of dropped requests since the last report.
      * </pre>
+     *
+     * <code>optional int64 dropped_requests = 3;</code>
      */
     public long getDroppedRequests() {
       return droppedRequests_;
     }
     /**
-     * <code>optional int64 dropped_requests = 3;</code>
-     *
      * <pre>
      * The number of dropped requests since the last report.
      * </pre>
+     *
+     * <code>optional int64 dropped_requests = 3;</code>
      */
     public Builder setDroppedRequests(long value) {
       
@@ -465,11 +471,11 @@
       return this;
     }
     /**
-     * <code>optional int64 dropped_requests = 3;</code>
-     *
      * <pre>
      * The number of dropped requests since the last report.
      * </pre>
+     *
+     * <code>optional int64 dropped_requests = 3;</code>
      */
     public Builder clearDroppedRequests() {
       
@@ -507,16 +513,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new ClientStats(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStatsOrBuilder.java b/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStatsOrBuilder.java
index 27f0cfd..fd194b0 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStatsOrBuilder.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/ClientStatsOrBuilder.java
@@ -8,29 +8,29 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional int64 total_requests = 1;</code>
-   *
    * <pre>
    * The total number of requests sent by the client since the last report.
    * </pre>
+   *
+   * <code>optional int64 total_requests = 1;</code>
    */
   long getTotalRequests();
 
   /**
-   * <code>optional int64 client_rpc_errors = 2;</code>
-   *
    * <pre>
    * The number of client rpc errors since the last report.
    * </pre>
+   *
+   * <code>optional int64 client_rpc_errors = 2;</code>
    */
   long getClientRpcErrors();
 
   /**
-   * <code>optional int64 dropped_requests = 3;</code>
-   *
    * <pre>
    * The number of dropped requests since the last report.
    * </pre>
+   *
+   * <code>optional int64 dropped_requests = 3;</code>
    */
   long getDroppedRequests();
 }
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequest.java b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequest.java
index 6208304..f09a492 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequest.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequest.java
@@ -25,7 +25,8 @@
   }
   private InitialLoadBalanceRequest(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -51,11 +52,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -75,11 +75,11 @@
   public static final int NAME_FIELD_NUMBER = 1;
   private volatile java.lang.Object name_;
   /**
-   * <code>optional string name = 1;</code>
-   *
    * <pre>
    * Name of load balanced service
    * </pre>
+   *
+   * <code>optional string name = 1;</code>
    */
   public java.lang.String getName() {
     java.lang.Object ref = name_;
@@ -94,11 +94,11 @@
     }
   }
   /**
-   * <code>optional string name = 1;</code>
-   *
    * <pre>
    * Name of load balanced service
    * </pre>
+   *
+   * <code>optional string name = 1;</code>
    */
   public com.google.protobuf.ByteString
       getNameBytes() {
@@ -167,34 +167,40 @@
   }
   public static io.grpc.grpclb.InitialLoadBalanceRequest parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.InitialLoadBalanceRequest parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.InitialLoadBalanceRequest parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.InitialLoadBalanceRequest parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.InitialLoadBalanceRequest parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.InitialLoadBalanceRequest parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -311,7 +317,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.grpclb.InitialLoadBalanceRequest) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -322,11 +328,11 @@
 
     private java.lang.Object name_ = "";
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * Name of load balanced service
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public java.lang.String getName() {
       java.lang.Object ref = name_;
@@ -341,11 +347,11 @@
       }
     }
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * Name of load balanced service
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public com.google.protobuf.ByteString
         getNameBytes() {
@@ -361,11 +367,11 @@
       }
     }
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * Name of load balanced service
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public Builder setName(
         java.lang.String value) {
@@ -378,11 +384,11 @@
       return this;
     }
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * Name of load balanced service
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public Builder clearName() {
       
@@ -391,11 +397,11 @@
       return this;
     }
     /**
-     * <code>optional string name = 1;</code>
-     *
      * <pre>
      * Name of load balanced service
      * </pre>
+     *
+     * <code>optional string name = 1;</code>
      */
     public Builder setNameBytes(
         com.google.protobuf.ByteString value) {
@@ -438,16 +444,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new InitialLoadBalanceRequest(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequestOrBuilder.java b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequestOrBuilder.java
index 95da8de..122e698 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequestOrBuilder.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceRequestOrBuilder.java
@@ -8,19 +8,19 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional string name = 1;</code>
-   *
    * <pre>
    * Name of load balanced service
    * </pre>
+   *
+   * <code>optional string name = 1;</code>
    */
   java.lang.String getName();
   /**
-   * <code>optional string name = 1;</code>
-   *
    * <pre>
    * Name of load balanced service
    * </pre>
+   *
+   * <code>optional string name = 1;</code>
    */
   com.google.protobuf.ByteString
       getNameBytes();
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponse.java b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponse.java
index c7aa0c8..b65fa70 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponse.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponse.java
@@ -24,7 +24,8 @@
   }
   private InitialLoadBalanceResponse(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -63,11 +64,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -90,16 +90,23 @@
       implements com.google.protobuf.Internal.EnumLite {
     LOAD_BALANCER_DELEGATE(2),
     INITIALRESPONSETYPE_NOT_SET(0);
-    private int value = 0;
+    private final int value;
     private InitialResponseTypeCase(int value) {
       this.value = value;
     }
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static InitialResponseTypeCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static InitialResponseTypeCase forNumber(int value) {
       switch (value) {
         case 2: return LOAD_BALANCER_DELEGATE;
         case 0: return INITIALRESPONSETYPE_NOT_SET;
-        default: throw new java.lang.IllegalArgumentException(
-          "Value is undefined for this oneof enum.");
+        default: return null;
       }
     }
     public int getNumber() {
@@ -109,20 +116,20 @@
 
   public InitialResponseTypeCase
   getInitialResponseTypeCase() {
-    return InitialResponseTypeCase.valueOf(
+    return InitialResponseTypeCase.forNumber(
         initialResponseTypeCase_);
   }
 
   public static final int LOAD_BALANCER_DELEGATE_FIELD_NUMBER = 2;
   /**
-   * <code>optional string load_balancer_delegate = 2;</code>
-   *
    * <pre>
    * This is an application layer redirect that indicates the client should
    * use the specified server for load balancing. When this field is set in
    * the response, the client should open a separate connection to the
    * load_balancer_delegate and call the BalanceLoad method.
    * </pre>
+   *
+   * <code>optional string load_balancer_delegate = 2;</code>
    */
   public java.lang.String getLoadBalancerDelegate() {
     java.lang.Object ref = "";
@@ -142,14 +149,14 @@
     }
   }
   /**
-   * <code>optional string load_balancer_delegate = 2;</code>
-   *
    * <pre>
    * This is an application layer redirect that indicates the client should
    * use the specified server for load balancing. When this field is set in
    * the response, the client should open a separate connection to the
    * load_balancer_delegate and call the BalanceLoad method.
    * </pre>
+   *
+   * <code>optional string load_balancer_delegate = 2;</code>
    */
   public com.google.protobuf.ByteString
       getLoadBalancerDelegateBytes() {
@@ -173,37 +180,37 @@
   public static final int CLIENT_STATS_REPORT_INTERVAL_FIELD_NUMBER = 3;
   private com.google.protobuf.Duration clientStatsReportInterval_;
   /**
-   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-   *
    * <pre>
    * This interval defines how often the client should send the client stats
    * to the load balancer. Stats should only be reported when the duration is
    * positive.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
    */
   public boolean hasClientStatsReportInterval() {
     return clientStatsReportInterval_ != null;
   }
   /**
-   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-   *
    * <pre>
    * This interval defines how often the client should send the client stats
    * to the load balancer. Stats should only be reported when the duration is
    * positive.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
    */
   public com.google.protobuf.Duration getClientStatsReportInterval() {
     return clientStatsReportInterval_ == null ? com.google.protobuf.Duration.getDefaultInstance() : clientStatsReportInterval_;
   }
   /**
-   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-   *
    * <pre>
    * This interval defines how often the client should send the client stats
    * to the load balancer. Stats should only be reported when the duration is
    * positive.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
    */
   public com.google.protobuf.DurationOrBuilder getClientStatsReportIntervalOrBuilder() {
     return getClientStatsReportInterval();
@@ -269,34 +276,40 @@
   }
   public static io.grpc.grpclb.InitialLoadBalanceResponse parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.InitialLoadBalanceResponse parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.InitialLoadBalanceResponse parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.InitialLoadBalanceResponse parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.InitialLoadBalanceResponse parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.InitialLoadBalanceResponse parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -437,7 +450,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.grpclb.InitialLoadBalanceResponse) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -449,7 +462,7 @@
     private java.lang.Object initialResponseType_;
     public InitialResponseTypeCase
         getInitialResponseTypeCase() {
-      return InitialResponseTypeCase.valueOf(
+      return InitialResponseTypeCase.forNumber(
           initialResponseTypeCase_);
     }
 
@@ -462,14 +475,14 @@
 
 
     /**
-     * <code>optional string load_balancer_delegate = 2;</code>
-     *
      * <pre>
      * This is an application layer redirect that indicates the client should
      * use the specified server for load balancing. When this field is set in
      * the response, the client should open a separate connection to the
      * load_balancer_delegate and call the BalanceLoad method.
      * </pre>
+     *
+     * <code>optional string load_balancer_delegate = 2;</code>
      */
     public java.lang.String getLoadBalancerDelegate() {
       java.lang.Object ref = "";
@@ -489,14 +502,14 @@
       }
     }
     /**
-     * <code>optional string load_balancer_delegate = 2;</code>
-     *
      * <pre>
      * This is an application layer redirect that indicates the client should
      * use the specified server for load balancing. When this field is set in
      * the response, the client should open a separate connection to the
      * load_balancer_delegate and call the BalanceLoad method.
      * </pre>
+     *
+     * <code>optional string load_balancer_delegate = 2;</code>
      */
     public com.google.protobuf.ByteString
         getLoadBalancerDelegateBytes() {
@@ -517,14 +530,14 @@
       }
     }
     /**
-     * <code>optional string load_balancer_delegate = 2;</code>
-     *
      * <pre>
      * This is an application layer redirect that indicates the client should
      * use the specified server for load balancing. When this field is set in
      * the response, the client should open a separate connection to the
      * load_balancer_delegate and call the BalanceLoad method.
      * </pre>
+     *
+     * <code>optional string load_balancer_delegate = 2;</code>
      */
     public Builder setLoadBalancerDelegate(
         java.lang.String value) {
@@ -537,14 +550,14 @@
       return this;
     }
     /**
-     * <code>optional string load_balancer_delegate = 2;</code>
-     *
      * <pre>
      * This is an application layer redirect that indicates the client should
      * use the specified server for load balancing. When this field is set in
      * the response, the client should open a separate connection to the
      * load_balancer_delegate and call the BalanceLoad method.
      * </pre>
+     *
+     * <code>optional string load_balancer_delegate = 2;</code>
      */
     public Builder clearLoadBalancerDelegate() {
       if (initialResponseTypeCase_ == 2) {
@@ -555,14 +568,14 @@
       return this;
     }
     /**
-     * <code>optional string load_balancer_delegate = 2;</code>
-     *
      * <pre>
      * This is an application layer redirect that indicates the client should
      * use the specified server for load balancing. When this field is set in
      * the response, the client should open a separate connection to the
      * load_balancer_delegate and call the BalanceLoad method.
      * </pre>
+     *
+     * <code>optional string load_balancer_delegate = 2;</code>
      */
     public Builder setLoadBalancerDelegateBytes(
         com.google.protobuf.ByteString value) {
@@ -580,25 +593,25 @@
     private com.google.protobuf.SingleFieldBuilder<
         com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> clientStatsReportIntervalBuilder_;
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     public boolean hasClientStatsReportInterval() {
       return clientStatsReportIntervalBuilder_ != null || clientStatsReportInterval_ != null;
     }
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     public com.google.protobuf.Duration getClientStatsReportInterval() {
       if (clientStatsReportIntervalBuilder_ == null) {
@@ -608,13 +621,13 @@
       }
     }
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     public Builder setClientStatsReportInterval(com.google.protobuf.Duration value) {
       if (clientStatsReportIntervalBuilder_ == null) {
@@ -630,13 +643,13 @@
       return this;
     }
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     public Builder setClientStatsReportInterval(
         com.google.protobuf.Duration.Builder builderForValue) {
@@ -650,13 +663,13 @@
       return this;
     }
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     public Builder mergeClientStatsReportInterval(com.google.protobuf.Duration value) {
       if (clientStatsReportIntervalBuilder_ == null) {
@@ -674,13 +687,13 @@
       return this;
     }
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     public Builder clearClientStatsReportInterval() {
       if (clientStatsReportIntervalBuilder_ == null) {
@@ -694,13 +707,13 @@
       return this;
     }
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     public com.google.protobuf.Duration.Builder getClientStatsReportIntervalBuilder() {
       
@@ -708,13 +721,13 @@
       return getClientStatsReportIntervalFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     public com.google.protobuf.DurationOrBuilder getClientStatsReportIntervalOrBuilder() {
       if (clientStatsReportIntervalBuilder_ != null) {
@@ -725,13 +738,13 @@
       }
     }
     /**
-     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-     *
      * <pre>
      * This interval defines how often the client should send the client stats
      * to the load balancer. Stats should only be reported when the duration is
      * positive.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
@@ -776,16 +789,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new InitialLoadBalanceResponse(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponseOrBuilder.java b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponseOrBuilder.java
index 77b06c8..7b49502 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponseOrBuilder.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/InitialLoadBalanceResponseOrBuilder.java
@@ -8,57 +8,57 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional string load_balancer_delegate = 2;</code>
-   *
    * <pre>
    * This is an application layer redirect that indicates the client should
    * use the specified server for load balancing. When this field is set in
    * the response, the client should open a separate connection to the
    * load_balancer_delegate and call the BalanceLoad method.
    * </pre>
+   *
+   * <code>optional string load_balancer_delegate = 2;</code>
    */
   java.lang.String getLoadBalancerDelegate();
   /**
-   * <code>optional string load_balancer_delegate = 2;</code>
-   *
    * <pre>
    * This is an application layer redirect that indicates the client should
    * use the specified server for load balancing. When this field is set in
    * the response, the client should open a separate connection to the
    * load_balancer_delegate and call the BalanceLoad method.
    * </pre>
+   *
+   * <code>optional string load_balancer_delegate = 2;</code>
    */
   com.google.protobuf.ByteString
       getLoadBalancerDelegateBytes();
 
   /**
-   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-   *
    * <pre>
    * This interval defines how often the client should send the client stats
    * to the load balancer. Stats should only be reported when the duration is
    * positive.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
    */
   boolean hasClientStatsReportInterval();
   /**
-   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-   *
    * <pre>
    * This interval defines how often the client should send the client stats
    * to the load balancer. Stats should only be reported when the duration is
    * positive.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
    */
   com.google.protobuf.Duration getClientStatsReportInterval();
   /**
-   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
-   *
    * <pre>
    * This interval defines how often the client should send the client stats
    * to the load balancer. Stats should only be reported when the duration is
    * positive.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration client_stats_report_interval = 3;</code>
    */
   com.google.protobuf.DurationOrBuilder getClientStatsReportIntervalOrBuilder();
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequest.java b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequest.java
index 60b1c5a..1473a81 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequest.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequest.java
@@ -24,7 +24,8 @@
   }
   private LoadBalanceRequest(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -72,11 +73,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -100,17 +100,24 @@
     INITIAL_REQUEST(1),
     CLIENT_STATS(2),
     LOADBALANCEREQUESTTYPE_NOT_SET(0);
-    private int value = 0;
+    private final int value;
     private LoadBalanceRequestTypeCase(int value) {
       this.value = value;
     }
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static LoadBalanceRequestTypeCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LoadBalanceRequestTypeCase forNumber(int value) {
       switch (value) {
         case 1: return INITIAL_REQUEST;
         case 2: return CLIENT_STATS;
         case 0: return LOADBALANCEREQUESTTYPE_NOT_SET;
-        default: throw new java.lang.IllegalArgumentException(
-          "Value is undefined for this oneof enum.");
+        default: return null;
       }
     }
     public int getNumber() {
@@ -120,17 +127,17 @@
 
   public LoadBalanceRequestTypeCase
   getLoadBalanceRequestTypeCase() {
-    return LoadBalanceRequestTypeCase.valueOf(
+    return LoadBalanceRequestTypeCase.forNumber(
         loadBalanceRequestTypeCase_);
   }
 
   public static final int INITIAL_REQUEST_FIELD_NUMBER = 1;
   /**
-   * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-   *
    * <pre>
    * This message should be sent on the first request to the load balancer.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
    */
   public io.grpc.grpclb.InitialLoadBalanceRequest getInitialRequest() {
     if (loadBalanceRequestTypeCase_ == 1) {
@@ -139,11 +146,11 @@
     return io.grpc.grpclb.InitialLoadBalanceRequest.getDefaultInstance();
   }
   /**
-   * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-   *
    * <pre>
    * This message should be sent on the first request to the load balancer.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
    */
   public io.grpc.grpclb.InitialLoadBalanceRequestOrBuilder getInitialRequestOrBuilder() {
     if (loadBalanceRequestTypeCase_ == 1) {
@@ -154,12 +161,12 @@
 
   public static final int CLIENT_STATS_FIELD_NUMBER = 2;
   /**
-   * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-   *
    * <pre>
    * The client stats should be periodically reported to the load balancer
    * based on the duration defined in the InitialLoadBalanceResponse.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
    */
   public io.grpc.grpclb.ClientStats getClientStats() {
     if (loadBalanceRequestTypeCase_ == 2) {
@@ -168,12 +175,12 @@
     return io.grpc.grpclb.ClientStats.getDefaultInstance();
   }
   /**
-   * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-   *
    * <pre>
    * The client stats should be periodically reported to the load balancer
    * based on the duration defined in the InitialLoadBalanceResponse.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
    */
   public io.grpc.grpclb.ClientStatsOrBuilder getClientStatsOrBuilder() {
     if (loadBalanceRequestTypeCase_ == 2) {
@@ -243,34 +250,40 @@
   }
   public static io.grpc.grpclb.LoadBalanceRequest parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.LoadBalanceRequest parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.LoadBalanceRequest parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.LoadBalanceRequest parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.LoadBalanceRequest parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.LoadBalanceRequest parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -410,7 +423,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.grpclb.LoadBalanceRequest) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -422,7 +435,7 @@
     private java.lang.Object loadBalanceRequestType_;
     public LoadBalanceRequestTypeCase
         getLoadBalanceRequestTypeCase() {
-      return LoadBalanceRequestTypeCase.valueOf(
+      return LoadBalanceRequestTypeCase.forNumber(
           loadBalanceRequestTypeCase_);
     }
 
@@ -437,11 +450,11 @@
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.grpclb.InitialLoadBalanceRequest, io.grpc.grpclb.InitialLoadBalanceRequest.Builder, io.grpc.grpclb.InitialLoadBalanceRequestOrBuilder> initialRequestBuilder_;
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first request to the load balancer.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
      */
     public io.grpc.grpclb.InitialLoadBalanceRequest getInitialRequest() {
       if (initialRequestBuilder_ == null) {
@@ -457,11 +470,11 @@
       }
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first request to the load balancer.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
      */
     public Builder setInitialRequest(io.grpc.grpclb.InitialLoadBalanceRequest value) {
       if (initialRequestBuilder_ == null) {
@@ -477,11 +490,11 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first request to the load balancer.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
      */
     public Builder setInitialRequest(
         io.grpc.grpclb.InitialLoadBalanceRequest.Builder builderForValue) {
@@ -495,11 +508,11 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first request to the load balancer.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
      */
     public Builder mergeInitialRequest(io.grpc.grpclb.InitialLoadBalanceRequest value) {
       if (initialRequestBuilder_ == null) {
@@ -521,11 +534,11 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first request to the load balancer.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
      */
     public Builder clearInitialRequest() {
       if (initialRequestBuilder_ == null) {
@@ -544,21 +557,21 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first request to the load balancer.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
      */
     public io.grpc.grpclb.InitialLoadBalanceRequest.Builder getInitialRequestBuilder() {
       return getInitialRequestFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first request to the load balancer.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
      */
     public io.grpc.grpclb.InitialLoadBalanceRequestOrBuilder getInitialRequestOrBuilder() {
       if ((loadBalanceRequestTypeCase_ == 1) && (initialRequestBuilder_ != null)) {
@@ -571,11 +584,11 @@
       }
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first request to the load balancer.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.grpclb.InitialLoadBalanceRequest, io.grpc.grpclb.InitialLoadBalanceRequest.Builder, io.grpc.grpclb.InitialLoadBalanceRequestOrBuilder> 
@@ -599,12 +612,12 @@
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.grpclb.ClientStats, io.grpc.grpclb.ClientStats.Builder, io.grpc.grpclb.ClientStatsOrBuilder> clientStatsBuilder_;
     /**
-     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-     *
      * <pre>
      * The client stats should be periodically reported to the load balancer
      * based on the duration defined in the InitialLoadBalanceResponse.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
      */
     public io.grpc.grpclb.ClientStats getClientStats() {
       if (clientStatsBuilder_ == null) {
@@ -620,12 +633,12 @@
       }
     }
     /**
-     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-     *
      * <pre>
      * The client stats should be periodically reported to the load balancer
      * based on the duration defined in the InitialLoadBalanceResponse.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
      */
     public Builder setClientStats(io.grpc.grpclb.ClientStats value) {
       if (clientStatsBuilder_ == null) {
@@ -641,12 +654,12 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-     *
      * <pre>
      * The client stats should be periodically reported to the load balancer
      * based on the duration defined in the InitialLoadBalanceResponse.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
      */
     public Builder setClientStats(
         io.grpc.grpclb.ClientStats.Builder builderForValue) {
@@ -660,12 +673,12 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-     *
      * <pre>
      * The client stats should be periodically reported to the load balancer
      * based on the duration defined in the InitialLoadBalanceResponse.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
      */
     public Builder mergeClientStats(io.grpc.grpclb.ClientStats value) {
       if (clientStatsBuilder_ == null) {
@@ -687,12 +700,12 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-     *
      * <pre>
      * The client stats should be periodically reported to the load balancer
      * based on the duration defined in the InitialLoadBalanceResponse.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
      */
     public Builder clearClientStats() {
       if (clientStatsBuilder_ == null) {
@@ -711,23 +724,23 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-     *
      * <pre>
      * The client stats should be periodically reported to the load balancer
      * based on the duration defined in the InitialLoadBalanceResponse.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
      */
     public io.grpc.grpclb.ClientStats.Builder getClientStatsBuilder() {
       return getClientStatsFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-     *
      * <pre>
      * The client stats should be periodically reported to the load balancer
      * based on the duration defined in the InitialLoadBalanceResponse.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
      */
     public io.grpc.grpclb.ClientStatsOrBuilder getClientStatsOrBuilder() {
       if ((loadBalanceRequestTypeCase_ == 2) && (clientStatsBuilder_ != null)) {
@@ -740,12 +753,12 @@
       }
     }
     /**
-     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-     *
      * <pre>
      * The client stats should be periodically reported to the load balancer
      * based on the duration defined in the InitialLoadBalanceResponse.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.grpclb.ClientStats, io.grpc.grpclb.ClientStats.Builder, io.grpc.grpclb.ClientStatsOrBuilder> 
@@ -795,16 +808,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new LoadBalanceRequest(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequestOrBuilder.java b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequestOrBuilder.java
index 4a1f99e..2b417db 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequestOrBuilder.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceRequestOrBuilder.java
@@ -8,38 +8,38 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-   *
    * <pre>
    * This message should be sent on the first request to the load balancer.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
    */
   io.grpc.grpclb.InitialLoadBalanceRequest getInitialRequest();
   /**
-   * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
-   *
    * <pre>
    * This message should be sent on the first request to the load balancer.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.InitialLoadBalanceRequest initial_request = 1;</code>
    */
   io.grpc.grpclb.InitialLoadBalanceRequestOrBuilder getInitialRequestOrBuilder();
 
   /**
-   * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-   *
    * <pre>
    * The client stats should be periodically reported to the load balancer
    * based on the duration defined in the InitialLoadBalanceResponse.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
    */
   io.grpc.grpclb.ClientStats getClientStats();
   /**
-   * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
-   *
    * <pre>
    * The client stats should be periodically reported to the load balancer
    * based on the duration defined in the InitialLoadBalanceResponse.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.ClientStats client_stats = 2;</code>
    */
   io.grpc.grpclb.ClientStatsOrBuilder getClientStatsOrBuilder();
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponse.java b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponse.java
index 0444117..422a922 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponse.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponse.java
@@ -24,7 +24,8 @@
   }
   private LoadBalanceResponse(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -72,11 +73,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -100,17 +100,24 @@
     INITIAL_RESPONSE(1),
     SERVER_LIST(2),
     LOADBALANCERESPONSETYPE_NOT_SET(0);
-    private int value = 0;
+    private final int value;
     private LoadBalanceResponseTypeCase(int value) {
       this.value = value;
     }
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static LoadBalanceResponseTypeCase valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static LoadBalanceResponseTypeCase forNumber(int value) {
       switch (value) {
         case 1: return INITIAL_RESPONSE;
         case 2: return SERVER_LIST;
         case 0: return LOADBALANCERESPONSETYPE_NOT_SET;
-        default: throw new java.lang.IllegalArgumentException(
-          "Value is undefined for this oneof enum.");
+        default: return null;
       }
     }
     public int getNumber() {
@@ -120,17 +127,17 @@
 
   public LoadBalanceResponseTypeCase
   getLoadBalanceResponseTypeCase() {
-    return LoadBalanceResponseTypeCase.valueOf(
+    return LoadBalanceResponseTypeCase.forNumber(
         loadBalanceResponseTypeCase_);
   }
 
   public static final int INITIAL_RESPONSE_FIELD_NUMBER = 1;
   /**
-   * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-   *
    * <pre>
    * This message should be sent on the first response to the client.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
    */
   public io.grpc.grpclb.InitialLoadBalanceResponse getInitialResponse() {
     if (loadBalanceResponseTypeCase_ == 1) {
@@ -139,11 +146,11 @@
     return io.grpc.grpclb.InitialLoadBalanceResponse.getDefaultInstance();
   }
   /**
-   * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-   *
    * <pre>
    * This message should be sent on the first response to the client.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
    */
   public io.grpc.grpclb.InitialLoadBalanceResponseOrBuilder getInitialResponseOrBuilder() {
     if (loadBalanceResponseTypeCase_ == 1) {
@@ -154,12 +161,12 @@
 
   public static final int SERVER_LIST_FIELD_NUMBER = 2;
   /**
-   * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-   *
    * <pre>
    * Contains the list of servers selected by the load balancer. The client
    * should send requests to these servers in the specified order.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
    */
   public io.grpc.grpclb.ServerList getServerList() {
     if (loadBalanceResponseTypeCase_ == 2) {
@@ -168,12 +175,12 @@
     return io.grpc.grpclb.ServerList.getDefaultInstance();
   }
   /**
-   * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-   *
    * <pre>
    * Contains the list of servers selected by the load balancer. The client
    * should send requests to these servers in the specified order.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
    */
   public io.grpc.grpclb.ServerListOrBuilder getServerListOrBuilder() {
     if (loadBalanceResponseTypeCase_ == 2) {
@@ -243,34 +250,40 @@
   }
   public static io.grpc.grpclb.LoadBalanceResponse parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.LoadBalanceResponse parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.LoadBalanceResponse parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.LoadBalanceResponse parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.LoadBalanceResponse parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.LoadBalanceResponse parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -410,7 +423,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.grpclb.LoadBalanceResponse) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -422,7 +435,7 @@
     private java.lang.Object loadBalanceResponseType_;
     public LoadBalanceResponseTypeCase
         getLoadBalanceResponseTypeCase() {
-      return LoadBalanceResponseTypeCase.valueOf(
+      return LoadBalanceResponseTypeCase.forNumber(
           loadBalanceResponseTypeCase_);
     }
 
@@ -437,11 +450,11 @@
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.grpclb.InitialLoadBalanceResponse, io.grpc.grpclb.InitialLoadBalanceResponse.Builder, io.grpc.grpclb.InitialLoadBalanceResponseOrBuilder> initialResponseBuilder_;
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first response to the client.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
      */
     public io.grpc.grpclb.InitialLoadBalanceResponse getInitialResponse() {
       if (initialResponseBuilder_ == null) {
@@ -457,11 +470,11 @@
       }
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first response to the client.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
      */
     public Builder setInitialResponse(io.grpc.grpclb.InitialLoadBalanceResponse value) {
       if (initialResponseBuilder_ == null) {
@@ -477,11 +490,11 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first response to the client.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
      */
     public Builder setInitialResponse(
         io.grpc.grpclb.InitialLoadBalanceResponse.Builder builderForValue) {
@@ -495,11 +508,11 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first response to the client.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
      */
     public Builder mergeInitialResponse(io.grpc.grpclb.InitialLoadBalanceResponse value) {
       if (initialResponseBuilder_ == null) {
@@ -521,11 +534,11 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first response to the client.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
      */
     public Builder clearInitialResponse() {
       if (initialResponseBuilder_ == null) {
@@ -544,21 +557,21 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first response to the client.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
      */
     public io.grpc.grpclb.InitialLoadBalanceResponse.Builder getInitialResponseBuilder() {
       return getInitialResponseFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first response to the client.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
      */
     public io.grpc.grpclb.InitialLoadBalanceResponseOrBuilder getInitialResponseOrBuilder() {
       if ((loadBalanceResponseTypeCase_ == 1) && (initialResponseBuilder_ != null)) {
@@ -571,11 +584,11 @@
       }
     }
     /**
-     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-     *
      * <pre>
      * This message should be sent on the first response to the client.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.grpclb.InitialLoadBalanceResponse, io.grpc.grpclb.InitialLoadBalanceResponse.Builder, io.grpc.grpclb.InitialLoadBalanceResponseOrBuilder> 
@@ -599,12 +612,12 @@
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.grpclb.ServerList, io.grpc.grpclb.ServerList.Builder, io.grpc.grpclb.ServerListOrBuilder> serverListBuilder_;
     /**
-     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-     *
      * <pre>
      * Contains the list of servers selected by the load balancer. The client
      * should send requests to these servers in the specified order.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
      */
     public io.grpc.grpclb.ServerList getServerList() {
       if (serverListBuilder_ == null) {
@@ -620,12 +633,12 @@
       }
     }
     /**
-     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-     *
      * <pre>
      * Contains the list of servers selected by the load balancer. The client
      * should send requests to these servers in the specified order.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
      */
     public Builder setServerList(io.grpc.grpclb.ServerList value) {
       if (serverListBuilder_ == null) {
@@ -641,12 +654,12 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-     *
      * <pre>
      * Contains the list of servers selected by the load balancer. The client
      * should send requests to these servers in the specified order.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
      */
     public Builder setServerList(
         io.grpc.grpclb.ServerList.Builder builderForValue) {
@@ -660,12 +673,12 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-     *
      * <pre>
      * Contains the list of servers selected by the load balancer. The client
      * should send requests to these servers in the specified order.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
      */
     public Builder mergeServerList(io.grpc.grpclb.ServerList value) {
       if (serverListBuilder_ == null) {
@@ -687,12 +700,12 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-     *
      * <pre>
      * Contains the list of servers selected by the load balancer. The client
      * should send requests to these servers in the specified order.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
      */
     public Builder clearServerList() {
       if (serverListBuilder_ == null) {
@@ -711,23 +724,23 @@
       return this;
     }
     /**
-     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-     *
      * <pre>
      * Contains the list of servers selected by the load balancer. The client
      * should send requests to these servers in the specified order.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
      */
     public io.grpc.grpclb.ServerList.Builder getServerListBuilder() {
       return getServerListFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-     *
      * <pre>
      * Contains the list of servers selected by the load balancer. The client
      * should send requests to these servers in the specified order.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
      */
     public io.grpc.grpclb.ServerListOrBuilder getServerListOrBuilder() {
       if ((loadBalanceResponseTypeCase_ == 2) && (serverListBuilder_ != null)) {
@@ -740,12 +753,12 @@
       }
     }
     /**
-     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-     *
      * <pre>
      * Contains the list of servers selected by the load balancer. The client
      * should send requests to these servers in the specified order.
      * </pre>
+     *
+     * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         io.grpc.grpclb.ServerList, io.grpc.grpclb.ServerList.Builder, io.grpc.grpclb.ServerListOrBuilder> 
@@ -795,16 +808,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new LoadBalanceResponse(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponseOrBuilder.java b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponseOrBuilder.java
index 463cb3d..18a7653 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponseOrBuilder.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalanceResponseOrBuilder.java
@@ -8,38 +8,38 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-   *
    * <pre>
    * This message should be sent on the first response to the client.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
    */
   io.grpc.grpclb.InitialLoadBalanceResponse getInitialResponse();
   /**
-   * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
-   *
    * <pre>
    * This message should be sent on the first response to the client.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.InitialLoadBalanceResponse initial_response = 1;</code>
    */
   io.grpc.grpclb.InitialLoadBalanceResponseOrBuilder getInitialResponseOrBuilder();
 
   /**
-   * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-   *
    * <pre>
    * Contains the list of servers selected by the load balancer. The client
    * should send requests to these servers in the specified order.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
    */
   io.grpc.grpclb.ServerList getServerList();
   /**
-   * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
-   *
    * <pre>
    * Contains the list of servers selected by the load balancer. The client
    * should send requests to these servers in the specified order.
    * </pre>
+   *
+   * <code>optional .grpc.lb.v1.ServerList server_list = 2;</code>
    */
   io.grpc.grpclb.ServerListOrBuilder getServerListOrBuilder();
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalancerProto.java b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalancerProto.java
index 0720a54..0cf679f 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalancerProto.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/LoadBalancerProto.java
@@ -8,39 +8,39 @@
   public static void registerAllExtensions(
       com.google.protobuf.ExtensionRegistry registry) {
   }
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_lb_v1_LoadBalanceRequest_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_lb_v1_LoadBalanceRequest_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_lb_v1_InitialLoadBalanceRequest_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_lb_v1_InitialLoadBalanceRequest_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_lb_v1_ClientStats_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_lb_v1_ClientStats_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_lb_v1_LoadBalanceResponse_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_lb_v1_LoadBalanceResponse_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_lb_v1_InitialLoadBalanceResponse_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_lb_v1_InitialLoadBalanceResponse_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_lb_v1_ServerList_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_lb_v1_ServerList_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_lb_v1_Server_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_lb_v1_Server_fieldAccessorTable;
 
@@ -48,7 +48,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/Server.java b/grpclb/src/generated/main/java/io/grpc/grpclb/Server.java
index 1eb8826..8e876d2 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/Server.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/Server.java
@@ -28,7 +28,8 @@
   }
   private Server(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -69,11 +70,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -93,12 +93,12 @@
   public static final int IP_ADDRESS_FIELD_NUMBER = 1;
   private com.google.protobuf.ByteString ipAddress_;
   /**
-   * <code>optional bytes ip_address = 1;</code>
-   *
    * <pre>
    * A resolved address for the server, serialized in network-byte-order. It may
    * either be an IPv4 or IPv6 address.
    * </pre>
+   *
+   * <code>optional bytes ip_address = 1;</code>
    */
   public com.google.protobuf.ByteString getIpAddress() {
     return ipAddress_;
@@ -107,11 +107,11 @@
   public static final int PORT_FIELD_NUMBER = 2;
   private int port_;
   /**
-   * <code>optional int32 port = 2;</code>
-   *
    * <pre>
    * A resolved port number for the server.
    * </pre>
+   *
+   * <code>optional int32 port = 2;</code>
    */
   public int getPort() {
     return port_;
@@ -120,13 +120,13 @@
   public static final int LOAD_BALANCE_TOKEN_FIELD_NUMBER = 3;
   private volatile java.lang.Object loadBalanceToken_;
   /**
-   * <code>optional string load_balance_token = 3;</code>
-   *
    * <pre>
    * An opaque token that is passed from the client to the server in metadata.
    * The server may expect this token to indicate that the request from the
    * client was load balanced.
    * </pre>
+   *
+   * <code>optional string load_balance_token = 3;</code>
    */
   public java.lang.String getLoadBalanceToken() {
     java.lang.Object ref = loadBalanceToken_;
@@ -141,13 +141,13 @@
     }
   }
   /**
-   * <code>optional string load_balance_token = 3;</code>
-   *
    * <pre>
    * An opaque token that is passed from the client to the server in metadata.
    * The server may expect this token to indicate that the request from the
    * client was load balanced.
    * </pre>
+   *
+   * <code>optional string load_balance_token = 3;</code>
    */
   public com.google.protobuf.ByteString
       getLoadBalanceTokenBytes() {
@@ -166,12 +166,12 @@
   public static final int DROP_REQUEST_FIELD_NUMBER = 4;
   private boolean dropRequest_;
   /**
-   * <code>optional bool drop_request = 4;</code>
-   *
    * <pre>
    * Indicates whether this particular request should be dropped by the client
    * when this server is chosen from the list.
    * </pre>
+   *
+   * <code>optional bool drop_request = 4;</code>
    */
   public boolean getDropRequest() {
     return dropRequest_;
@@ -251,34 +251,40 @@
   }
   public static io.grpc.grpclb.Server parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.Server parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.Server parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.Server parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.Server parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.Server parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -413,7 +419,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.grpclb.Server) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -424,23 +430,23 @@
 
     private com.google.protobuf.ByteString ipAddress_ = com.google.protobuf.ByteString.EMPTY;
     /**
-     * <code>optional bytes ip_address = 1;</code>
-     *
      * <pre>
      * A resolved address for the server, serialized in network-byte-order. It may
      * either be an IPv4 or IPv6 address.
      * </pre>
+     *
+     * <code>optional bytes ip_address = 1;</code>
      */
     public com.google.protobuf.ByteString getIpAddress() {
       return ipAddress_;
     }
     /**
-     * <code>optional bytes ip_address = 1;</code>
-     *
      * <pre>
      * A resolved address for the server, serialized in network-byte-order. It may
      * either be an IPv4 or IPv6 address.
      * </pre>
+     *
+     * <code>optional bytes ip_address = 1;</code>
      */
     public Builder setIpAddress(com.google.protobuf.ByteString value) {
       if (value == null) {
@@ -452,12 +458,12 @@
       return this;
     }
     /**
-     * <code>optional bytes ip_address = 1;</code>
-     *
      * <pre>
      * A resolved address for the server, serialized in network-byte-order. It may
      * either be an IPv4 or IPv6 address.
      * </pre>
+     *
+     * <code>optional bytes ip_address = 1;</code>
      */
     public Builder clearIpAddress() {
       
@@ -468,21 +474,21 @@
 
     private int port_ ;
     /**
-     * <code>optional int32 port = 2;</code>
-     *
      * <pre>
      * A resolved port number for the server.
      * </pre>
+     *
+     * <code>optional int32 port = 2;</code>
      */
     public int getPort() {
       return port_;
     }
     /**
-     * <code>optional int32 port = 2;</code>
-     *
      * <pre>
      * A resolved port number for the server.
      * </pre>
+     *
+     * <code>optional int32 port = 2;</code>
      */
     public Builder setPort(int value) {
       
@@ -491,11 +497,11 @@
       return this;
     }
     /**
-     * <code>optional int32 port = 2;</code>
-     *
      * <pre>
      * A resolved port number for the server.
      * </pre>
+     *
+     * <code>optional int32 port = 2;</code>
      */
     public Builder clearPort() {
       
@@ -506,13 +512,13 @@
 
     private java.lang.Object loadBalanceToken_ = "";
     /**
-     * <code>optional string load_balance_token = 3;</code>
-     *
      * <pre>
      * An opaque token that is passed from the client to the server in metadata.
      * The server may expect this token to indicate that the request from the
      * client was load balanced.
      * </pre>
+     *
+     * <code>optional string load_balance_token = 3;</code>
      */
     public java.lang.String getLoadBalanceToken() {
       java.lang.Object ref = loadBalanceToken_;
@@ -527,13 +533,13 @@
       }
     }
     /**
-     * <code>optional string load_balance_token = 3;</code>
-     *
      * <pre>
      * An opaque token that is passed from the client to the server in metadata.
      * The server may expect this token to indicate that the request from the
      * client was load balanced.
      * </pre>
+     *
+     * <code>optional string load_balance_token = 3;</code>
      */
     public com.google.protobuf.ByteString
         getLoadBalanceTokenBytes() {
@@ -549,13 +555,13 @@
       }
     }
     /**
-     * <code>optional string load_balance_token = 3;</code>
-     *
      * <pre>
      * An opaque token that is passed from the client to the server in metadata.
      * The server may expect this token to indicate that the request from the
      * client was load balanced.
      * </pre>
+     *
+     * <code>optional string load_balance_token = 3;</code>
      */
     public Builder setLoadBalanceToken(
         java.lang.String value) {
@@ -568,13 +574,13 @@
       return this;
     }
     /**
-     * <code>optional string load_balance_token = 3;</code>
-     *
      * <pre>
      * An opaque token that is passed from the client to the server in metadata.
      * The server may expect this token to indicate that the request from the
      * client was load balanced.
      * </pre>
+     *
+     * <code>optional string load_balance_token = 3;</code>
      */
     public Builder clearLoadBalanceToken() {
       
@@ -583,13 +589,13 @@
       return this;
     }
     /**
-     * <code>optional string load_balance_token = 3;</code>
-     *
      * <pre>
      * An opaque token that is passed from the client to the server in metadata.
      * The server may expect this token to indicate that the request from the
      * client was load balanced.
      * </pre>
+     *
+     * <code>optional string load_balance_token = 3;</code>
      */
     public Builder setLoadBalanceTokenBytes(
         com.google.protobuf.ByteString value) {
@@ -605,23 +611,23 @@
 
     private boolean dropRequest_ ;
     /**
-     * <code>optional bool drop_request = 4;</code>
-     *
      * <pre>
      * Indicates whether this particular request should be dropped by the client
      * when this server is chosen from the list.
      * </pre>
+     *
+     * <code>optional bool drop_request = 4;</code>
      */
     public boolean getDropRequest() {
       return dropRequest_;
     }
     /**
-     * <code>optional bool drop_request = 4;</code>
-     *
      * <pre>
      * Indicates whether this particular request should be dropped by the client
      * when this server is chosen from the list.
      * </pre>
+     *
+     * <code>optional bool drop_request = 4;</code>
      */
     public Builder setDropRequest(boolean value) {
       
@@ -630,12 +636,12 @@
       return this;
     }
     /**
-     * <code>optional bool drop_request = 4;</code>
-     *
      * <pre>
      * Indicates whether this particular request should be dropped by the client
      * when this server is chosen from the list.
      * </pre>
+     *
+     * <code>optional bool drop_request = 4;</code>
      */
     public Builder clearDropRequest() {
       
@@ -673,16 +679,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new Server(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/ServerList.java b/grpclb/src/generated/main/java/io/grpc/grpclb/ServerList.java
index 9599427..69a66d2 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/ServerList.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/ServerList.java
@@ -25,7 +25,8 @@
   }
   private ServerList(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -66,11 +67,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       if (((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
         servers_ = java.util.Collections.unmodifiableList(servers_);
@@ -94,67 +94,67 @@
   public static final int SERVERS_FIELD_NUMBER = 1;
   private java.util.List<io.grpc.grpclb.Server> servers_;
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   public java.util.List<io.grpc.grpclb.Server> getServersList() {
     return servers_;
   }
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   public java.util.List<? extends io.grpc.grpclb.ServerOrBuilder> 
       getServersOrBuilderList() {
     return servers_;
   }
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   public int getServersCount() {
     return servers_.size();
   }
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   public io.grpc.grpclb.Server getServers(int index) {
     return servers_.get(index);
   }
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   public io.grpc.grpclb.ServerOrBuilder getServersOrBuilder(
       int index) {
@@ -164,40 +164,40 @@
   public static final int EXPIRATION_INTERVAL_FIELD_NUMBER = 3;
   private com.google.protobuf.Duration expirationInterval_;
   /**
-   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-   *
    * <pre>
    * Indicates the amount of time that the client should consider this server
    * list as valid. It may be considered stale after waiting this interval of
    * time after receiving the list. If the interval is not positive, the
    * client can assume the list is valid until the next list is received.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
    */
   public boolean hasExpirationInterval() {
     return expirationInterval_ != null;
   }
   /**
-   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-   *
    * <pre>
    * Indicates the amount of time that the client should consider this server
    * list as valid. It may be considered stale after waiting this interval of
    * time after receiving the list. If the interval is not positive, the
    * client can assume the list is valid until the next list is received.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
    */
   public com.google.protobuf.Duration getExpirationInterval() {
     return expirationInterval_ == null ? com.google.protobuf.Duration.getDefaultInstance() : expirationInterval_;
   }
   /**
-   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-   *
    * <pre>
    * Indicates the amount of time that the client should consider this server
    * list as valid. It may be considered stale after waiting this interval of
    * time after receiving the list. If the interval is not positive, the
    * client can assume the list is valid until the next list is received.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
    */
   public com.google.protobuf.DurationOrBuilder getExpirationIntervalOrBuilder() {
     return getExpirationInterval();
@@ -264,34 +264,40 @@
   }
   public static io.grpc.grpclb.ServerList parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.ServerList parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.ServerList parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.ServerList parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.grpclb.ServerList parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.grpclb.ServerList parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -460,7 +466,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.grpclb.ServerList) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -483,14 +489,14 @@
         io.grpc.grpclb.Server, io.grpc.grpclb.Server.Builder, io.grpc.grpclb.ServerOrBuilder> serversBuilder_;
 
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public java.util.List<io.grpc.grpclb.Server> getServersList() {
       if (serversBuilder_ == null) {
@@ -500,14 +506,14 @@
       }
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public int getServersCount() {
       if (serversBuilder_ == null) {
@@ -517,14 +523,14 @@
       }
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public io.grpc.grpclb.Server getServers(int index) {
       if (serversBuilder_ == null) {
@@ -534,14 +540,14 @@
       }
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder setServers(
         int index, io.grpc.grpclb.Server value) {
@@ -558,14 +564,14 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder setServers(
         int index, io.grpc.grpclb.Server.Builder builderForValue) {
@@ -579,14 +585,14 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder addServers(io.grpc.grpclb.Server value) {
       if (serversBuilder_ == null) {
@@ -602,14 +608,14 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder addServers(
         int index, io.grpc.grpclb.Server value) {
@@ -626,14 +632,14 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder addServers(
         io.grpc.grpclb.Server.Builder builderForValue) {
@@ -647,14 +653,14 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder addServers(
         int index, io.grpc.grpclb.Server.Builder builderForValue) {
@@ -668,14 +674,14 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder addAllServers(
         java.lang.Iterable<? extends io.grpc.grpclb.Server> values) {
@@ -690,14 +696,14 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder clearServers() {
       if (serversBuilder_ == null) {
@@ -710,14 +716,14 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public Builder removeServers(int index) {
       if (serversBuilder_ == null) {
@@ -730,28 +736,28 @@
       return this;
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public io.grpc.grpclb.Server.Builder getServersBuilder(
         int index) {
       return getServersFieldBuilder().getBuilder(index);
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public io.grpc.grpclb.ServerOrBuilder getServersOrBuilder(
         int index) {
@@ -761,14 +767,14 @@
       }
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public java.util.List<? extends io.grpc.grpclb.ServerOrBuilder> 
          getServersOrBuilderList() {
@@ -779,28 +785,28 @@
       }
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public io.grpc.grpclb.Server.Builder addServersBuilder() {
       return getServersFieldBuilder().addBuilder(
           io.grpc.grpclb.Server.getDefaultInstance());
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public io.grpc.grpclb.Server.Builder addServersBuilder(
         int index) {
@@ -808,14 +814,14 @@
           index, io.grpc.grpclb.Server.getDefaultInstance());
     }
     /**
-     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-     *
      * <pre>
      * Contains a list of servers selected by the load balancer. The list will
      * be updated when server resolutions change or as needed to balance load
      * across more servers. The client should consume the server list in order
      * unless instructed otherwise via the client_config.
      * </pre>
+     *
+     * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
      */
     public java.util.List<io.grpc.grpclb.Server.Builder> 
          getServersBuilderList() {
@@ -840,27 +846,27 @@
     private com.google.protobuf.SingleFieldBuilder<
         com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> expirationIntervalBuilder_;
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     public boolean hasExpirationInterval() {
       return expirationIntervalBuilder_ != null || expirationInterval_ != null;
     }
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     public com.google.protobuf.Duration getExpirationInterval() {
       if (expirationIntervalBuilder_ == null) {
@@ -870,14 +876,14 @@
       }
     }
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     public Builder setExpirationInterval(com.google.protobuf.Duration value) {
       if (expirationIntervalBuilder_ == null) {
@@ -893,14 +899,14 @@
       return this;
     }
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     public Builder setExpirationInterval(
         com.google.protobuf.Duration.Builder builderForValue) {
@@ -914,14 +920,14 @@
       return this;
     }
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     public Builder mergeExpirationInterval(com.google.protobuf.Duration value) {
       if (expirationIntervalBuilder_ == null) {
@@ -939,14 +945,14 @@
       return this;
     }
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     public Builder clearExpirationInterval() {
       if (expirationIntervalBuilder_ == null) {
@@ -960,14 +966,14 @@
       return this;
     }
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     public com.google.protobuf.Duration.Builder getExpirationIntervalBuilder() {
       
@@ -975,14 +981,14 @@
       return getExpirationIntervalFieldBuilder().getBuilder();
     }
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     public com.google.protobuf.DurationOrBuilder getExpirationIntervalOrBuilder() {
       if (expirationIntervalBuilder_ != null) {
@@ -993,14 +999,14 @@
       }
     }
     /**
-     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-     *
      * <pre>
      * Indicates the amount of time that the client should consider this server
      * list as valid. It may be considered stale after waiting this interval of
      * time after receiving the list. If the interval is not positive, the
      * client can assume the list is valid until the next list is received.
      * </pre>
+     *
+     * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
      */
     private com.google.protobuf.SingleFieldBuilder<
         com.google.protobuf.Duration, com.google.protobuf.Duration.Builder, com.google.protobuf.DurationOrBuilder> 
@@ -1045,16 +1051,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new ServerList(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/ServerListOrBuilder.java b/grpclb/src/generated/main/java/io/grpc/grpclb/ServerListOrBuilder.java
index 8610e10..6d12cc8 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/ServerListOrBuilder.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/ServerListOrBuilder.java
@@ -8,95 +8,95 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   java.util.List<io.grpc.grpclb.Server> 
       getServersList();
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   io.grpc.grpclb.Server getServers(int index);
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   int getServersCount();
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   java.util.List<? extends io.grpc.grpclb.ServerOrBuilder> 
       getServersOrBuilderList();
   /**
-   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
-   *
    * <pre>
    * Contains a list of servers selected by the load balancer. The list will
    * be updated when server resolutions change or as needed to balance load
    * across more servers. The client should consume the server list in order
    * unless instructed otherwise via the client_config.
    * </pre>
+   *
+   * <code>repeated .grpc.lb.v1.Server servers = 1;</code>
    */
   io.grpc.grpclb.ServerOrBuilder getServersOrBuilder(
       int index);
 
   /**
-   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-   *
    * <pre>
    * Indicates the amount of time that the client should consider this server
    * list as valid. It may be considered stale after waiting this interval of
    * time after receiving the list. If the interval is not positive, the
    * client can assume the list is valid until the next list is received.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
    */
   boolean hasExpirationInterval();
   /**
-   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-   *
    * <pre>
    * Indicates the amount of time that the client should consider this server
    * list as valid. It may be considered stale after waiting this interval of
    * time after receiving the list. If the interval is not positive, the
    * client can assume the list is valid until the next list is received.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
    */
   com.google.protobuf.Duration getExpirationInterval();
   /**
-   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
-   *
    * <pre>
    * Indicates the amount of time that the client should consider this server
    * list as valid. It may be considered stale after waiting this interval of
    * time after receiving the list. If the interval is not positive, the
    * client can assume the list is valid until the next list is received.
    * </pre>
+   *
+   * <code>optional .google.protobuf.Duration expiration_interval = 3;</code>
    */
   com.google.protobuf.DurationOrBuilder getExpirationIntervalOrBuilder();
 }
diff --git a/grpclb/src/generated/main/java/io/grpc/grpclb/ServerOrBuilder.java b/grpclb/src/generated/main/java/io/grpc/grpclb/ServerOrBuilder.java
index 9918f75..d8b76a9 100644
--- a/grpclb/src/generated/main/java/io/grpc/grpclb/ServerOrBuilder.java
+++ b/grpclb/src/generated/main/java/io/grpc/grpclb/ServerOrBuilder.java
@@ -8,53 +8,53 @@
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>optional bytes ip_address = 1;</code>
-   *
    * <pre>
    * A resolved address for the server, serialized in network-byte-order. It may
    * either be an IPv4 or IPv6 address.
    * </pre>
+   *
+   * <code>optional bytes ip_address = 1;</code>
    */
   com.google.protobuf.ByteString getIpAddress();
 
   /**
-   * <code>optional int32 port = 2;</code>
-   *
    * <pre>
    * A resolved port number for the server.
    * </pre>
+   *
+   * <code>optional int32 port = 2;</code>
    */
   int getPort();
 
   /**
-   * <code>optional string load_balance_token = 3;</code>
-   *
    * <pre>
    * An opaque token that is passed from the client to the server in metadata.
    * The server may expect this token to indicate that the request from the
    * client was load balanced.
    * </pre>
+   *
+   * <code>optional string load_balance_token = 3;</code>
    */
   java.lang.String getLoadBalanceToken();
   /**
-   * <code>optional string load_balance_token = 3;</code>
-   *
    * <pre>
    * An opaque token that is passed from the client to the server in metadata.
    * The server may expect this token to indicate that the request from the
    * client was load balanced.
    * </pre>
+   *
+   * <code>optional string load_balance_token = 3;</code>
    */
   com.google.protobuf.ByteString
       getLoadBalanceTokenBytes();
 
   /**
-   * <code>optional bool drop_request = 4;</code>
-   *
    * <pre>
    * Indicates whether this particular request should be dropped by the client
    * when this server is chosen from the list.
    * </pre>
+   *
+   * <code>optional bool drop_request = 4;</code>
    */
   boolean getDropRequest();
 }
diff --git a/interop-testing/src/generated/main/java/com/google/protobuf/EmptyProtos.java b/interop-testing/src/generated/main/java/com/google/protobuf/EmptyProtos.java
index e1b0b21..02cde0c 100644
--- a/interop-testing/src/generated/main/java/com/google/protobuf/EmptyProtos.java
+++ b/interop-testing/src/generated/main/java/com/google/protobuf/EmptyProtos.java
@@ -13,8 +13,6 @@
       com.google.protobuf.MessageOrBuilder {
   }
   /**
-   * Protobuf type {@code grpc.testing.Empty}
-   *
    * <pre>
    * An empty message that you can re-use to avoid defining duplicated empty
    * messages in your project. A typical example is to use it as argument or the
@@ -23,6 +21,8 @@
    *     rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { };
    *   };
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.Empty}
    */
   public  static final class Empty extends
       com.google.protobuf.GeneratedMessage implements
@@ -42,7 +42,8 @@
     }
     private Empty(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       com.google.protobuf.UnknownFieldSet.Builder unknownFields =
           com.google.protobuf.UnknownFieldSet.newBuilder();
@@ -64,11 +65,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -135,34 +135,40 @@
     }
     public static com.google.protobuf.EmptyProtos.Empty parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static com.google.protobuf.EmptyProtos.Empty parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static com.google.protobuf.EmptyProtos.Empty parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static com.google.protobuf.EmptyProtos.Empty parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static com.google.protobuf.EmptyProtos.Empty parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static com.google.protobuf.EmptyProtos.Empty parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -184,8 +190,6 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.Empty}
-     *
      * <pre>
      * An empty message that you can re-use to avoid defining duplicated empty
      * messages in your project. A typical example is to use it as argument or the
@@ -194,6 +198,8 @@
      *     rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { };
      *   };
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.Empty}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -282,7 +288,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (com.google.protobuf.EmptyProtos.Empty) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -310,16 +316,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new Empty(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -338,9 +335,9 @@
 
   }
 
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_Empty_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_Empty_fieldAccessorTable;
 
@@ -348,7 +345,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Messages.java b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Messages.java
index 647407b..9e857ae 100644
--- a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Messages.java
+++ b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Messages.java
@@ -9,76 +9,84 @@
       com.google.protobuf.ExtensionRegistry registry) {
   }
   /**
-   * Protobuf enum {@code grpc.testing.PayloadType}
-   *
    * <pre>
    * The type of payload that should be returned.
    * </pre>
+   *
+   * Protobuf enum {@code grpc.testing.PayloadType}
    */
   public enum PayloadType
       implements com.google.protobuf.ProtocolMessageEnum {
     /**
-     * <code>COMPRESSABLE = 0;</code>
-     *
      * <pre>
      * Compressable text format.
      * </pre>
-     */
-    COMPRESSABLE(0, 0),
-    /**
-     * <code>UNCOMPRESSABLE = 1;</code>
      *
+     * <code>COMPRESSABLE = 0;</code>
+     */
+    COMPRESSABLE(0),
+    /**
      * <pre>
      * Uncompressable binary format.
      * </pre>
-     */
-    UNCOMPRESSABLE(1, 1),
-    /**
-     * <code>RANDOM = 2;</code>
      *
+     * <code>UNCOMPRESSABLE = 1;</code>
+     */
+    UNCOMPRESSABLE(1),
+    /**
      * <pre>
      * Randomly chosen from all other formats defined in this enum.
      * </pre>
+     *
+     * <code>RANDOM = 2;</code>
      */
-    RANDOM(2, 2),
-    UNRECOGNIZED(-1, -1),
+    RANDOM(2),
+    UNRECOGNIZED(-1),
     ;
 
     /**
-     * <code>COMPRESSABLE = 0;</code>
-     *
      * <pre>
      * Compressable text format.
      * </pre>
+     *
+     * <code>COMPRESSABLE = 0;</code>
      */
     public static final int COMPRESSABLE_VALUE = 0;
     /**
-     * <code>UNCOMPRESSABLE = 1;</code>
-     *
      * <pre>
      * Uncompressable binary format.
      * </pre>
+     *
+     * <code>UNCOMPRESSABLE = 1;</code>
      */
     public static final int UNCOMPRESSABLE_VALUE = 1;
     /**
-     * <code>RANDOM = 2;</code>
-     *
      * <pre>
      * Randomly chosen from all other formats defined in this enum.
      * </pre>
+     *
+     * <code>RANDOM = 2;</code>
      */
     public static final int RANDOM_VALUE = 2;
 
 
     public final int getNumber() {
-      if (index == -1) {
+      if (this == UNRECOGNIZED) {
         throw new java.lang.IllegalArgumentException(
             "Can't get the number of an unknown enum value.");
       }
       return value;
     }
 
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static PayloadType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static PayloadType forNumber(int value) {
       switch (value) {
         case 0: return COMPRESSABLE;
         case 1: return UNCOMPRESSABLE;
@@ -95,13 +103,13 @@
         PayloadType> internalValueMap =
           new com.google.protobuf.Internal.EnumLiteMap<PayloadType>() {
             public PayloadType findValueByNumber(int number) {
-              return PayloadType.valueOf(number);
+              return PayloadType.forNumber(number);
             }
           };
 
     public final com.google.protobuf.Descriptors.EnumValueDescriptor
         getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
+      return getDescriptor().getValues().get(ordinal());
     }
     public final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptorForType() {
@@ -126,11 +134,9 @@
       return VALUES[desc.getIndex()];
     }
 
-    private final int index;
     private final int value;
 
-    private PayloadType(int index, int value) {
-      this.index = index;
+    private PayloadType(int value) {
       this.value = value;
     }
 
@@ -138,39 +144,39 @@
   }
 
   /**
-   * Protobuf enum {@code grpc.testing.CompressionType}
-   *
    * <pre>
    * Compression algorithms
    * </pre>
+   *
+   * Protobuf enum {@code grpc.testing.CompressionType}
    */
   public enum CompressionType
       implements com.google.protobuf.ProtocolMessageEnum {
     /**
-     * <code>NONE = 0;</code>
-     *
      * <pre>
      * No compression
      * </pre>
+     *
+     * <code>NONE = 0;</code>
      */
-    NONE(0, 0),
+    NONE(0),
     /**
      * <code>GZIP = 1;</code>
      */
-    GZIP(1, 1),
+    GZIP(1),
     /**
      * <code>DEFLATE = 2;</code>
      */
-    DEFLATE(2, 2),
-    UNRECOGNIZED(-1, -1),
+    DEFLATE(2),
+    UNRECOGNIZED(-1),
     ;
 
     /**
-     * <code>NONE = 0;</code>
-     *
      * <pre>
      * No compression
      * </pre>
+     *
+     * <code>NONE = 0;</code>
      */
     public static final int NONE_VALUE = 0;
     /**
@@ -184,14 +190,22 @@
 
 
     public final int getNumber() {
-      if (index == -1) {
+      if (this == UNRECOGNIZED) {
         throw new java.lang.IllegalArgumentException(
             "Can't get the number of an unknown enum value.");
       }
       return value;
     }
 
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static CompressionType valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static CompressionType forNumber(int value) {
       switch (value) {
         case 0: return NONE;
         case 1: return GZIP;
@@ -208,13 +222,13 @@
         CompressionType> internalValueMap =
           new com.google.protobuf.Internal.EnumLiteMap<CompressionType>() {
             public CompressionType findValueByNumber(int number) {
-              return CompressionType.valueOf(number);
+              return CompressionType.forNumber(number);
             }
           };
 
     public final com.google.protobuf.Descriptors.EnumValueDescriptor
         getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
+      return getDescriptor().getValues().get(ordinal());
     }
     public final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptorForType() {
@@ -239,11 +253,9 @@
       return VALUES[desc.getIndex()];
     }
 
-    private final int index;
     private final int value;
 
-    private CompressionType(int index, int value) {
-      this.index = index;
+    private CompressionType(int value) {
       this.value = value;
     }
 
@@ -255,37 +267,37 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.PayloadType type = 1;</code>
-     *
      * <pre>
      * The type of data in body.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType type = 1;</code>
      */
     int getTypeValue();
     /**
-     * <code>optional .grpc.testing.PayloadType type = 1;</code>
-     *
      * <pre>
      * The type of data in body.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType type = 1;</code>
      */
     io.grpc.testing.integration.Messages.PayloadType getType();
 
     /**
-     * <code>optional bytes body = 2;</code>
-     *
      * <pre>
      * Primary contents of payload.
      * </pre>
+     *
+     * <code>optional bytes body = 2;</code>
      */
     com.google.protobuf.ByteString getBody();
   }
   /**
-   * Protobuf type {@code grpc.testing.Payload}
-   *
    * <pre>
    * A block of data, to simply increase gRPC message size.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.Payload}
    */
   public  static final class Payload extends
       com.google.protobuf.GeneratedMessage implements
@@ -307,7 +319,8 @@
     }
     private Payload(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -338,11 +351,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -362,35 +374,35 @@
     public static final int TYPE_FIELD_NUMBER = 1;
     private int type_;
     /**
-     * <code>optional .grpc.testing.PayloadType type = 1;</code>
-     *
      * <pre>
      * The type of data in body.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType type = 1;</code>
      */
     public int getTypeValue() {
       return type_;
     }
     /**
-     * <code>optional .grpc.testing.PayloadType type = 1;</code>
-     *
      * <pre>
      * The type of data in body.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType type = 1;</code>
      */
     public io.grpc.testing.integration.Messages.PayloadType getType() {
-      io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.valueOf(type_);
+      io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.forNumber(type_);
       return result == null ? io.grpc.testing.integration.Messages.PayloadType.UNRECOGNIZED : result;
     }
 
     public static final int BODY_FIELD_NUMBER = 2;
     private com.google.protobuf.ByteString body_;
     /**
-     * <code>optional bytes body = 2;</code>
-     *
      * <pre>
      * Primary contents of payload.
      * </pre>
+     *
+     * <code>optional bytes body = 2;</code>
      */
     public com.google.protobuf.ByteString getBody() {
       return body_;
@@ -457,34 +469,40 @@
     }
     public static io.grpc.testing.integration.Messages.Payload parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.Payload parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.Payload parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.Payload parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.Payload parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.Payload parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -506,11 +524,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.Payload}
-     *
      * <pre>
      * A block of data, to simply increase gRPC message size.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.Payload}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -610,7 +628,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.Payload) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -621,21 +639,21 @@
 
       private int type_ = 0;
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public int getTypeValue() {
         return type_;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public Builder setTypeValue(int value) {
         type_ = value;
@@ -643,22 +661,22 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public io.grpc.testing.integration.Messages.PayloadType getType() {
-        io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.valueOf(type_);
+        io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.forNumber(type_);
         return result == null ? io.grpc.testing.integration.Messages.PayloadType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public Builder setType(io.grpc.testing.integration.Messages.PayloadType value) {
         if (value == null) {
@@ -670,11 +688,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType type = 1;</code>
-       *
        * <pre>
        * The type of data in body.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType type = 1;</code>
        */
       public Builder clearType() {
         
@@ -685,21 +703,21 @@
 
       private com.google.protobuf.ByteString body_ = com.google.protobuf.ByteString.EMPTY;
       /**
-       * <code>optional bytes body = 2;</code>
-       *
        * <pre>
        * Primary contents of payload.
        * </pre>
+       *
+       * <code>optional bytes body = 2;</code>
        */
       public com.google.protobuf.ByteString getBody() {
         return body_;
       }
       /**
-       * <code>optional bytes body = 2;</code>
-       *
        * <pre>
        * Primary contents of payload.
        * </pre>
+       *
+       * <code>optional bytes body = 2;</code>
        */
       public Builder setBody(com.google.protobuf.ByteString value) {
         if (value == null) {
@@ -711,11 +729,11 @@
         return this;
       }
       /**
-       * <code>optional bytes body = 2;</code>
-       *
        * <pre>
        * Primary contents of payload.
        * </pre>
+       *
+       * <code>optional bytes body = 2;</code>
        */
       public Builder clearBody() {
         
@@ -753,16 +771,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new Payload(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -801,12 +810,12 @@
         getMessageBytes();
   }
   /**
-   * Protobuf type {@code grpc.testing.EchoStatus}
-   *
    * <pre>
    * A protobuf representation for grpc status. This is used by test
    * clients to specify a status that the server should attempt to return.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.EchoStatus}
    */
   public  static final class EchoStatus extends
       com.google.protobuf.GeneratedMessage implements
@@ -828,7 +837,8 @@
     }
     private EchoStatus(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -859,11 +869,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -983,34 +992,40 @@
     }
     public static io.grpc.testing.integration.Messages.EchoStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.EchoStatus parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.EchoStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.EchoStatus parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.EchoStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.EchoStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1032,12 +1047,12 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.EchoStatus}
-     *
      * <pre>
      * A protobuf representation for grpc status. This is used by test
      * clients to specify a status that the server should attempt to return.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.EchoStatus}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -1138,7 +1153,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.EchoStatus) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1271,16 +1286,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new EchoStatus(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1304,125 +1310,125 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, server randomly chooses one from other formats.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     int getResponseTypeValue();
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, server randomly chooses one from other formats.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     io.grpc.testing.integration.Messages.PayloadType getResponseType();
 
     /**
-     * <code>optional int32 response_size = 2;</code>
-     *
      * <pre>
      * Desired payload size in the response from the server.
      * If response_type is COMPRESSABLE, this denotes the size before compression.
      * </pre>
+     *
+     * <code>optional int32 response_size = 2;</code>
      */
     int getResponseSize();
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     io.grpc.testing.integration.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder();
 
     /**
-     * <code>optional bool fill_username = 4;</code>
-     *
      * <pre>
      * Whether SimpleResponse should include username.
      * </pre>
+     *
+     * <code>optional bool fill_username = 4;</code>
      */
     boolean getFillUsername();
 
     /**
-     * <code>optional bool fill_oauth_scope = 5;</code>
-     *
      * <pre>
      * Whether SimpleResponse should include OAuth scope.
      * </pre>
+     *
+     * <code>optional bool fill_oauth_scope = 5;</code>
      */
     boolean getFillOauthScope();
 
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     int getResponseCompressionValue();
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     io.grpc.testing.integration.Messages.CompressionType getResponseCompression();
 
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     boolean hasResponseStatus();
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     io.grpc.testing.integration.Messages.EchoStatus getResponseStatus();
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     io.grpc.testing.integration.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder();
   }
   /**
-   * Protobuf type {@code grpc.testing.SimpleRequest}
-   *
    * <pre>
    * Unary request.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.SimpleRequest}
    */
   public  static final class SimpleRequest extends
       com.google.protobuf.GeneratedMessage implements
@@ -1447,7 +1453,8 @@
     }
     private SimpleRequest(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -1520,11 +1527,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -1544,38 +1550,38 @@
     public static final int RESPONSE_TYPE_FIELD_NUMBER = 1;
     private int responseType_;
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, server randomly chooses one from other formats.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     public int getResponseTypeValue() {
       return responseType_;
     }
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, server randomly chooses one from other formats.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     public io.grpc.testing.integration.Messages.PayloadType getResponseType() {
-      io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.valueOf(responseType_);
+      io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.forNumber(responseType_);
       return result == null ? io.grpc.testing.integration.Messages.PayloadType.UNRECOGNIZED : result;
     }
 
     public static final int RESPONSE_SIZE_FIELD_NUMBER = 2;
     private int responseSize_;
     /**
-     * <code>optional int32 response_size = 2;</code>
-     *
      * <pre>
      * Desired payload size in the response from the server.
      * If response_type is COMPRESSABLE, this denotes the size before compression.
      * </pre>
+     *
+     * <code>optional int32 response_size = 2;</code>
      */
     public int getResponseSize() {
       return responseSize_;
@@ -1584,31 +1590,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 3;
     private io.grpc.testing.integration.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public io.grpc.testing.integration.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.testing.integration.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -1617,11 +1623,11 @@
     public static final int FILL_USERNAME_FIELD_NUMBER = 4;
     private boolean fillUsername_;
     /**
-     * <code>optional bool fill_username = 4;</code>
-     *
      * <pre>
      * Whether SimpleResponse should include username.
      * </pre>
+     *
+     * <code>optional bool fill_username = 4;</code>
      */
     public boolean getFillUsername() {
       return fillUsername_;
@@ -1630,11 +1636,11 @@
     public static final int FILL_OAUTH_SCOPE_FIELD_NUMBER = 5;
     private boolean fillOauthScope_;
     /**
-     * <code>optional bool fill_oauth_scope = 5;</code>
-     *
      * <pre>
      * Whether SimpleResponse should include OAuth scope.
      * </pre>
+     *
+     * <code>optional bool fill_oauth_scope = 5;</code>
      */
     public boolean getFillOauthScope() {
       return fillOauthScope_;
@@ -1643,55 +1649,55 @@
     public static final int RESPONSE_COMPRESSION_FIELD_NUMBER = 6;
     private int responseCompression_;
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     public int getResponseCompressionValue() {
       return responseCompression_;
     }
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     public io.grpc.testing.integration.Messages.CompressionType getResponseCompression() {
-      io.grpc.testing.integration.Messages.CompressionType result = io.grpc.testing.integration.Messages.CompressionType.valueOf(responseCompression_);
+      io.grpc.testing.integration.Messages.CompressionType result = io.grpc.testing.integration.Messages.CompressionType.forNumber(responseCompression_);
       return result == null ? io.grpc.testing.integration.Messages.CompressionType.UNRECOGNIZED : result;
     }
 
     public static final int RESPONSE_STATUS_FIELD_NUMBER = 7;
     private io.grpc.testing.integration.Messages.EchoStatus responseStatus_;
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public boolean hasResponseStatus() {
       return responseStatus_ != null;
     }
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public io.grpc.testing.integration.Messages.EchoStatus getResponseStatus() {
       return responseStatus_ == null ? io.grpc.testing.integration.Messages.EchoStatus.getDefaultInstance() : responseStatus_;
     }
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public io.grpc.testing.integration.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder() {
       return getResponseStatus();
@@ -1793,34 +1799,40 @@
     }
     public static io.grpc.testing.integration.Messages.SimpleRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.SimpleRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.SimpleRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1842,11 +1854,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.SimpleRequest}
-     *
      * <pre>
      * Unary request.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.SimpleRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -1992,7 +2004,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.SimpleRequest) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -2003,23 +2015,23 @@
 
       private int responseType_ = 0;
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public int getResponseTypeValue() {
         return responseType_;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder setResponseTypeValue(int value) {
         responseType_ = value;
@@ -2027,24 +2039,24 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public io.grpc.testing.integration.Messages.PayloadType getResponseType() {
-        io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.valueOf(responseType_);
+        io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.forNumber(responseType_);
         return result == null ? io.grpc.testing.integration.Messages.PayloadType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder setResponseType(io.grpc.testing.integration.Messages.PayloadType value) {
         if (value == null) {
@@ -2056,12 +2068,12 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, server randomly chooses one from other formats.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder clearResponseType() {
         
@@ -2072,23 +2084,23 @@
 
       private int responseSize_ ;
       /**
-       * <code>optional int32 response_size = 2;</code>
-       *
        * <pre>
        * Desired payload size in the response from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 response_size = 2;</code>
        */
       public int getResponseSize() {
         return responseSize_;
       }
       /**
-       * <code>optional int32 response_size = 2;</code>
-       *
        * <pre>
        * Desired payload size in the response from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 response_size = 2;</code>
        */
       public Builder setResponseSize(int value) {
         
@@ -2097,12 +2109,12 @@
         return this;
       }
       /**
-       * <code>optional int32 response_size = 2;</code>
-       *
        * <pre>
        * Desired payload size in the response from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 response_size = 2;</code>
        */
       public Builder clearResponseSize() {
         
@@ -2115,21 +2127,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.testing.integration.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -2139,11 +2151,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder setPayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -2159,11 +2171,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder setPayload(
           io.grpc.testing.integration.Messages.Payload.Builder builderForValue) {
@@ -2177,11 +2189,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder mergePayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -2199,11 +2211,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -2217,11 +2229,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.testing.integration.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -2229,11 +2241,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -2244,11 +2256,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> 
@@ -2266,21 +2278,21 @@
 
       private boolean fillUsername_ ;
       /**
-       * <code>optional bool fill_username = 4;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include username.
        * </pre>
+       *
+       * <code>optional bool fill_username = 4;</code>
        */
       public boolean getFillUsername() {
         return fillUsername_;
       }
       /**
-       * <code>optional bool fill_username = 4;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include username.
        * </pre>
+       *
+       * <code>optional bool fill_username = 4;</code>
        */
       public Builder setFillUsername(boolean value) {
         
@@ -2289,11 +2301,11 @@
         return this;
       }
       /**
-       * <code>optional bool fill_username = 4;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include username.
        * </pre>
+       *
+       * <code>optional bool fill_username = 4;</code>
        */
       public Builder clearFillUsername() {
         
@@ -2304,21 +2316,21 @@
 
       private boolean fillOauthScope_ ;
       /**
-       * <code>optional bool fill_oauth_scope = 5;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include OAuth scope.
        * </pre>
+       *
+       * <code>optional bool fill_oauth_scope = 5;</code>
        */
       public boolean getFillOauthScope() {
         return fillOauthScope_;
       }
       /**
-       * <code>optional bool fill_oauth_scope = 5;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include OAuth scope.
        * </pre>
+       *
+       * <code>optional bool fill_oauth_scope = 5;</code>
        */
       public Builder setFillOauthScope(boolean value) {
         
@@ -2327,11 +2339,11 @@
         return this;
       }
       /**
-       * <code>optional bool fill_oauth_scope = 5;</code>
-       *
        * <pre>
        * Whether SimpleResponse should include OAuth scope.
        * </pre>
+       *
+       * <code>optional bool fill_oauth_scope = 5;</code>
        */
       public Builder clearFillOauthScope() {
         
@@ -2342,21 +2354,21 @@
 
       private int responseCompression_ = 0;
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public int getResponseCompressionValue() {
         return responseCompression_;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder setResponseCompressionValue(int value) {
         responseCompression_ = value;
@@ -2364,22 +2376,22 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public io.grpc.testing.integration.Messages.CompressionType getResponseCompression() {
-        io.grpc.testing.integration.Messages.CompressionType result = io.grpc.testing.integration.Messages.CompressionType.valueOf(responseCompression_);
+        io.grpc.testing.integration.Messages.CompressionType result = io.grpc.testing.integration.Messages.CompressionType.forNumber(responseCompression_);
         return result == null ? io.grpc.testing.integration.Messages.CompressionType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder setResponseCompression(io.grpc.testing.integration.Messages.CompressionType value) {
         if (value == null) {
@@ -2391,11 +2403,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder clearResponseCompression() {
         
@@ -2408,21 +2420,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.EchoStatus, io.grpc.testing.integration.Messages.EchoStatus.Builder, io.grpc.testing.integration.Messages.EchoStatusOrBuilder> responseStatusBuilder_;
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public boolean hasResponseStatus() {
         return responseStatusBuilder_ != null || responseStatus_ != null;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.testing.integration.Messages.EchoStatus getResponseStatus() {
         if (responseStatusBuilder_ == null) {
@@ -2432,11 +2444,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder setResponseStatus(io.grpc.testing.integration.Messages.EchoStatus value) {
         if (responseStatusBuilder_ == null) {
@@ -2452,11 +2464,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder setResponseStatus(
           io.grpc.testing.integration.Messages.EchoStatus.Builder builderForValue) {
@@ -2470,11 +2482,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder mergeResponseStatus(io.grpc.testing.integration.Messages.EchoStatus value) {
         if (responseStatusBuilder_ == null) {
@@ -2492,11 +2504,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder clearResponseStatus() {
         if (responseStatusBuilder_ == null) {
@@ -2510,11 +2522,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.testing.integration.Messages.EchoStatus.Builder getResponseStatusBuilder() {
         
@@ -2522,11 +2534,11 @@
         return getResponseStatusFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.testing.integration.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder() {
         if (responseStatusBuilder_ != null) {
@@ -2537,11 +2549,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.EchoStatus, io.grpc.testing.integration.Messages.EchoStatus.Builder, io.grpc.testing.integration.Messages.EchoStatusOrBuilder> 
@@ -2586,16 +2598,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new SimpleRequest(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -2619,74 +2622,74 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.testing.integration.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder();
 
     /**
-     * <code>optional string username = 2;</code>
-     *
      * <pre>
      * The user the request came from, for verifying authentication was
      * successful when the client expected it.
      * </pre>
+     *
+     * <code>optional string username = 2;</code>
      */
     java.lang.String getUsername();
     /**
-     * <code>optional string username = 2;</code>
-     *
      * <pre>
      * The user the request came from, for verifying authentication was
      * successful when the client expected it.
      * </pre>
+     *
+     * <code>optional string username = 2;</code>
      */
     com.google.protobuf.ByteString
         getUsernameBytes();
 
     /**
-     * <code>optional string oauth_scope = 3;</code>
-     *
      * <pre>
      * OAuth scope.
      * </pre>
+     *
+     * <code>optional string oauth_scope = 3;</code>
      */
     java.lang.String getOauthScope();
     /**
-     * <code>optional string oauth_scope = 3;</code>
-     *
      * <pre>
      * OAuth scope.
      * </pre>
+     *
+     * <code>optional string oauth_scope = 3;</code>
      */
     com.google.protobuf.ByteString
         getOauthScopeBytes();
   }
   /**
-   * Protobuf type {@code grpc.testing.SimpleResponse}
-   *
    * <pre>
    * Unary response, as configured by the request.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.SimpleResponse}
    */
   public  static final class SimpleResponse extends
       com.google.protobuf.GeneratedMessage implements
@@ -2708,7 +2711,8 @@
     }
     private SimpleResponse(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -2753,11 +2757,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -2777,31 +2780,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 1;
     private io.grpc.testing.integration.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.testing.integration.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.testing.integration.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase message size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -2810,12 +2813,12 @@
     public static final int USERNAME_FIELD_NUMBER = 2;
     private volatile java.lang.Object username_;
     /**
-     * <code>optional string username = 2;</code>
-     *
      * <pre>
      * The user the request came from, for verifying authentication was
      * successful when the client expected it.
      * </pre>
+     *
+     * <code>optional string username = 2;</code>
      */
     public java.lang.String getUsername() {
       java.lang.Object ref = username_;
@@ -2830,12 +2833,12 @@
       }
     }
     /**
-     * <code>optional string username = 2;</code>
-     *
      * <pre>
      * The user the request came from, for verifying authentication was
      * successful when the client expected it.
      * </pre>
+     *
+     * <code>optional string username = 2;</code>
      */
     public com.google.protobuf.ByteString
         getUsernameBytes() {
@@ -2854,11 +2857,11 @@
     public static final int OAUTH_SCOPE_FIELD_NUMBER = 3;
     private volatile java.lang.Object oauthScope_;
     /**
-     * <code>optional string oauth_scope = 3;</code>
-     *
      * <pre>
      * OAuth scope.
      * </pre>
+     *
+     * <code>optional string oauth_scope = 3;</code>
      */
     public java.lang.String getOauthScope() {
       java.lang.Object ref = oauthScope_;
@@ -2873,11 +2876,11 @@
       }
     }
     /**
-     * <code>optional string oauth_scope = 3;</code>
-     *
      * <pre>
      * OAuth scope.
      * </pre>
+     *
+     * <code>optional string oauth_scope = 3;</code>
      */
     public com.google.protobuf.ByteString
         getOauthScopeBytes() {
@@ -2959,34 +2962,40 @@
     }
     public static io.grpc.testing.integration.Messages.SimpleResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.SimpleResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.SimpleResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -3008,11 +3017,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.SimpleResponse}
-     *
      * <pre>
      * Unary response, as configured by the request.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.SimpleResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -3128,7 +3137,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.SimpleResponse) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -3141,21 +3150,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -3165,11 +3174,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -3185,11 +3194,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(
           io.grpc.testing.integration.Messages.Payload.Builder builderForValue) {
@@ -3203,11 +3212,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder mergePayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -3225,11 +3234,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -3243,11 +3252,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -3255,11 +3264,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -3270,11 +3279,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase message size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> 
@@ -3292,12 +3301,12 @@
 
       private java.lang.Object username_ = "";
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public java.lang.String getUsername() {
         java.lang.Object ref = username_;
@@ -3312,12 +3321,12 @@
         }
       }
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public com.google.protobuf.ByteString
           getUsernameBytes() {
@@ -3333,12 +3342,12 @@
         }
       }
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public Builder setUsername(
           java.lang.String value) {
@@ -3351,12 +3360,12 @@
         return this;
       }
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public Builder clearUsername() {
         
@@ -3365,12 +3374,12 @@
         return this;
       }
       /**
-       * <code>optional string username = 2;</code>
-       *
        * <pre>
        * The user the request came from, for verifying authentication was
        * successful when the client expected it.
        * </pre>
+       *
+       * <code>optional string username = 2;</code>
        */
       public Builder setUsernameBytes(
           com.google.protobuf.ByteString value) {
@@ -3386,11 +3395,11 @@
 
       private java.lang.Object oauthScope_ = "";
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public java.lang.String getOauthScope() {
         java.lang.Object ref = oauthScope_;
@@ -3405,11 +3414,11 @@
         }
       }
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public com.google.protobuf.ByteString
           getOauthScopeBytes() {
@@ -3425,11 +3434,11 @@
         }
       }
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public Builder setOauthScope(
           java.lang.String value) {
@@ -3442,11 +3451,11 @@
         return this;
       }
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public Builder clearOauthScope() {
         
@@ -3455,11 +3464,11 @@
         return this;
       }
       /**
-       * <code>optional string oauth_scope = 3;</code>
-       *
        * <pre>
        * OAuth scope.
        * </pre>
+       *
+       * <code>optional string oauth_scope = 3;</code>
        */
       public Builder setOauthScopeBytes(
           com.google.protobuf.ByteString value) {
@@ -3502,16 +3511,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new SimpleResponse(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -3566,7 +3566,8 @@
     }
     private SimpleContext(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -3592,11 +3593,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -3700,34 +3700,40 @@
     }
     public static io.grpc.testing.integration.Messages.SimpleContext parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleContext parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.SimpleContext parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleContext parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.SimpleContext parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.SimpleContext parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -3844,7 +3850,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.SimpleContext) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -3951,16 +3957,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new SimpleContext(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -3984,36 +3981,36 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.testing.integration.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder();
   }
   /**
-   * Protobuf type {@code grpc.testing.StreamingInputCallRequest}
-   *
    * <pre>
    * Client-streaming request.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.StreamingInputCallRequest}
    */
   public  static final class StreamingInputCallRequest extends
       com.google.protobuf.GeneratedMessage implements
@@ -4033,7 +4030,8 @@
     }
     private StreamingInputCallRequest(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -4066,11 +4064,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -4090,31 +4087,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 1;
     private io.grpc.testing.integration.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.testing.integration.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.testing.integration.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -4174,34 +4171,40 @@
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -4223,11 +4226,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.StreamingInputCallRequest}
-     *
      * <pre>
      * Client-streaming request.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.StreamingInputCallRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -4329,7 +4332,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.StreamingInputCallRequest) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -4342,21 +4345,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -4366,11 +4369,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -4386,11 +4389,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(
           io.grpc.testing.integration.Messages.Payload.Builder builderForValue) {
@@ -4404,11 +4407,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder mergePayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -4426,11 +4429,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -4444,11 +4447,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -4456,11 +4459,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -4471,11 +4474,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> 
@@ -4520,16 +4523,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new StreamingInputCallRequest(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -4553,20 +4547,20 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional int32 aggregated_payload_size = 1;</code>
-     *
      * <pre>
      * Aggregated size of payloads received from the client.
      * </pre>
+     *
+     * <code>optional int32 aggregated_payload_size = 1;</code>
      */
     int getAggregatedPayloadSize();
   }
   /**
-   * Protobuf type {@code grpc.testing.StreamingInputCallResponse}
-   *
    * <pre>
    * Client-streaming response.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.StreamingInputCallResponse}
    */
   public  static final class StreamingInputCallResponse extends
       com.google.protobuf.GeneratedMessage implements
@@ -4587,7 +4581,8 @@
     }
     private StreamingInputCallResponse(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -4612,11 +4607,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -4636,11 +4630,11 @@
     public static final int AGGREGATED_PAYLOAD_SIZE_FIELD_NUMBER = 1;
     private int aggregatedPayloadSize_;
     /**
-     * <code>optional int32 aggregated_payload_size = 1;</code>
-     *
      * <pre>
      * Aggregated size of payloads received from the client.
      * </pre>
+     *
+     * <code>optional int32 aggregated_payload_size = 1;</code>
      */
     public int getAggregatedPayloadSize() {
       return aggregatedPayloadSize_;
@@ -4700,34 +4694,40 @@
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingInputCallResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -4749,11 +4749,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.StreamingInputCallResponse}
-     *
      * <pre>
      * Client-streaming response.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.StreamingInputCallResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -4847,7 +4847,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.StreamingInputCallResponse) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -4858,21 +4858,21 @@
 
       private int aggregatedPayloadSize_ ;
       /**
-       * <code>optional int32 aggregated_payload_size = 1;</code>
-       *
        * <pre>
        * Aggregated size of payloads received from the client.
        * </pre>
+       *
+       * <code>optional int32 aggregated_payload_size = 1;</code>
        */
       public int getAggregatedPayloadSize() {
         return aggregatedPayloadSize_;
       }
       /**
-       * <code>optional int32 aggregated_payload_size = 1;</code>
-       *
        * <pre>
        * Aggregated size of payloads received from the client.
        * </pre>
+       *
+       * <code>optional int32 aggregated_payload_size = 1;</code>
        */
       public Builder setAggregatedPayloadSize(int value) {
         
@@ -4881,11 +4881,11 @@
         return this;
       }
       /**
-       * <code>optional int32 aggregated_payload_size = 1;</code>
-       *
        * <pre>
        * Aggregated size of payloads received from the client.
        * </pre>
+       *
+       * <code>optional int32 aggregated_payload_size = 1;</code>
        */
       public Builder clearAggregatedPayloadSize() {
         
@@ -4923,16 +4923,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new StreamingInputCallResponse(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -4956,31 +4947,31 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional int32 size = 1;</code>
-     *
      * <pre>
      * Desired payload sizes in responses from the server.
      * If response_type is COMPRESSABLE, this denotes the size before compression.
      * </pre>
+     *
+     * <code>optional int32 size = 1;</code>
      */
     int getSize();
 
     /**
-     * <code>optional int32 interval_us = 2;</code>
-     *
      * <pre>
      * Desired interval between consecutive responses in the response stream in
      * microseconds.
      * </pre>
+     *
+     * <code>optional int32 interval_us = 2;</code>
      */
     int getIntervalUs();
   }
   /**
-   * Protobuf type {@code grpc.testing.ResponseParameters}
-   *
    * <pre>
    * Configuration for a particular response.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.ResponseParameters}
    */
   public  static final class ResponseParameters extends
       com.google.protobuf.GeneratedMessage implements
@@ -5002,7 +4993,8 @@
     }
     private ResponseParameters(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -5032,11 +5024,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -5056,12 +5047,12 @@
     public static final int SIZE_FIELD_NUMBER = 1;
     private int size_;
     /**
-     * <code>optional int32 size = 1;</code>
-     *
      * <pre>
      * Desired payload sizes in responses from the server.
      * If response_type is COMPRESSABLE, this denotes the size before compression.
      * </pre>
+     *
+     * <code>optional int32 size = 1;</code>
      */
     public int getSize() {
       return size_;
@@ -5070,12 +5061,12 @@
     public static final int INTERVAL_US_FIELD_NUMBER = 2;
     private int intervalUs_;
     /**
-     * <code>optional int32 interval_us = 2;</code>
-     *
      * <pre>
      * Desired interval between consecutive responses in the response stream in
      * microseconds.
      * </pre>
+     *
+     * <code>optional int32 interval_us = 2;</code>
      */
     public int getIntervalUs() {
       return intervalUs_;
@@ -5142,34 +5133,40 @@
     }
     public static io.grpc.testing.integration.Messages.ResponseParameters parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ResponseParameters parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.ResponseParameters parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ResponseParameters parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.ResponseParameters parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ResponseParameters parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -5191,11 +5188,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.ResponseParameters}
-     *
      * <pre>
      * Configuration for a particular response.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.ResponseParameters}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -5295,7 +5292,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.ResponseParameters) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -5306,23 +5303,23 @@
 
       private int size_ ;
       /**
-       * <code>optional int32 size = 1;</code>
-       *
        * <pre>
        * Desired payload sizes in responses from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 size = 1;</code>
        */
       public int getSize() {
         return size_;
       }
       /**
-       * <code>optional int32 size = 1;</code>
-       *
        * <pre>
        * Desired payload sizes in responses from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 size = 1;</code>
        */
       public Builder setSize(int value) {
         
@@ -5331,12 +5328,12 @@
         return this;
       }
       /**
-       * <code>optional int32 size = 1;</code>
-       *
        * <pre>
        * Desired payload sizes in responses from the server.
        * If response_type is COMPRESSABLE, this denotes the size before compression.
        * </pre>
+       *
+       * <code>optional int32 size = 1;</code>
        */
       public Builder clearSize() {
         
@@ -5347,23 +5344,23 @@
 
       private int intervalUs_ ;
       /**
-       * <code>optional int32 interval_us = 2;</code>
-       *
        * <pre>
        * Desired interval between consecutive responses in the response stream in
        * microseconds.
        * </pre>
+       *
+       * <code>optional int32 interval_us = 2;</code>
        */
       public int getIntervalUs() {
         return intervalUs_;
       }
       /**
-       * <code>optional int32 interval_us = 2;</code>
-       *
        * <pre>
        * Desired interval between consecutive responses in the response stream in
        * microseconds.
        * </pre>
+       *
+       * <code>optional int32 interval_us = 2;</code>
        */
       public Builder setIntervalUs(int value) {
         
@@ -5372,12 +5369,12 @@
         return this;
       }
       /**
-       * <code>optional int32 interval_us = 2;</code>
-       *
        * <pre>
        * Desired interval between consecutive responses in the response stream in
        * microseconds.
        * </pre>
+       *
+       * <code>optional int32 interval_us = 2;</code>
        */
       public Builder clearIntervalUs() {
         
@@ -5415,16 +5412,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ResponseParameters(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -5448,145 +5436,145 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, the payload from each response in the stream
      * might be of different types. This is to simulate a mixed type of payload
      * stream.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     int getResponseTypeValue();
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, the payload from each response in the stream
      * might be of different types. This is to simulate a mixed type of payload
      * stream.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     io.grpc.testing.integration.Messages.PayloadType getResponseType();
 
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     java.util.List<io.grpc.testing.integration.Messages.ResponseParameters> 
         getResponseParametersList();
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     io.grpc.testing.integration.Messages.ResponseParameters getResponseParameters(int index);
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     int getResponseParametersCount();
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     java.util.List<? extends io.grpc.testing.integration.Messages.ResponseParametersOrBuilder> 
         getResponseParametersOrBuilderList();
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     io.grpc.testing.integration.Messages.ResponseParametersOrBuilder getResponseParametersOrBuilder(
         int index);
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     io.grpc.testing.integration.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder();
 
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     int getResponseCompressionValue();
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     io.grpc.testing.integration.Messages.CompressionType getResponseCompression();
 
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     boolean hasResponseStatus();
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     io.grpc.testing.integration.Messages.EchoStatus getResponseStatus();
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     io.grpc.testing.integration.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder();
   }
   /**
-   * Protobuf type {@code grpc.testing.StreamingOutputCallRequest}
-   *
    * <pre>
    * Server-streaming request.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.StreamingOutputCallRequest}
    */
   public  static final class StreamingOutputCallRequest extends
       com.google.protobuf.GeneratedMessage implements
@@ -5609,7 +5597,8 @@
     }
     private StreamingOutputCallRequest(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -5675,11 +5664,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
           responseParameters_ = java.util.Collections.unmodifiableList(responseParameters_);
@@ -5703,82 +5691,82 @@
     public static final int RESPONSE_TYPE_FIELD_NUMBER = 1;
     private int responseType_;
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, the payload from each response in the stream
      * might be of different types. This is to simulate a mixed type of payload
      * stream.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     public int getResponseTypeValue() {
       return responseType_;
     }
     /**
-     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-     *
      * <pre>
      * Desired payload type in the response from the server.
      * If response_type is RANDOM, the payload from each response in the stream
      * might be of different types. This is to simulate a mixed type of payload
      * stream.
      * </pre>
+     *
+     * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
      */
     public io.grpc.testing.integration.Messages.PayloadType getResponseType() {
-      io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.valueOf(responseType_);
+      io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.forNumber(responseType_);
       return result == null ? io.grpc.testing.integration.Messages.PayloadType.UNRECOGNIZED : result;
     }
 
     public static final int RESPONSE_PARAMETERS_FIELD_NUMBER = 2;
     private java.util.List<io.grpc.testing.integration.Messages.ResponseParameters> responseParameters_;
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public java.util.List<io.grpc.testing.integration.Messages.ResponseParameters> getResponseParametersList() {
       return responseParameters_;
     }
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public java.util.List<? extends io.grpc.testing.integration.Messages.ResponseParametersOrBuilder> 
         getResponseParametersOrBuilderList() {
       return responseParameters_;
     }
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public int getResponseParametersCount() {
       return responseParameters_.size();
     }
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public io.grpc.testing.integration.Messages.ResponseParameters getResponseParameters(int index) {
       return responseParameters_.get(index);
     }
     /**
-     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-     *
      * <pre>
      * Configuration for each expected response message.
      * </pre>
+     *
+     * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
      */
     public io.grpc.testing.integration.Messages.ResponseParametersOrBuilder getResponseParametersOrBuilder(
         int index) {
@@ -5788,31 +5776,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 3;
     private io.grpc.testing.integration.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public io.grpc.testing.integration.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.testing.integration.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 3;</code>
-     *
      * <pre>
      * Optional input payload sent along with the request.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 3;</code>
      */
     public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -5821,55 +5809,55 @@
     public static final int RESPONSE_COMPRESSION_FIELD_NUMBER = 6;
     private int responseCompression_;
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     public int getResponseCompressionValue() {
       return responseCompression_;
     }
     /**
-     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-     *
      * <pre>
      * Compression algorithm to be used by the server for the response (stream)
      * </pre>
+     *
+     * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
      */
     public io.grpc.testing.integration.Messages.CompressionType getResponseCompression() {
-      io.grpc.testing.integration.Messages.CompressionType result = io.grpc.testing.integration.Messages.CompressionType.valueOf(responseCompression_);
+      io.grpc.testing.integration.Messages.CompressionType result = io.grpc.testing.integration.Messages.CompressionType.forNumber(responseCompression_);
       return result == null ? io.grpc.testing.integration.Messages.CompressionType.UNRECOGNIZED : result;
     }
 
     public static final int RESPONSE_STATUS_FIELD_NUMBER = 7;
     private io.grpc.testing.integration.Messages.EchoStatus responseStatus_;
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public boolean hasResponseStatus() {
       return responseStatus_ != null;
     }
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public io.grpc.testing.integration.Messages.EchoStatus getResponseStatus() {
       return responseStatus_ == null ? io.grpc.testing.integration.Messages.EchoStatus.getDefaultInstance() : responseStatus_;
     }
     /**
-     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-     *
      * <pre>
      * Whether server should return a given status
      * </pre>
+     *
+     * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
      */
     public io.grpc.testing.integration.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder() {
       return getResponseStatus();
@@ -5957,34 +5945,40 @@
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -6006,11 +6000,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.StreamingOutputCallRequest}
-     *
      * <pre>
      * Server-streaming request.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.StreamingOutputCallRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -6183,7 +6177,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.StreamingOutputCallRequest) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -6195,27 +6189,27 @@
 
       private int responseType_ = 0;
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public int getResponseTypeValue() {
         return responseType_;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder setResponseTypeValue(int value) {
         responseType_ = value;
@@ -6223,28 +6217,28 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public io.grpc.testing.integration.Messages.PayloadType getResponseType() {
-        io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.valueOf(responseType_);
+        io.grpc.testing.integration.Messages.PayloadType result = io.grpc.testing.integration.Messages.PayloadType.forNumber(responseType_);
         return result == null ? io.grpc.testing.integration.Messages.PayloadType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder setResponseType(io.grpc.testing.integration.Messages.PayloadType value) {
         if (value == null) {
@@ -6256,14 +6250,14 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
-       *
        * <pre>
        * Desired payload type in the response from the server.
        * If response_type is RANDOM, the payload from each response in the stream
        * might be of different types. This is to simulate a mixed type of payload
        * stream.
        * </pre>
+       *
+       * <code>optional .grpc.testing.PayloadType response_type = 1;</code>
        */
       public Builder clearResponseType() {
         
@@ -6285,11 +6279,11 @@
           io.grpc.testing.integration.Messages.ResponseParameters, io.grpc.testing.integration.Messages.ResponseParameters.Builder, io.grpc.testing.integration.Messages.ResponseParametersOrBuilder> responseParametersBuilder_;
 
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public java.util.List<io.grpc.testing.integration.Messages.ResponseParameters> getResponseParametersList() {
         if (responseParametersBuilder_ == null) {
@@ -6299,11 +6293,11 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public int getResponseParametersCount() {
         if (responseParametersBuilder_ == null) {
@@ -6313,11 +6307,11 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.testing.integration.Messages.ResponseParameters getResponseParameters(int index) {
         if (responseParametersBuilder_ == null) {
@@ -6327,11 +6321,11 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder setResponseParameters(
           int index, io.grpc.testing.integration.Messages.ResponseParameters value) {
@@ -6348,11 +6342,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder setResponseParameters(
           int index, io.grpc.testing.integration.Messages.ResponseParameters.Builder builderForValue) {
@@ -6366,11 +6360,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addResponseParameters(io.grpc.testing.integration.Messages.ResponseParameters value) {
         if (responseParametersBuilder_ == null) {
@@ -6386,11 +6380,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addResponseParameters(
           int index, io.grpc.testing.integration.Messages.ResponseParameters value) {
@@ -6407,11 +6401,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addResponseParameters(
           io.grpc.testing.integration.Messages.ResponseParameters.Builder builderForValue) {
@@ -6425,11 +6419,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addResponseParameters(
           int index, io.grpc.testing.integration.Messages.ResponseParameters.Builder builderForValue) {
@@ -6443,11 +6437,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder addAllResponseParameters(
           java.lang.Iterable<? extends io.grpc.testing.integration.Messages.ResponseParameters> values) {
@@ -6462,11 +6456,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder clearResponseParameters() {
         if (responseParametersBuilder_ == null) {
@@ -6479,11 +6473,11 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public Builder removeResponseParameters(int index) {
         if (responseParametersBuilder_ == null) {
@@ -6496,22 +6490,22 @@
         return this;
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.testing.integration.Messages.ResponseParameters.Builder getResponseParametersBuilder(
           int index) {
         return getResponseParametersFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.testing.integration.Messages.ResponseParametersOrBuilder getResponseParametersOrBuilder(
           int index) {
@@ -6521,11 +6515,11 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public java.util.List<? extends io.grpc.testing.integration.Messages.ResponseParametersOrBuilder> 
            getResponseParametersOrBuilderList() {
@@ -6536,22 +6530,22 @@
         }
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.testing.integration.Messages.ResponseParameters.Builder addResponseParametersBuilder() {
         return getResponseParametersFieldBuilder().addBuilder(
             io.grpc.testing.integration.Messages.ResponseParameters.getDefaultInstance());
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public io.grpc.testing.integration.Messages.ResponseParameters.Builder addResponseParametersBuilder(
           int index) {
@@ -6559,11 +6553,11 @@
             index, io.grpc.testing.integration.Messages.ResponseParameters.getDefaultInstance());
       }
       /**
-       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
-       *
        * <pre>
        * Configuration for each expected response message.
        * </pre>
+       *
+       * <code>repeated .grpc.testing.ResponseParameters response_parameters = 2;</code>
        */
       public java.util.List<io.grpc.testing.integration.Messages.ResponseParameters.Builder> 
            getResponseParametersBuilderList() {
@@ -6588,21 +6582,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.testing.integration.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -6612,11 +6606,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder setPayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -6632,11 +6626,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder setPayload(
           io.grpc.testing.integration.Messages.Payload.Builder builderForValue) {
@@ -6650,11 +6644,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder mergePayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -6672,11 +6666,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -6690,11 +6684,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.testing.integration.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -6702,11 +6696,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -6717,11 +6711,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 3;</code>
-       *
        * <pre>
        * Optional input payload sent along with the request.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 3;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> 
@@ -6739,21 +6733,21 @@
 
       private int responseCompression_ = 0;
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public int getResponseCompressionValue() {
         return responseCompression_;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder setResponseCompressionValue(int value) {
         responseCompression_ = value;
@@ -6761,22 +6755,22 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public io.grpc.testing.integration.Messages.CompressionType getResponseCompression() {
-        io.grpc.testing.integration.Messages.CompressionType result = io.grpc.testing.integration.Messages.CompressionType.valueOf(responseCompression_);
+        io.grpc.testing.integration.Messages.CompressionType result = io.grpc.testing.integration.Messages.CompressionType.forNumber(responseCompression_);
         return result == null ? io.grpc.testing.integration.Messages.CompressionType.UNRECOGNIZED : result;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder setResponseCompression(io.grpc.testing.integration.Messages.CompressionType value) {
         if (value == null) {
@@ -6788,11 +6782,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
-       *
        * <pre>
        * Compression algorithm to be used by the server for the response (stream)
        * </pre>
+       *
+       * <code>optional .grpc.testing.CompressionType response_compression = 6;</code>
        */
       public Builder clearResponseCompression() {
         
@@ -6805,21 +6799,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.EchoStatus, io.grpc.testing.integration.Messages.EchoStatus.Builder, io.grpc.testing.integration.Messages.EchoStatusOrBuilder> responseStatusBuilder_;
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public boolean hasResponseStatus() {
         return responseStatusBuilder_ != null || responseStatus_ != null;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.testing.integration.Messages.EchoStatus getResponseStatus() {
         if (responseStatusBuilder_ == null) {
@@ -6829,11 +6823,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder setResponseStatus(io.grpc.testing.integration.Messages.EchoStatus value) {
         if (responseStatusBuilder_ == null) {
@@ -6849,11 +6843,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder setResponseStatus(
           io.grpc.testing.integration.Messages.EchoStatus.Builder builderForValue) {
@@ -6867,11 +6861,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder mergeResponseStatus(io.grpc.testing.integration.Messages.EchoStatus value) {
         if (responseStatusBuilder_ == null) {
@@ -6889,11 +6883,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public Builder clearResponseStatus() {
         if (responseStatusBuilder_ == null) {
@@ -6907,11 +6901,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.testing.integration.Messages.EchoStatus.Builder getResponseStatusBuilder() {
         
@@ -6919,11 +6913,11 @@
         return getResponseStatusFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       public io.grpc.testing.integration.Messages.EchoStatusOrBuilder getResponseStatusOrBuilder() {
         if (responseStatusBuilder_ != null) {
@@ -6934,11 +6928,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
-       *
        * <pre>
        * Whether server should return a given status
        * </pre>
+       *
+       * <code>optional .grpc.testing.EchoStatus response_status = 7;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.EchoStatus, io.grpc.testing.integration.Messages.EchoStatus.Builder, io.grpc.testing.integration.Messages.EchoStatusOrBuilder> 
@@ -6983,16 +6977,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new StreamingOutputCallRequest(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -7016,36 +7001,36 @@
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     boolean hasPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.testing.integration.Messages.Payload getPayload();
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder();
   }
   /**
-   * Protobuf type {@code grpc.testing.StreamingOutputCallResponse}
-   *
    * <pre>
    * Server-streaming response, as configured by the request and parameters.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.StreamingOutputCallResponse}
    */
   public  static final class StreamingOutputCallResponse extends
       com.google.protobuf.GeneratedMessage implements
@@ -7065,7 +7050,8 @@
     }
     private StreamingOutputCallResponse(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -7098,11 +7084,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -7122,31 +7107,31 @@
     public static final int PAYLOAD_FIELD_NUMBER = 1;
     private io.grpc.testing.integration.Messages.Payload payload_;
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public boolean hasPayload() {
       return payload_ != null;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.testing.integration.Messages.Payload getPayload() {
       return payload_ == null ? io.grpc.testing.integration.Messages.Payload.getDefaultInstance() : payload_;
     }
     /**
-     * <code>optional .grpc.testing.Payload payload = 1;</code>
-     *
      * <pre>
      * Payload to increase response size.
      * </pre>
+     *
+     * <code>optional .grpc.testing.Payload payload = 1;</code>
      */
     public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
       return getPayload();
@@ -7206,34 +7191,40 @@
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.StreamingOutputCallResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -7255,11 +7246,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.StreamingOutputCallResponse}
-     *
      * <pre>
      * Server-streaming response, as configured by the request and parameters.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.StreamingOutputCallResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -7361,7 +7352,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.StreamingOutputCallResponse) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -7374,21 +7365,21 @@
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> payloadBuilder_;
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public boolean hasPayload() {
         return payloadBuilder_ != null || payload_ != null;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.Payload getPayload() {
         if (payloadBuilder_ == null) {
@@ -7398,11 +7389,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -7418,11 +7409,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder setPayload(
           io.grpc.testing.integration.Messages.Payload.Builder builderForValue) {
@@ -7436,11 +7427,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder mergePayload(io.grpc.testing.integration.Messages.Payload value) {
         if (payloadBuilder_ == null) {
@@ -7458,11 +7449,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public Builder clearPayload() {
         if (payloadBuilder_ == null) {
@@ -7476,11 +7467,11 @@
         return this;
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.Payload.Builder getPayloadBuilder() {
         
@@ -7488,11 +7479,11 @@
         return getPayloadFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       public io.grpc.testing.integration.Messages.PayloadOrBuilder getPayloadOrBuilder() {
         if (payloadBuilder_ != null) {
@@ -7503,11 +7494,11 @@
         }
       }
       /**
-       * <code>optional .grpc.testing.Payload payload = 1;</code>
-       *
        * <pre>
        * Payload to increase response size.
        * </pre>
+       *
+       * <code>optional .grpc.testing.Payload payload = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilder<
           io.grpc.testing.integration.Messages.Payload, io.grpc.testing.integration.Messages.Payload.Builder, io.grpc.testing.integration.Messages.PayloadOrBuilder> 
@@ -7552,16 +7543,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new StreamingOutputCallResponse(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -7590,12 +7572,12 @@
     int getMaxReconnectBackoffMs();
   }
   /**
-   * Protobuf type {@code grpc.testing.ReconnectParams}
-   *
    * <pre>
    * For reconnect interop test only.
    * Client tells server what reconnection parameters it used.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.ReconnectParams}
    */
   public  static final class ReconnectParams extends
       com.google.protobuf.GeneratedMessage implements
@@ -7616,7 +7598,8 @@
     }
     private ReconnectParams(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -7641,11 +7624,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -7725,34 +7707,40 @@
     }
     public static io.grpc.testing.integration.Messages.ReconnectParams parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ReconnectParams parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.ReconnectParams parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ReconnectParams parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.ReconnectParams parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ReconnectParams parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -7774,12 +7762,12 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.ReconnectParams}
-     *
      * <pre>
      * For reconnect interop test only.
      * Client tells server what reconnection parameters it used.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.ReconnectParams}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -7873,7 +7861,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.ReconnectParams) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -7937,16 +7925,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ReconnectParams(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -7988,13 +7967,13 @@
     int getBackoffMs(int index);
   }
   /**
-   * Protobuf type {@code grpc.testing.ReconnectInfo}
-   *
    * <pre>
    * For reconnect interop test only.
    * Server tells client whether its reconnects are following the spec and the
    * reconnect backoffs it saw.
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.ReconnectInfo}
    */
   public  static final class ReconnectInfo extends
       com.google.protobuf.GeneratedMessage implements
@@ -8016,7 +7995,8 @@
     }
     private ReconnectInfo(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -8062,11 +8042,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
           backoffMs_ = java.util.Collections.unmodifiableList(backoffMs_);
@@ -8195,34 +8174,40 @@
     }
     public static io.grpc.testing.integration.Messages.ReconnectInfo parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ReconnectInfo parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.ReconnectInfo parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ReconnectInfo parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Messages.ReconnectInfo parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Messages.ReconnectInfo parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -8244,13 +8229,13 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.ReconnectInfo}
-     *
      * <pre>
      * For reconnect interop test only.
      * Server tells client whether its reconnects are following the spec and the
      * reconnect backoffs it saw.
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.ReconnectInfo}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -8364,7 +8349,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Messages.ReconnectInfo) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -8495,16 +8480,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new ReconnectInfo(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -8523,64 +8499,64 @@
 
   }
 
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_Payload_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_Payload_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_EchoStatus_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_EchoStatus_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_SimpleRequest_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_SimpleRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_SimpleResponse_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_SimpleResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_SimpleContext_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_SimpleContext_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_StreamingInputCallRequest_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_StreamingInputCallRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_StreamingInputCallResponse_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_StreamingInputCallResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ResponseParameters_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ResponseParameters_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_StreamingOutputCallRequest_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_StreamingOutputCallRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_StreamingOutputCallResponse_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_StreamingOutputCallResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ReconnectParams_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ReconnectParams_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_ReconnectInfo_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_ReconnectInfo_fieldAccessorTable;
 
@@ -8588,7 +8564,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Metrics.java b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Metrics.java
index f9faf03..de70c66 100644
--- a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Metrics.java
+++ b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Metrics.java
@@ -45,11 +45,11 @@
     public io.grpc.testing.integration.Metrics.GaugeResponse.ValueCase getValueCase();
   }
   /**
-   * Protobuf type {@code grpc.testing.GaugeResponse}
-   *
    * <pre>
    * Reponse message containing the gauge name and value
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.GaugeResponse}
    */
   public  static final class GaugeResponse extends
       com.google.protobuf.GeneratedMessage implements
@@ -70,7 +70,8 @@
     }
     private GaugeResponse(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -112,11 +113,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -141,18 +141,25 @@
       DOUBLE_VALUE(3),
       STRING_VALUE(4),
       VALUE_NOT_SET(0);
-      private int value = 0;
+      private final int value;
       private ValueCase(int value) {
         this.value = value;
       }
+      /**
+       * @deprecated Use {@link #forNumber(int)} instead.
+       */
+      @java.lang.Deprecated
       public static ValueCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ValueCase forNumber(int value) {
         switch (value) {
           case 2: return LONG_VALUE;
           case 3: return DOUBLE_VALUE;
           case 4: return STRING_VALUE;
           case 0: return VALUE_NOT_SET;
-          default: throw new java.lang.IllegalArgumentException(
-            "Value is undefined for this oneof enum.");
+          default: return null;
         }
       }
       public int getNumber() {
@@ -162,7 +169,7 @@
 
     public ValueCase
     getValueCase() {
-      return ValueCase.valueOf(
+      return ValueCase.forNumber(
           valueCase_);
     }
 
@@ -342,34 +349,40 @@
     }
     public static io.grpc.testing.integration.Metrics.GaugeResponse parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.GaugeResponse parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Metrics.GaugeResponse parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.GaugeResponse parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Metrics.GaugeResponse parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.GaugeResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -391,11 +404,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.GaugeResponse}
-     *
      * <pre>
      * Reponse message containing the gauge name and value
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.GaugeResponse}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -521,7 +534,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Metrics.GaugeResponse) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -533,7 +546,7 @@
       private java.lang.Object value_;
       public ValueCase
           getValueCase() {
-        return ValueCase.valueOf(
+        return ValueCase.forNumber(
             valueCase_);
       }
 
@@ -783,16 +796,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new GaugeResponse(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -826,11 +830,11 @@
         getNameBytes();
   }
   /**
-   * Protobuf type {@code grpc.testing.GaugeRequest}
-   *
    * <pre>
    * Request message containing the gauge name
    * </pre>
+   *
+   * Protobuf type {@code grpc.testing.GaugeRequest}
    */
   public  static final class GaugeRequest extends
       com.google.protobuf.GeneratedMessage implements
@@ -851,7 +855,8 @@
     }
     private GaugeRequest(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       int mutable_bitField0_ = 0;
       try {
@@ -877,11 +882,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -985,34 +989,40 @@
     }
     public static io.grpc.testing.integration.Metrics.GaugeRequest parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.GaugeRequest parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Metrics.GaugeRequest parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.GaugeRequest parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Metrics.GaugeRequest parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.GaugeRequest parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1034,11 +1044,11 @@
       return builder;
     }
     /**
-     * Protobuf type {@code grpc.testing.GaugeRequest}
-     *
      * <pre>
      * Request message containing the gauge name
      * </pre>
+     *
+     * Protobuf type {@code grpc.testing.GaugeRequest}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessage.Builder<Builder> implements
@@ -1133,7 +1143,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Metrics.GaugeRequest) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1240,16 +1250,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new GaugeRequest(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1293,7 +1294,8 @@
     }
     private EmptyMessage(
         com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
       this();
       try {
         boolean done = false;
@@ -1312,11 +1314,10 @@
           }
         }
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        throw new RuntimeException(e.setUnfinishedMessage(this));
+        throw e.setUnfinishedMessage(this);
       } catch (java.io.IOException e) {
-        throw new RuntimeException(
-            new com.google.protobuf.InvalidProtocolBufferException(
-                e.getMessage()).setUnfinishedMessage(this));
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
       } finally {
         makeExtensionsImmutable();
       }
@@ -1380,34 +1381,40 @@
     }
     public static io.grpc.testing.integration.Metrics.EmptyMessage parseFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.EmptyMessage parseFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Metrics.EmptyMessage parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.EmptyMessage parseDelimitedFrom(
         java.io.InputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseDelimitedFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
     }
     public static io.grpc.testing.integration.Metrics.EmptyMessage parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
-      return PARSER.parseFrom(input);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input);
     }
     public static io.grpc.testing.integration.Metrics.EmptyMessage parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      return PARSER.parseFrom(input, extensionRegistry);
+      return com.google.protobuf.GeneratedMessage
+          .parseWithIOException(PARSER, input, extensionRegistry);
     }
 
     public Builder newBuilderForType() { return newBuilder(); }
@@ -1517,7 +1524,7 @@
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
           parsedMessage = (io.grpc.testing.integration.Metrics.EmptyMessage) e.getUnfinishedMessage();
-          throw e;
+          throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
@@ -1555,16 +1562,7 @@
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        try {
           return new EmptyMessage(input, extensionRegistry);
-        } catch (RuntimeException e) {
-          if (e.getCause() instanceof
-              com.google.protobuf.InvalidProtocolBufferException) {
-            throw (com.google.protobuf.InvalidProtocolBufferException)
-                e.getCause();
-          }
-          throw e;
-        }
       }
     };
 
@@ -1583,19 +1581,19 @@
 
   }
 
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_GaugeResponse_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_GaugeResponse_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_GaugeRequest_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_GaugeRequest_fieldAccessorTable;
-  private static com.google.protobuf.Descriptors.Descriptor
+  private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_testing_EmptyMessage_descriptor;
-  private static
+  private static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_testing_EmptyMessage_fieldAccessorTable;
 
@@ -1603,7 +1601,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Test.java b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Test.java
index 7ecf881..d8e2ee1 100644
--- a/interop-testing/src/generated/main/java/io/grpc/testing/integration/Test.java
+++ b/interop-testing/src/generated/main/java/io/grpc/testing/integration/Test.java
@@ -13,7 +13,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {
diff --git a/services/src/generated/main/java/io/grpc/health/v1/HealthCheckRequest.java b/services/src/generated/main/java/io/grpc/health/v1/HealthCheckRequest.java
index b06ac1b..99d309c 100644
--- a/services/src/generated/main/java/io/grpc/health/v1/HealthCheckRequest.java
+++ b/services/src/generated/main/java/io/grpc/health/v1/HealthCheckRequest.java
@@ -25,7 +25,8 @@
   }
   private HealthCheckRequest(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -51,11 +52,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -159,34 +159,40 @@
   }
   public static io.grpc.health.v1.HealthCheckRequest parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.health.v1.HealthCheckRequest parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.health.v1.HealthCheckRequest parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.health.v1.HealthCheckRequest parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.health.v1.HealthCheckRequest parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.health.v1.HealthCheckRequest parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -303,7 +309,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.health.v1.HealthCheckRequest) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -410,16 +416,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new HealthCheckRequest(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/health/v1/HealthCheckResponse.java b/services/src/generated/main/java/io/grpc/health/v1/HealthCheckResponse.java
index 2f94591..3a0a9ea 100644
--- a/services/src/generated/main/java/io/grpc/health/v1/HealthCheckResponse.java
+++ b/services/src/generated/main/java/io/grpc/health/v1/HealthCheckResponse.java
@@ -25,7 +25,8 @@
   }
   private HealthCheckResponse(
       com.google.protobuf.CodedInputStream input,
-      com.google.protobuf.ExtensionRegistryLite extensionRegistry) {
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
     this();
     int mutable_bitField0_ = 0;
     try {
@@ -51,11 +52,10 @@
         }
       }
     } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-      throw new RuntimeException(e.setUnfinishedMessage(this));
+      throw e.setUnfinishedMessage(this);
     } catch (java.io.IOException e) {
-      throw new RuntimeException(
-          new com.google.protobuf.InvalidProtocolBufferException(
-              e.getMessage()).setUnfinishedMessage(this));
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
     } finally {
       makeExtensionsImmutable();
     }
@@ -80,16 +80,16 @@
     /**
      * <code>UNKNOWN = 0;</code>
      */
-    UNKNOWN(0, 0),
+    UNKNOWN(0),
     /**
      * <code>SERVING = 1;</code>
      */
-    SERVING(1, 1),
+    SERVING(1),
     /**
      * <code>NOT_SERVING = 2;</code>
      */
-    NOT_SERVING(2, 2),
-    UNRECOGNIZED(-1, -1),
+    NOT_SERVING(2),
+    UNRECOGNIZED(-1),
     ;
 
     /**
@@ -107,14 +107,22 @@
 
 
     public final int getNumber() {
-      if (index == -1) {
+      if (this == UNRECOGNIZED) {
         throw new java.lang.IllegalArgumentException(
             "Can't get the number of an unknown enum value.");
       }
       return value;
     }
 
+    /**
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
     public static ServingStatus valueOf(int value) {
+      return forNumber(value);
+    }
+
+    public static ServingStatus forNumber(int value) {
       switch (value) {
         case 0: return UNKNOWN;
         case 1: return SERVING;
@@ -131,13 +139,13 @@
         ServingStatus> internalValueMap =
           new com.google.protobuf.Internal.EnumLiteMap<ServingStatus>() {
             public ServingStatus findValueByNumber(int number) {
-              return ServingStatus.valueOf(number);
+              return ServingStatus.forNumber(number);
             }
           };
 
     public final com.google.protobuf.Descriptors.EnumValueDescriptor
         getValueDescriptor() {
-      return getDescriptor().getValues().get(index);
+      return getDescriptor().getValues().get(ordinal());
     }
     public final com.google.protobuf.Descriptors.EnumDescriptor
         getDescriptorForType() {
@@ -162,11 +170,9 @@
       return VALUES[desc.getIndex()];
     }
 
-    private final int index;
     private final int value;
 
-    private ServingStatus(int index, int value) {
-      this.index = index;
+    private ServingStatus(int value) {
       this.value = value;
     }
 
@@ -185,7 +191,7 @@
    * <code>optional .grpc.health.v1.HealthCheckResponse.ServingStatus status = 1;</code>
    */
   public io.grpc.health.v1.HealthCheckResponse.ServingStatus getStatus() {
-    io.grpc.health.v1.HealthCheckResponse.ServingStatus result = io.grpc.health.v1.HealthCheckResponse.ServingStatus.valueOf(status_);
+    io.grpc.health.v1.HealthCheckResponse.ServingStatus result = io.grpc.health.v1.HealthCheckResponse.ServingStatus.forNumber(status_);
     return result == null ? io.grpc.health.v1.HealthCheckResponse.ServingStatus.UNRECOGNIZED : result;
   }
 
@@ -243,34 +249,40 @@
   }
   public static io.grpc.health.v1.HealthCheckResponse parseFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.health.v1.HealthCheckResponse parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.health.v1.HealthCheckResponse parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input);
   }
   public static io.grpc.health.v1.HealthCheckResponse parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseDelimitedFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
   public static io.grpc.health.v1.HealthCheckResponse parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
-    return PARSER.parseFrom(input);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input);
   }
   public static io.grpc.health.v1.HealthCheckResponse parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
-    return PARSER.parseFrom(input, extensionRegistry);
+    return com.google.protobuf.GeneratedMessage
+        .parseWithIOException(PARSER, input, extensionRegistry);
   }
 
   public Builder newBuilderForType() { return newBuilder(); }
@@ -386,7 +398,7 @@
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
         parsedMessage = (io.grpc.health.v1.HealthCheckResponse) e.getUnfinishedMessage();
-        throw e;
+        throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
           mergeFrom(parsedMessage);
@@ -414,7 +426,7 @@
      * <code>optional .grpc.health.v1.HealthCheckResponse.ServingStatus status = 1;</code>
      */
     public io.grpc.health.v1.HealthCheckResponse.ServingStatus getStatus() {
-      io.grpc.health.v1.HealthCheckResponse.ServingStatus result = io.grpc.health.v1.HealthCheckResponse.ServingStatus.valueOf(status_);
+      io.grpc.health.v1.HealthCheckResponse.ServingStatus result = io.grpc.health.v1.HealthCheckResponse.ServingStatus.forNumber(status_);
       return result == null ? io.grpc.health.v1.HealthCheckResponse.ServingStatus.UNRECOGNIZED : result;
     }
     /**
@@ -468,16 +480,7 @@
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      try {
         return new HealthCheckResponse(input, extensionRegistry);
-      } catch (RuntimeException e) {
-        if (e.getCause() instanceof
-            com.google.protobuf.InvalidProtocolBufferException) {
-          throw (com.google.protobuf.InvalidProtocolBufferException)
-              e.getCause();
-        }
-        throw e;
-      }
     }
   };
 
diff --git a/services/src/generated/main/java/io/grpc/health/v1/HealthProto.java b/services/src/generated/main/java/io/grpc/health/v1/HealthProto.java
index 31f1e78..526b98c 100644
--- a/services/src/generated/main/java/io/grpc/health/v1/HealthProto.java
+++ b/services/src/generated/main/java/io/grpc/health/v1/HealthProto.java
@@ -8,14 +8,14 @@
   public static void registerAllExtensions(
       com.google.protobuf.ExtensionRegistry registry) {
   }
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_health_v1_HealthCheckRequest_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_health_v1_HealthCheckRequest_fieldAccessorTable;
-  static com.google.protobuf.Descriptors.Descriptor
+  static final com.google.protobuf.Descriptors.Descriptor
     internal_static_grpc_health_v1_HealthCheckResponse_descriptor;
-  static
+  static final 
     com.google.protobuf.GeneratedMessage.FieldAccessorTable
       internal_static_grpc_health_v1_HealthCheckResponse_fieldAccessorTable;
 
@@ -23,7 +23,7 @@
       getDescriptor() {
     return descriptor;
   }
-  private static com.google.protobuf.Descriptors.FileDescriptor
+  private static  com.google.protobuf.Descriptors.FileDescriptor
       descriptor;
   static {
     java.lang.String[] descriptorData = {