diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 11e5fe7..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,12 +0,0 @@
-# Generated by pub
-.dart_tool/
-.packages
-pubspec.lock
-
-# Other generated files
-benchmark/data/pubspec.link.yaml
-benchmark/data/pubspec.link.lock
-benchmark/data/hostname.txt
-benchmark/data/latest_vm.pb.json
-benchmark/lib/generated
-out
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index ad8dd94..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-language: dart
-sudo: false
-
-# Only run one instance of the formatter and the analyzer, rather than running
-# them against each Dart version.
-matrix:
-  include:
-  - dart: dev
-    dart_task: dartfmt
-  - dart: dev
-    env: PROTOC_VERSION=3.0.0
-    install: ./tool/travis/setup.sh
-    script: ./tool/travis/test.sh
-  - dart: dev
-    env: PROTOC_VERSION=3.3.0
-    install: ./tool/travis/setup.sh
-    script: ./tool/travis/analyze.sh
-  - dart: stable
-    env: PROTOC_VERSION=3.3.0
-    install: ./tool/travis/setup.sh
-    script: ./tool/travis/analyze.sh
-  - dart: dev
-    env: PROTOC_VERSION=3.3.0
-    install: ./tool/travis/setup.sh
-    script: ./tool/travis/test.sh
-  - dart: stable
-    env: PROTOC_VERSION=3.3.0
-    install: ./tool/travis/setup.sh
-    script: ./tool/travis/test.sh
-
-branches:
-  only: [master]
-
-cache:
-  directories:
-  - $HOME/.pub-cache
diff --git a/AUTHORS b/AUTHORS
deleted file mode 100644
index 7c12ae6..0000000
--- a/AUTHORS
+++ /dev/null
@@ -1,6 +0,0 @@
-# Below is a list of people and organizations that have contributed
-# to the Dart project. Names should be added to the list like so:
-#
-#   Name/Organization <email address>
-
-Google Inc.
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 3f25578..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,276 +0,0 @@
-## 0.12.0
-
-* Breaking change: Handle identifiers starting with a leading underscore.
-  This covers message names, enum names, enum value identifiers and file names.
-
-  Before, these would appear in the generated Dart code as private identifiers.
-  Now the underscore is moved to the end.
-
-  Field names and extension field names already had all underscores removed, and these are not
-  affected by this change.
-
-  If there is a conflicting name with a trailing underscore defined later in the same scope, a
-  disambiguation will happen that can potentially lead to existing identifiers getting a new name in
-  the generated Dart.
-
-  For example:
-
-  ```
-  message _Foo {}
-  message Foo_ {}
-  ```
-
-  `_Foo` will get the name `Foo_` and `Foo_` will now end up being called `Foo__`.
-
-## 0.11.0
-
-* Breaking change: Support for [map fields](https://developers.google.com/protocol-buffers/docs/proto3#maps)
-  Generated files require package:protobuf version 0.10.5 or newer.
-  Protobuf map fields such as:
-
-  message Foo {
-    map<int32, string> map_field = 1;
-  }
-  are now no longer represented as List<Foo_MapFieldEntry> but as Map<int, String>.
-
-  All code handling these fields needs to be updated.
-
-## 0.10.5
-
-* Generated files now import `dart:async` with a prefix to prevent name
-  collisions.
-
-## 0.10.4
-
-* Change the fully qualified message name of generated messages to use
-  `BuilderInfo.qualifiedMessageName`.
-  Requires package:protobuf version 0.10.4 or newer.
-
-## 0.10.3
-
-* Remove runtime `as` check of enum `valueOf` by using correctly typed `Map` of
-  values.
-  Generated files must require package:protobuf version 0.10.3 or newer.
-
-## 0.10.2
-
-* Add link to source file in generated code.
-
-## 0.10.1
-
-* Prefix generated Dart proto imports by proto file path instead of by package.
-  Tighten up member name checks for generated enum classes.
-
-## 0.10.0
-
-* Breaking change: Support for [any](https://developers.google.com/protocol-buffers/docs/proto3#any) messages.
-  Generated files require package:protobuf version 0.10.1 or newer.
-  `BuilderInfo.messageName` will now be the fully qualified name for generated messages.
-
-## 0.9.0
-
-* Breaking change: Add `copyWith()` to message classes and update `getDefault()` to use `freeze()`.
-  Requires package:protobuf version 0.10.0 or newer.
-
-## 0.8.2
-
-* Generated code now imports 'package:protobuf/protobuf.dart' prefixed.
-  This avoids name clashes between user defined message names and the protobuf library.
-
-## 0.8.1
-
-* Adjust dependencies to actually be compatible with Dart 2.0 stable.
-
-## 0.8.0+1
-
-* Dart SDK upper constraint raised to declare compatibility with Dart 2.0 stable.
-
-## 0.8.0
-
-* Breaking change: Generated RpcClient stubs use the generic invoke method.
-  Requires package:protobuf version 0.8.0 or newer.
-* Dart 2 fixes.
-
-## 0.7.11
-
-* Dart 2 fix.
-
-## 0.7.10
-
-* Small performance tweak for DDC.
-
-## 0.7.9
-
-* Add fast getters for common types.
-* Only pass index instead of tag and index in generated code.
-* Fix uses-dynamic-as-bottom error in generated gRPC code.
-
-## 0.7.8
-
-* Added enumValues to FieldInfo.
-
-## 0.7.7
-
-* Avoid name clashes between import prefix and field names.
-* Avoid name clashes between generated enum and extension class names.
-* Updated gRPC client stub generation to match latest changes to dart-lang/grpc-dart.
-
-## 0.7.6
-
-* Updated gRPC client stub generation to produce code matching latest changes to
-  dart-lang/grpc-dart.
-
-## 0.7.5
-
-* Use real generic syntax instead of comment-based.
-* Support 2.0.0 dev SDKs.
-
-## 0.7.4
-
-* Added call options to gRPC client stubs.
-
-## 0.7.3
-
-### gRPC support
-
-* Added gRPC stub generation.
-* Updated descriptor.proto from google/protobuf v3.3.0.
-
-## 0.7.2
-
-* Added CHANGELOG.md
-
-## 0.7.1
-
-* Enable executable for `pub global` usage. Protoc plugin can now be installed by running `pub global activate protoc_plugin`.
-* Ensure generated extension class names don't conflict with message class names.
-* `Function` will soon be a reserved keyword, so don't generate classes with that name.
-* Strong mode tweaks and lint fixes.
-
-## 0.7.0 - Not released
-
-* Change how to customize the Dart name of a field to using a `dart_name` option.
-* Implemented support for adding external mixins to generate Dart protos.
-
-## 0.6.0+1 - Not released
-
-* Fix missing import when an extension uses an enum in the same .proto file.
-
-## 0.6.0 - Not released
-
-* Move protobuf enums to a separate .pbenum.dart file.
-* Move server-side stubs to .pbserver.dart.
-
-## 0.5.2 - Not released
-
-* Generate separate .pbjson.dart files for constants.
-
-## 0.5.1
-
-### Strong mode and Bazel
-
-* Fixed all analyzer diagnostics in strong mode.
-* Added experimental support for Bazel.
-
-## 0.5.0
-
-### Performance improvements
-
-This release requires 0.5.0 of the protobuf library.
-
-* significantly improved performance for getters, setters, and hazzers
-* Each enum type now has a $json constant that contains its metadata.
-
-## 0.4.1
-
-### Fixed imports, $checkItem, $json
-
-* Fixed all warnings, including in generated code.
-* Started generating $checkItem function for verifying the values of repeated fields
-* Fixed service stubs to work when a message is in a different package
-* Started generating JSON constants to get the original descriptor data for services
-
-## 0.4.0
-
-### Getters for message fields changed
-
-This release changes how getters work for message fields, to detect a common mistake.
-
-Previously, the protobuf API didn't report any error for an incorrect usage of setters. For example, if field "foo" is a message field of type Foo, this code would silently have no effect:
-
-var msg = new SomeMessage();
-msg.foo.bar = 123;
-This is because "msg.foo" would call "new Foo()" and return it without saving it.
-
-The example can be fixed like this:
-
-var msg = new SomeMessage();
-msg.foo = new Foo();
-msg.foo.bar = 123;
-Or equivalently:
-
-var msg = new SomeMessage()
-   ..foo = (new Foo()..bar = 123);
-Starting in 0.4.0, the default value of "msg.foo" is an immutable instance of Foo. You can read
-the default value of a field the same as before, but writes will throw UnsupportedError.
-
-## 0.3.11
-
-* Fixes issues with reserved names
-
-## 0.3.10
-
-* Adds support for generating stubs from service definitions.
-
-## 0.3.9
-
-* Modify dart_options support so that it supports alternate mixins.
-* Move the experimental map implementation to PbMapMixin
-
-For now, new mixins can only be added using a patch:
-
-* add the new class to the protobuf library
-* add the class to the list in mixin.dart.
-
-## 0.3.8
-
-### Added option for experimental map API
-
-* Changed the Map API so that operator [] and operator []= support dotted keys such as "foo.bar".
-
-This new API is subject to change without notice, but if you want to try it out anyway, see the unit test.
-
-## 0.3.7 - Unreleased
-
-### Added option for experimental map API
-
-* Added an option to have GeneratedMessage subclasses implement Map.
-
-## 0.3.6
-
-### Added writeToJsonMap and mergeFromJsonMap to reservedNames
-
-The 0.3.6 version of the dart-protobuf library added two new functions, so this release changes the protobuf compiler to avoid using them.
-
-## 0.3.5
-
-Protobuf changes for smaller dart2js code, Int64 fixes
-
-This change is paired with https://chromiumcodereview.appspot.com/814213003
-
-Reduces code size for one app by 0.9%
-
-1. Allow constants for the default value to avoid many trivial closures.
-2. Generate and use static M.create() and M.createRepeated() methods on message classes M to ensure there is a shared copy of these closures rather than one copy per use.
-3. Parse Int64 values rather than generate from 'int' to ensure no truncation errors in JavaScript.
-
-## 0.3.4
-
-Parameterize uri resolution and parsing of options, use package:path.
-
-This helps make the compiler more configurable
-to embed it in other systems (like pub transformers)
-
-## 0.3.3
-
-Update the version number
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
deleted file mode 100644
index 8dab68d..0000000
--- a/CONTRIBUTING.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# How to contribute
-
-### Sign our Contributor License Agreement (CLA)
-
-Even for small changes, we ask that you please sign the CLA electronically
-[here](https://developers.google.com/open-source/cla/individual).
-The CLA is necessary because you own the copyright to your changes, even
-after your contribution becomes part of our codebase, so we need your permission
-to use and distribute your code. You can find more details
-[here](https://code.google.com/p/dart/wiki/Contributing).
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index ee99930..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,26 +0,0 @@
-Copyright 2013, the Dart project authors. All rights reserved.
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of Google Inc. nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Makefile b/Makefile
deleted file mode 100644
index 6cc1bf2..0000000
--- a/Makefile
+++ /dev/null
@@ -1,90 +0,0 @@
-PLUGIN_SRC = \
-	prepend.dart \
-	bin/protoc_plugin.dart \
-	lib/*.dart \
-	lib/src/descriptor.pb.dart \
-	lib/src/plugin.pb.dart
-
-OUTPUT_DIR=out
-PLUGIN_NAME=protoc-gen-dart
-PLUGIN_PATH=bin/$(PLUGIN_NAME)
-
-BENCHMARK_PROTOS = $(wildcard benchmark/protos/*.proto)
-
-TEST_PROTO_LIST = \
-	_leading_underscores \
-	google/protobuf/any \
-	google/protobuf/unittest_import \
-	google/protobuf/unittest_optimize_for \
-	google/protobuf/unittest \
-	dart_name \
-	enum_extension \
-	ExtensionEnumNameConflict \
-	ExtensionNameConflict \
-	foo \
-	import_clash \
-	map_api \
-	map_api2 \
-	map_field \
-	mixins \
-	multiple_files_test \
-	nested_extension \
-	non_nested_extension \
-	reserved_names \
-	duplicate_names_import \
-	package1 \
-	package2 \
-	package3 \
-	service \
-	service2 \
-	service3 \
-	toplevel_import \
-	toplevel \
-	using_any
-TEST_PROTO_DIR=$(OUTPUT_DIR)/protos
-TEST_PROTO_LIBS=$(foreach f, $(TEST_PROTO_LIST), \
-  $(TEST_PROTO_DIR)/$(f).pb.dart \
-	$(TEST_PROTO_DIR)/$(f).pbenum.dart \
-	$(TEST_PROTO_DIR)/$(f).pbserver.dart \
-	$(TEST_PROTO_DIR)/$(f).pbjson.dart)
-TEST_PROTO_SRC_DIR=test/protos
-TEST_PROTO_SRCS=$(foreach proto, $(TEST_PROTO_LIST), \
-  $(TEST_PROTO_SRC_DIR)/$(proto).proto)
-
-PREGENERATED_SRCS=protos/descriptor.proto protos/plugin.proto protos/dart_options.proto
-
-$(TEST_PROTO_LIBS): $(PLUGIN_PATH) $(TEST_PROTO_SRCS)
-	[ -d $(TEST_PROTO_DIR) ] || mkdir -p $(TEST_PROTO_DIR)
-	protoc\
-		--dart_out=$(TEST_PROTO_DIR)\
-		-Iprotos\
-		-I$(TEST_PROTO_SRC_DIR)\
-		--plugin=protoc-gen-dart=$(realpath $(PLUGIN_PATH))\
-		$(TEST_PROTO_SRCS)
-
-.PHONY: build-plugin build-benchmark-protos build-benchmarks \
-	update-pregenerated protos run-tests clean
-
-build-plugin: $(PLUGIN_PATH)
-
-update-pregenerated: $(PLUGIN_PATH) $(PREGENERATED_SRCS)
-	protoc --dart_out=lib/src -Iprotos --plugin=protoc-gen-dart=$(realpath $(PLUGIN_PATH)) $(PREGENERATED_SRCS)
-	rm lib/src/descriptor.pb{json,server}.dart
-	rm lib/src/dart_options.pb{enum,json,server}.dart
-	rm lib/src/plugin.pb{enum,json,server}.dart
-	dartfmt -w lib/src
-
-protos: $(PLUGIN_PATH) $(TEST_PROTO_LIBS)
-	mkdir -p benchmark/lib/generated
-	protoc \
-		--dart_out=benchmark/lib/generated \
-		-Ibenchmark/protos \
-		--plugin=protoc-gen-dart=$(realpath $(PLUGIN_PATH)) \
-		$(BENCHMARK_PROTOS)
-
-run-tests: protos
-	pub run test
-
-clean:
-	rm -rf benchmark/lib/generated
-	rm -rf $(OUTPUT_DIR)
diff --git a/README.md b/README.md
index 28d1aa3..0eca704 100644
--- a/README.md
+++ b/README.md
@@ -1,127 +1,3 @@
-# Dart plugin for the protoc compiler
+# Dart plugin for the protoc compiler.
 
-[![Build Status](https://travis-ci.org/dart-lang/dart-protoc-plugin.svg?branch=master)](https://travis-ci.org/dart-lang/dart-protoc-plugin)
-[![pub package](https://img.shields.io/pub/v/protoc_plugin.svg)](https://pub.dartlang.org/packages/protoc_plugin)
-
-This repository provides a plugin for the [protoc
-compiler](https://developers.google.com/protocol-buffers/docs/cpptutorial#compiling-your-protocol-buffers).
-It generates Dart files for working with data in protocol buffers format.
-
-Requirements
-------------
-
-We only support the full [proto2](https://developers.google.com/protocol-buffers/docs/proto)
-schema. Proto3 should work due to backwards compatibility. See
-[this issue list](https://github.com/dart-lang/protobuf/issues?q=is%3Aissue+is%3Aopen+label%3Aproto3)
-for proto3 schema features which are currently missing.
-
-To compile a .proto file, you must use the 'protoc' command which is [installed
-separately](https://developers.google.com/protocol-buffers/docs/downloads).
-Protobuf 3.0.0 or above is required.
-
-The generated files are pure Dart code that run in either in the Dart VM or in a
-browser (using dart2js). They depend the [protobuf Dart
-package](https://pub.dartlang.org/packages/protobuf). A Dart project that
-includes generated files should add "protobuf" to its pubspec.yaml file.
-
-
-How to build and use
---------------------
-
-*Note:* currently the workflow is POSIX-oriented.
-
-To build standalone `protoc` plugin:
-- run `pub install` to install all dependencies
-- Now you can use the plugin either by adding the `bin` directory to your `PATH`,
-  or passing it directly with `protoc`'s `--plugin` option.
-
-Please, remember that the plugin is pure Dart script and requires the presence
-of `dart` executable in your `PATH`.
-
-When both the `dart` executable and `bin/protoc-gen-dart` are in the
-`PATH` the protocol buffer compiler can be invoked to generate like this:
-
-    $ protoc --dart_out=. test.proto
-
-### Optionally using `pub global`
-
-    $ pub global activate protoc_plugin
-
-And then add `.pub-cache/bin` in your home dir to your `PATH` if you haven't already.
-
-This will activate the latest published version of the plugin. If you wish to use a
-local working copy, use
-
-    $ pub global activate -s path <path/to/your/dart-protoc-plugin>
-
-
-### Options to control the generated Dart code
-
-The protocol buffer compiler accepts options for each plugin. For the
-Dart plugin, these options are passed together with the `--dart_out`
-option. The individial options are separated using comma, and the
-final output directive is separated from the options using colon. Pass
-options `<option 1>` and `<option 2>` like this:
-
-    --dart_out="<option 1>,<option 2>:."
-
-Using protocol buffer libraries to build new libraries
-------------------------------------------------------
-
-The protocol buffer compiler produces several files for each `.proto` file
-it compiles. In some cases this is not exactly what is needed, e.g one
-would like to create new libraries which exposes the objects in these
-libraries or create new librares combining object definitions from
-several `.proto` libraries into one.
-
-The best way to aproach this is to create the new libraries needed and
-re-export the relevant protocol buffer classes.
-
-Say we have the file `m1.proto` with the following content
-
-    message M1 {
-      optional string a;
-    }
-
-and `m2.proto` containing
-
-    message M2 {
-      optional string b;
-    }
-
-Compiling these to Dart will produce two libraries in `m1.pb.dart` and
-`m2.pb.dart`. The following code shows a library M which combines
-these two protocol buffer libraries, exposes the classes `M1` and `M2` and
-adds som additional methods.
-
-    library M;
-
-    import "m1.pb.dart";
-    import "m2.pb.dart";
-
-    export "m1.pb.dart" show M1;
-    export "m2.pb.dart" show M2;
-
-    M1 createM1() => new M1();
-    M2 createM2() => new M2();
-
-Hacking
--------
-
-Here are some ways to get protoc:
-
-* Linux: `apt-get install protobuf-compiler`
-* Mac [homebrew](http://brew.sh/): `brew install protobuf`
-
-If the version installed this way doesn't work, an alternative is to
-[compile protoc from source](https://developers.google.com/protocol-buffers/docs/downloads).
-
-Remember to run the tests. That is as easy as `make run-tests`.
-
-Useful references
------------------
-
-* [Main Dart site](https://www.dartlang.org/)
-* [Main protobuf site](https://github.com/google/protobuf)
-* [Protobuf runtime support project](https://github.com/dart-lang/dart-protobuf)
-* [Pub documentation](https://www.dartlang.org/tools/pub/get-started.html)
+This repository has moved to become a package in [http://github.com/dart-lang/protobuf].
diff --git a/analysis_options.yaml b/analysis_options.yaml
deleted file mode 100644
index 1844c97..0000000
--- a/analysis_options.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-#
-# Google internally enforced rules. See README.md for more information,
-# including a list of lints that are intentionally _not_ enforced.
-
-linter:
-  rules:
-    - avoid_empty_else
-    - avoid_relative_lib_imports
-    - avoid_return_types_on_setters
-    - avoid_types_as_parameter_names
-    - control_flow_in_finally
-    - no_duplicate_case_values
-    - prefer_contains
-    - prefer_equal_for_default_values
-    - prefer_is_not_empty
-    - recursive_getters
-    - throw_in_finally
-    - unrelated_type_equality_checks
-    - use_rethrow_when_possible
-    - valid_regexps
diff --git a/benchmark/data/index.dart b/benchmark/data/index.dart
deleted file mode 100644
index 80296fa..0000000
--- a/benchmark/data/index.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.data;
-
-const String latestVMReportName = "latest_vm.pb.json";
-
-// Symbolic links to make these files available in a browser.
-const String pubspecYamlName = "pubspec.link.yaml";
-const String pubspecLockName = "pubspec.link.lock";
-
-const String hostfileName = "hostname.txt";
diff --git a/benchmark/data/skybrian-macbookpro/0.4.2/json_chrome.pb.json b/benchmark/data/skybrian-macbookpro/0.4.2/json_chrome.pb.json
deleted file mode 100644
index 41a1182..0000000
--- a/benchmark/data/skybrian-macbookpro/0.4.2/json_chrome.pb.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/readjson.html",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "10": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+5"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf","2":"hosted","3":"0.4.2"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+8"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":58365,"2":60,"3":{"1":6000}},{"1":50005,"2":50,"3":{"1":5000}},{"1":56095,"2":60,"3":{"1":6000}},{"1":51660,"2":30,"3":{"1":3000}},{"1":53515,"2":60,"3":{"1":6000}},{"1":57395,"2":50,"3":{"1":5000}},{"1":57240,"2":50,"3":{"1":5000}},{"1":57740,"2":60,"3":{"1":6000}},{"1":62385,"2":40,"3":{"1":4000}},{"1":54150,"2":60,"3":{"1":6000}},{"1":54300,"2":60,"3":{"1":6000}},{"1":54345,"2":50,"3":{"1":5000}},{"1":57250,"2":40,"3":{"1":4000}},{"1":55250,"2":60,"3":{"1":6000}},{"1":54500,"2":60,"3":{"1":6000}},{"1":50090,"2":30,"3":{"1":3000}},{"1":55060,"2":60,"3":{"1":6000}},{"1":57545,"2":50,"3":{"1":5000}},{"1":52835,"2":50,"3":{"1":5000}},{"1":59170,"2":40,"3":{"1":4000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":52695,"2":30,"3":{"1":6000}},{"1":66835,"2":50,"3":{"1":10000}},{"1":50585,"2":40,"3":{"1":8000}},{"1":58195,"2":50,"3":{"1":10000}},{"1":58705,"2":50,"3":{"1":10000}},{"1":60530,"2":40,"3":{"1":8000}},{"1":52675,"2":40,"3":{"1":8000}},{"1":62600,"2":50,"3":{"1":10000}},{"1":51200,"2":40,"3":{"1":8000}},{"1":64970,"2":50,"3":{"1":10000}},{"1":58095,"2":50,"3":{"1":10000}},{"1":59305,"2":50,"3":{"1":10000}},{"1":58180,"2":50,"3":{"1":10000}},{"1":51265,"2":40,"3":{"1":8000}},{"1":58135,"2":50,"3":{"1":10000}},{"1":57790,"2":50,"3":{"1":10000}},{"1":58705,"2":50,"3":{"1":10000}},{"1":57685,"2":50,"3":{"1":10000}},{"1":53605,"2":40,"3":{"1":8000}},{"1":59265,"2":50,"3":{"1":10000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":51630,"2":20,"3":{"1":20000}},{"1":51325,"2":20,"3":{"1":20000}},{"1":51055,"2":20,"3":{"1":20000}},{"1":52865,"2":20,"3":{"1":20000}},{"1":50190,"2":20,"3":{"1":20000}},{"1":59285,"2":20,"3":{"1":20000}},{"1":73770,"2":30,"3":{"1":30000}},{"1":74040,"2":30,"3":{"1":30000}},{"1":52495,"2":20,"3":{"1":20000}},{"1":54390,"2":20,"3":{"1":20000}},{"1":74365,"2":30,"3":{"1":30000}},{"1":51815,"2":20,"3":{"1":20000}},{"1":74380,"2":30,"3":{"1":30000}},{"1":73280,"2":30,"3":{"1":30000}},{"1":79475,"2":30,"3":{"1":30000}},{"1":72430,"2":30,"3":{"1":30000}},{"1":74920,"2":30,"3":{"1":30000}},{"1":73115,"2":30,"3":{"1":30000}},{"1":56220,"2":20,"3":{"1":20000}},{"1":73850,"2":30,"3":{"1":30000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":50225,"2":10,"3":{"1":20000}},{"1":51260,"2":10,"3":{"1":20000}},{"1":51010,"2":10,"3":{"1":20000}},{"1":97920,"2":20,"3":{"1":40000}},{"1":60890,"2":10,"3":{"1":20000}},{"1":97425,"2":20,"3":{"1":40000}},{"1":103520,"2":20,"3":{"1":40000}},{"1":96680,"2":20,"3":{"1":40000}},{"1":98375,"2":20,"3":{"1":40000}},{"1":52910,"2":10,"3":{"1":20000}},{"1":54335,"2":10,"3":{"1":20000}},{"1":50940,"2":10,"3":{"1":20000}},{"1":99450,"2":20,"3":{"1":40000}},{"1":98825,"2":20,"3":{"1":40000}},{"1":51720,"2":10,"3":{"1":20000}},{"1":97545,"2":20,"3":{"1":40000}},{"1":99340,"2":20,"3":{"1":40000}},{"1":97970,"2":20,"3":{"1":40000}},{"1":50335,"2":10,"3":{"1":20000}},{"1":55570,"2":10,"3":{"1":20000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":55790,"2":50,"3":{"1":5000}},{"1":55965,"2":50,"3":{"1":5000}},{"1":60570,"2":50,"3":{"1":5000}},{"1":58615,"2":50,"3":{"1":5000}},{"1":53310,"2":50,"3":{"1":5000}},{"1":56820,"2":50,"3":{"1":5000}},{"1":51825,"2":50,"3":{"1":5000}},{"1":53645,"2":50,"3":{"1":5000}},{"1":55255,"2":50,"3":{"1":5000}},{"1":51780,"2":50,"3":{"1":5000}},{"1":56835,"2":50,"3":{"1":5000}},{"1":50570,"2":40,"3":{"1":4000}},{"1":53225,"2":40,"3":{"1":4000}},{"1":53710,"2":50,"3":{"1":5000}},{"1":53230,"2":50,"3":{"1":5000}},{"1":52940,"2":50,"3":{"1":5000}},{"1":51965,"2":50,"3":{"1":5000}},{"1":55040,"2":50,"3":{"1":5000}},{"1":53620,"2":50,"3":{"1":5000}},{"1":50020,"2":40,"3":{"1":4000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":56135,"2":50,"3":{"1":10000}},{"1":55890,"2":50,"3":{"1":10000}},{"1":54535,"2":50,"3":{"1":10000}},{"1":59600,"2":50,"3":{"1":10000}},{"1":54120,"2":50,"3":{"1":10000}},{"1":52665,"2":50,"3":{"1":10000}},{"1":56855,"2":50,"3":{"1":10000}},{"1":52970,"2":50,"3":{"1":10000}},{"1":55755,"2":50,"3":{"1":10000}},{"1":52265,"2":50,"3":{"1":10000}},{"1":55175,"2":50,"3":{"1":10000}},{"1":60135,"2":50,"3":{"1":10000}},{"1":59105,"2":50,"3":{"1":10000}},{"1":58565,"2":50,"3":{"1":10000}},{"1":52415,"2":50,"3":{"1":10000}},{"1":53955,"2":50,"3":{"1":10000}},{"1":53755,"2":50,"3":{"1":10000}},{"1":54620,"2":50,"3":{"1":10000}},{"1":54470,"2":50,"3":{"1":10000}},{"1":57955,"2":50,"3":{"1":10000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":59180,"2":50,"3":{"1":50000}},{"1":60985,"2":50,"3":{"1":50000}},{"1":59680,"2":50,"3":{"1":50000}},{"1":52850,"2":40,"3":{"1":40000}},{"1":59200,"2":50,"3":{"1":50000}},{"1":58825,"2":50,"3":{"1":50000}},{"1":57360,"2":50,"3":{"1":50000}},{"1":51955,"2":40,"3":{"1":40000}},{"1":50520,"2":40,"3":{"1":40000}},{"1":63035,"2":50,"3":{"1":50000}},{"1":60140,"2":50,"3":{"1":50000}},{"1":51750,"2":40,"3":{"1":40000}},{"1":51730,"2":40,"3":{"1":40000}},{"1":60060,"2":50,"3":{"1":50000}},{"1":62540,"2":50,"3":{"1":50000}},{"1":58575,"2":50,"3":{"1":50000}},{"1":58405,"2":50,"3":{"1":50000}},{"1":59670,"2":50,"3":{"1":50000}},{"1":62560,"2":50,"3":{"1":50000}},{"1":60795,"2":50,"3":{"1":50000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":51360,"2":20,"3":{"1":40000}},{"1":72745,"2":30,"3":{"1":60000}},{"1":71870,"2":30,"3":{"1":60000}},{"1":59195,"2":20,"3":{"1":40000}},{"1":53030,"2":20,"3":{"1":40000}},{"1":70075,"2":30,"3":{"1":60000}},{"1":68290,"2":30,"3":{"1":60000}},{"1":69160,"2":30,"3":{"1":60000}},{"1":74640,"2":30,"3":{"1":60000}},{"1":68305,"2":30,"3":{"1":60000}},{"1":53770,"2":20,"3":{"1":40000}},{"1":73015,"2":30,"3":{"1":60000}},{"1":70450,"2":30,"3":{"1":60000}},{"1":72675,"2":30,"3":{"1":60000}},{"1":75835,"2":30,"3":{"1":60000}},{"1":52775,"2":20,"3":{"1":40000}},{"1":68990,"2":30,"3":{"1":60000}},{"1":70715,"2":30,"3":{"1":60000}},{"1":59440,"2":20,"3":{"1":40000}},{"1":53435,"2":20,"3":{"1":40000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":50185,"2":50,"3":{"2":5000}},{"1":59415,"2":60,"3":{"2":6000}},{"1":53105,"2":50,"3":{"2":5000}},{"1":52515,"2":50,"3":{"2":5000}},{"1":56305,"2":60,"3":{"2":6000}},{"1":55795,"2":60,"3":{"2":6000}},{"1":54955,"2":60,"3":{"2":6000}},{"1":54750,"2":60,"3":{"2":6000}},{"1":53455,"2":50,"3":{"2":5000}},{"1":51490,"2":50,"3":{"2":5000}},{"1":55155,"2":50,"3":{"2":5000}},{"1":59840,"2":60,"3":{"2":6000}},{"1":58330,"2":60,"3":{"2":6000}},{"1":57520,"2":50,"3":{"2":5000}},{"1":55860,"2":50,"3":{"2":5000}},{"1":58065,"2":60,"3":{"2":6000}},{"1":58785,"2":60,"3":{"2":6000}},{"1":57355,"2":60,"3":{"2":6000}},{"1":55550,"2":50,"3":{"2":5000}},{"1":53300,"2":50,"3":{"2":5000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":51750,"2":40,"3":{"2":8000}},{"1":51890,"2":40,"3":{"2":8000}},{"1":50015,"2":40,"3":{"2":8000}},{"1":61000,"2":50,"3":{"2":10000}},{"1":61995,"2":50,"3":{"2":10000}},{"1":55350,"2":40,"3":{"2":8000}},{"1":61505,"2":50,"3":{"2":10000}},{"1":61450,"2":50,"3":{"2":10000}},{"1":50820,"2":40,"3":{"2":8000}},{"1":62095,"2":50,"3":{"2":10000}},{"1":62080,"2":40,"3":{"2":8000}},{"1":58240,"2":40,"3":{"2":8000}},{"1":50410,"2":40,"3":{"2":8000}},{"1":50740,"2":40,"3":{"2":8000}},{"1":62545,"2":50,"3":{"2":10000}},{"1":50235,"2":40,"3":{"2":8000}},{"1":53595,"2":40,"3":{"2":8000}},{"1":50415,"2":40,"3":{"2":8000}},{"1":50335,"2":40,"3":{"2":8000}},{"1":55920,"2":40,"3":{"2":8000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":52025,"2":20,"3":{"2":20000}},{"1":56650,"2":20,"3":{"2":20000}},{"1":56540,"2":20,"3":{"2":20000}},{"1":54335,"2":20,"3":{"2":20000}},{"1":58375,"2":20,"3":{"2":20000}},{"1":58545,"2":20,"3":{"2":20000}},{"1":52820,"2":20,"3":{"2":20000}},{"1":64930,"2":20,"3":{"2":20000}},{"1":55390,"2":20,"3":{"2":20000}},{"1":60970,"2":20,"3":{"2":20000}},{"1":64490,"2":20,"3":{"2":20000}},{"1":54720,"2":20,"3":{"2":20000}},{"1":53965,"2":20,"3":{"2":20000}},{"1":54435,"2":20,"3":{"2":20000}},{"1":54105,"2":20,"3":{"2":20000}},{"1":60425,"2":20,"3":{"2":20000}},{"1":54885,"2":20,"3":{"2":20000}},{"1":53275,"2":20,"3":{"2":20000}},{"1":54205,"2":20,"3":{"2":20000}},{"1":57140,"2":20,"3":{"2":20000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":65585,"2":10,"3":{"2":20000}},{"1":62595,"2":10,"3":{"2":20000}},{"1":55220,"2":10,"3":{"2":20000}},{"1":59605,"2":10,"3":{"2":20000}},{"1":54065,"2":10,"3":{"2":20000}},{"1":53455,"2":10,"3":{"2":20000}},{"1":52375,"2":10,"3":{"2":20000}},{"1":54045,"2":10,"3":{"2":20000}},{"1":54530,"2":10,"3":{"2":20000}},{"1":54820,"2":10,"3":{"2":20000}},{"1":55525,"2":10,"3":{"2":20000}},{"1":57275,"2":10,"3":{"2":20000}},{"1":54430,"2":10,"3":{"2":20000}},{"1":54510,"2":10,"3":{"2":20000}},{"1":55820,"2":10,"3":{"2":20000}},{"1":55175,"2":10,"3":{"2":20000}},{"1":54960,"2":10,"3":{"2":20000}},{"1":55370,"2":10,"3":{"2":20000}},{"1":60490,"2":10,"3":{"2":20000}},{"1":53515,"2":10,"3":{"2":20000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":59130,"2":50,"3":{"2":5000}},{"1":57815,"2":50,"3":{"2":5000}},{"1":54800,"2":50,"3":{"2":5000}},{"1":53345,"2":50,"3":{"2":5000}},{"1":51490,"2":40,"3":{"2":4000}},{"1":53125,"2":50,"3":{"2":5000}},{"1":52945,"2":50,"3":{"2":5000}},{"1":59915,"2":50,"3":{"2":5000}},{"1":57470,"2":50,"3":{"2":5000}},{"1":61260,"2":50,"3":{"2":5000}},{"1":51200,"2":30,"3":{"2":3000}},{"1":55985,"2":50,"3":{"2":5000}},{"1":53105,"2":40,"3":{"2":4000}},{"1":57030,"2":50,"3":{"2":5000}},{"1":50395,"2":40,"3":{"2":4000}},{"1":53705,"2":40,"3":{"2":4000}},{"1":53150,"2":30,"3":{"2":3000}},{"1":54960,"2":50,"3":{"2":5000}},{"1":56515,"2":50,"3":{"2":5000}},{"1":56440,"2":50,"3":{"2":5000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":58335,"2":50,"3":{"2":10000}},{"1":65290,"2":40,"3":{"2":8000}},{"1":55185,"2":50,"3":{"2":10000}},{"1":54380,"2":50,"3":{"2":10000}},{"1":52445,"2":40,"3":{"2":8000}},{"1":59275,"2":50,"3":{"2":10000}},{"1":54385,"2":50,"3":{"2":10000}},{"1":66770,"2":50,"3":{"2":10000}},{"1":56225,"2":50,"3":{"2":10000}},{"1":60310,"2":50,"3":{"2":10000}},{"1":57930,"2":50,"3":{"2":10000}},{"1":52025,"2":40,"3":{"2":8000}},{"1":55860,"2":50,"3":{"2":10000}},{"1":55530,"2":30,"3":{"2":6000}},{"1":59175,"2":50,"3":{"2":10000}},{"1":56055,"2":50,"3":{"2":10000}},{"1":62460,"2":50,"3":{"2":10000}},{"1":55855,"2":50,"3":{"2":10000}},{"1":51810,"2":30,"3":{"2":6000}},{"1":51920,"2":40,"3":{"2":8000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":51730,"2":40,"3":{"2":40000}},{"1":54190,"2":40,"3":{"2":40000}},{"1":56030,"2":30,"3":{"2":30000}},{"1":61515,"2":50,"3":{"2":50000}},{"1":55800,"2":40,"3":{"2":40000}},{"1":61790,"2":50,"3":{"2":50000}},{"1":54965,"2":40,"3":{"2":40000}},{"1":61855,"2":50,"3":{"2":50000}},{"1":51295,"2":40,"3":{"2":40000}},{"1":62280,"2":50,"3":{"2":50000}},{"1":50825,"2":40,"3":{"2":40000}},{"1":56735,"2":30,"3":{"2":30000}},{"1":53235,"2":40,"3":{"2":40000}},{"1":53685,"2":40,"3":{"2":40000}},{"1":51130,"2":40,"3":{"2":40000}},{"1":50870,"2":40,"3":{"2":40000}},{"1":62245,"2":40,"3":{"2":40000}},{"1":58370,"2":40,"3":{"2":40000}},{"1":50560,"2":40,"3":{"2":40000}},{"1":54695,"2":40,"3":{"2":40000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":51140,"2":20,"3":{"2":40000}},{"1":52035,"2":20,"3":{"2":40000}},{"1":56100,"2":20,"3":{"2":40000}},{"1":73345,"2":30,"3":{"2":60000}},{"1":55710,"2":20,"3":{"2":40000}},{"1":73850,"2":30,"3":{"2":60000}},{"1":53700,"2":20,"3":{"2":40000}},{"1":50350,"2":20,"3":{"2":40000}},{"1":56525,"2":20,"3":{"2":40000}},{"1":50010,"2":20,"3":{"2":40000}},{"1":74185,"2":30,"3":{"2":60000}},{"1":54815,"2":20,"3":{"2":40000}},{"1":51520,"2":20,"3":{"2":40000}},{"1":56480,"2":20,"3":{"2":40000}},{"1":51200,"2":20,"3":{"2":40000}},{"1":54500,"2":20,"3":{"2":40000}},{"1":50250,"2":20,"3":{"2":40000}},{"1":51355,"2":20,"3":{"2":40000}},{"1":58060,"2":20,"3":{"2":40000}},{"1":53140,"2":20,"3":{"2":40000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":57420,"2":50,"3":{"4":5000}},{"1":54050,"2":50,"3":{"4":5000}},{"1":54215,"2":50,"3":{"4":5000}},{"1":50680,"2":50,"3":{"4":5000}},{"1":55255,"2":40,"3":{"4":4000}},{"1":57695,"2":60,"3":{"4":6000}},{"1":54735,"2":60,"3":{"4":6000}},{"1":55755,"2":40,"3":{"4":4000}},{"1":55095,"2":60,"3":{"4":6000}},{"1":58010,"2":60,"3":{"4":6000}},{"1":59875,"2":60,"3":{"4":6000}},{"1":56915,"2":60,"3":{"4":6000}},{"1":57230,"2":60,"3":{"4":6000}},{"1":57020,"2":60,"3":{"4":6000}},{"1":61475,"2":60,"3":{"4":6000}},{"1":56430,"2":60,"3":{"4":6000}},{"1":60600,"2":60,"3":{"4":6000}},{"1":56580,"2":60,"3":{"4":6000}},{"1":57870,"2":60,"3":{"4":6000}},{"1":51210,"2":50,"3":{"4":5000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":56360,"2":40,"3":{"4":8000}},{"1":50290,"2":40,"3":{"4":8000}},{"1":59815,"2":50,"3":{"4":10000}},{"1":59965,"2":50,"3":{"4":10000}},{"1":60095,"2":50,"3":{"4":10000}},{"1":59820,"2":50,"3":{"4":10000}},{"1":59485,"2":50,"3":{"4":10000}},{"1":61760,"2":50,"3":{"4":10000}},{"1":60000,"2":50,"3":{"4":10000}},{"1":60770,"2":50,"3":{"4":10000}},{"1":50410,"2":40,"3":{"4":8000}},{"1":60040,"2":50,"3":{"4":10000}},{"1":60975,"2":50,"3":{"4":10000}},{"1":61090,"2":50,"3":{"4":10000}},{"1":54680,"2":30,"3":{"4":6000}},{"1":62315,"2":50,"3":{"4":10000}},{"1":61555,"2":50,"3":{"4":10000}},{"1":60985,"2":50,"3":{"4":10000}},{"1":61215,"2":50,"3":{"4":10000}},{"1":61165,"2":50,"3":{"4":10000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52190,"2":20,"3":{"4":20000}},{"1":56885,"2":20,"3":{"4":20000}},{"1":51760,"2":20,"3":{"4":20000}},{"1":52410,"2":20,"3":{"4":20000}},{"1":54045,"2":20,"3":{"4":20000}},{"1":52655,"2":20,"3":{"4":20000}},{"1":51025,"2":20,"3":{"4":20000}},{"1":52985,"2":20,"3":{"4":20000}},{"1":51350,"2":20,"3":{"4":20000}},{"1":55970,"2":20,"3":{"4":20000}},{"1":52110,"2":20,"3":{"4":20000}},{"1":51960,"2":20,"3":{"4":20000}},{"1":51285,"2":20,"3":{"4":20000}},{"1":52995,"2":20,"3":{"4":20000}},{"1":53210,"2":20,"3":{"4":20000}},{"1":52160,"2":20,"3":{"4":20000}},{"1":52130,"2":20,"3":{"4":20000}},{"1":51390,"2":20,"3":{"4":20000}},{"1":51700,"2":20,"3":{"4":20000}},{"1":50945,"2":20,"3":{"4":20000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52275,"2":10,"3":{"4":20000}},{"1":52805,"2":10,"3":{"4":20000}},{"1":51910,"2":10,"3":{"4":20000}},{"1":52200,"2":10,"3":{"4":20000}},{"1":53530,"2":10,"3":{"4":20000}},{"1":52360,"2":10,"3":{"4":20000}},{"1":56225,"2":10,"3":{"4":20000}},{"1":54380,"2":10,"3":{"4":20000}},{"1":51160,"2":10,"3":{"4":20000}},{"1":50690,"2":10,"3":{"4":20000}},{"1":51665,"2":10,"3":{"4":20000}},{"1":55175,"2":10,"3":{"4":20000}},{"1":57465,"2":10,"3":{"4":20000}},{"1":52215,"2":10,"3":{"4":20000}},{"1":51120,"2":10,"3":{"4":20000}},{"1":55755,"2":10,"3":{"4":20000}},{"1":51810,"2":10,"3":{"4":20000}},{"1":51230,"2":10,"3":{"4":20000}},{"1":51230,"2":10,"3":{"4":20000}},{"1":51035,"2":10,"3":{"4":20000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":59640,"2":20,"3":{"4":20000}},{"1":82300,"2":20,"3":{"4":20000}},{"1":58700,"2":20,"3":{"4":20000}},{"1":60310,"2":20,"3":{"4":20000}},{"1":58115,"2":20,"3":{"4":20000}},{"1":62375,"2":20,"3":{"4":20000}},{"1":56265,"2":20,"3":{"4":20000}},{"1":56460,"2":20,"3":{"4":20000}},{"1":65005,"2":20,"3":{"4":20000}},{"1":59165,"2":20,"3":{"4":20000}},{"1":58155,"2":20,"3":{"4":20000}},{"1":61865,"2":20,"3":{"4":20000}},{"1":62015,"2":20,"3":{"4":20000}},{"1":59315,"2":20,"3":{"4":20000}},{"1":55140,"2":20,"3":{"4":20000}},{"1":70220,"2":20,"3":{"4":20000}},{"1":59705,"2":20,"3":{"4":20000}},{"1":92900,"2":20,"3":{"4":20000}},{"1":56035,"2":20,"3":{"4":20000}},{"1":96490,"2":20,"3":{"4":20000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":63425,"2":50,"3":{"4":5000}},{"1":56145,"2":50,"3":{"4":5000}},{"1":53405,"2":50,"3":{"4":5000}},{"1":53705,"2":50,"3":{"4":5000}},{"1":53830,"2":50,"3":{"4":5000}},{"1":59340,"2":50,"3":{"4":5000}},{"1":53160,"2":50,"3":{"4":5000}},{"1":53650,"2":50,"3":{"4":5000}},{"1":63510,"2":50,"3":{"4":5000}},{"1":52910,"2":50,"3":{"4":5000}},{"1":51700,"2":30,"3":{"4":3000}},{"1":54275,"2":50,"3":{"4":5000}},{"1":61920,"2":30,"3":{"4":3000}},{"1":50490,"2":40,"3":{"4":4000}},{"1":55245,"2":50,"3":{"4":5000}},{"1":57735,"2":50,"3":{"4":5000}},{"1":50230,"2":40,"3":{"4":4000}},{"1":51895,"2":40,"3":{"4":4000}},{"1":53295,"2":50,"3":{"4":5000}},{"1":59940,"2":50,"3":{"4":5000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":59300,"2":50,"3":{"4":10000}},{"1":59010,"2":50,"3":{"4":10000}},{"1":59140,"2":50,"3":{"4":10000}},{"1":54970,"2":50,"3":{"4":10000}},{"1":54380,"2":50,"3":{"4":10000}},{"1":59875,"2":50,"3":{"4":10000}},{"1":55200,"2":50,"3":{"4":10000}},{"1":54835,"2":50,"3":{"4":10000}},{"1":53210,"2":50,"3":{"4":10000}},{"1":52485,"2":30,"3":{"4":6000}},{"1":55660,"2":40,"3":{"4":8000}},{"1":57630,"2":50,"3":{"4":10000}},{"1":54765,"2":50,"3":{"4":10000}},{"1":60155,"2":50,"3":{"4":10000}},{"1":56365,"2":50,"3":{"4":10000}},{"1":51480,"2":40,"3":{"4":8000}},{"1":54640,"2":50,"3":{"4":10000}},{"1":56325,"2":50,"3":{"4":10000}},{"1":61490,"2":50,"3":{"4":10000}},{"1":54725,"2":50,"3":{"4":10000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":51590,"2":40,"3":{"4":40000}},{"1":60905,"2":50,"3":{"4":50000}},{"1":61950,"2":50,"3":{"4":50000}},{"1":57845,"2":40,"3":{"4":40000}},{"1":61410,"2":50,"3":{"4":50000}},{"1":50380,"2":40,"3":{"4":40000}},{"1":61880,"2":50,"3":{"4":50000}},{"1":61075,"2":50,"3":{"4":50000}},{"1":60235,"2":50,"3":{"4":50000}},{"1":61460,"2":50,"3":{"4":50000}},{"1":51150,"2":40,"3":{"4":40000}},{"1":52035,"2":40,"3":{"4":40000}},{"1":61510,"2":50,"3":{"4":50000}},{"1":62145,"2":50,"3":{"4":50000}},{"1":50610,"2":40,"3":{"4":40000}},{"1":60060,"2":50,"3":{"4":50000}},{"1":61625,"2":50,"3":{"4":50000}},{"1":50885,"2":40,"3":{"4":40000}},{"1":50175,"2":40,"3":{"4":40000}},{"1":50000,"2":40,"3":{"4":40000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":51820,"2":20,"3":{"4":40000}},{"1":72885,"2":30,"3":{"4":60000}},{"1":52130,"2":20,"3":{"4":40000}},{"1":73550,"2":30,"3":{"4":60000}},{"1":79320,"2":30,"3":{"4":60000}},{"1":60520,"2":20,"3":{"4":40000}},{"1":81800,"2":20,"3":{"4":40000}},{"1":73090,"2":30,"3":{"4":60000}},{"1":73365,"2":30,"3":{"4":60000}},{"1":55290,"2":20,"3":{"4":40000}},{"1":50665,"2":20,"3":{"4":40000}},{"1":73620,"2":30,"3":{"4":60000}},{"1":73230,"2":30,"3":{"4":60000}},{"1":74285,"2":30,"3":{"4":60000}},{"1":57125,"2":20,"3":{"4":40000}},{"1":54270,"2":20,"3":{"4":40000}},{"1":73475,"2":30,"3":{"4":60000}},{"1":53430,"2":20,"3":{"4":40000}},{"1":59525,"2":20,"3":{"4":40000}},{"1":50590,"2":20,"3":{"4":40000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":52790,"2":30,"3":{"4":30000}},{"1":59960,"2":40,"3":{"4":40000}},{"1":65105,"2":40,"3":{"4":40000}},{"1":61080,"2":40,"3":{"4":40000}},{"1":59165,"2":40,"3":{"4":40000}},{"1":70790,"2":30,"3":{"4":30000}},{"1":63285,"2":40,"3":{"4":40000}},{"1":59050,"2":40,"3":{"4":40000}},{"1":57800,"2":40,"3":{"4":40000}},{"1":62360,"2":40,"3":{"4":40000}},{"1":51720,"2":30,"3":{"4":30000}},{"1":50255,"2":30,"3":{"4":30000}},{"1":58880,"2":40,"3":{"4":40000}},{"1":55630,"2":30,"3":{"4":30000}},{"1":63790,"2":40,"3":{"4":40000}},{"1":62700,"2":40,"3":{"4":40000}},{"1":63480,"2":40,"3":{"4":40000}},{"1":53210,"2":30,"3":{"4":30000}},{"1":53440,"2":30,"3":{"4":30000}},{"1":62565,"2":40,"3":{"4":40000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/0.4.2/json_vm.pb.json b/benchmark/data/skybrian-macbookpro/0.4.2/json_vm.pb.json
deleted file mode 100644
index afc63e1..0000000
--- a/benchmark/data/skybrian-macbookpro/0.4.2/json_vm.pb.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "readjson_vm.dart",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "2": 2,
-      "3": "1.12.0 (Mon Aug 31 04:17:53 2015) on \"macos_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+5"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf","2":"hosted","3":"0.4.2"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+8"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":52792,"2":170,"3":{"1":17000}},{"1":50531,"2":250,"3":{"1":25000}},{"1":50487,"2":270,"3":{"1":27000}},{"1":50526,"2":280,"3":{"1":28000}},{"1":50916,"2":290,"3":{"1":29000}},{"1":51512,"2":300,"3":{"1":30000}},{"1":50968,"2":260,"3":{"1":26000}},{"1":50506,"2":270,"3":{"1":27000}},{"1":50869,"2":290,"3":{"1":29000}},{"1":50677,"2":290,"3":{"1":29000}},{"1":51736,"2":290,"3":{"1":29000}},{"1":50841,"2":290,"3":{"1":29000}},{"1":50498,"2":240,"3":{"1":24000}},{"1":50427,"2":280,"3":{"1":28000}},{"1":50444,"2":280,"3":{"1":28000}},{"1":50631,"2":280,"3":{"1":28000}},{"1":50841,"2":280,"3":{"1":28000}},{"1":50951,"2":280,"3":{"1":28000}},{"1":51225,"2":280,"3":{"1":28000}},{"1":50338,"2":220,"3":{"1":22000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":52030,"2":250,"3":{"1":50000}},{"1":51982,"2":250,"3":{"1":50000}},{"1":50410,"2":240,"3":{"1":48000}},{"1":51965,"2":250,"3":{"1":50000}},{"1":50386,"2":240,"3":{"1":48000}},{"1":50335,"2":240,"3":{"1":48000}},{"1":50947,"2":250,"3":{"1":50000}},{"1":50376,"2":240,"3":{"1":48000}},{"1":52138,"2":250,"3":{"1":50000}},{"1":52063,"2":250,"3":{"1":50000}},{"1":51496,"2":240,"3":{"1":48000}},{"1":50768,"2":240,"3":{"1":48000}},{"1":50012,"2":210,"3":{"1":42000}},{"1":51095,"2":240,"3":{"1":48000}},{"1":50728,"2":240,"3":{"1":48000}},{"1":51056,"2":240,"3":{"1":48000}},{"1":50787,"2":200,"3":{"1":40000}},{"1":51970,"2":220,"3":{"1":44000}},{"1":50119,"2":210,"3":{"1":42000}},{"1":50126,"2":240,"3":{"1":48000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":54331,"2":100,"3":{"1":100000}},{"1":55249,"2":100,"3":{"1":100000}},{"1":50434,"2":90,"3":{"1":90000}},{"1":50452,"2":90,"3":{"1":90000}},{"1":54057,"2":100,"3":{"1":100000}},{"1":54132,"2":100,"3":{"1":100000}},{"1":55114,"2":100,"3":{"1":100000}},{"1":53461,"2":80,"3":{"1":80000}},{"1":55260,"2":90,"3":{"1":90000}},{"1":55414,"2":100,"3":{"1":100000}},{"1":51439,"2":90,"3":{"1":90000}},{"1":51413,"2":90,"3":{"1":90000}},{"1":52472,"2":90,"3":{"1":90000}},{"1":50359,"2":80,"3":{"1":80000}},{"1":50654,"2":80,"3":{"1":80000}},{"1":52168,"2":90,"3":{"1":90000}},{"1":53932,"2":90,"3":{"1":90000}},{"1":50863,"2":90,"3":{"1":90000}},{"1":52259,"2":90,"3":{"1":90000}},{"1":52312,"2":90,"3":{"1":90000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":56093,"2":50,"3":{"1":100000}},{"1":55191,"2":50,"3":{"1":100000}},{"1":55949,"2":50,"3":{"1":100000}},{"1":50848,"2":40,"3":{"1":80000}},{"1":54937,"2":50,"3":{"1":100000}},{"1":56136,"2":50,"3":{"1":100000}},{"1":61847,"2":50,"3":{"1":100000}},{"1":55885,"2":50,"3":{"1":100000}},{"1":55234,"2":50,"3":{"1":100000}},{"1":54780,"2":50,"3":{"1":100000}},{"1":51168,"2":40,"3":{"1":80000}},{"1":57005,"2":50,"3":{"1":100000}},{"1":57109,"2":50,"3":{"1":100000}},{"1":57083,"2":50,"3":{"1":100000}},{"1":57885,"2":50,"3":{"1":100000}},{"1":56917,"2":50,"3":{"1":100000}},{"1":57040,"2":50,"3":{"1":100000}},{"1":50908,"2":40,"3":{"1":80000}},{"1":56833,"2":50,"3":{"1":100000}},{"1":51625,"2":40,"3":{"1":80000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":50389,"2":250,"3":{"1":25000}},{"1":50143,"2":250,"3":{"1":25000}},{"1":50923,"2":260,"3":{"1":26000}},{"1":50639,"2":260,"3":{"1":26000}},{"1":50998,"2":260,"3":{"1":26000}},{"1":51777,"2":230,"3":{"1":23000}},{"1":50828,"2":230,"3":{"1":23000}},{"1":51718,"2":260,"3":{"1":26000}},{"1":50152,"2":250,"3":{"1":25000}},{"1":50218,"2":230,"3":{"1":23000}},{"1":51480,"2":250,"3":{"1":25000}},{"1":50652,"2":250,"3":{"1":25000}},{"1":50147,"2":220,"3":{"1":22000}},{"1":50707,"2":250,"3":{"1":25000}},{"1":50375,"2":230,"3":{"1":23000}},{"1":50821,"2":230,"3":{"1":23000}},{"1":50873,"2":250,"3":{"1":25000}},{"1":50338,"2":250,"3":{"1":25000}},{"1":50275,"2":250,"3":{"1":25000}},{"1":50952,"2":250,"3":{"1":25000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":50503,"2":220,"3":{"1":44000}},{"1":51797,"2":250,"3":{"1":50000}},{"1":52199,"2":250,"3":{"1":50000}},{"1":50501,"2":220,"3":{"1":44000}},{"1":51555,"2":250,"3":{"1":50000}},{"1":50137,"2":240,"3":{"1":48000}},{"1":50114,"2":240,"3":{"1":48000}},{"1":50294,"2":240,"3":{"1":48000}},{"1":50043,"2":240,"3":{"1":48000}},{"1":51078,"2":220,"3":{"1":44000}},{"1":50857,"2":240,"3":{"1":48000}},{"1":50331,"2":240,"3":{"1":48000}},{"1":50102,"2":210,"3":{"1":42000}},{"1":51731,"2":250,"3":{"1":50000}},{"1":51086,"2":240,"3":{"1":48000}},{"1":50324,"2":240,"3":{"1":48000}},{"1":51575,"2":220,"3":{"1":44000}},{"1":51789,"2":250,"3":{"1":50000}},{"1":52227,"2":230,"3":{"1":46000}},{"1":51995,"2":230,"3":{"1":46000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":50139,"2":180,"3":{"1":180000}},{"1":50669,"2":180,"3":{"1":180000}},{"1":50934,"2":180,"3":{"1":180000}},{"1":51307,"2":180,"3":{"1":180000}},{"1":50608,"2":160,"3":{"1":160000}},{"1":51083,"2":180,"3":{"1":180000}},{"1":50098,"2":180,"3":{"1":180000}},{"1":51223,"2":180,"3":{"1":180000}},{"1":51286,"2":180,"3":{"1":180000}},{"1":51010,"2":180,"3":{"1":180000}},{"1":51089,"2":180,"3":{"1":180000}},{"1":51876,"2":180,"3":{"1":180000}},{"1":50966,"2":180,"3":{"1":180000}},{"1":51232,"2":180,"3":{"1":180000}},{"1":51554,"2":180,"3":{"1":180000}},{"1":51385,"2":170,"3":{"1":170000}},{"1":50667,"2":180,"3":{"1":180000}},{"1":51677,"2":180,"3":{"1":180000}},{"1":50191,"2":160,"3":{"1":160000}},{"1":50631,"2":180,"3":{"1":180000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":50443,"2":80,"3":{"1":160000}},{"1":51568,"2":90,"3":{"1":180000}},{"1":51007,"2":90,"3":{"1":180000}},{"1":51734,"2":90,"3":{"1":180000}},{"1":51062,"2":90,"3":{"1":180000}},{"1":50124,"2":80,"3":{"1":160000}},{"1":50760,"2":90,"3":{"1":180000}},{"1":51151,"2":90,"3":{"1":180000}},{"1":55225,"2":90,"3":{"1":180000}},{"1":50809,"2":90,"3":{"1":180000}},{"1":55275,"2":100,"3":{"1":200000}},{"1":50254,"2":90,"3":{"1":180000}},{"1":56216,"2":100,"3":{"1":200000}},{"1":50776,"2":90,"3":{"1":180000}},{"1":51530,"2":90,"3":{"1":180000}},{"1":51019,"2":90,"3":{"1":180000}},{"1":50930,"2":90,"3":{"1":180000}},{"1":51209,"2":90,"3":{"1":180000}},{"1":50727,"2":90,"3":{"1":180000}},{"1":50484,"2":90,"3":{"1":180000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":51010,"2":240,"3":{"2":24000}},{"1":50538,"2":270,"3":{"2":27000}},{"1":51380,"2":260,"3":{"2":26000}},{"1":51666,"2":270,"3":{"2":27000}},{"1":50569,"2":260,"3":{"2":26000}},{"1":50886,"2":270,"3":{"2":27000}},{"1":50904,"2":250,"3":{"2":25000}},{"1":51299,"2":270,"3":{"2":27000}},{"1":51182,"2":280,"3":{"2":28000}},{"1":51786,"2":280,"3":{"2":28000}},{"1":51015,"2":260,"3":{"2":26000}},{"1":51491,"2":280,"3":{"2":28000}},{"1":50175,"2":270,"3":{"2":27000}},{"1":51366,"2":280,"3":{"2":28000}},{"1":51642,"2":280,"3":{"2":28000}},{"1":51403,"2":250,"3":{"2":25000}},{"1":51128,"2":270,"3":{"2":27000}},{"1":50273,"2":270,"3":{"2":27000}},{"1":51339,"2":270,"3":{"2":27000}},{"1":51637,"2":250,"3":{"2":25000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":50842,"2":230,"3":{"2":46000}},{"1":50027,"2":230,"3":{"2":46000}},{"1":50443,"2":230,"3":{"2":46000}},{"1":50325,"2":230,"3":{"2":46000}},{"1":53218,"2":220,"3":{"2":44000}},{"1":50850,"2":230,"3":{"2":46000}},{"1":51121,"2":230,"3":{"2":46000}},{"1":52104,"2":210,"3":{"2":42000}},{"1":50715,"2":220,"3":{"2":44000}},{"1":51788,"2":230,"3":{"2":46000}},{"1":51713,"2":230,"3":{"2":46000}},{"1":51892,"2":240,"3":{"2":48000}},{"1":51915,"2":240,"3":{"2":48000}},{"1":51114,"2":230,"3":{"2":46000}},{"1":51820,"2":240,"3":{"2":48000}},{"1":51071,"2":230,"3":{"2":46000}},{"1":50117,"2":200,"3":{"2":40000}},{"1":50499,"2":230,"3":{"2":46000}},{"1":51218,"2":230,"3":{"2":46000}},{"1":50806,"2":230,"3":{"2":46000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":54941,"2":90,"3":{"2":90000}},{"1":53325,"2":90,"3":{"2":90000}},{"1":54802,"2":90,"3":{"2":90000}},{"1":54955,"2":90,"3":{"2":90000}},{"1":54850,"2":90,"3":{"2":90000}},{"1":52335,"2":80,"3":{"2":80000}},{"1":53924,"2":90,"3":{"2":90000}},{"1":53974,"2":90,"3":{"2":90000}},{"1":54312,"2":90,"3":{"2":90000}},{"1":55859,"2":90,"3":{"2":90000}},{"1":53254,"2":90,"3":{"2":90000}},{"1":52080,"2":90,"3":{"2":90000}},{"1":50157,"2":80,"3":{"2":80000}},{"1":52925,"2":90,"3":{"2":90000}},{"1":52232,"2":80,"3":{"2":80000}},{"1":55192,"2":90,"3":{"2":90000}},{"1":53072,"2":80,"3":{"2":80000}},{"1":53953,"2":90,"3":{"2":90000}},{"1":54129,"2":80,"3":{"2":80000}},{"1":55775,"2":90,"3":{"2":90000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":63039,"2":50,"3":{"2":100000}},{"1":61132,"2":50,"3":{"2":100000}},{"1":54597,"2":40,"3":{"2":80000}},{"1":59548,"2":50,"3":{"2":100000}},{"1":60319,"2":50,"3":{"2":100000}},{"1":55381,"2":40,"3":{"2":80000}},{"1":61396,"2":50,"3":{"2":100000}},{"1":61113,"2":50,"3":{"2":100000}},{"1":61024,"2":50,"3":{"2":100000}},{"1":54389,"2":40,"3":{"2":80000}},{"1":59328,"2":50,"3":{"2":100000}},{"1":59432,"2":50,"3":{"2":100000}},{"1":61283,"2":50,"3":{"2":100000}},{"1":59078,"2":50,"3":{"2":100000}},{"1":61691,"2":50,"3":{"2":100000}},{"1":59932,"2":50,"3":{"2":100000}},{"1":61093,"2":50,"3":{"2":100000}},{"1":59638,"2":50,"3":{"2":100000}},{"1":53964,"2":40,"3":{"2":80000}},{"1":60487,"2":50,"3":{"2":100000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":51384,"2":240,"3":{"2":24000}},{"1":51856,"2":250,"3":{"2":25000}},{"1":50003,"2":240,"3":{"2":24000}},{"1":50330,"2":250,"3":{"2":25000}},{"1":51583,"2":250,"3":{"2":25000}},{"1":51172,"2":250,"3":{"2":25000}},{"1":51090,"2":250,"3":{"2":25000}},{"1":51539,"2":210,"3":{"2":21000}},{"1":51119,"2":220,"3":{"2":22000}},{"1":50476,"2":250,"3":{"2":25000}},{"1":51072,"2":220,"3":{"2":22000}},{"1":50960,"2":240,"3":{"2":24000}},{"1":52055,"2":220,"3":{"2":22000}},{"1":51333,"2":240,"3":{"2":24000}},{"1":50399,"2":210,"3":{"2":21000}},{"1":50896,"2":240,"3":{"2":24000}},{"1":50234,"2":210,"3":{"2":21000}},{"1":51776,"2":230,"3":{"2":23000}},{"1":51768,"2":250,"3":{"2":25000}},{"1":51069,"2":240,"3":{"2":24000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":51728,"2":240,"3":{"2":48000}},{"1":50448,"2":230,"3":{"2":46000}},{"1":51146,"2":240,"3":{"2":48000}},{"1":50366,"2":240,"3":{"2":48000}},{"1":51987,"2":240,"3":{"2":48000}},{"1":51922,"2":240,"3":{"2":48000}},{"1":51838,"2":240,"3":{"2":48000}},{"1":52132,"2":240,"3":{"2":48000}},{"1":51434,"2":240,"3":{"2":48000}},{"1":50539,"2":220,"3":{"2":44000}},{"1":51198,"2":230,"3":{"2":46000}},{"1":51219,"2":230,"3":{"2":46000}},{"1":51807,"2":240,"3":{"2":48000}},{"1":50927,"2":230,"3":{"2":46000}},{"1":50817,"2":230,"3":{"2":46000}},{"1":50821,"2":230,"3":{"2":46000}},{"1":51854,"2":240,"3":{"2":48000}},{"1":51207,"2":230,"3":{"2":46000}},{"1":51159,"2":230,"3":{"2":46000}},{"1":50585,"2":230,"3":{"2":46000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":52007,"2":170,"3":{"2":170000}},{"1":51368,"2":170,"3":{"2":170000}},{"1":51523,"2":170,"3":{"2":170000}},{"1":53654,"2":160,"3":{"2":160000}},{"1":50966,"2":170,"3":{"2":170000}},{"1":50506,"2":170,"3":{"2":170000}},{"1":51704,"2":170,"3":{"2":170000}},{"1":51345,"2":170,"3":{"2":170000}},{"1":50152,"2":150,"3":{"2":150000}},{"1":54050,"2":160,"3":{"2":160000}},{"1":51722,"2":160,"3":{"2":160000}},{"1":50599,"2":170,"3":{"2":170000}},{"1":50827,"2":170,"3":{"2":170000}},{"1":51339,"2":170,"3":{"2":170000}},{"1":53620,"2":160,"3":{"2":160000}},{"1":52652,"2":170,"3":{"2":170000}},{"1":52331,"2":170,"3":{"2":170000}},{"1":51581,"2":170,"3":{"2":170000}},{"1":52239,"2":170,"3":{"2":170000}},{"1":51526,"2":170,"3":{"2":170000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":54513,"2":90,"3":{"2":180000}},{"1":54481,"2":90,"3":{"2":180000}},{"1":53717,"2":80,"3":{"2":160000}},{"1":53955,"2":90,"3":{"2":180000}},{"1":54318,"2":90,"3":{"2":180000}},{"1":54963,"2":90,"3":{"2":180000}},{"1":53649,"2":90,"3":{"2":180000}},{"1":53075,"2":90,"3":{"2":180000}},{"1":52564,"2":80,"3":{"2":160000}},{"1":54141,"2":80,"3":{"2":160000}},{"1":53745,"2":80,"3":{"2":160000}},{"1":54711,"2":90,"3":{"2":180000}},{"1":54941,"2":90,"3":{"2":180000}},{"1":56444,"2":90,"3":{"2":180000}},{"1":55285,"2":90,"3":{"2":180000}},{"1":54717,"2":90,"3":{"2":180000}},{"1":55754,"2":90,"3":{"2":180000}},{"1":55642,"2":90,"3":{"2":180000}},{"1":54080,"2":90,"3":{"2":180000}},{"1":54080,"2":80,"3":{"2":160000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":51769,"2":250,"3":{"4":25000}},{"1":51330,"2":270,"3":{"4":27000}},{"1":50248,"2":240,"3":{"4":24000}},{"1":50849,"2":240,"3":{"4":24000}},{"1":51268,"2":270,"3":{"4":27000}},{"1":51482,"2":270,"3":{"4":27000}},{"1":50580,"2":270,"3":{"4":27000}},{"1":50495,"2":270,"3":{"4":27000}},{"1":51637,"2":270,"3":{"4":27000}},{"1":50588,"2":260,"3":{"4":26000}},{"1":50562,"2":270,"3":{"4":27000}},{"1":51099,"2":280,"3":{"4":28000}},{"1":50634,"2":280,"3":{"4":28000}},{"1":51273,"2":280,"3":{"4":28000}},{"1":51196,"2":250,"3":{"4":25000}},{"1":50835,"2":280,"3":{"4":28000}},{"1":50642,"2":280,"3":{"4":28000}},{"1":51036,"2":280,"3":{"4":28000}},{"1":50208,"2":270,"3":{"4":27000}},{"1":51210,"2":280,"3":{"4":28000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50236,"2":210,"3":{"4":42000}},{"1":51140,"2":220,"3":{"4":44000}},{"1":52102,"2":230,"3":{"4":46000}},{"1":50058,"2":200,"3":{"4":40000}},{"1":51346,"2":230,"3":{"4":46000}},{"1":50046,"2":180,"3":{"4":36000}},{"1":50663,"2":200,"3":{"4":40000}},{"1":52059,"2":230,"3":{"4":46000}},{"1":50892,"2":200,"3":{"4":40000}},{"1":51498,"2":220,"3":{"4":44000}},{"1":51861,"2":210,"3":{"4":42000}},{"1":52071,"2":240,"3":{"4":48000}},{"1":50582,"2":210,"3":{"4":42000}},{"1":51643,"2":240,"3":{"4":48000}},{"1":50050,"2":230,"3":{"4":46000}},{"1":51042,"2":230,"3":{"4":46000}},{"1":51264,"2":230,"3":{"4":46000}},{"1":51448,"2":190,"3":{"4":38000}},{"1":51341,"2":230,"3":{"4":46000}},{"1":50395,"2":230,"3":{"4":46000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":54855,"2":90,"3":{"4":90000}},{"1":50893,"2":80,"3":{"4":80000}},{"1":56142,"2":90,"3":{"4":90000}},{"1":55393,"2":90,"3":{"4":90000}},{"1":50231,"2":80,"3":{"4":80000}},{"1":54996,"2":90,"3":{"4":90000}},{"1":50781,"2":80,"3":{"4":80000}},{"1":50290,"2":80,"3":{"4":80000}},{"1":50870,"2":80,"3":{"4":80000}},{"1":55764,"2":90,"3":{"4":90000}},{"1":55378,"2":90,"3":{"4":90000}},{"1":55594,"2":90,"3":{"4":90000}},{"1":50037,"2":80,"3":{"4":80000}},{"1":54744,"2":90,"3":{"4":90000}},{"1":50378,"2":80,"3":{"4":80000}},{"1":55229,"2":90,"3":{"4":90000}},{"1":52020,"2":80,"3":{"4":80000}},{"1":55520,"2":90,"3":{"4":90000}},{"1":55906,"2":80,"3":{"4":80000}},{"1":53632,"2":80,"3":{"4":80000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":60828,"2":50,"3":{"4":100000}},{"1":55116,"2":40,"3":{"4":80000}},{"1":50179,"2":40,"3":{"4":80000}},{"1":55123,"2":40,"3":{"4":80000}},{"1":50017,"2":40,"3":{"4":80000}},{"1":66776,"2":50,"3":{"4":100000}},{"1":50746,"2":40,"3":{"4":80000}},{"1":61029,"2":50,"3":{"4":100000}},{"1":50395,"2":40,"3":{"4":80000}},{"1":53494,"2":40,"3":{"4":80000}},{"1":50581,"2":40,"3":{"4":80000}},{"1":50065,"2":40,"3":{"4":80000}},{"1":59979,"2":50,"3":{"4":100000}},{"1":56341,"2":40,"3":{"4":80000}},{"1":61344,"2":50,"3":{"4":100000}},{"1":54830,"2":40,"3":{"4":80000}},{"1":60853,"2":50,"3":{"4":100000}},{"1":61794,"2":50,"3":{"4":100000}},{"1":52256,"2":40,"3":{"4":80000}},{"1":61511,"2":50,"3":{"4":100000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":51578,"2":50,"3":{"4":50000}},{"1":51510,"2":50,"3":{"4":50000}},{"1":51029,"2":50,"3":{"4":50000}},{"1":53618,"2":50,"3":{"4":50000}},{"1":61193,"2":60,"3":{"4":60000}},{"1":60344,"2":60,"3":{"4":60000}},{"1":55758,"2":50,"3":{"4":50000}},{"1":59475,"2":60,"3":{"4":60000}},{"1":50226,"2":50,"3":{"4":50000}},{"1":59571,"2":60,"3":{"4":60000}},{"1":51778,"2":50,"3":{"4":50000}},{"1":51717,"2":50,"3":{"4":50000}},{"1":51282,"2":50,"3":{"4":50000}},{"1":50065,"2":50,"3":{"4":50000}},{"1":51017,"2":50,"3":{"4":50000}},{"1":59630,"2":50,"3":{"4":50000}},{"1":50610,"2":50,"3":{"4":50000}},{"1":53641,"2":50,"3":{"4":50000}},{"1":51414,"2":50,"3":{"4":50000}},{"1":55988,"2":50,"3":{"4":50000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":51490,"2":240,"3":{"4":24000}},{"1":51602,"2":240,"3":{"4":24000}},{"1":51953,"2":240,"3":{"4":24000}},{"1":50944,"2":240,"3":{"4":24000}},{"1":50027,"2":210,"3":{"4":21000}},{"1":50675,"2":240,"3":{"4":24000}},{"1":50085,"2":240,"3":{"4":24000}},{"1":51549,"2":240,"3":{"4":24000}},{"1":51786,"2":240,"3":{"4":24000}},{"1":50840,"2":240,"3":{"4":24000}},{"1":50049,"2":240,"3":{"4":24000}},{"1":51259,"2":250,"3":{"4":25000}},{"1":53281,"2":240,"3":{"4":24000}},{"1":51927,"2":250,"3":{"4":25000}},{"1":51808,"2":250,"3":{"4":25000}},{"1":51176,"2":250,"3":{"4":25000}},{"1":50325,"2":240,"3":{"4":24000}},{"1":51365,"2":220,"3":{"4":22000}},{"1":50667,"2":220,"3":{"4":22000}},{"1":51816,"2":250,"3":{"4":25000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50648,"2":230,"3":{"4":46000}},{"1":51531,"2":230,"3":{"4":46000}},{"1":51750,"2":240,"3":{"4":48000}},{"1":51052,"2":230,"3":{"4":46000}},{"1":51657,"2":210,"3":{"4":42000}},{"1":50154,"2":230,"3":{"4":46000}},{"1":50831,"2":230,"3":{"4":46000}},{"1":50652,"2":230,"3":{"4":46000}},{"1":51509,"2":220,"3":{"4":44000}},{"1":51927,"2":240,"3":{"4":48000}},{"1":51214,"2":230,"3":{"4":46000}},{"1":50504,"2":230,"3":{"4":46000}},{"1":51117,"2":210,"3":{"4":42000}},{"1":51122,"2":230,"3":{"4":46000}},{"1":51953,"2":240,"3":{"4":48000}},{"1":51330,"2":240,"3":{"4":48000}},{"1":51034,"2":230,"3":{"4":46000}},{"1":50985,"2":230,"3":{"4":46000}},{"1":50735,"2":230,"3":{"4":46000}},{"1":50396,"2":210,"3":{"4":42000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":51201,"2":150,"3":{"4":150000}},{"1":51256,"2":150,"3":{"4":150000}},{"1":51077,"2":150,"3":{"4":150000}},{"1":52218,"2":150,"3":{"4":150000}},{"1":51999,"2":150,"3":{"4":150000}},{"1":52379,"2":150,"3":{"4":150000}},{"1":53043,"2":150,"3":{"4":150000}},{"1":51357,"2":150,"3":{"4":150000}},{"1":52330,"2":150,"3":{"4":150000}},{"1":52066,"2":150,"3":{"4":150000}},{"1":51841,"2":140,"3":{"4":140000}},{"1":51911,"2":150,"3":{"4":150000}},{"1":50689,"2":150,"3":{"4":150000}},{"1":50057,"2":130,"3":{"4":130000}},{"1":50227,"2":130,"3":{"4":130000}},{"1":50963,"2":150,"3":{"4":150000}},{"1":51860,"2":150,"3":{"4":150000}},{"1":51786,"2":150,"3":{"4":150000}},{"1":51226,"2":150,"3":{"4":150000}},{"1":50750,"2":130,"3":{"4":130000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":55734,"2":80,"3":{"4":160000}},{"1":55739,"2":80,"3":{"4":160000}},{"1":55012,"2":80,"3":{"4":160000}},{"1":55597,"2":80,"3":{"4":160000}},{"1":54974,"2":80,"3":{"4":160000}},{"1":55072,"2":80,"3":{"4":160000}},{"1":53665,"2":70,"3":{"4":140000}},{"1":54865,"2":80,"3":{"4":160000}},{"1":54777,"2":80,"3":{"4":160000}},{"1":54022,"2":80,"3":{"4":160000}},{"1":53951,"2":70,"3":{"4":140000}},{"1":54625,"2":80,"3":{"4":160000}},{"1":53976,"2":80,"3":{"4":160000}},{"1":57674,"2":80,"3":{"4":160000}},{"1":54483,"2":80,"3":{"4":160000}},{"1":53120,"2":80,"3":{"4":160000}},{"1":59440,"2":80,"3":{"4":160000}},{"1":53898,"2":80,"3":{"4":160000}},{"1":55373,"2":80,"3":{"4":160000}},{"1":55152,"2":80,"3":{"4":160000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":51318,"2":70,"3":{"4":70000}},{"1":51820,"2":70,"3":{"4":70000}},{"1":56710,"2":80,"3":{"4":80000}},{"1":51761,"2":70,"3":{"4":70000}},{"1":51876,"2":70,"3":{"4":70000}},{"1":55504,"2":70,"3":{"4":70000}},{"1":51020,"2":70,"3":{"4":70000}},{"1":51250,"2":70,"3":{"4":70000}},{"1":53879,"2":70,"3":{"4":70000}},{"1":52178,"2":70,"3":{"4":70000}},{"1":52546,"2":70,"3":{"4":70000}},{"1":57246,"2":70,"3":{"4":70000}},{"1":52425,"2":70,"3":{"4":70000}},{"1":51520,"2":70,"3":{"4":70000}},{"1":54980,"2":70,"3":{"4":70000}},{"1":51130,"2":70,"3":{"4":70000}},{"1":51808,"2":70,"3":{"4":70000}},{"1":57633,"2":80,"3":{"4":80000}},{"1":51711,"2":70,"3":{"4":70000}},{"1":56301,"2":70,"3":{"4":70000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/0.4.2/props_chrome.pb.json b/benchmark/data/skybrian-macbookpro/0.4.2/props_chrome.pb.json
deleted file mode 100644
index 2a8e026..0000000
--- a/benchmark/data/skybrian-macbookpro/0.4.2/props_chrome.pb.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/props.html",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "10": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+5"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf","2":"hosted","3":"0.4.2"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+9"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50000,"2":97740,"3":{"4":9774000}},{"1":50000,"2":134610,"3":{"4":13461000}},{"1":50000,"2":132130,"3":{"4":13213000}},{"1":50000,"2":148300,"3":{"4":14830000}},{"1":50000,"2":149600,"3":{"4":14960000}},{"1":50000,"2":147250,"3":{"4":14725000}},{"1":50000,"2":150550,"3":{"4":15055000}},{"1":50000,"2":148720,"3":{"4":14872000}},{"1":50000,"2":142070,"3":{"4":14207000}},{"1":50000,"2":149420,"3":{"4":14942000}},{"1":50005,"2":144970,"3":{"4":14497000}},{"1":50000,"2":149030,"3":{"4":14903000}},{"1":50000,"2":149260,"3":{"4":14926000}},{"1":50000,"2":148420,"3":{"4":14842000}},{"1":50000,"2":137510,"3":{"4":13751000}},{"1":50000,"2":147950,"3":{"4":14795000}},{"1":50000,"2":146830,"3":{"4":14683000}},{"1":50000,"2":133950,"3":{"4":13395000}},{"1":50000,"2":146380,"3":{"4":14638000}},{"1":50000,"2":149990,"3":{"4":14999000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50000,"2":151560,"3":{"4":15156000}},{"1":50000,"2":147850,"3":{"4":14785000}},{"1":50000,"2":153790,"3":{"4":15379000}},{"1":50000,"2":148250,"3":{"4":14825000}},{"1":50005,"2":145700,"3":{"4":14570000}},{"1":50000,"2":151050,"3":{"4":15105000}},{"1":50000,"2":148530,"3":{"4":14853000}},{"1":50000,"2":149720,"3":{"4":14972000}},{"1":50000,"2":147480,"3":{"4":14748000}},{"1":50000,"2":147020,"3":{"4":14702000}},{"1":50000,"2":151610,"3":{"4":15161000}},{"1":50000,"2":150920,"3":{"4":15092000}},{"1":50000,"2":149510,"3":{"4":14951000}},{"1":50000,"2":149980,"3":{"4":14998000}},{"1":50000,"2":148540,"3":{"4":14854000}},{"1":50000,"2":148790,"3":{"4":14879000}},{"1":50000,"2":148000,"3":{"4":14800000}},{"1":50000,"2":148090,"3":{"4":14809000}},{"1":50000,"2":148180,"3":{"4":14818000}},{"1":50000,"2":141420,"3":{"4":14142000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50065,"2":7730,"3":{"5":773000}},{"1":50050,"2":7920,"3":{"5":792000}},{"1":50050,"2":8980,"3":{"5":898000}},{"1":50000,"2":8660,"3":{"5":866000}},{"1":50000,"2":8700,"3":{"5":870000}},{"1":50005,"2":8620,"3":{"5":862000}},{"1":50030,"2":8600,"3":{"5":860000}},{"1":50010,"2":8790,"3":{"5":879000}},{"1":50045,"2":8520,"3":{"5":852000}},{"1":50030,"2":8800,"3":{"5":880000}},{"1":50025,"2":8650,"3":{"5":865000}},{"1":50040,"2":8490,"3":{"5":849000}},{"1":50015,"2":8860,"3":{"5":886000}},{"1":50030,"2":8650,"3":{"5":865000}},{"1":50020,"2":8590,"3":{"5":859000}},{"1":50000,"2":8670,"3":{"5":867000}},{"1":50035,"2":7750,"3":{"5":775000}},{"1":50005,"2":8590,"3":{"5":859000}},{"1":50025,"2":8540,"3":{"5":854000}},{"1":50020,"2":8550,"3":{"5":855000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50080,"2":7790,"3":{"5":779000}},{"1":50050,"2":8590,"3":{"5":859000}},{"1":50025,"2":8600,"3":{"5":860000}},{"1":50040,"2":8670,"3":{"5":867000}},{"1":50000,"2":7940,"3":{"5":794000}},{"1":50015,"2":8600,"3":{"5":860000}},{"1":50015,"2":8670,"3":{"5":867000}},{"1":50000,"2":8540,"3":{"5":854000}},{"1":50000,"2":8520,"3":{"5":852000}},{"1":50025,"2":8610,"3":{"5":861000}},{"1":50000,"2":8640,"3":{"5":864000}},{"1":50010,"2":8690,"3":{"5":869000}},{"1":50035,"2":8590,"3":{"5":859000}},{"1":50040,"2":8630,"3":{"5":863000}},{"1":50025,"2":8680,"3":{"5":868000}},{"1":50055,"2":8620,"3":{"5":862000}},{"1":50020,"2":8700,"3":{"5":870000}},{"1":50025,"2":8750,"3":{"5":875000}},{"1":50010,"2":8570,"3":{"5":857000}},{"1":50000,"2":8730,"3":{"5":873000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50020,"2":9700,"3":{"4":970000}},{"1":50025,"2":9520,"3":{"4":952000}},{"1":50005,"2":9220,"3":{"4":922000}},{"1":50015,"2":10580,"3":{"4":1058000}},{"1":50010,"2":10370,"3":{"4":1037000}},{"1":50015,"2":10160,"3":{"4":1016000}},{"1":50015,"2":10730,"3":{"4":1073000}},{"1":50010,"2":10450,"3":{"4":1045000}},{"1":50030,"2":9470,"3":{"4":947000}},{"1":50010,"2":9560,"3":{"4":956000}},{"1":50010,"2":10450,"3":{"4":1045000}},{"1":50025,"2":10500,"3":{"4":1050000}},{"1":50025,"2":10660,"3":{"4":1066000}},{"1":50020,"2":10600,"3":{"4":1060000}},{"1":50020,"2":10620,"3":{"4":1062000}},{"1":50015,"2":10880,"3":{"4":1088000}},{"1":50015,"2":10800,"3":{"4":1080000}},{"1":50010,"2":10550,"3":{"4":1055000}},{"1":50015,"2":10780,"3":{"4":1078000}},{"1":50025,"2":10680,"3":{"4":1068000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50020,"2":8610,"3":{"4":861000}},{"1":50055,"2":8030,"3":{"4":803000}},{"1":50050,"2":8330,"3":{"4":833000}},{"1":50005,"2":8980,"3":{"4":898000}},{"1":50050,"2":8680,"3":{"4":868000}},{"1":50080,"2":9040,"3":{"4":904000}},{"1":50040,"2":9300,"3":{"4":930000}},{"1":50000,"2":8070,"3":{"4":807000}},{"1":50010,"2":9340,"3":{"4":934000}},{"1":50010,"2":8800,"3":{"4":880000}},{"1":50015,"2":8930,"3":{"4":893000}},{"1":50010,"2":9070,"3":{"4":907000}},{"1":50015,"2":8670,"3":{"4":867000}},{"1":50025,"2":9020,"3":{"4":902000}},{"1":50020,"2":9080,"3":{"4":908000}},{"1":50015,"2":8970,"3":{"4":897000}},{"1":50025,"2":8700,"3":{"4":870000}},{"1":50035,"2":9130,"3":{"4":913000}},{"1":50035,"2":8510,"3":{"4":851000}},{"1":50040,"2":8760,"3":{"4":876000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/0.4.2/props_vm.pb.json b/benchmark/data/skybrian-macbookpro/0.4.2/props_vm.pb.json
deleted file mode 100644
index 0bd3ffb..0000000
--- a/benchmark/data/skybrian-macbookpro/0.4.2/props_vm.pb.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "props_vm.dart",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "2": 2,
-      "3": "1.12.0 (Mon Aug 31 04:17:53 2015) on \"macos_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+5"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf","2":"hosted","3":"0.4.2"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+9"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50000,"2":371300,"3":{"4":37130000}},{"1":50001,"2":403670,"3":{"4":40367000}},{"1":50000,"2":490170,"3":{"4":49017000}},{"1":50002,"2":486470,"3":{"4":48647000}},{"1":50000,"2":464930,"3":{"4":46493000}},{"1":50000,"2":489650,"3":{"4":48965000}},{"1":50000,"2":488010,"3":{"4":48801000}},{"1":50000,"2":408830,"3":{"4":40883000}},{"1":50000,"2":482770,"3":{"4":48277000}},{"1":50000,"2":484200,"3":{"4":48420000}},{"1":50000,"2":433480,"3":{"4":43348000}},{"1":50000,"2":435490,"3":{"4":43549000}},{"1":50000,"2":484370,"3":{"4":48437000}},{"1":50000,"2":474640,"3":{"4":47464000}},{"1":50000,"2":477680,"3":{"4":47768000}},{"1":50000,"2":484800,"3":{"4":48480000}},{"1":50000,"2":477760,"3":{"4":47776000}},{"1":50000,"2":480860,"3":{"4":48086000}},{"1":50000,"2":486050,"3":{"4":48605000}},{"1":50000,"2":434680,"3":{"4":43468000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50000,"2":477160,"3":{"4":47716000}},{"1":50000,"2":441530,"3":{"4":44153000}},{"1":50000,"2":437330,"3":{"4":43733000}},{"1":50000,"2":490950,"3":{"4":49095000}},{"1":50000,"2":487810,"3":{"4":48781000}},{"1":50000,"2":482510,"3":{"4":48251000}},{"1":50000,"2":460280,"3":{"4":46028000}},{"1":50000,"2":481130,"3":{"4":48113000}},{"1":50000,"2":490690,"3":{"4":49069000}},{"1":50000,"2":493300,"3":{"4":49330000}},{"1":50000,"2":475340,"3":{"4":47534000}},{"1":50000,"2":427860,"3":{"4":42786000}},{"1":50000,"2":477700,"3":{"4":47770000}},{"1":50000,"2":486390,"3":{"4":48639000}},{"1":50000,"2":488120,"3":{"4":48812000}},{"1":50000,"2":485940,"3":{"4":48594000}},{"1":50000,"2":485400,"3":{"4":48540000}},{"1":50000,"2":474220,"3":{"4":47422000}},{"1":50000,"2":479850,"3":{"4":47985000}},{"1":50000,"2":480500,"3":{"4":48050000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50011,"2":7100,"3":{"5":710000}},{"1":50017,"2":6480,"3":{"5":648000}},{"1":50063,"2":7200,"3":{"5":720000}},{"1":50068,"2":7260,"3":{"5":726000}},{"1":50055,"2":6590,"3":{"5":659000}},{"1":50053,"2":7130,"3":{"5":713000}},{"1":50047,"2":7180,"3":{"5":718000}},{"1":50027,"2":7120,"3":{"5":712000}},{"1":50012,"2":7130,"3":{"5":713000}},{"1":50024,"2":7110,"3":{"5":711000}},{"1":50023,"2":6900,"3":{"5":690000}},{"1":50003,"2":6860,"3":{"5":686000}},{"1":50019,"2":6020,"3":{"5":602000}},{"1":50058,"2":6730,"3":{"5":673000}},{"1":50027,"2":6420,"3":{"5":642000}},{"1":50054,"2":6880,"3":{"5":688000}},{"1":50000,"2":6830,"3":{"5":683000}},{"1":50051,"2":6640,"3":{"5":664000}},{"1":50054,"2":6650,"3":{"5":665000}},{"1":50086,"2":6640,"3":{"5":664000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50040,"2":7140,"3":{"5":714000}},{"1":50013,"2":6300,"3":{"5":630000}},{"1":50046,"2":6950,"3":{"5":695000}},{"1":50002,"2":7050,"3":{"5":705000}},{"1":50010,"2":7010,"3":{"5":701000}},{"1":50210,"2":7050,"3":{"5":705000}},{"1":50098,"2":7150,"3":{"5":715000}},{"1":50029,"2":7140,"3":{"5":714000}},{"1":50005,"2":7050,"3":{"5":705000}},{"1":50005,"2":7120,"3":{"5":712000}},{"1":50070,"2":6830,"3":{"5":683000}},{"1":50078,"2":6800,"3":{"5":680000}},{"1":50008,"2":6700,"3":{"5":670000}},{"1":50059,"2":6780,"3":{"5":678000}},{"1":50020,"2":6860,"3":{"5":686000}},{"1":50053,"2":6650,"3":{"5":665000}},{"1":50053,"2":6910,"3":{"5":691000}},{"1":50049,"2":6820,"3":{"5":682000}},{"1":50026,"2":6850,"3":{"5":685000}},{"1":50063,"2":6790,"3":{"5":679000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50009,"2":30000,"3":{"4":3000000}},{"1":50007,"2":29680,"3":{"4":2968000}},{"1":50003,"2":27430,"3":{"4":2743000}},{"1":50000,"2":31200,"3":{"4":3120000}},{"1":50000,"2":30530,"3":{"4":3053000}},{"1":50011,"2":31220,"3":{"4":3122000}},{"1":50004,"2":27650,"3":{"4":2765000}},{"1":50006,"2":30840,"3":{"4":3084000}},{"1":50006,"2":27600,"3":{"4":2760000}},{"1":50015,"2":30900,"3":{"4":3090000}},{"1":50004,"2":30850,"3":{"4":3085000}},{"1":50009,"2":31060,"3":{"4":3106000}},{"1":50000,"2":30660,"3":{"4":3066000}},{"1":50018,"2":31000,"3":{"4":3100000}},{"1":50015,"2":30470,"3":{"4":3047000}},{"1":50001,"2":30830,"3":{"4":3083000}},{"1":50011,"2":27900,"3":{"4":2790000}},{"1":50001,"2":31470,"3":{"4":3147000}},{"1":50013,"2":30610,"3":{"4":3061000}},{"1":50000,"2":25980,"3":{"4":2598000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50035,"2":11690,"3":{"4":1169000}},{"1":50042,"2":11780,"3":{"4":1178000}},{"1":50018,"2":11690,"3":{"4":1169000}},{"1":50022,"2":11690,"3":{"4":1169000}},{"1":50015,"2":10850,"3":{"4":1085000}},{"1":50003,"2":12040,"3":{"4":1204000}},{"1":50038,"2":11670,"3":{"4":1167000}},{"1":50007,"2":11650,"3":{"4":1165000}},{"1":50012,"2":11550,"3":{"4":1155000}},{"1":50007,"2":11730,"3":{"4":1173000}},{"1":50000,"2":11830,"3":{"4":1183000}},{"1":50034,"2":11700,"3":{"4":1170000}},{"1":50061,"2":10540,"3":{"4":1054000}},{"1":50023,"2":11860,"3":{"4":1186000}},{"1":50003,"2":11380,"3":{"4":1138000}},{"1":50035,"2":11260,"3":{"4":1126000}},{"1":50025,"2":11450,"3":{"4":1145000}},{"1":50007,"2":11920,"3":{"4":1192000}},{"1":50019,"2":11570,"3":{"4":1157000}},{"1":50003,"2":10330,"3":{"4":1033000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/0.5.0/json_chrome.pb.json b/benchmark/data/skybrian-macbookpro/0.5.0/json_chrome.pb.json
deleted file mode 100644
index 41844ff..0000000
--- a/benchmark/data/skybrian-macbookpro/0.5.0/json_chrome.pb.json
+++ /dev/null
@@ -1,85 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/readjson.html",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "10": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.5.0",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.27.2"},
-        {"1":"args","2":"hosted","3":"0.13.4"},
-        {"1":"async","2":"hosted","3":"1.9.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"boolean_selector","2":"hosted","3":"1.0.1"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.5.1"},
-        {"1":"convert","2":"hosted","3":"1.0.1"},
-        {"1":"crypto","2":"hosted","3":"0.9.2+1"},
-        {"1":"csslib","2":"hosted","3":"0.12.2"},
-        {"1":"fixnum","2":"hosted","3":"0.10.2"},
-        {"1":"glob","2":"hosted","3":"1.1.2"},
-        {"1":"html","2":"hosted","3":"0.12.2+1"},
-        {"1":"http_multi_server","2":"hosted","3":"2.0.1"},
-        {"1":"http_parser","2":"hosted","3":"2.2.1"},
-        {"1":"logging","2":"hosted","3":"0.11.2"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+2"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.9"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.2.2"},
-        {"1":"protobuf","2":"hosted","3":"0.5.0+1"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.4"},
-        {"1":"shelf","2":"hosted","3":"0.6.5"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+3"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.2.0"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1+1"},
-        {"1":"source_span","2":"hosted","3":"1.2.2"},
-        {"1":"stack_trace","2":"hosted","3":"1.6.4"},
-        {"1":"stream_channel","2":"hosted","3":"1.3.1"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4+1"},
-        {"1":"test","2":"hosted","3":"0.12.13"},
-        {"1":"typed_data","2":"hosted","3":"1.1.2"},
-        {"1":"utf","2":"hosted","3":"0.9.0+3"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"},
-        {"1":"web_socket_channel","2":"hosted","3":"1.0.2"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":52670,"2":110,"3":{"1":11000}},{"1":51740,"2":110,"3":{"1":11000}},{"1":52390,"2":110,"3":{"1":11000}},{"1":53165,"2":100,"3":{"1":10000}},{"1":53610,"2":80,"3":{"1":8000}},{"1":51920,"2":120,"3":{"1":12000}},{"1":50305,"2":110,"3":{"1":11000}},{"1":51490,"2":110,"3":{"1":11000}},{"1":50095,"2":110,"3":{"1":11000}},{"1":51420,"2":120,"3":{"1":12000}},{"1":51335,"2":120,"3":{"1":12000}},{"1":56165,"2":110,"3":{"1":11000}},{"1":52490,"2":110,"3":{"1":11000}},{"1":51070,"2":110,"3":{"1":11000}},{"1":52770,"2":110,"3":{"1":11000}},{"1":53280,"2":120,"3":{"1":12000}},{"1":50955,"2":120,"3":{"1":12000}},{"1":52715,"2":120,"3":{"1":12000}},{"1":52680,"2":120,"3":{"1":12000}},{"1":51270,"2":120,"3":{"1":12000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":53345,"2":90,"3":{"1":18000}},{"1":57245,"2":100,"3":{"1":20000}},{"1":54215,"2":90,"3":{"1":18000}},{"1":58300,"2":100,"3":{"1":20000}},{"1":52885,"2":100,"3":{"1":20000}},{"1":52920,"2":100,"3":{"1":20000}},{"1":54845,"2":90,"3":{"1":18000}},{"1":54425,"2":100,"3":{"1":20000}},{"1":53215,"2":100,"3":{"1":20000}},{"1":53140,"2":90,"3":{"1":18000}},{"1":55360,"2":100,"3":{"1":20000}},{"1":53040,"2":90,"3":{"1":18000}},{"1":50560,"2":80,"3":{"1":16000}},{"1":52440,"2":100,"3":{"1":20000}},{"1":52680,"2":90,"3":{"1":18000}},{"1":54625,"2":100,"3":{"1":20000}},{"1":50710,"2":80,"3":{"1":16000}},{"1":53695,"2":90,"3":{"1":18000}},{"1":50970,"2":90,"3":{"1":18000}},{"1":54035,"2":100,"3":{"1":20000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":54240,"2":40,"3":{"1":40000}},{"1":50240,"2":40,"3":{"1":40000}},{"1":61675,"2":50,"3":{"1":50000}},{"1":55995,"2":40,"3":{"1":40000}},{"1":61545,"2":50,"3":{"1":50000}},{"1":51450,"2":40,"3":{"1":40000}},{"1":53615,"2":40,"3":{"1":40000}},{"1":50925,"2":40,"3":{"1":40000}},{"1":50195,"2":40,"3":{"1":40000}},{"1":52195,"2":40,"3":{"1":40000}},{"1":66675,"2":50,"3":{"1":50000}},{"1":61105,"2":50,"3":{"1":50000}},{"1":53395,"2":40,"3":{"1":40000}},{"1":60495,"2":50,"3":{"1":50000}},{"1":60225,"2":50,"3":{"1":50000}},{"1":61050,"2":50,"3":{"1":50000}},{"1":62725,"2":50,"3":{"1":50000}},{"1":54035,"2":40,"3":{"1":40000}},{"1":55225,"2":40,"3":{"1":40000}},{"1":60840,"2":40,"3":{"1":40000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":57580,"2":20,"3":{"1":40000}},{"1":77375,"2":30,"3":{"1":60000}},{"1":75070,"2":30,"3":{"1":60000}},{"1":75060,"2":30,"3":{"1":60000}},{"1":53130,"2":20,"3":{"1":40000}},{"1":72830,"2":30,"3":{"1":60000}},{"1":52905,"2":20,"3":{"1":40000}},{"1":71795,"2":30,"3":{"1":60000}},{"1":53580,"2":20,"3":{"1":40000}},{"1":53365,"2":20,"3":{"1":40000}},{"1":71825,"2":30,"3":{"1":60000}},{"1":50700,"2":20,"3":{"1":40000}},{"1":60315,"2":20,"3":{"1":40000}},{"1":73600,"2":30,"3":{"1":60000}},{"1":57705,"2":20,"3":{"1":40000}},{"1":54380,"2":20,"3":{"1":40000}},{"1":77940,"2":30,"3":{"1":60000}},{"1":51170,"2":20,"3":{"1":40000}},{"1":54435,"2":20,"3":{"1":40000}},{"1":73200,"2":30,"3":{"1":60000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":53505,"2":90,"3":{"1":9000}},{"1":51645,"2":100,"3":{"1":10000}},{"1":50245,"2":100,"3":{"1":10000}},{"1":51065,"2":90,"3":{"1":9000}},{"1":50010,"2":100,"3":{"1":10000}},{"1":50795,"2":100,"3":{"1":10000}},{"1":51375,"2":90,"3":{"1":9000}},{"1":51605,"2":90,"3":{"1":9000}},{"1":51550,"2":90,"3":{"1":9000}},{"1":51100,"2":90,"3":{"1":9000}},{"1":54310,"2":110,"3":{"1":11000}},{"1":51490,"2":100,"3":{"1":10000}},{"1":51485,"2":90,"3":{"1":9000}},{"1":54135,"2":90,"3":{"1":9000}},{"1":50385,"2":100,"3":{"1":10000}},{"1":51040,"2":100,"3":{"1":10000}},{"1":51610,"2":100,"3":{"1":10000}},{"1":50780,"2":90,"3":{"1":9000}},{"1":55255,"2":100,"3":{"1":10000}},{"1":51000,"2":90,"3":{"1":9000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":53830,"2":90,"3":{"1":18000}},{"1":51440,"2":100,"3":{"1":20000}},{"1":52225,"2":100,"3":{"1":20000}},{"1":54010,"2":100,"3":{"1":20000}},{"1":52685,"2":100,"3":{"1":20000}},{"1":53270,"2":80,"3":{"1":16000}},{"1":54675,"2":100,"3":{"1":20000}},{"1":57010,"2":90,"3":{"1":18000}},{"1":51340,"2":90,"3":{"1":18000}},{"1":52095,"2":90,"3":{"1":18000}},{"1":54870,"2":90,"3":{"1":18000}},{"1":52765,"2":90,"3":{"1":18000}},{"1":51770,"2":100,"3":{"1":20000}},{"1":53305,"2":100,"3":{"1":20000}},{"1":54690,"2":90,"3":{"1":18000}},{"1":52440,"2":100,"3":{"1":20000}},{"1":52815,"2":90,"3":{"1":18000}},{"1":52825,"2":100,"3":{"1":20000}},{"1":52470,"2":90,"3":{"1":18000}},{"1":57330,"2":100,"3":{"1":20000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":52770,"2":80,"3":{"1":80000}},{"1":51995,"2":80,"3":{"1":80000}},{"1":56540,"2":80,"3":{"1":80000}},{"1":51415,"2":80,"3":{"1":80000}},{"1":54595,"2":80,"3":{"1":80000}},{"1":51380,"2":80,"3":{"1":80000}},{"1":51399,"2":80,"3":{"1":80000}},{"1":50960,"2":70,"3":{"1":70000}},{"1":58470,"2":80,"3":{"1":80000}},{"1":50795,"2":70,"3":{"1":70000}},{"1":51640,"2":80,"3":{"1":80000}},{"1":58705,"2":80,"3":{"1":80000}},{"1":51825,"2":80,"3":{"1":80000}},{"1":51420,"2":70,"3":{"1":70000}},{"1":51940,"2":80,"3":{"1":80000}},{"1":52275,"2":80,"3":{"1":80000}},{"1":56240,"2":70,"3":{"1":70000}},{"1":55615,"2":80,"3":{"1":80000}},{"1":53480,"2":60,"3":{"1":60000}},{"1":51660,"2":80,"3":{"1":80000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":60370,"2":40,"3":{"1":80000}},{"1":50655,"2":40,"3":{"1":80000}},{"1":52540,"2":40,"3":{"1":80000}},{"1":66690,"2":40,"3":{"1":80000}},{"1":57330,"2":40,"3":{"1":80000}},{"1":53700,"2":40,"3":{"1":80000}},{"1":50750,"2":40,"3":{"1":80000}},{"1":56770,"2":40,"3":{"1":80000}},{"1":51590,"2":40,"3":{"1":80000}},{"1":53755,"2":40,"3":{"1":80000}},{"1":55760,"2":40,"3":{"1":80000}},{"1":52675,"2":40,"3":{"1":80000}},{"1":51620,"2":40,"3":{"1":80000}},{"1":57230,"2":40,"3":{"1":80000}},{"1":56000,"2":40,"3":{"1":80000}},{"1":50570,"2":40,"3":{"1":80000}},{"1":52470,"2":40,"3":{"1":80000}},{"1":56735,"2":40,"3":{"1":80000}},{"1":51405,"2":40,"3":{"1":80000}},{"1":56660,"2":40,"3":{"1":80000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":52375,"2":120,"3":{"2":12000}},{"1":51845,"2":120,"3":{"2":12000}},{"1":52390,"2":120,"3":{"2":12000}},{"1":53510,"2":110,"3":{"2":11000}},{"1":53965,"2":110,"3":{"2":11000}},{"1":53410,"2":110,"3":{"2":11000}},{"1":51715,"2":120,"3":{"2":12000}},{"1":53370,"2":110,"3":{"2":11000}},{"1":52055,"2":120,"3":{"2":12000}},{"1":50250,"2":90,"3":{"2":9000}},{"1":51605,"2":120,"3":{"2":12000}},{"1":53080,"2":120,"3":{"2":12000}},{"1":52450,"2":110,"3":{"2":11000}},{"1":54085,"2":110,"3":{"2":11000}},{"1":52975,"2":120,"3":{"2":12000}},{"1":54650,"2":110,"3":{"2":11000}},{"1":52050,"2":120,"3":{"2":12000}},{"1":52565,"2":100,"3":{"2":10000}},{"1":53660,"2":110,"3":{"2":11000}},{"1":51320,"2":110,"3":{"2":11000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":56220,"2":70,"3":{"2":14000}},{"1":54275,"2":90,"3":{"2":18000}},{"1":53310,"2":100,"3":{"2":20000}},{"1":50175,"2":90,"3":{"2":18000}},{"1":54210,"2":100,"3":{"2":20000}},{"1":54250,"2":100,"3":{"2":20000}},{"1":58280,"2":100,"3":{"2":20000}},{"1":55255,"2":100,"3":{"2":20000}},{"1":54555,"2":100,"3":{"2":20000}},{"1":53635,"2":100,"3":{"2":20000}},{"1":50875,"2":90,"3":{"2":18000}},{"1":51175,"2":90,"3":{"2":18000}},{"1":50640,"2":90,"3":{"2":18000}},{"1":50235,"2":90,"3":{"2":18000}},{"1":52675,"2":80,"3":{"2":16000}},{"1":54675,"2":90,"3":{"2":18000}},{"1":51745,"2":90,"3":{"2":18000}},{"1":52020,"2":90,"3":{"2":18000}},{"1":55185,"2":100,"3":{"2":20000}},{"1":50435,"2":80,"3":{"2":16000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":50625,"2":40,"3":{"2":40000}},{"1":53325,"2":40,"3":{"2":40000}},{"1":50630,"2":40,"3":{"2":40000}},{"1":51015,"2":40,"3":{"2":40000}},{"1":51655,"2":40,"3":{"2":40000}},{"1":60090,"2":40,"3":{"2":40000}},{"1":61435,"2":40,"3":{"2":40000}},{"1":56165,"2":40,"3":{"2":40000}},{"1":57730,"2":40,"3":{"2":40000}},{"1":50780,"2":40,"3":{"2":40000}},{"1":53450,"2":40,"3":{"2":40000}},{"1":56165,"2":40,"3":{"2":40000}},{"1":52465,"2":40,"3":{"2":40000}},{"1":51670,"2":40,"3":{"2":40000}},{"1":61785,"2":40,"3":{"2":40000}},{"1":52540,"2":40,"3":{"2":40000}},{"1":51140,"2":40,"3":{"2":40000}},{"1":50610,"2":40,"3":{"2":40000}},{"1":50915,"2":40,"3":{"2":40000}},{"1":62870,"2":50,"3":{"2":50000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":80500,"2":30,"3":{"2":60000}},{"1":61280,"2":20,"3":{"2":40000}},{"1":75235,"2":30,"3":{"2":60000}},{"1":55220,"2":20,"3":{"2":40000}},{"1":50190,"2":20,"3":{"2":40000}},{"1":57420,"2":20,"3":{"2":40000}},{"1":75260,"2":30,"3":{"2":60000}},{"1":52860,"2":20,"3":{"2":40000}},{"1":51345,"2":20,"3":{"2":40000}},{"1":51085,"2":20,"3":{"2":40000}},{"1":56295,"2":20,"3":{"2":40000}},{"1":50580,"2":20,"3":{"2":40000}},{"1":56745,"2":20,"3":{"2":40000}},{"1":51820,"2":20,"3":{"2":40000}},{"1":59685,"2":20,"3":{"2":40000}},{"1":50355,"2":20,"3":{"2":40000}},{"1":55245,"2":20,"3":{"2":40000}},{"1":50010,"2":20,"3":{"2":40000}},{"1":58580,"2":20,"3":{"2":40000}},{"1":81590,"2":30,"3":{"2":60000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":52465,"2":90,"3":{"2":9000}},{"1":50600,"2":90,"3":{"2":9000}},{"1":50705,"2":100,"3":{"2":10000}},{"1":52100,"2":100,"3":{"2":10000}},{"1":50920,"2":100,"3":{"2":10000}},{"1":56880,"2":90,"3":{"2":9000}},{"1":50755,"2":100,"3":{"2":10000}},{"1":50525,"2":100,"3":{"2":10000}},{"1":53335,"2":90,"3":{"2":9000}},{"1":53555,"2":90,"3":{"2":9000}},{"1":53510,"2":100,"3":{"2":10000}},{"1":50510,"2":100,"3":{"2":10000}},{"1":51690,"2":100,"3":{"2":10000}},{"1":51750,"2":100,"3":{"2":10000}},{"1":52185,"2":90,"3":{"2":9000}},{"1":50695,"2":100,"3":{"2":10000}},{"1":51595,"2":100,"3":{"2":10000}},{"1":50995,"2":100,"3":{"2":10000}},{"1":51390,"2":90,"3":{"2":9000}},{"1":53930,"2":90,"3":{"2":9000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":53875,"2":80,"3":{"2":16000}},{"1":53560,"2":90,"3":{"2":18000}},{"1":50705,"2":90,"3":{"2":18000}},{"1":55040,"2":90,"3":{"2":18000}},{"1":50375,"2":80,"3":{"2":16000}},{"1":53560,"2":100,"3":{"2":20000}},{"1":52990,"2":100,"3":{"2":20000}},{"1":51945,"2":100,"3":{"2":20000}},{"1":53275,"2":100,"3":{"2":20000}},{"1":50180,"2":90,"3":{"2":18000}},{"1":52955,"2":100,"3":{"2":20000}},{"1":54905,"2":100,"3":{"2":20000}},{"1":56055,"2":80,"3":{"2":16000}},{"1":52805,"2":100,"3":{"2":20000}},{"1":52815,"2":100,"3":{"2":20000}},{"1":53000,"2":100,"3":{"2":20000}},{"1":52650,"2":90,"3":{"2":18000}},{"1":55040,"2":100,"3":{"2":20000}},{"1":55155,"2":100,"3":{"2":20000}},{"1":51550,"2":80,"3":{"2":16000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":53505,"2":70,"3":{"2":70000}},{"1":57470,"2":70,"3":{"2":70000}},{"1":54895,"2":80,"3":{"2":80000}},{"1":53735,"2":70,"3":{"2":70000}},{"1":51455,"2":70,"3":{"2":70000}},{"1":60195,"2":80,"3":{"2":80000}},{"1":50050,"2":70,"3":{"2":70000}},{"1":55490,"2":80,"3":{"2":80000}},{"1":51835,"2":70,"3":{"2":70000}},{"1":59105,"2":80,"3":{"2":80000}},{"1":52455,"2":60,"3":{"2":60000}},{"1":53855,"2":70,"3":{"2":70000}},{"1":59185,"2":70,"3":{"2":70000}},{"1":50490,"2":70,"3":{"2":70000}},{"1":55615,"2":80,"3":{"2":80000}},{"1":52625,"2":70,"3":{"2":70000}},{"1":55505,"2":80,"3":{"2":80000}},{"1":51455,"2":70,"3":{"2":70000}},{"1":54980,"2":80,"3":{"2":80000}},{"1":59070,"2":70,"3":{"2":70000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":62030,"2":40,"3":{"2":80000}},{"1":53305,"2":30,"3":{"2":60000}},{"1":59355,"2":40,"3":{"2":80000}},{"1":55360,"2":40,"3":{"2":80000}},{"1":58885,"2":40,"3":{"2":80000}},{"1":54700,"2":30,"3":{"2":60000}},{"1":55485,"2":40,"3":{"2":80000}},{"1":55260,"2":40,"3":{"2":80000}},{"1":55060,"2":40,"3":{"2":80000}},{"1":57435,"2":40,"3":{"2":80000}},{"1":54320,"2":40,"3":{"2":80000}},{"1":54525,"2":40,"3":{"2":80000}},{"1":58735,"2":40,"3":{"2":80000}},{"1":60160,"2":40,"3":{"2":80000}},{"1":54560,"2":40,"3":{"2":80000}},{"1":58970,"2":40,"3":{"2":80000}},{"1":55195,"2":40,"3":{"2":80000}},{"1":55380,"2":40,"3":{"2":80000}},{"1":64105,"2":40,"3":{"2":80000}},{"1":59180,"2":40,"3":{"2":80000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":52065,"2":110,"3":{"4":11000}},{"1":50435,"2":110,"3":{"4":11000}},{"1":51535,"2":120,"3":{"4":12000}},{"1":52465,"2":120,"3":{"4":12000}},{"1":52515,"2":110,"3":{"4":11000}},{"1":53450,"2":120,"3":{"4":12000}},{"1":51505,"2":120,"3":{"4":12000}},{"1":54430,"2":100,"3":{"4":10000}},{"1":53445,"2":110,"3":{"4":11000}},{"1":53280,"2":120,"3":{"4":12000}},{"1":52690,"2":120,"3":{"4":12000}},{"1":50905,"2":100,"3":{"4":10000}},{"1":53240,"2":110,"3":{"4":11000}},{"1":51860,"2":120,"3":{"4":12000}},{"1":51910,"2":110,"3":{"4":11000}},{"1":53510,"2":120,"3":{"4":12000}},{"1":56595,"2":120,"3":{"4":12000}},{"1":52235,"2":120,"3":{"4":12000}},{"1":52790,"2":120,"3":{"4":12000}},{"1":51835,"2":120,"3":{"4":12000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":57035,"2":100,"3":{"4":20000}},{"1":53155,"2":100,"3":{"4":20000}},{"1":53770,"2":100,"3":{"4":20000}},{"1":53015,"2":90,"3":{"4":18000}},{"1":56310,"2":100,"3":{"4":20000}},{"1":53815,"2":100,"3":{"4":20000}},{"1":53555,"2":100,"3":{"4":20000}},{"1":53125,"2":100,"3":{"4":20000}},{"1":51265,"2":90,"3":{"4":18000}},{"1":52750,"2":100,"3":{"4":20000}},{"1":52110,"2":90,"3":{"4":18000}},{"1":50795,"2":90,"3":{"4":18000}},{"1":54930,"2":100,"3":{"4":20000}},{"1":53365,"2":90,"3":{"4":18000}},{"1":52630,"2":90,"3":{"4":18000}},{"1":54010,"2":100,"3":{"4":20000}},{"1":51140,"2":90,"3":{"4":18000}},{"1":54200,"2":90,"3":{"4":18000}},{"1":54710,"2":100,"3":{"4":20000}},{"1":53235,"2":100,"3":{"4":20000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":50455,"2":40,"3":{"4":40000}},{"1":62350,"2":50,"3":{"4":50000}},{"1":56415,"2":40,"3":{"4":40000}},{"1":56395,"2":40,"3":{"4":40000}},{"1":61770,"2":50,"3":{"4":50000}},{"1":50625,"2":40,"3":{"4":40000}},{"1":56575,"2":40,"3":{"4":40000}},{"1":61415,"2":50,"3":{"4":50000}},{"1":55670,"2":40,"3":{"4":40000}},{"1":50435,"2":40,"3":{"4":40000}},{"1":61225,"2":40,"3":{"4":40000}},{"1":53655,"2":30,"3":{"4":30000}},{"1":51515,"2":40,"3":{"4":40000}},{"1":55585,"2":40,"3":{"4":40000}},{"1":55240,"2":40,"3":{"4":40000}},{"1":50765,"2":40,"3":{"4":40000}},{"1":53405,"2":30,"3":{"4":30000}},{"1":50495,"2":40,"3":{"4":40000}},{"1":63210,"2":50,"3":{"4":50000}},{"1":52720,"2":40,"3":{"4":40000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":57475,"2":20,"3":{"4":40000}},{"1":54900,"2":20,"3":{"4":40000}},{"1":54830,"2":20,"3":{"4":40000}},{"1":74540,"2":30,"3":{"4":60000}},{"1":62440,"2":20,"3":{"4":40000}},{"1":54405,"2":20,"3":{"4":40000}},{"1":59730,"2":20,"3":{"4":40000}},{"1":74530,"2":30,"3":{"4":60000}},{"1":74380,"2":30,"3":{"4":60000}},{"1":50700,"2":20,"3":{"4":40000}},{"1":50080,"2":20,"3":{"4":40000}},{"1":52060,"2":20,"3":{"4":40000}},{"1":59810,"2":20,"3":{"4":40000}},{"1":74160,"2":30,"3":{"4":60000}},{"1":52505,"2":20,"3":{"4":40000}},{"1":50515,"2":20,"3":{"4":40000}},{"1":74380,"2":30,"3":{"4":60000}},{"1":50935,"2":20,"3":{"4":40000}},{"1":74645,"2":30,"3":{"4":60000}},{"1":73875,"2":30,"3":{"4":60000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":54005,"2":30,"3":{"4":30000}},{"1":70725,"2":40,"3":{"4":40000}},{"1":51860,"2":30,"3":{"4":30000}},{"1":52115,"2":30,"3":{"4":30000}},{"1":60440,"2":40,"3":{"4":40000}},{"1":53850,"2":30,"3":{"4":30000}},{"1":51330,"2":30,"3":{"4":30000}},{"1":67405,"2":40,"3":{"4":40000}},{"1":52780,"2":30,"3":{"4":30000}},{"1":55065,"2":30,"3":{"4":30000}},{"1":66265,"2":40,"3":{"4":40000}},{"1":66095,"2":40,"3":{"4":40000}},{"1":60265,"2":40,"3":{"4":40000}},{"1":65585,"2":40,"3":{"4":40000}},{"1":58665,"2":30,"3":{"4":30000}},{"1":50685,"2":30,"3":{"4":30000}},{"1":59575,"2":40,"3":{"4":40000}},{"1":60660,"2":40,"3":{"4":40000}},{"1":61320,"2":40,"3":{"4":40000}},{"1":50620,"2":30,"3":{"4":30000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":55075,"2":100,"3":{"4":10000}},{"1":54145,"2":90,"3":{"4":9000}},{"1":51055,"2":90,"3":{"4":9000}},{"1":51810,"2":100,"3":{"4":10000}},{"1":52080,"2":100,"3":{"4":10000}},{"1":50335,"2":80,"3":{"4":8000}},{"1":51290,"2":100,"3":{"4":10000}},{"1":52200,"2":100,"3":{"4":10000}},{"1":50840,"2":100,"3":{"4":10000}},{"1":51370,"2":90,"3":{"4":9000}},{"1":51025,"2":100,"3":{"4":10000}},{"1":52720,"2":90,"3":{"4":9000}},{"1":51950,"2":80,"3":{"4":8000}},{"1":50920,"2":90,"3":{"4":9000}},{"1":54140,"2":100,"3":{"4":10000}},{"1":50840,"2":100,"3":{"4":10000}},{"1":53185,"2":100,"3":{"4":10000}},{"1":52375,"2":100,"3":{"4":10000}},{"1":53610,"2":100,"3":{"4":10000}},{"1":50465,"2":100,"3":{"4":10000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50380,"2":70,"3":{"4":14000}},{"1":52350,"2":100,"3":{"4":20000}},{"1":52920,"2":100,"3":{"4":20000}},{"1":54270,"2":100,"3":{"4":20000}},{"1":53470,"2":100,"3":{"4":20000}},{"1":53800,"2":90,"3":{"4":18000}},{"1":52850,"2":100,"3":{"4":20000}},{"1":55970,"2":80,"3":{"4":16000}},{"1":52465,"2":100,"3":{"4":20000}},{"1":53725,"2":100,"3":{"4":20000}},{"1":53350,"2":100,"3":{"4":20000}},{"1":54010,"2":100,"3":{"4":20000}},{"1":53140,"2":90,"3":{"4":18000}},{"1":53200,"2":100,"3":{"4":20000}},{"1":53055,"2":90,"3":{"4":18000}},{"1":54320,"2":100,"3":{"4":20000}},{"1":53435,"2":100,"3":{"4":20000}},{"1":50145,"2":80,"3":{"4":16000}},{"1":52465,"2":90,"3":{"4":18000}},{"1":52545,"2":100,"3":{"4":20000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":53940,"2":80,"3":{"4":80000}},{"1":53825,"2":70,"3":{"4":70000}},{"1":55140,"2":80,"3":{"4":80000}},{"1":54450,"2":70,"3":{"4":70000}},{"1":55820,"2":80,"3":{"4":80000}},{"1":54745,"2":80,"3":{"4":80000}},{"1":56125,"2":80,"3":{"4":80000}},{"1":54435,"2":80,"3":{"4":80000}},{"1":56770,"2":70,"3":{"4":70000}},{"1":56040,"2":70,"3":{"4":70000}},{"1":51420,"2":70,"3":{"4":70000}},{"1":55105,"2":80,"3":{"4":80000}},{"1":55185,"2":80,"3":{"4":80000}},{"1":54200,"2":70,"3":{"4":70000}},{"1":53825,"2":70,"3":{"4":70000}},{"1":55080,"2":80,"3":{"4":80000}},{"1":56335,"2":70,"3":{"4":70000}},{"1":54335,"2":60,"3":{"4":60000}},{"1":55675,"2":80,"3":{"4":80000}},{"1":54330,"2":80,"3":{"4":80000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":59160,"2":40,"3":{"4":80000}},{"1":55005,"2":40,"3":{"4":80000}},{"1":54670,"2":40,"3":{"4":80000}},{"1":52545,"2":30,"3":{"4":60000}},{"1":54305,"2":40,"3":{"4":80000}},{"1":54815,"2":40,"3":{"4":80000}},{"1":54415,"2":40,"3":{"4":80000}},{"1":57035,"2":40,"3":{"4":80000}},{"1":63300,"2":40,"3":{"4":80000}},{"1":55280,"2":40,"3":{"4":80000}},{"1":56530,"2":40,"3":{"4":80000}},{"1":54165,"2":40,"3":{"4":80000}},{"1":52300,"2":30,"3":{"4":60000}},{"1":60870,"2":40,"3":{"4":80000}},{"1":55810,"2":40,"3":{"4":80000}},{"1":53830,"2":40,"3":{"4":80000}},{"1":61065,"2":40,"3":{"4":80000}},{"1":53685,"2":40,"3":{"4":80000}},{"1":54025,"2":40,"3":{"4":80000}},{"1":54560,"2":40,"3":{"4":80000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":56430,"2":50,"3":{"4":50000}},{"1":54755,"2":40,"3":{"4":40000}},{"1":56245,"2":50,"3":{"4":50000}},{"1":50305,"2":40,"3":{"4":40000}},{"1":50765,"2":50,"3":{"4":50000}},{"1":60480,"2":40,"3":{"4":40000}},{"1":52375,"2":50,"3":{"4":50000}},{"1":56355,"2":40,"3":{"4":40000}},{"1":55220,"2":50,"3":{"4":50000}},{"1":50830,"2":40,"3":{"4":40000}},{"1":55715,"2":60,"3":{"4":60000}},{"1":54525,"2":40,"3":{"4":40000}},{"1":59580,"2":60,"3":{"4":60000}},{"1":61450,"2":50,"3":{"4":50000}},{"1":52635,"2":50,"3":{"4":50000}},{"1":65175,"2":40,"3":{"4":40000}},{"1":57050,"2":60,"3":{"4":60000}},{"1":60555,"2":50,"3":{"4":50000}},{"1":53650,"2":50,"3":{"4":50000}},{"1":61180,"2":50,"3":{"4":50000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/0.5.0/json_vm.pb.json b/benchmark/data/skybrian-macbookpro/0.5.0/json_vm.pb.json
deleted file mode 100644
index 8861da3..0000000
--- a/benchmark/data/skybrian-macbookpro/0.5.0/json_vm.pb.json
+++ /dev/null
@@ -1,86 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "readjson_vm.dart",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "2": 2,
-      "3": "1.14.2 (Tue Feb  9 15:10:44 2016) on \"macos_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.5.0",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.27.2"},
-        {"1":"args","2":"hosted","3":"0.13.4"},
-        {"1":"async","2":"hosted","3":"1.9.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"boolean_selector","2":"hosted","3":"1.0.1"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.5.1"},
-        {"1":"convert","2":"hosted","3":"1.0.1"},
-        {"1":"crypto","2":"hosted","3":"0.9.2+1"},
-        {"1":"csslib","2":"hosted","3":"0.12.2"},
-        {"1":"fixnum","2":"hosted","3":"0.10.2"},
-        {"1":"glob","2":"hosted","3":"1.1.2"},
-        {"1":"html","2":"hosted","3":"0.12.2+1"},
-        {"1":"http_multi_server","2":"hosted","3":"2.0.1"},
-        {"1":"http_parser","2":"hosted","3":"2.2.1"},
-        {"1":"logging","2":"hosted","3":"0.11.2"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+2"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.9"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.2.2"},
-        {"1":"protobuf","2":"hosted","3":"0.5.0+1"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.4"},
-        {"1":"shelf","2":"hosted","3":"0.6.5"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+3"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.2.0"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1+1"},
-        {"1":"source_span","2":"hosted","3":"1.2.2"},
-        {"1":"stack_trace","2":"hosted","3":"1.6.4"},
-        {"1":"stream_channel","2":"hosted","3":"1.3.1"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4+1"},
-        {"1":"test","2":"hosted","3":"0.12.13"},
-        {"1":"typed_data","2":"hosted","3":"1.1.2"},
-        {"1":"utf","2":"hosted","3":"0.9.0+3"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"},
-        {"1":"web_socket_channel","2":"hosted","3":"1.0.2"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":50970,"2":410,"3":{"1":41000}},{"1":50654,"2":480,"3":{"1":48000}},{"1":50579,"2":620,"3":{"1":62000}},{"1":50396,"2":610,"3":{"1":61000}},{"1":50002,"2":570,"3":{"1":57000}},{"1":50367,"2":570,"3":{"1":57000}},{"1":50081,"2":640,"3":{"1":64000}},{"1":50528,"2":630,"3":{"1":63000}},{"1":50613,"2":640,"3":{"1":64000}},{"1":50051,"2":530,"3":{"1":53000}},{"1":50690,"2":530,"3":{"1":53000}},{"1":50286,"2":600,"3":{"1":60000}},{"1":50384,"2":600,"3":{"1":60000}},{"1":51261,"2":510,"3":{"1":51000}},{"1":50094,"2":590,"3":{"1":59000}},{"1":50199,"2":540,"3":{"1":54000}},{"1":50319,"2":600,"3":{"1":60000}},{"1":50078,"2":480,"3":{"1":48000}},{"1":50315,"2":580,"3":{"1":58000}},{"1":50393,"2":590,"3":{"1":59000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":50733,"2":450,"3":{"1":90000}},{"1":50142,"2":500,"3":{"1":100000}},{"1":50836,"2":510,"3":{"1":102000}},{"1":50656,"2":510,"3":{"1":102000}},{"1":50451,"2":480,"3":{"1":96000}},{"1":50326,"2":470,"3":{"1":94000}},{"1":50972,"2":500,"3":{"1":100000}},{"1":50817,"2":510,"3":{"1":102000}},{"1":50523,"2":490,"3":{"1":98000}},{"1":50973,"2":500,"3":{"1":100000}},{"1":50055,"2":450,"3":{"1":90000}},{"1":51014,"2":480,"3":{"1":96000}},{"1":50692,"2":470,"3":{"1":94000}},{"1":51031,"2":440,"3":{"1":88000}},{"1":50754,"2":500,"3":{"1":100000}},{"1":50478,"2":490,"3":{"1":98000}},{"1":50938,"2":500,"3":{"1":100000}},{"1":50765,"2":500,"3":{"1":100000}},{"1":50091,"2":490,"3":{"1":98000}},{"1":51716,"2":480,"3":{"1":96000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":51071,"2":150,"3":{"1":150000}},{"1":50453,"2":150,"3":{"1":150000}},{"1":50487,"2":150,"3":{"1":150000}},{"1":51074,"2":160,"3":{"1":160000}},{"1":51668,"2":160,"3":{"1":160000}},{"1":52959,"2":160,"3":{"1":160000}},{"1":52812,"2":160,"3":{"1":160000}},{"1":53104,"2":160,"3":{"1":160000}},{"1":53137,"2":150,"3":{"1":150000}},{"1":51332,"2":160,"3":{"1":160000}},{"1":51178,"2":150,"3":{"1":150000}},{"1":52180,"2":150,"3":{"1":150000}},{"1":52845,"2":160,"3":{"1":160000}},{"1":53160,"2":160,"3":{"1":160000}},{"1":51982,"2":160,"3":{"1":160000}},{"1":51856,"2":160,"3":{"1":160000}},{"1":53063,"2":150,"3":{"1":150000}},{"1":51828,"2":160,"3":{"1":160000}},{"1":52836,"2":160,"3":{"1":160000}},{"1":51700,"2":160,"3":{"1":160000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":50769,"2":70,"3":{"1":140000}},{"1":52258,"2":80,"3":{"1":160000}},{"1":55646,"2":80,"3":{"1":160000}},{"1":51431,"2":80,"3":{"1":160000}},{"1":51958,"2":80,"3":{"1":160000}},{"1":51320,"2":80,"3":{"1":160000}},{"1":50059,"2":70,"3":{"1":140000}},{"1":52246,"2":80,"3":{"1":160000}},{"1":55435,"2":80,"3":{"1":160000}},{"1":52202,"2":70,"3":{"1":140000}},{"1":50901,"2":70,"3":{"1":140000}},{"1":52015,"2":80,"3":{"1":160000}},{"1":50107,"2":70,"3":{"1":140000}},{"1":52628,"2":80,"3":{"1":160000}},{"1":56468,"2":80,"3":{"1":160000}},{"1":53249,"2":80,"3":{"1":160000}},{"1":50994,"2":70,"3":{"1":140000}},{"1":51761,"2":80,"3":{"1":160000}},{"1":52504,"2":80,"3":{"1":160000}},{"1":56761,"2":80,"3":{"1":160000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":50278,"2":500,"3":{"1":50000}},{"1":50429,"2":510,"3":{"1":51000}},{"1":50826,"2":470,"3":{"1":47000}},{"1":50719,"2":480,"3":{"1":48000}},{"1":50234,"2":480,"3":{"1":48000}},{"1":50092,"2":500,"3":{"1":50000}},{"1":50950,"2":500,"3":{"1":50000}},{"1":50221,"2":510,"3":{"1":51000}},{"1":50060,"2":440,"3":{"1":44000}},{"1":50970,"2":480,"3":{"1":48000}},{"1":50668,"2":450,"3":{"1":45000}},{"1":50138,"2":490,"3":{"1":49000}},{"1":50153,"2":460,"3":{"1":46000}},{"1":50779,"2":480,"3":{"1":48000}},{"1":50960,"2":510,"3":{"1":51000}},{"1":50864,"2":490,"3":{"1":49000}},{"1":50439,"2":510,"3":{"1":51000}},{"1":50495,"2":450,"3":{"1":45000}},{"1":50414,"2":490,"3":{"1":49000}},{"1":50597,"2":500,"3":{"1":50000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":50429,"2":470,"3":{"1":94000}},{"1":51032,"2":470,"3":{"1":94000}},{"1":50861,"2":430,"3":{"1":86000}},{"1":50592,"2":470,"3":{"1":94000}},{"1":50853,"2":430,"3":{"1":86000}},{"1":50007,"2":370,"3":{"1":74000}},{"1":50314,"2":420,"3":{"1":84000}},{"1":50372,"2":470,"3":{"1":94000}},{"1":50231,"2":430,"3":{"1":86000}},{"1":50003,"2":460,"3":{"1":92000}},{"1":50960,"2":380,"3":{"1":76000}},{"1":50699,"2":450,"3":{"1":90000}},{"1":50243,"2":460,"3":{"1":92000}},{"1":50778,"2":420,"3":{"1":84000}},{"1":50787,"2":470,"3":{"1":94000}},{"1":50889,"2":470,"3":{"1":94000}},{"1":50647,"2":450,"3":{"1":90000}},{"1":50102,"2":460,"3":{"1":92000}},{"1":50093,"2":380,"3":{"1":76000}},{"1":51049,"2":390,"3":{"1":78000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":50861,"2":250,"3":{"1":250000}},{"1":50027,"2":260,"3":{"1":260000}},{"1":51591,"2":260,"3":{"1":260000}},{"1":50513,"2":250,"3":{"1":250000}},{"1":51333,"2":270,"3":{"1":270000}},{"1":51044,"2":250,"3":{"1":250000}},{"1":51152,"2":250,"3":{"1":250000}},{"1":53097,"2":230,"3":{"1":230000}},{"1":50266,"2":250,"3":{"1":250000}},{"1":52762,"2":230,"3":{"1":230000}},{"1":51455,"2":240,"3":{"1":240000}},{"1":50834,"2":230,"3":{"1":230000}},{"1":51740,"2":270,"3":{"1":270000}},{"1":50701,"2":240,"3":{"1":240000}},{"1":51501,"2":250,"3":{"1":250000}},{"1":50923,"2":240,"3":{"1":240000}},{"1":50743,"2":240,"3":{"1":240000}},{"1":51257,"2":270,"3":{"1":270000}},{"1":50229,"2":260,"3":{"1":260000}},{"1":50511,"2":240,"3":{"1":240000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":53944,"2":140,"3":{"1":280000}},{"1":50961,"2":120,"3":{"1":240000}},{"1":51186,"2":120,"3":{"1":240000}},{"1":51132,"2":120,"3":{"1":240000}},{"1":50976,"2":130,"3":{"1":260000}},{"1":50543,"2":120,"3":{"1":240000}},{"1":53542,"2":140,"3":{"1":280000}},{"1":53704,"2":120,"3":{"1":240000}},{"1":50180,"2":130,"3":{"1":260000}},{"1":51639,"2":130,"3":{"1":260000}},{"1":50039,"2":130,"3":{"1":260000}},{"1":52357,"2":120,"3":{"1":240000}},{"1":50793,"2":130,"3":{"1":260000}},{"1":50183,"2":130,"3":{"1":260000}},{"1":53909,"2":130,"3":{"1":260000}},{"1":53026,"2":120,"3":{"1":240000}},{"1":50407,"2":130,"3":{"1":260000}},{"1":51379,"2":120,"3":{"1":240000}},{"1":53035,"2":110,"3":{"1":220000}},{"1":53388,"2":130,"3":{"1":260000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":50727,"2":580,"3":{"2":58000}},{"1":50798,"2":580,"3":{"2":58000}},{"1":50179,"2":600,"3":{"2":60000}},{"1":50555,"2":580,"3":{"2":58000}},{"1":50322,"2":570,"3":{"2":57000}},{"1":50693,"2":600,"3":{"2":60000}},{"1":51827,"2":550,"3":{"2":55000}},{"1":50628,"2":600,"3":{"2":60000}},{"1":50547,"2":600,"3":{"2":60000}},{"1":50348,"2":600,"3":{"2":60000}},{"1":50606,"2":550,"3":{"2":55000}},{"1":50556,"2":620,"3":{"2":62000}},{"1":50245,"2":560,"3":{"2":56000}},{"1":50243,"2":440,"3":{"2":44000}},{"1":50514,"2":620,"3":{"2":62000}},{"1":50627,"2":620,"3":{"2":62000}},{"1":50399,"2":590,"3":{"2":59000}},{"1":50367,"2":620,"3":{"2":62000}},{"1":51089,"2":500,"3":{"2":50000}},{"1":50662,"2":610,"3":{"2":61000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":50661,"2":480,"3":{"2":96000}},{"1":50459,"2":420,"3":{"2":84000}},{"1":50894,"2":480,"3":{"2":96000}},{"1":50618,"2":470,"3":{"2":94000}},{"1":50991,"2":470,"3":{"2":94000}},{"1":50400,"2":470,"3":{"2":94000}},{"1":50545,"2":430,"3":{"2":86000}},{"1":50020,"2":410,"3":{"2":82000}},{"1":51046,"2":480,"3":{"2":96000}},{"1":50161,"2":460,"3":{"2":92000}},{"1":50103,"2":440,"3":{"2":88000}},{"1":50597,"2":460,"3":{"2":92000}},{"1":50590,"2":460,"3":{"2":92000}},{"1":50657,"2":450,"3":{"2":90000}},{"1":50332,"2":450,"3":{"2":90000}},{"1":50376,"2":440,"3":{"2":88000}},{"1":50412,"2":470,"3":{"2":94000}},{"1":50775,"2":470,"3":{"2":94000}},{"1":50586,"2":490,"3":{"2":98000}},{"1":50447,"2":480,"3":{"2":96000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":52390,"2":150,"3":{"2":150000}},{"1":52669,"2":150,"3":{"2":150000}},{"1":52529,"2":130,"3":{"2":130000}},{"1":52950,"2":140,"3":{"2":140000}},{"1":51251,"2":130,"3":{"2":130000}},{"1":50485,"2":130,"3":{"2":130000}},{"1":53195,"2":140,"3":{"2":140000}},{"1":51410,"2":140,"3":{"2":140000}},{"1":53497,"2":150,"3":{"2":150000}},{"1":51736,"2":150,"3":{"2":150000}},{"1":52504,"2":150,"3":{"2":150000}},{"1":51225,"2":150,"3":{"2":150000}},{"1":52521,"2":150,"3":{"2":150000}},{"1":52605,"2":140,"3":{"2":140000}},{"1":53575,"2":140,"3":{"2":140000}},{"1":51048,"2":150,"3":{"2":150000}},{"1":51989,"2":140,"3":{"2":140000}},{"1":50589,"2":120,"3":{"2":120000}},{"1":51932,"2":130,"3":{"2":130000}},{"1":51308,"2":150,"3":{"2":150000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":52125,"2":70,"3":{"2":140000}},{"1":55195,"2":80,"3":{"2":160000}},{"1":50245,"2":70,"3":{"2":140000}},{"1":53895,"2":70,"3":{"2":140000}},{"1":53432,"2":70,"3":{"2":140000}},{"1":54138,"2":60,"3":{"2":120000}},{"1":55584,"2":70,"3":{"2":140000}},{"1":55872,"2":80,"3":{"2":160000}},{"1":56588,"2":80,"3":{"2":160000}},{"1":55619,"2":80,"3":{"2":160000}},{"1":53594,"2":70,"3":{"2":140000}},{"1":55093,"2":80,"3":{"2":160000}},{"1":55150,"2":80,"3":{"2":160000}},{"1":54692,"2":80,"3":{"2":160000}},{"1":54462,"2":80,"3":{"2":160000}},{"1":54317,"2":80,"3":{"2":160000}},{"1":54250,"2":70,"3":{"2":140000}},{"1":56554,"2":80,"3":{"2":160000}},{"1":54161,"2":80,"3":{"2":160000}},{"1":54002,"2":80,"3":{"2":160000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":50843,"2":470,"3":{"2":47000}},{"1":50633,"2":520,"3":{"2":52000}},{"1":50728,"2":520,"3":{"2":52000}},{"1":50366,"2":490,"3":{"2":49000}},{"1":50642,"2":530,"3":{"2":53000}},{"1":50703,"2":470,"3":{"2":47000}},{"1":50385,"2":520,"3":{"2":52000}},{"1":50484,"2":510,"3":{"2":51000}},{"1":50397,"2":470,"3":{"2":47000}},{"1":51171,"2":490,"3":{"2":49000}},{"1":50572,"2":410,"3":{"2":41000}},{"1":50661,"2":520,"3":{"2":52000}},{"1":50583,"2":480,"3":{"2":48000}},{"1":50676,"2":520,"3":{"2":52000}},{"1":50405,"2":490,"3":{"2":49000}},{"1":50618,"2":500,"3":{"2":50000}},{"1":50045,"2":500,"3":{"2":50000}},{"1":50180,"2":520,"3":{"2":52000}},{"1":50697,"2":510,"3":{"2":51000}},{"1":50254,"2":510,"3":{"2":51000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":51076,"2":480,"3":{"2":96000}},{"1":50956,"2":420,"3":{"2":84000}},{"1":50622,"2":480,"3":{"2":96000}},{"1":50032,"2":470,"3":{"2":94000}},{"1":50945,"2":480,"3":{"2":96000}},{"1":50361,"2":470,"3":{"2":94000}},{"1":50428,"2":480,"3":{"2":96000}},{"1":50764,"2":470,"3":{"2":94000}},{"1":51018,"2":480,"3":{"2":96000}},{"1":50534,"2":480,"3":{"2":96000}},{"1":50577,"2":460,"3":{"2":92000}},{"1":50406,"2":460,"3":{"2":92000}},{"1":50767,"2":450,"3":{"2":90000}},{"1":50463,"2":460,"3":{"2":92000}},{"1":50838,"2":450,"3":{"2":90000}},{"1":50248,"2":460,"3":{"2":92000}},{"1":50877,"2":450,"3":{"2":90000}},{"1":50530,"2":440,"3":{"2":88000}},{"1":50343,"2":460,"3":{"2":92000}},{"1":50553,"2":470,"3":{"2":94000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":50280,"2":240,"3":{"2":240000}},{"1":51616,"2":260,"3":{"2":260000}},{"1":53096,"2":240,"3":{"2":240000}},{"1":50668,"2":230,"3":{"2":230000}},{"1":50170,"2":230,"3":{"2":230000}},{"1":51440,"2":230,"3":{"2":230000}},{"1":50928,"2":240,"3":{"2":240000}},{"1":51767,"2":260,"3":{"2":260000}},{"1":50918,"2":250,"3":{"2":250000}},{"1":51544,"2":200,"3":{"2":200000}},{"1":52048,"2":260,"3":{"2":260000}},{"1":50911,"2":250,"3":{"2":250000}},{"1":50633,"2":230,"3":{"2":230000}},{"1":51154,"2":200,"3":{"2":200000}},{"1":50066,"2":220,"3":{"2":220000}},{"1":53407,"2":240,"3":{"2":240000}},{"1":52081,"2":230,"3":{"2":230000}},{"1":50292,"2":250,"3":{"2":250000}},{"1":50841,"2":250,"3":{"2":250000}},{"1":50220,"2":220,"3":{"2":220000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":53371,"2":120,"3":{"2":240000}},{"1":52754,"2":120,"3":{"2":240000}},{"1":51702,"2":130,"3":{"2":260000}},{"1":53078,"2":130,"3":{"2":260000}},{"1":50589,"2":120,"3":{"2":240000}},{"1":52796,"2":130,"3":{"2":260000}},{"1":52967,"2":130,"3":{"2":260000}},{"1":50310,"2":110,"3":{"2":220000}},{"1":53762,"2":120,"3":{"2":240000}},{"1":53226,"2":110,"3":{"2":220000}},{"1":53751,"2":130,"3":{"2":260000}},{"1":53902,"2":130,"3":{"2":260000}},{"1":54936,"2":130,"3":{"2":260000}},{"1":53354,"2":130,"3":{"2":260000}},{"1":53100,"2":120,"3":{"2":240000}},{"1":53357,"2":130,"3":{"2":260000}},{"1":50074,"2":120,"3":{"2":240000}},{"1":53464,"2":130,"3":{"2":260000}},{"1":53589,"2":130,"3":{"2":260000}},{"1":52912,"2":130,"3":{"2":260000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50336,"2":520,"3":{"4":52000}},{"1":52173,"2":580,"3":{"4":58000}},{"1":50236,"2":570,"3":{"4":57000}},{"1":50361,"2":580,"3":{"4":58000}},{"1":50347,"2":570,"3":{"4":57000}},{"1":50224,"2":510,"3":{"4":51000}},{"1":50024,"2":570,"3":{"4":57000}},{"1":51373,"2":570,"3":{"4":57000}},{"1":51123,"2":490,"3":{"4":49000}},{"1":50525,"2":580,"3":{"4":58000}},{"1":50584,"2":510,"3":{"4":51000}},{"1":50585,"2":570,"3":{"4":57000}},{"1":50895,"2":560,"3":{"4":56000}},{"1":50572,"2":580,"3":{"4":58000}},{"1":50457,"2":570,"3":{"4":57000}},{"1":50111,"2":540,"3":{"4":54000}},{"1":50920,"2":570,"3":{"4":57000}},{"1":50521,"2":580,"3":{"4":58000}},{"1":51778,"2":580,"3":{"4":58000}},{"1":50222,"2":570,"3":{"4":57000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50219,"2":440,"3":{"4":88000}},{"1":50051,"2":440,"3":{"4":88000}},{"1":50480,"2":440,"3":{"4":88000}},{"1":50397,"2":440,"3":{"4":88000}},{"1":50414,"2":400,"3":{"4":80000}},{"1":50789,"2":450,"3":{"4":90000}},{"1":50769,"2":440,"3":{"4":88000}},{"1":50099,"2":360,"3":{"4":72000}},{"1":50776,"2":400,"3":{"4":80000}},{"1":50394,"2":440,"3":{"4":88000}},{"1":51078,"2":400,"3":{"4":80000}},{"1":50436,"2":450,"3":{"4":90000}},{"1":50523,"2":450,"3":{"4":90000}},{"1":50093,"2":370,"3":{"4":74000}},{"1":50681,"2":450,"3":{"4":90000}},{"1":50744,"2":450,"3":{"4":90000}},{"1":51148,"2":410,"3":{"4":82000}},{"1":50449,"2":440,"3":{"4":88000}},{"1":50451,"2":410,"3":{"4":82000}},{"1":50302,"2":450,"3":{"4":90000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":50810,"2":120,"3":{"4":120000}},{"1":50594,"2":130,"3":{"4":130000}},{"1":51966,"2":120,"3":{"4":120000}},{"1":53182,"2":140,"3":{"4":140000}},{"1":51491,"2":120,"3":{"4":120000}},{"1":51280,"2":120,"3":{"4":120000}},{"1":52620,"2":140,"3":{"4":140000}},{"1":50451,"2":120,"3":{"4":120000}},{"1":50618,"2":120,"3":{"4":120000}},{"1":52614,"2":140,"3":{"4":140000}},{"1":53257,"2":140,"3":{"4":140000}},{"1":53143,"2":140,"3":{"4":140000}},{"1":53249,"2":140,"3":{"4":140000}},{"1":55340,"2":130,"3":{"4":130000}},{"1":52471,"2":140,"3":{"4":140000}},{"1":52971,"2":110,"3":{"4":110000}},{"1":50571,"2":120,"3":{"4":120000}},{"1":52680,"2":140,"3":{"4":140000}},{"1":52573,"2":140,"3":{"4":140000}},{"1":52743,"2":140,"3":{"4":140000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":51403,"2":60,"3":{"4":120000}},{"1":51947,"2":70,"3":{"4":140000}},{"1":54171,"2":70,"3":{"4":140000}},{"1":54028,"2":70,"3":{"4":140000}},{"1":57772,"2":70,"3":{"4":140000}},{"1":57339,"2":70,"3":{"4":140000}},{"1":57087,"2":60,"3":{"4":120000}},{"1":57696,"2":70,"3":{"4":140000}},{"1":53214,"2":70,"3":{"4":140000}},{"1":53048,"2":70,"3":{"4":140000}},{"1":55500,"2":60,"3":{"4":120000}},{"1":52854,"2":70,"3":{"4":140000}},{"1":52579,"2":70,"3":{"4":140000}},{"1":54990,"2":70,"3":{"4":140000}},{"1":53492,"2":70,"3":{"4":140000}},{"1":53477,"2":70,"3":{"4":140000}},{"1":57527,"2":70,"3":{"4":140000}},{"1":52976,"2":70,"3":{"4":140000}},{"1":50255,"2":60,"3":{"4":120000}},{"1":52933,"2":70,"3":{"4":140000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":52426,"2":70,"3":{"4":70000}},{"1":57430,"2":70,"3":{"4":70000}},{"1":54899,"2":70,"3":{"4":70000}},{"1":52358,"2":70,"3":{"4":70000}},{"1":57265,"2":70,"3":{"4":70000}},{"1":51634,"2":60,"3":{"4":60000}},{"1":50320,"2":60,"3":{"4":60000}},{"1":57579,"2":70,"3":{"4":70000}},{"1":51246,"2":70,"3":{"4":70000}},{"1":52454,"2":70,"3":{"4":70000}},{"1":53064,"2":70,"3":{"4":70000}},{"1":52425,"2":70,"3":{"4":70000}},{"1":52274,"2":70,"3":{"4":70000}},{"1":52496,"2":70,"3":{"4":70000}},{"1":53243,"2":70,"3":{"4":70000}},{"1":52478,"2":70,"3":{"4":70000}},{"1":52664,"2":70,"3":{"4":70000}},{"1":52592,"2":70,"3":{"4":70000}},{"1":53880,"2":70,"3":{"4":70000}},{"1":57319,"2":70,"3":{"4":70000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50146,"2":450,"3":{"4":45000}},{"1":50566,"2":440,"3":{"4":44000}},{"1":50279,"2":460,"3":{"4":46000}},{"1":50747,"2":480,"3":{"4":48000}},{"1":50394,"2":470,"3":{"4":47000}},{"1":50130,"2":460,"3":{"4":46000}},{"1":50791,"2":470,"3":{"4":47000}},{"1":50145,"2":480,"3":{"4":48000}},{"1":50668,"2":440,"3":{"4":44000}},{"1":50587,"2":470,"3":{"4":47000}},{"1":50611,"2":400,"3":{"4":40000}},{"1":50661,"2":480,"3":{"4":48000}},{"1":50396,"2":480,"3":{"4":48000}},{"1":50601,"2":480,"3":{"4":48000}},{"1":50790,"2":480,"3":{"4":48000}},{"1":50789,"2":480,"3":{"4":48000}},{"1":50320,"2":480,"3":{"4":48000}},{"1":50826,"2":460,"3":{"4":46000}},{"1":50147,"2":450,"3":{"4":45000}},{"1":50876,"2":480,"3":{"4":48000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":51449,"2":400,"3":{"4":80000}},{"1":50944,"2":420,"3":{"4":84000}},{"1":50898,"2":430,"3":{"4":86000}},{"1":51143,"2":420,"3":{"4":84000}},{"1":50723,"2":430,"3":{"4":86000}},{"1":50237,"2":370,"3":{"4":74000}},{"1":50271,"2":420,"3":{"4":84000}},{"1":50577,"2":400,"3":{"4":80000}},{"1":51117,"2":420,"3":{"4":84000}},{"1":51760,"2":400,"3":{"4":80000}},{"1":50011,"2":370,"3":{"4":74000}},{"1":50406,"2":410,"3":{"4":82000}},{"1":50534,"2":390,"3":{"4":78000}},{"1":50008,"2":420,"3":{"4":84000}},{"1":51015,"2":390,"3":{"4":78000}},{"1":50462,"2":420,"3":{"4":84000}},{"1":50359,"2":390,"3":{"4":78000}},{"1":50996,"2":430,"3":{"4":86000}},{"1":50616,"2":390,"3":{"4":78000}},{"1":50763,"2":370,"3":{"4":74000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52089,"2":200,"3":{"4":200000}},{"1":50626,"2":170,"3":{"4":170000}},{"1":51922,"2":200,"3":{"4":200000}},{"1":51235,"2":180,"3":{"4":180000}},{"1":50085,"2":190,"3":{"4":190000}},{"1":51319,"2":200,"3":{"4":200000}},{"1":51985,"2":190,"3":{"4":190000}},{"1":50240,"2":170,"3":{"4":170000}},{"1":51021,"2":170,"3":{"4":170000}},{"1":52576,"2":180,"3":{"4":180000}},{"1":52095,"2":200,"3":{"4":200000}},{"1":51400,"2":200,"3":{"4":200000}},{"1":50331,"2":170,"3":{"4":170000}},{"1":51891,"2":200,"3":{"4":200000}},{"1":51964,"2":200,"3":{"4":200000}},{"1":51564,"2":200,"3":{"4":200000}},{"1":51056,"2":200,"3":{"4":200000}},{"1":51501,"2":180,"3":{"4":180000}},{"1":51986,"2":180,"3":{"4":180000}},{"1":51227,"2":200,"3":{"4":200000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52054,"2":90,"3":{"4":180000}},{"1":52635,"2":100,"3":{"4":200000}},{"1":54533,"2":100,"3":{"4":200000}},{"1":53945,"2":100,"3":{"4":200000}},{"1":54527,"2":100,"3":{"4":200000}},{"1":53735,"2":100,"3":{"4":200000}},{"1":51813,"2":100,"3":{"4":200000}},{"1":52755,"2":100,"3":{"4":200000}},{"1":55904,"2":90,"3":{"4":180000}},{"1":52457,"2":90,"3":{"4":180000}},{"1":52519,"2":100,"3":{"4":200000}},{"1":50295,"2":90,"3":{"4":180000}},{"1":51913,"2":100,"3":{"4":200000}},{"1":52601,"2":100,"3":{"4":200000}},{"1":51008,"2":100,"3":{"4":200000}},{"1":52633,"2":100,"3":{"4":200000}},{"1":50949,"2":100,"3":{"4":200000}},{"1":50935,"2":100,"3":{"4":200000}},{"1":54930,"2":90,"3":{"4":180000}},{"1":52333,"2":90,"3":{"4":180000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":53848,"2":70,"3":{"4":70000}},{"1":51716,"2":80,"3":{"4":80000}},{"1":52968,"2":80,"3":{"4":80000}},{"1":51435,"2":80,"3":{"4":80000}},{"1":52109,"2":80,"3":{"4":80000}},{"1":50864,"2":80,"3":{"4":80000}},{"1":53577,"2":80,"3":{"4":80000}},{"1":50078,"2":70,"3":{"4":70000}},{"1":52303,"2":80,"3":{"4":80000}},{"1":54891,"2":80,"3":{"4":80000}},{"1":50578,"2":80,"3":{"4":80000}},{"1":50500,"2":80,"3":{"4":80000}},{"1":50447,"2":80,"3":{"4":80000}},{"1":55207,"2":80,"3":{"4":80000}},{"1":53393,"2":80,"3":{"4":80000}},{"1":50615,"2":80,"3":{"4":80000}},{"1":54893,"2":80,"3":{"4":80000}},{"1":51214,"2":80,"3":{"4":80000}},{"1":51184,"2":70,"3":{"4":70000}},{"1":54770,"2":80,"3":{"4":80000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/0.5.0/props_chrome.pb.json b/benchmark/data/skybrian-macbookpro/0.5.0/props_chrome.pb.json
deleted file mode 100644
index bb926a8..0000000
--- a/benchmark/data/skybrian-macbookpro/0.5.0/props_chrome.pb.json
+++ /dev/null
@@ -1,65 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/props.html",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "10": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.5.0",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.27.2"},
-        {"1":"args","2":"hosted","3":"0.13.4"},
-        {"1":"async","2":"hosted","3":"1.9.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"boolean_selector","2":"hosted","3":"1.0.1"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.5.1"},
-        {"1":"convert","2":"hosted","3":"1.0.1"},
-        {"1":"crypto","2":"hosted","3":"0.9.2+1"},
-        {"1":"csslib","2":"hosted","3":"0.12.2"},
-        {"1":"fixnum","2":"hosted","3":"0.10.2"},
-        {"1":"glob","2":"hosted","3":"1.1.2"},
-        {"1":"html","2":"hosted","3":"0.12.2+1"},
-        {"1":"http_multi_server","2":"hosted","3":"2.0.1"},
-        {"1":"http_parser","2":"hosted","3":"2.2.1"},
-        {"1":"logging","2":"hosted","3":"0.11.2"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+2"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.9"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.2.2"},
-        {"1":"protobuf","2":"hosted","3":"0.5.0+1"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.4"},
-        {"1":"shelf","2":"hosted","3":"0.6.5"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+3"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.2.0"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1+1"},
-        {"1":"source_span","2":"hosted","3":"1.2.2"},
-        {"1":"stack_trace","2":"hosted","3":"1.6.4"},
-        {"1":"stream_channel","2":"hosted","3":"1.3.1"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4+1"},
-        {"1":"test","2":"hosted","3":"0.12.13"},
-        {"1":"typed_data","2":"hosted","3":"1.1.2"},
-        {"1":"utf","2":"hosted","3":"0.9.0+3"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"},
-        {"1":"web_socket_channel","2":"hosted","3":"1.0.2"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50345,"2":14100,"3":{"4":1410000}},{"1":50270,"2":14400,"3":{"4":1440000}},{"1":50325,"2":14600,"3":{"4":1460000}},{"1":50245,"2":13400,"3":{"4":1340000}},{"1":50150,"2":13300,"3":{"4":1330000}},{"1":50120,"2":12700,"3":{"4":1270000}},{"1":50080,"2":14200,"3":{"4":1420000}},{"1":50050,"2":14600,"3":{"4":1460000}},{"1":50235,"2":14700,"3":{"4":1470000}},{"1":50190,"2":13700,"3":{"4":1370000}},{"1":50300,"2":14900,"3":{"4":1490000}},{"1":50030,"2":14200,"3":{"4":1420000}},{"1":50315,"2":13400,"3":{"4":1340000}},{"1":50130,"2":13300,"3":{"4":1330000}},{"1":50320,"2":14500,"3":{"4":1450000}},{"1":50220,"2":14100,"3":{"4":1410000}},{"1":50170,"2":14500,"3":{"4":1450000}},{"1":50235,"2":12900,"3":{"4":1290000}},{"1":50165,"2":14600,"3":{"4":1460000}},{"1":50050,"2":14500,"3":{"4":1450000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50060,"2":18100,"3":{"4":1810000}},{"1":50330,"2":17700,"3":{"4":1770000}},{"1":50425,"2":17000,"3":{"4":1700000}},{"1":50170,"2":18000,"3":{"4":1800000}},{"1":50145,"2":18600,"3":{"4":1860000}},{"1":50120,"2":17700,"3":{"4":1770000}},{"1":50230,"2":16300,"3":{"4":1630000}},{"1":50185,"2":18600,"3":{"4":1860000}},{"1":50015,"2":18600,"3":{"4":1860000}},{"1":50215,"2":18600,"3":{"4":1860000}},{"1":50010,"2":15400,"3":{"4":1540000}},{"1":50210,"2":16700,"3":{"4":1670000}},{"1":50190,"2":15500,"3":{"4":1550000}},{"1":50050,"2":17900,"3":{"4":1790000}},{"1":50165,"2":16600,"3":{"4":1660000}},{"1":50025,"2":18200,"3":{"4":1820000}},{"1":50230,"2":17100,"3":{"4":1710000}},{"1":50165,"2":18600,"3":{"4":1860000}},{"1":50065,"2":16800,"3":{"4":1680000}},{"1":50125,"2":18200,"3":{"4":1820000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50055,"2":14400,"3":{"5":1440000}},{"1":50255,"2":15100,"3":{"5":1510000}},{"1":50220,"2":14600,"3":{"5":1460000}},{"1":50130,"2":16100,"3":{"5":1610000}},{"1":50135,"2":15400,"3":{"5":1540000}},{"1":50270,"2":15100,"3":{"5":1510000}},{"1":50300,"2":14000,"3":{"5":1400000}},{"1":50290,"2":16100,"3":{"5":1610000}},{"1":50155,"2":15600,"3":{"5":1560000}},{"1":50120,"2":15700,"3":{"5":1570000}},{"1":50255,"2":14500,"3":{"5":1450000}},{"1":50090,"2":16300,"3":{"5":1630000}},{"1":50240,"2":16300,"3":{"5":1630000}},{"1":50285,"2":15600,"3":{"5":1560000}},{"1":50165,"2":16400,"3":{"5":1640000}},{"1":50225,"2":16200,"3":{"5":1620000}},{"1":50350,"2":14700,"3":{"5":1470000}},{"1":50135,"2":14800,"3":{"5":1480000}},{"1":50260,"2":14600,"3":{"5":1460000}},{"1":50135,"2":15900,"3":{"5":1590000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50160,"2":14000,"3":{"5":1400000}},{"1":50130,"2":13900,"3":{"5":1390000}},{"1":50010,"2":16300,"3":{"5":1630000}},{"1":50260,"2":16500,"3":{"5":1650000}},{"1":50250,"2":15900,"3":{"5":1590000}},{"1":50040,"2":14400,"3":{"5":1440000}},{"1":50025,"2":14700,"3":{"5":1470000}},{"1":50250,"2":15800,"3":{"5":1580000}},{"1":50170,"2":14800,"3":{"5":1480000}},{"1":50035,"2":16000,"3":{"5":1600000}},{"1":50045,"2":16100,"3":{"5":1610000}},{"1":50005,"2":14100,"3":{"5":1410000}},{"1":50215,"2":16300,"3":{"5":1630000}},{"1":50075,"2":16200,"3":{"5":1620000}},{"1":50085,"2":14300,"3":{"5":1430000}},{"1":50000,"2":16000,"3":{"5":1600000}},{"1":50305,"2":14600,"3":{"5":1460000}},{"1":50375,"2":13600,"3":{"5":1360000}},{"1":50270,"2":16000,"3":{"5":1600000}},{"1":50300,"2":16200,"3":{"5":1620000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50020,"2":19800,"3":{"4":1980000}},{"1":50065,"2":21500,"3":{"4":2150000}},{"1":50000,"2":21600,"3":{"4":2160000}},{"1":50130,"2":21700,"3":{"4":2170000}},{"1":50015,"2":21400,"3":{"4":2140000}},{"1":50155,"2":19300,"3":{"4":1930000}},{"1":50070,"2":20000,"3":{"4":2000000}},{"1":50150,"2":21400,"3":{"4":2140000}},{"1":50160,"2":21700,"3":{"4":2170000}},{"1":50030,"2":17800,"3":{"4":1780000}},{"1":50190,"2":21100,"3":{"4":2110000}},{"1":50230,"2":18400,"3":{"4":1840000}},{"1":50025,"2":21700,"3":{"4":2170000}},{"1":50005,"2":21700,"3":{"4":2170000}},{"1":50170,"2":21000,"3":{"4":2100000}},{"1":50200,"2":19800,"3":{"4":1980000}},{"1":50150,"2":18400,"3":{"4":1840000}},{"1":50100,"2":18900,"3":{"4":1890000}},{"1":50155,"2":21800,"3":{"4":2180000}},{"1":50170,"2":21500,"3":{"4":2150000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50065,"2":17400,"3":{"4":1740000}},{"1":50050,"2":18700,"3":{"4":1870000}},{"1":50335,"2":17500,"3":{"4":1750000}},{"1":50240,"2":20900,"3":{"4":2090000}},{"1":50085,"2":20300,"3":{"4":2030000}},{"1":50005,"2":18100,"3":{"4":1810000}},{"1":50125,"2":21100,"3":{"4":2110000}},{"1":50110,"2":20700,"3":{"4":2070000}},{"1":50210,"2":20800,"3":{"4":2080000}},{"1":50075,"2":21100,"3":{"4":2110000}},{"1":50080,"2":20700,"3":{"4":2070000}},{"1":50035,"2":20600,"3":{"4":2060000}},{"1":50110,"2":18500,"3":{"4":1850000}},{"1":50130,"2":20700,"3":{"4":2070000}},{"1":50190,"2":17100,"3":{"4":1710000}},{"1":50240,"2":20900,"3":{"4":2090000}},{"1":50200,"2":19800,"3":{"4":1980000}},{"1":50130,"2":20900,"3":{"4":2090000}},{"1":50205,"2":20800,"3":{"4":2080000}},{"1":50140,"2":18300,"3":{"4":1830000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/0.5.0/props_vm.pb.json b/benchmark/data/skybrian-macbookpro/0.5.0/props_vm.pb.json
deleted file mode 100644
index a7026b6..0000000
--- a/benchmark/data/skybrian-macbookpro/0.5.0/props_vm.pb.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "props_vm.dart",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "2": 2,
-      "3": "1.14.2 (Tue Feb  9 15:10:44 2016) on \"macos_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.5.0",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.27.2"},
-        {"1":"args","2":"hosted","3":"0.13.4"},
-        {"1":"async","2":"hosted","3":"1.9.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"boolean_selector","2":"hosted","3":"1.0.1"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.5.1"},
-        {"1":"convert","2":"hosted","3":"1.0.1"},
-        {"1":"crypto","2":"hosted","3":"0.9.2+1"},
-        {"1":"csslib","2":"hosted","3":"0.12.2"},
-        {"1":"fixnum","2":"hosted","3":"0.10.2"},
-        {"1":"glob","2":"hosted","3":"1.1.2"},
-        {"1":"html","2":"hosted","3":"0.12.2+1"},
-        {"1":"http_multi_server","2":"hosted","3":"2.0.1"},
-        {"1":"http_parser","2":"hosted","3":"2.2.1"},
-        {"1":"logging","2":"hosted","3":"0.11.2"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+2"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.9"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.2.2"},
-        {"1":"protobuf","2":"hosted","3":"0.5.0+1"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.4"},
-        {"1":"shelf","2":"hosted","3":"0.6.5"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+3"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.2.0"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1+1"},
-        {"1":"source_span","2":"hosted","3":"1.2.2"},
-        {"1":"stack_trace","2":"hosted","3":"1.6.4"},
-        {"1":"stream_channel","2":"hosted","3":"1.3.1"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4+1"},
-        {"1":"test","2":"hosted","3":"0.12.13"},
-        {"1":"typed_data","2":"hosted","3":"1.1.2"},
-        {"1":"utf","2":"hosted","3":"0.9.0+3"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"},
-        {"1":"web_socket_channel","2":"hosted","3":"1.0.2"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50021,"2":154700,"3":{"4":15470000}},{"1":50031,"2":155900,"3":{"4":15590000}},{"1":50039,"2":125000,"3":{"4":12500000}},{"1":50000,"2":151500,"3":{"4":15150000}},{"1":50024,"2":159500,"3":{"4":15950000}},{"1":50000,"2":160200,"3":{"4":16020000}},{"1":50026,"2":152400,"3":{"4":15240000}},{"1":50017,"2":159800,"3":{"4":15980000}},{"1":50014,"2":162100,"3":{"4":16210000}},{"1":50007,"2":159000,"3":{"4":15900000}},{"1":50010,"2":169700,"3":{"4":16970000}},{"1":50003,"2":169400,"3":{"4":16940000}},{"1":50014,"2":172600,"3":{"4":17260000}},{"1":50005,"2":151200,"3":{"4":15120000}},{"1":50014,"2":171300,"3":{"4":17130000}},{"1":50020,"2":170600,"3":{"4":17060000}},{"1":50026,"2":172400,"3":{"4":17240000}},{"1":50021,"2":169300,"3":{"4":16930000}},{"1":50001,"2":170300,"3":{"4":17030000}},{"1":50013,"2":144400,"3":{"4":14440000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50014,"2":157700,"3":{"4":15770000}},{"1":50006,"2":160600,"3":{"4":16060000}},{"1":50015,"2":154800,"3":{"4":15480000}},{"1":50012,"2":159400,"3":{"4":15940000}},{"1":50001,"2":154500,"3":{"4":15450000}},{"1":50023,"2":159100,"3":{"4":15910000}},{"1":50054,"2":156500,"3":{"4":15650000}},{"1":50005,"2":148200,"3":{"4":14820000}},{"1":50019,"2":162700,"3":{"4":16270000}},{"1":50016,"2":157300,"3":{"4":15730000}},{"1":50011,"2":143400,"3":{"4":14340000}},{"1":50003,"2":150000,"3":{"4":15000000}},{"1":50021,"2":164900,"3":{"4":16490000}},{"1":50009,"2":159900,"3":{"4":15990000}},{"1":50000,"2":165700,"3":{"4":16570000}},{"1":50030,"2":163700,"3":{"4":16370000}},{"1":50011,"2":137200,"3":{"4":13720000}},{"1":50030,"2":154100,"3":{"4":15410000}},{"1":50029,"2":166300,"3":{"4":16630000}},{"1":50021,"2":157500,"3":{"4":15750000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50085,"2":44400,"3":{"5":4440000}},{"1":50085,"2":46200,"3":{"5":4620000}},{"1":50064,"2":45800,"3":{"5":4580000}},{"1":50070,"2":45600,"3":{"5":4560000}},{"1":50084,"2":43600,"3":{"5":4360000}},{"1":50037,"2":46200,"3":{"5":4620000}},{"1":50049,"2":47400,"3":{"5":4740000}},{"1":50091,"2":46900,"3":{"5":4690000}},{"1":50091,"2":47400,"3":{"5":4740000}},{"1":50020,"2":47300,"3":{"5":4730000}},{"1":50047,"2":46100,"3":{"5":4610000}},{"1":50051,"2":47300,"3":{"5":4730000}},{"1":50087,"2":46400,"3":{"5":4640000}},{"1":50101,"2":47200,"3":{"5":4720000}},{"1":50066,"2":46200,"3":{"5":4620000}},{"1":50094,"2":44000,"3":{"5":4400000}},{"1":50047,"2":45700,"3":{"5":4570000}},{"1":50105,"2":45200,"3":{"5":4520000}},{"1":50101,"2":46500,"3":{"5":4650000}},{"1":50054,"2":44200,"3":{"5":4420000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50020,"2":47100,"3":{"5":4710000}},{"1":50011,"2":45900,"3":{"5":4590000}},{"1":50054,"2":45900,"3":{"5":4590000}},{"1":50019,"2":46300,"3":{"5":4630000}},{"1":50086,"2":46000,"3":{"5":4600000}},{"1":50122,"2":45900,"3":{"5":4590000}},{"1":50055,"2":46700,"3":{"5":4670000}},{"1":50004,"2":46300,"3":{"5":4630000}},{"1":50029,"2":40500,"3":{"5":4050000}},{"1":50027,"2":45900,"3":{"5":4590000}},{"1":50060,"2":46600,"3":{"5":4660000}},{"1":50066,"2":46400,"3":{"5":4640000}},{"1":50057,"2":48500,"3":{"5":4850000}},{"1":50066,"2":47400,"3":{"5":4740000}},{"1":50109,"2":47600,"3":{"5":4760000}},{"1":50069,"2":48600,"3":{"5":4860000}},{"1":50123,"2":48200,"3":{"5":4820000}},{"1":50086,"2":44900,"3":{"5":4490000}},{"1":50023,"2":45400,"3":{"5":4540000}},{"1":50089,"2":46200,"3":{"5":4620000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50034,"2":141600,"3":{"4":14160000}},{"1":50028,"2":160300,"3":{"4":16030000}},{"1":50027,"2":142200,"3":{"4":14220000}},{"1":50003,"2":154000,"3":{"4":15400000}},{"1":50002,"2":136000,"3":{"4":13600000}},{"1":50018,"2":162500,"3":{"4":16250000}},{"1":50021,"2":163600,"3":{"4":16360000}},{"1":50023,"2":161600,"3":{"4":16160000}},{"1":50011,"2":143500,"3":{"4":14350000}},{"1":50030,"2":143700,"3":{"4":14370000}},{"1":50021,"2":159900,"3":{"4":15990000}},{"1":50021,"2":158400,"3":{"4":15840000}},{"1":50001,"2":160200,"3":{"4":16020000}},{"1":50002,"2":158300,"3":{"4":15830000}},{"1":50017,"2":159100,"3":{"4":15910000}},{"1":50020,"2":158900,"3":{"4":15890000}},{"1":50002,"2":140800,"3":{"4":14080000}},{"1":50025,"2":159200,"3":{"4":15920000}},{"1":50002,"2":160400,"3":{"4":16040000}},{"1":50011,"2":159600,"3":{"4":15960000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50019,"2":148000,"3":{"4":14800000}},{"1":50009,"2":151300,"3":{"4":15130000}},{"1":50010,"2":152500,"3":{"4":15250000}},{"1":50714,"2":141700,"3":{"4":14170000}},{"1":50002,"2":151300,"3":{"4":15130000}},{"1":50007,"2":151600,"3":{"4":15160000}},{"1":50013,"2":139100,"3":{"4":13910000}},{"1":50007,"2":149500,"3":{"4":14950000}},{"1":50003,"2":128400,"3":{"4":12840000}},{"1":50024,"2":152800,"3":{"4":15280000}},{"1":50015,"2":145700,"3":{"4":14570000}},{"1":50003,"2":151100,"3":{"4":15110000}},{"1":50030,"2":137800,"3":{"4":13780000}},{"1":50016,"2":143900,"3":{"4":14390000}},{"1":50001,"2":134100,"3":{"4":13410000}},{"1":50004,"2":149800,"3":{"4":14980000}},{"1":50027,"2":153000,"3":{"4":15300000}},{"1":50029,"2":137500,"3":{"4":13750000}},{"1":50014,"2":152600,"3":{"4":15260000}},{"1":50031,"2":135800,"3":{"4":13580000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/head/json_chrome.pb.json b/benchmark/data/skybrian-macbookpro/head/json_chrome.pb.json
deleted file mode 100644
index c337892..0000000
--- a/benchmark/data/skybrian-macbookpro/head/json_chrome.pb.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/readjson.html",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "10": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+5"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf"},
-        {"1":"description","2":"path","3":"0.4.2","4":"../dart-protobuf"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+8"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":52100,"2":190,"3":{"1":19000}},{"1":51595,"2":210,"3":{"1":21000}},{"1":52780,"2":200,"3":{"1":20000}},{"1":50965,"2":160,"3":{"1":16000}},{"1":50765,"2":170,"3":{"1":17000}},{"1":52760,"2":200,"3":{"1":20000}},{"1":52440,"2":200,"3":{"1":20000}},{"1":52470,"2":200,"3":{"1":20000}},{"1":51975,"2":180,"3":{"1":18000}},{"1":52340,"2":200,"3":{"1":20000}},{"1":50895,"2":170,"3":{"1":17000}},{"1":50390,"2":190,"3":{"1":19000}},{"1":52215,"2":180,"3":{"1":18000}},{"1":51705,"2":200,"3":{"1":20000}},{"1":52240,"2":180,"3":{"1":18000}},{"1":50925,"2":190,"3":{"1":19000}},{"1":50575,"2":190,"3":{"1":19000}},{"1":50875,"2":190,"3":{"1":19000}},{"1":50440,"2":190,"3":{"1":19000}},{"1":50075,"2":190,"3":{"1":19000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":51390,"2":140,"3":{"1":28000}},{"1":50055,"2":140,"3":{"1":28000}},{"1":50940,"2":160,"3":{"1":32000}},{"1":51935,"2":130,"3":{"1":26000}},{"1":52225,"2":150,"3":{"1":30000}},{"1":52290,"2":150,"3":{"1":30000}},{"1":52350,"2":150,"3":{"1":30000}},{"1":51040,"2":150,"3":{"1":30000}},{"1":52535,"2":130,"3":{"1":26000}},{"1":52710,"2":150,"3":{"1":30000}},{"1":52325,"2":150,"3":{"1":30000}},{"1":50065,"2":130,"3":{"1":26000}},{"1":51220,"2":140,"3":{"1":28000}},{"1":50550,"2":140,"3":{"1":28000}},{"1":50960,"2":130,"3":{"1":26000}},{"1":51340,"2":130,"3":{"1":26000}},{"1":52205,"2":150,"3":{"1":30000}},{"1":51865,"2":130,"3":{"1":26000}},{"1":52330,"2":150,"3":{"1":30000}},{"1":51400,"2":130,"3":{"1":26000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":53175,"2":60,"3":{"1":60000}},{"1":52005,"2":60,"3":{"1":60000}},{"1":50025,"2":50,"3":{"1":50000}},{"1":54705,"2":50,"3":{"1":50000}},{"1":57560,"2":60,"3":{"1":60000}},{"1":55450,"2":50,"3":{"1":50000}},{"1":57225,"2":60,"3":{"1":60000}},{"1":57595,"2":60,"3":{"1":60000}},{"1":57235,"2":60,"3":{"1":60000}},{"1":57225,"2":60,"3":{"1":60000}},{"1":57575,"2":60,"3":{"1":60000}},{"1":63100,"2":60,"3":{"1":60000}},{"1":57630,"2":60,"3":{"1":60000}},{"1":58115,"2":60,"3":{"1":60000}},{"1":57855,"2":60,"3":{"1":60000}},{"1":57420,"2":60,"3":{"1":60000}},{"1":59145,"2":60,"3":{"1":60000}},{"1":58390,"2":60,"3":{"1":60000}},{"1":53980,"2":50,"3":{"1":50000}},{"1":62655,"2":60,"3":{"1":60000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":59405,"2":30,"3":{"1":60000}},{"1":51085,"2":30,"3":{"1":60000}},{"1":51460,"2":30,"3":{"1":60000}},{"1":61665,"2":30,"3":{"1":60000}},{"1":57455,"2":30,"3":{"1":60000}},{"1":57380,"2":30,"3":{"1":60000}},{"1":63505,"2":30,"3":{"1":60000}},{"1":57720,"2":30,"3":{"1":60000}},{"1":57465,"2":30,"3":{"1":60000}},{"1":58250,"2":30,"3":{"1":60000}},{"1":71535,"2":30,"3":{"1":60000}},{"1":63395,"2":30,"3":{"1":60000}},{"1":58185,"2":30,"3":{"1":60000}},{"1":64280,"2":30,"3":{"1":60000}},{"1":63015,"2":30,"3":{"1":60000}},{"1":59095,"2":30,"3":{"1":60000}},{"1":57075,"2":30,"3":{"1":60000}},{"1":57855,"2":30,"3":{"1":60000}},{"1":57305,"2":30,"3":{"1":60000}},{"1":57875,"2":30,"3":{"1":60000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":50625,"2":150,"3":{"1":15000}},{"1":50680,"2":160,"3":{"1":16000}},{"1":50325,"2":170,"3":{"1":17000}},{"1":50325,"2":150,"3":{"1":15000}},{"1":50555,"2":140,"3":{"1":14000}},{"1":50260,"2":160,"3":{"1":16000}},{"1":50650,"2":160,"3":{"1":16000}},{"1":51245,"2":150,"3":{"1":15000}},{"1":52595,"2":170,"3":{"1":17000}},{"1":51020,"2":160,"3":{"1":16000}},{"1":51020,"2":150,"3":{"1":15000}},{"1":51995,"2":170,"3":{"1":17000}},{"1":52195,"2":170,"3":{"1":17000}},{"1":53065,"2":150,"3":{"1":15000}},{"1":52375,"2":150,"3":{"1":15000}},{"1":50175,"2":160,"3":{"1":16000}},{"1":53095,"2":170,"3":{"1":17000}},{"1":51625,"2":160,"3":{"1":16000}},{"1":52180,"2":170,"3":{"1":17000}},{"1":50950,"2":150,"3":{"1":15000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":52695,"2":160,"3":{"1":32000}},{"1":50705,"2":160,"3":{"1":32000}},{"1":51040,"2":160,"3":{"1":32000}},{"1":50475,"2":130,"3":{"1":26000}},{"1":50435,"2":150,"3":{"1":30000}},{"1":51675,"2":150,"3":{"1":30000}},{"1":52905,"2":160,"3":{"1":32000}},{"1":51940,"2":150,"3":{"1":30000}},{"1":50305,"2":150,"3":{"1":30000}},{"1":53065,"2":160,"3":{"1":32000}},{"1":51325,"2":160,"3":{"1":32000}},{"1":52615,"2":160,"3":{"1":32000}},{"1":52500,"2":160,"3":{"1":32000}},{"1":52720,"2":160,"3":{"1":32000}},{"1":52265,"2":160,"3":{"1":32000}},{"1":52485,"2":160,"3":{"1":32000}},{"1":52520,"2":160,"3":{"1":32000}},{"1":52400,"2":160,"3":{"1":32000}},{"1":51705,"2":160,"3":{"1":32000}},{"1":51405,"2":140,"3":{"1":28000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":50040,"2":110,"3":{"1":110000}},{"1":52090,"2":120,"3":{"1":120000}},{"1":50845,"2":110,"3":{"1":110000}},{"1":54650,"2":110,"3":{"1":110000}},{"1":50810,"2":110,"3":{"1":110000}},{"1":54250,"2":120,"3":{"1":120000}},{"1":50070,"2":110,"3":{"1":110000}},{"1":54255,"2":120,"3":{"1":120000}},{"1":50115,"2":110,"3":{"1":110000}},{"1":50630,"2":110,"3":{"1":110000}},{"1":53535,"2":120,"3":{"1":120000}},{"1":53885,"2":120,"3":{"1":120000}},{"1":53950,"2":120,"3":{"1":120000}},{"1":53595,"2":120,"3":{"1":120000}},{"1":53480,"2":120,"3":{"1":120000}},{"1":53940,"2":120,"3":{"1":120000}},{"1":53975,"2":120,"3":{"1":120000}},{"1":54205,"2":120,"3":{"1":120000}},{"1":54025,"2":120,"3":{"1":120000}},{"1":50320,"2":100,"3":{"1":100000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":50635,"2":50,"3":{"1":100000}},{"1":51170,"2":60,"3":{"1":120000}},{"1":55330,"2":60,"3":{"1":120000}},{"1":54045,"2":60,"3":{"1":120000}},{"1":53970,"2":60,"3":{"1":120000}},{"1":53580,"2":60,"3":{"1":120000}},{"1":52895,"2":60,"3":{"1":120000}},{"1":53810,"2":60,"3":{"1":120000}},{"1":53380,"2":60,"3":{"1":120000}},{"1":53915,"2":60,"3":{"1":120000}},{"1":53140,"2":60,"3":{"1":120000}},{"1":52895,"2":60,"3":{"1":120000}},{"1":53105,"2":60,"3":{"1":120000}},{"1":53005,"2":60,"3":{"1":120000}},{"1":57935,"2":60,"3":{"1":120000}},{"1":57900,"2":60,"3":{"1":120000}},{"1":53215,"2":60,"3":{"1":120000}},{"1":53155,"2":60,"3":{"1":120000}},{"1":58585,"2":60,"3":{"1":120000}},{"1":53065,"2":60,"3":{"1":120000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":50015,"2":170,"3":{"2":17000}},{"1":50765,"2":200,"3":{"2":20000}},{"1":51870,"2":190,"3":{"2":19000}},{"1":50910,"2":180,"3":{"2":18000}},{"1":50890,"2":190,"3":{"2":19000}},{"1":51060,"2":190,"3":{"2":19000}},{"1":51365,"2":170,"3":{"2":17000}},{"1":53725,"2":180,"3":{"2":18000}},{"1":51125,"2":190,"3":{"2":19000}},{"1":50730,"2":190,"3":{"2":19000}},{"1":50135,"2":190,"3":{"2":19000}},{"1":51255,"2":190,"3":{"2":19000}},{"1":51895,"2":180,"3":{"2":18000}},{"1":51945,"2":190,"3":{"2":19000}},{"1":50720,"2":190,"3":{"2":19000}},{"1":51260,"2":170,"3":{"2":17000}},{"1":51415,"2":190,"3":{"2":19000}},{"1":51230,"2":180,"3":{"2":18000}},{"1":51170,"2":170,"3":{"2":17000}},{"1":51185,"2":170,"3":{"2":17000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":52525,"2":160,"3":{"2":32000}},{"1":50960,"2":140,"3":{"2":28000}},{"1":53085,"2":150,"3":{"2":30000}},{"1":52360,"2":140,"3":{"2":28000}},{"1":52965,"2":130,"3":{"2":26000}},{"1":51315,"2":130,"3":{"2":26000}},{"1":50010,"2":140,"3":{"2":28000}},{"1":51935,"2":150,"3":{"2":30000}},{"1":53365,"2":150,"3":{"2":30000}},{"1":51145,"2":140,"3":{"2":28000}},{"1":52695,"2":130,"3":{"2":26000}},{"1":53210,"2":150,"3":{"2":30000}},{"1":53185,"2":150,"3":{"2":30000}},{"1":52915,"2":150,"3":{"2":30000}},{"1":52755,"2":150,"3":{"2":30000}},{"1":52975,"2":150,"3":{"2":30000}},{"1":52840,"2":150,"3":{"2":30000}},{"1":52995,"2":150,"3":{"2":30000}},{"1":53160,"2":150,"3":{"2":30000}},{"1":52470,"2":150,"3":{"2":30000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":54410,"2":60,"3":{"2":60000}},{"1":53505,"2":60,"3":{"2":60000}},{"1":57240,"2":60,"3":{"2":60000}},{"1":55895,"2":50,"3":{"2":50000}},{"1":56005,"2":50,"3":{"2":50000}},{"1":50875,"2":50,"3":{"2":50000}},{"1":50170,"2":50,"3":{"2":50000}},{"1":55620,"2":50,"3":{"2":50000}},{"1":59920,"2":60,"3":{"2":60000}},{"1":50360,"2":50,"3":{"2":50000}},{"1":50330,"2":50,"3":{"2":50000}},{"1":50445,"2":50,"3":{"2":50000}},{"1":59560,"2":60,"3":{"2":60000}},{"1":51120,"2":50,"3":{"2":50000}},{"1":50530,"2":50,"3":{"2":50000}},{"1":50130,"2":50,"3":{"2":50000}},{"1":50575,"2":50,"3":{"2":50000}},{"1":50920,"2":50,"3":{"2":50000}},{"1":58830,"2":60,"3":{"2":60000}},{"1":50060,"2":50,"3":{"2":50000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":53450,"2":30,"3":{"2":60000}},{"1":52100,"2":30,"3":{"2":60000}},{"1":58885,"2":30,"3":{"2":60000}},{"1":59885,"2":30,"3":{"2":60000}},{"1":59880,"2":30,"3":{"2":60000}},{"1":59720,"2":30,"3":{"2":60000}},{"1":59960,"2":30,"3":{"2":60000}},{"1":59755,"2":30,"3":{"2":60000}},{"1":64060,"2":30,"3":{"2":60000}},{"1":58810,"2":30,"3":{"2":60000}},{"1":59250,"2":30,"3":{"2":60000}},{"1":65505,"2":30,"3":{"2":60000}},{"1":64365,"2":30,"3":{"2":60000}},{"1":59810,"2":30,"3":{"2":60000}},{"1":59470,"2":30,"3":{"2":60000}},{"1":59770,"2":30,"3":{"2":60000}},{"1":59615,"2":30,"3":{"2":60000}},{"1":59715,"2":30,"3":{"2":60000}},{"1":70345,"2":30,"3":{"2":60000}},{"1":58395,"2":30,"3":{"2":60000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":51240,"2":160,"3":{"2":16000}},{"1":51805,"2":170,"3":{"2":17000}},{"1":51455,"2":160,"3":{"2":16000}},{"1":50195,"2":140,"3":{"2":14000}},{"1":51945,"2":160,"3":{"2":16000}},{"1":51380,"2":160,"3":{"2":16000}},{"1":52755,"2":160,"3":{"2":16000}},{"1":50705,"2":160,"3":{"2":16000}},{"1":51450,"2":160,"3":{"2":16000}},{"1":52510,"2":160,"3":{"2":16000}},{"1":52425,"2":160,"3":{"2":16000}},{"1":52790,"2":160,"3":{"2":16000}},{"1":56495,"2":160,"3":{"2":16000}},{"1":52635,"2":160,"3":{"2":16000}},{"1":52540,"2":160,"3":{"2":16000}},{"1":52575,"2":160,"3":{"2":16000}},{"1":51445,"2":160,"3":{"2":16000}},{"1":50745,"2":140,"3":{"2":14000}},{"1":51745,"2":160,"3":{"2":16000}},{"1":51770,"2":160,"3":{"2":16000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":51090,"2":140,"3":{"2":28000}},{"1":51930,"2":160,"3":{"2":32000}},{"1":50940,"2":150,"3":{"2":30000}},{"1":50430,"2":130,"3":{"2":26000}},{"1":51930,"2":150,"3":{"2":30000}},{"1":51445,"2":150,"3":{"2":30000}},{"1":52100,"2":150,"3":{"2":30000}},{"1":52100,"2":150,"3":{"2":30000}},{"1":51125,"2":150,"3":{"2":30000}},{"1":51525,"2":150,"3":{"2":30000}},{"1":53425,"2":150,"3":{"2":30000}},{"1":52215,"2":150,"3":{"2":30000}},{"1":52090,"2":150,"3":{"2":30000}},{"1":52615,"2":150,"3":{"2":30000}},{"1":52595,"2":150,"3":{"2":30000}},{"1":52420,"2":150,"3":{"2":30000}},{"1":51470,"2":150,"3":{"2":30000}},{"1":51850,"2":150,"3":{"2":30000}},{"1":51140,"2":150,"3":{"2":30000}},{"1":50045,"2":150,"3":{"2":30000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":53295,"2":110,"3":{"2":110000}},{"1":53060,"2":110,"3":{"2":110000}},{"1":51550,"2":100,"3":{"2":100000}},{"1":54525,"2":100,"3":{"2":100000}},{"1":54495,"2":110,"3":{"2":110000}},{"1":54340,"2":110,"3":{"2":110000}},{"1":50270,"2":100,"3":{"2":100000}},{"1":50635,"2":100,"3":{"2":100000}},{"1":50145,"2":100,"3":{"2":100000}},{"1":50370,"2":100,"3":{"2":100000}},{"1":50350,"2":100,"3":{"2":100000}},{"1":50695,"2":100,"3":{"2":100000}},{"1":50820,"2":100,"3":{"2":100000}},{"1":55890,"2":100,"3":{"2":100000}},{"1":50735,"2":100,"3":{"2":100000}},{"1":50795,"2":100,"3":{"2":100000}},{"1":50165,"2":100,"3":{"2":100000}},{"1":52305,"2":100,"3":{"2":100000}},{"1":50200,"2":100,"3":{"2":100000}},{"1":54140,"2":110,"3":{"2":110000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":57125,"2":60,"3":{"2":120000}},{"1":50110,"2":50,"3":{"2":100000}},{"1":50990,"2":50,"3":{"2":100000}},{"1":54005,"2":50,"3":{"2":100000}},{"1":54820,"2":50,"3":{"2":100000}},{"1":58090,"2":60,"3":{"2":120000}},{"1":59645,"2":60,"3":{"2":120000}},{"1":59520,"2":60,"3":{"2":120000}},{"1":59405,"2":60,"3":{"2":120000}},{"1":59640,"2":60,"3":{"2":120000}},{"1":50185,"2":50,"3":{"2":100000}},{"1":58945,"2":60,"3":{"2":120000}},{"1":55770,"2":50,"3":{"2":100000}},{"1":59615,"2":60,"3":{"2":120000}},{"1":63535,"2":60,"3":{"2":120000}},{"1":50235,"2":50,"3":{"2":100000}},{"1":58955,"2":60,"3":{"2":120000}},{"1":58980,"2":60,"3":{"2":120000}},{"1":59570,"2":60,"3":{"2":120000}},{"1":59150,"2":60,"3":{"2":120000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":51385,"2":190,"3":{"4":19000}},{"1":52095,"2":210,"3":{"4":21000}},{"1":52525,"2":180,"3":{"4":18000}},{"1":50655,"2":180,"3":{"4":18000}},{"1":50460,"2":190,"3":{"4":19000}},{"1":52160,"2":200,"3":{"4":20000}},{"1":50865,"2":190,"3":{"4":19000}},{"1":50110,"2":190,"3":{"4":19000}},{"1":50505,"2":190,"3":{"4":19000}},{"1":52055,"2":200,"3":{"4":20000}},{"1":52405,"2":200,"3":{"4":20000}},{"1":50100,"2":190,"3":{"4":19000}},{"1":50145,"2":190,"3":{"4":19000}},{"1":50920,"2":190,"3":{"4":19000}},{"1":50410,"2":190,"3":{"4":19000}},{"1":51260,"2":180,"3":{"4":18000}},{"1":50080,"2":190,"3":{"4":19000}},{"1":50060,"2":190,"3":{"4":19000}},{"1":51795,"2":200,"3":{"4":20000}},{"1":50120,"2":190,"3":{"4":19000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50875,"2":160,"3":{"4":32000}},{"1":52360,"2":160,"3":{"4":32000}},{"1":51270,"2":160,"3":{"4":32000}},{"1":50810,"2":130,"3":{"4":26000}},{"1":53345,"2":150,"3":{"4":30000}},{"1":53035,"2":150,"3":{"4":30000}},{"1":52260,"2":150,"3":{"4":30000}},{"1":51220,"2":130,"3":{"4":26000}},{"1":52790,"2":150,"3":{"4":30000}},{"1":53095,"2":150,"3":{"4":30000}},{"1":52780,"2":150,"3":{"4":30000}},{"1":53100,"2":150,"3":{"4":30000}},{"1":52965,"2":150,"3":{"4":30000}},{"1":52900,"2":150,"3":{"4":30000}},{"1":53180,"2":150,"3":{"4":30000}},{"1":52280,"2":150,"3":{"4":30000}},{"1":52870,"2":150,"3":{"4":30000}},{"1":52610,"2":150,"3":{"4":30000}},{"1":52130,"2":150,"3":{"4":30000}},{"1":53105,"2":150,"3":{"4":30000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":53490,"2":60,"3":{"4":60000}},{"1":50315,"2":50,"3":{"4":50000}},{"1":50215,"2":50,"3":{"4":50000}},{"1":51595,"2":50,"3":{"4":50000}},{"1":51560,"2":50,"3":{"4":50000}},{"1":59200,"2":60,"3":{"4":60000}},{"1":59590,"2":60,"3":{"4":60000}},{"1":51160,"2":50,"3":{"4":50000}},{"1":50575,"2":50,"3":{"4":50000}},{"1":50635,"2":50,"3":{"4":50000}},{"1":50090,"2":50,"3":{"4":50000}},{"1":50320,"2":50,"3":{"4":50000}},{"1":50280,"2":50,"3":{"4":50000}},{"1":50365,"2":50,"3":{"4":50000}},{"1":59200,"2":60,"3":{"4":60000}},{"1":50385,"2":50,"3":{"4":50000}},{"1":50915,"2":50,"3":{"4":50000}},{"1":55115,"2":50,"3":{"4":50000}},{"1":50910,"2":50,"3":{"4":50000}},{"1":50525,"2":50,"3":{"4":50000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":53510,"2":30,"3":{"4":60000}},{"1":53600,"2":30,"3":{"4":60000}},{"1":57735,"2":30,"3":{"4":60000}},{"1":60570,"2":30,"3":{"4":60000}},{"1":59940,"2":30,"3":{"4":60000}},{"1":59875,"2":30,"3":{"4":60000}},{"1":59495,"2":30,"3":{"4":60000}},{"1":65795,"2":30,"3":{"4":60000}},{"1":58785,"2":30,"3":{"4":60000}},{"1":59250,"2":30,"3":{"4":60000}},{"1":59125,"2":30,"3":{"4":60000}},{"1":59160,"2":30,"3":{"4":60000}},{"1":59295,"2":30,"3":{"4":60000}},{"1":59195,"2":30,"3":{"4":60000}},{"1":59750,"2":30,"3":{"4":60000}},{"1":60380,"2":30,"3":{"4":60000}},{"1":64920,"2":30,"3":{"4":60000}},{"1":59490,"2":30,"3":{"4":60000}},{"1":58525,"2":30,"3":{"4":60000}},{"1":59995,"2":30,"3":{"4":60000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":53040,"2":40,"3":{"4":40000}},{"1":63415,"2":50,"3":{"4":50000}},{"1":61655,"2":50,"3":{"4":50000}},{"1":50100,"2":40,"3":{"4":40000}},{"1":61565,"2":40,"3":{"4":40000}},{"1":50110,"2":40,"3":{"4":40000}},{"1":55560,"2":40,"3":{"4":40000}},{"1":50635,"2":40,"3":{"4":40000}},{"1":61945,"2":50,"3":{"4":50000}},{"1":55140,"2":40,"3":{"4":40000}},{"1":68015,"2":50,"3":{"4":50000}},{"1":56395,"2":40,"3":{"4":40000}},{"1":51095,"2":40,"3":{"4":40000}},{"1":68245,"2":50,"3":{"4":50000}},{"1":52150,"2":40,"3":{"4":40000}},{"1":56335,"2":40,"3":{"4":40000}},{"1":69140,"2":50,"3":{"4":50000}},{"1":68875,"2":50,"3":{"4":50000}},{"1":51065,"2":40,"3":{"4":40000}},{"1":52835,"2":40,"3":{"4":40000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":51435,"2":170,"3":{"4":17000}},{"1":51725,"2":150,"3":{"4":15000}},{"1":53085,"2":160,"3":{"4":16000}},{"1":51080,"2":160,"3":{"4":16000}},{"1":50605,"2":160,"3":{"4":16000}},{"1":53195,"2":150,"3":{"4":15000}},{"1":50865,"2":160,"3":{"4":16000}},{"1":51900,"2":160,"3":{"4":16000}},{"1":50195,"2":140,"3":{"4":14000}},{"1":50605,"2":160,"3":{"4":16000}},{"1":52635,"2":170,"3":{"4":17000}},{"1":50680,"2":160,"3":{"4":16000}},{"1":51470,"2":160,"3":{"4":16000}},{"1":51450,"2":160,"3":{"4":16000}},{"1":51205,"2":160,"3":{"4":16000}},{"1":51715,"2":150,"3":{"4":15000}},{"1":52700,"2":150,"3":{"4":15000}},{"1":51200,"2":160,"3":{"4":16000}},{"1":52905,"2":160,"3":{"4":16000}},{"1":50585,"2":160,"3":{"4":16000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":51330,"2":160,"3":{"4":32000}},{"1":51085,"2":150,"3":{"4":30000}},{"1":51490,"2":140,"3":{"4":28000}},{"1":51395,"2":150,"3":{"4":30000}},{"1":50990,"2":150,"3":{"4":30000}},{"1":51315,"2":150,"3":{"4":30000}},{"1":52880,"2":160,"3":{"4":32000}},{"1":52615,"2":150,"3":{"4":30000}},{"1":50420,"2":150,"3":{"4":30000}},{"1":51060,"2":150,"3":{"4":30000}},{"1":50135,"2":150,"3":{"4":30000}},{"1":51415,"2":150,"3":{"4":30000}},{"1":50855,"2":150,"3":{"4":30000}},{"1":50945,"2":150,"3":{"4":30000}},{"1":52990,"2":150,"3":{"4":30000}},{"1":51075,"2":150,"3":{"4":30000}},{"1":50500,"2":150,"3":{"4":30000}},{"1":50665,"2":150,"3":{"4":30000}},{"1":51805,"2":150,"3":{"4":30000}},{"1":52105,"2":140,"3":{"4":28000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":55650,"2":110,"3":{"4":110000}},{"1":53525,"2":110,"3":{"4":110000}},{"1":50610,"2":100,"3":{"4":100000}},{"1":54215,"2":110,"3":{"4":110000}},{"1":54290,"2":110,"3":{"4":110000}},{"1":50270,"2":100,"3":{"4":100000}},{"1":50195,"2":100,"3":{"4":100000}},{"1":50325,"2":100,"3":{"4":100000}},{"1":55820,"2":100,"3":{"4":100000}},{"1":54945,"2":110,"3":{"4":110000}},{"1":54635,"2":110,"3":{"4":110000}},{"1":50175,"2":90,"3":{"4":90000}},{"1":50230,"2":100,"3":{"4":100000}},{"1":50090,"2":100,"3":{"4":100000}},{"1":54950,"2":110,"3":{"4":110000}},{"1":54540,"2":110,"3":{"4":110000}},{"1":50200,"2":100,"3":{"4":100000}},{"1":54480,"2":110,"3":{"4":110000}},{"1":54955,"2":110,"3":{"4":110000}},{"1":50115,"2":100,"3":{"4":100000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":51270,"2":50,"3":{"4":100000}},{"1":57460,"2":60,"3":{"4":120000}},{"1":51410,"2":50,"3":{"4":100000}},{"1":57900,"2":60,"3":{"4":120000}},{"1":60780,"2":60,"3":{"4":120000}},{"1":50085,"2":50,"3":{"4":100000}},{"1":58870,"2":60,"3":{"4":120000}},{"1":58950,"2":60,"3":{"4":120000}},{"1":58405,"2":60,"3":{"4":120000}},{"1":59010,"2":60,"3":{"4":120000}},{"1":58685,"2":60,"3":{"4":120000}},{"1":58960,"2":60,"3":{"4":120000}},{"1":58945,"2":60,"3":{"4":120000}},{"1":59705,"2":60,"3":{"4":120000}},{"1":53940,"2":50,"3":{"4":100000}},{"1":58650,"2":60,"3":{"4":120000}},{"1":58310,"2":60,"3":{"4":120000}},{"1":58775,"2":60,"3":{"4":120000}},{"1":58910,"2":60,"3":{"4":120000}},{"1":58645,"2":60,"3":{"4":120000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":52200,"2":50,"3":{"4":50000}},{"1":59035,"2":60,"3":{"4":60000}},{"1":52830,"2":50,"3":{"4":50000}},{"1":53705,"2":50,"3":{"4":50000}},{"1":50585,"2":40,"3":{"4":40000}},{"1":58430,"2":50,"3":{"4":50000}},{"1":50230,"2":40,"3":{"4":40000}},{"1":67675,"2":60,"3":{"4":60000}},{"1":55135,"2":50,"3":{"4":50000}},{"1":67190,"2":50,"3":{"4":50000}},{"1":50055,"2":40,"3":{"4":40000}},{"1":51465,"2":50,"3":{"4":50000}},{"1":53410,"2":50,"3":{"4":50000}},{"1":54165,"2":50,"3":{"4":50000}},{"1":58880,"2":50,"3":{"4":50000}},{"1":55355,"2":40,"3":{"4":40000}},{"1":59970,"2":50,"3":{"4":50000}},{"1":60355,"2":50,"3":{"4":50000}},{"1":54570,"2":50,"3":{"4":50000}},{"1":52945,"2":50,"3":{"4":50000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/head/json_vm.pb.json b/benchmark/data/skybrian-macbookpro/head/json_vm.pb.json
deleted file mode 100644
index c880211..0000000
--- a/benchmark/data/skybrian-macbookpro/head/json_vm.pb.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "readjson_vm.dart",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "2": 2,
-      "3": "1.12.0 (Mon Aug 31 04:17:53 2015) on \"macos_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+5"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf"},
-        {"1":"description","2":"path","3":"0.4.2","4":"../dart-protobuf"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+8"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":50708,"2":410,"3":{"1":41000}},{"1":50407,"2":610,"3":{"1":61000}},{"1":50306,"2":630,"3":{"1":63000}},{"1":50244,"2":680,"3":{"1":68000}},{"1":50097,"2":640,"3":{"1":64000}},{"1":50750,"2":640,"3":{"1":64000}},{"1":50567,"2":640,"3":{"1":64000}},{"1":50514,"2":670,"3":{"1":67000}},{"1":50513,"2":680,"3":{"1":68000}},{"1":50174,"2":670,"3":{"1":67000}},{"1":50256,"2":640,"3":{"1":64000}},{"1":50044,"2":680,"3":{"1":68000}},{"1":50113,"2":610,"3":{"1":61000}},{"1":50002,"2":630,"3":{"1":63000}},{"1":50625,"2":680,"3":{"1":68000}},{"1":50345,"2":680,"3":{"1":68000}},{"1":50595,"2":680,"3":{"1":68000}},{"1":50021,"2":680,"3":{"1":68000}},{"1":50223,"2":680,"3":{"1":68000}},{"1":50449,"2":640,"3":{"1":64000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":50322,"2":530,"3":{"1":106000}},{"1":50527,"2":530,"3":{"1":106000}},{"1":50036,"2":530,"3":{"1":106000}},{"1":50363,"2":530,"3":{"1":106000}},{"1":50459,"2":530,"3":{"1":106000}},{"1":50600,"2":510,"3":{"1":102000}},{"1":50420,"2":530,"3":{"1":106000}},{"1":50350,"2":530,"3":{"1":106000}},{"1":50230,"2":530,"3":{"1":106000}},{"1":50863,"2":530,"3":{"1":106000}},{"1":50175,"2":490,"3":{"1":98000}},{"1":50713,"2":480,"3":{"1":96000}},{"1":50676,"2":490,"3":{"1":98000}},{"1":50258,"2":470,"3":{"1":94000}},{"1":50406,"2":500,"3":{"1":100000}},{"1":50055,"2":530,"3":{"1":106000}},{"1":50864,"2":480,"3":{"1":96000}},{"1":50758,"2":540,"3":{"1":108000}},{"1":50307,"2":530,"3":{"1":106000}},{"1":50598,"2":540,"3":{"1":108000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":50265,"2":160,"3":{"1":160000}},{"1":52710,"2":150,"3":{"1":150000}},{"1":51110,"2":160,"3":{"1":160000}},{"1":52554,"2":160,"3":{"1":160000}},{"1":51490,"2":160,"3":{"1":160000}},{"1":51142,"2":160,"3":{"1":160000}},{"1":51369,"2":160,"3":{"1":160000}},{"1":50998,"2":160,"3":{"1":160000}},{"1":51733,"2":160,"3":{"1":160000}},{"1":50784,"2":160,"3":{"1":160000}},{"1":52357,"2":170,"3":{"1":170000}},{"1":50983,"2":160,"3":{"1":160000}},{"1":51835,"2":160,"3":{"1":160000}},{"1":51801,"2":170,"3":{"1":170000}},{"1":52824,"2":160,"3":{"1":160000}},{"1":50345,"2":150,"3":{"1":150000}},{"1":53036,"2":160,"3":{"1":160000}},{"1":51865,"2":160,"3":{"1":160000}},{"1":52834,"2":150,"3":{"1":150000}},{"1":50083,"2":130,"3":{"1":130000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":54315,"2":90,"3":{"1":180000}},{"1":55004,"2":90,"3":{"1":180000}},{"1":50673,"2":80,"3":{"1":160000}},{"1":54729,"2":90,"3":{"1":180000}},{"1":54376,"2":90,"3":{"1":180000}},{"1":55234,"2":90,"3":{"1":180000}},{"1":54826,"2":90,"3":{"1":180000}},{"1":54704,"2":90,"3":{"1":180000}},{"1":54588,"2":90,"3":{"1":180000}},{"1":51529,"2":70,"3":{"1":140000}},{"1":51192,"2":70,"3":{"1":140000}},{"1":53064,"2":80,"3":{"1":160000}},{"1":52241,"2":80,"3":{"1":160000}},{"1":52098,"2":80,"3":{"1":160000}},{"1":56610,"2":80,"3":{"1":160000}},{"1":53593,"2":70,"3":{"1":140000}},{"1":56833,"2":80,"3":{"1":160000}},{"1":55795,"2":80,"3":{"1":160000}},{"1":54544,"2":80,"3":{"1":160000}},{"1":55354,"2":80,"3":{"1":160000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":50314,"2":520,"3":{"1":52000}},{"1":50501,"2":520,"3":{"1":52000}},{"1":50283,"2":520,"3":{"1":52000}},{"1":50266,"2":520,"3":{"1":52000}},{"1":50556,"2":530,"3":{"1":53000}},{"1":50828,"2":550,"3":{"1":55000}},{"1":50092,"2":550,"3":{"1":55000}},{"1":50420,"2":540,"3":{"1":54000}},{"1":50209,"2":520,"3":{"1":52000}},{"1":50199,"2":540,"3":{"1":54000}},{"1":50547,"2":490,"3":{"1":49000}},{"1":50126,"2":510,"3":{"1":51000}},{"1":50372,"2":480,"3":{"1":48000}},{"1":50611,"2":520,"3":{"1":52000}},{"1":50133,"2":520,"3":{"1":52000}},{"1":50223,"2":510,"3":{"1":51000}},{"1":50673,"2":450,"3":{"1":45000}},{"1":50670,"2":450,"3":{"1":45000}},{"1":50707,"2":460,"3":{"1":46000}},{"1":50560,"2":480,"3":{"1":48000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":50894,"2":520,"3":{"1":104000}},{"1":50042,"2":510,"3":{"1":102000}},{"1":50272,"2":530,"3":{"1":106000}},{"1":50502,"2":440,"3":{"1":88000}},{"1":50613,"2":520,"3":{"1":104000}},{"1":50173,"2":530,"3":{"1":106000}},{"1":50741,"2":500,"3":{"1":100000}},{"1":50316,"2":500,"3":{"1":100000}},{"1":50437,"2":490,"3":{"1":98000}},{"1":50028,"2":430,"3":{"1":86000}},{"1":51025,"2":450,"3":{"1":90000}},{"1":50293,"2":420,"3":{"1":84000}},{"1":50775,"2":450,"3":{"1":90000}},{"1":50245,"2":410,"3":{"1":82000}},{"1":50851,"2":410,"3":{"1":82000}},{"1":50106,"2":390,"3":{"1":78000}},{"1":50447,"2":450,"3":{"1":90000}},{"1":51017,"2":440,"3":{"1":88000}},{"1":50704,"2":470,"3":{"1":94000}},{"1":51008,"2":450,"3":{"1":90000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":51540,"2":290,"3":{"1":290000}},{"1":51694,"2":270,"3":{"1":270000}},{"1":51796,"2":270,"3":{"1":270000}},{"1":51263,"2":290,"3":{"1":290000}},{"1":50664,"2":290,"3":{"1":290000}},{"1":50532,"2":290,"3":{"1":290000}},{"1":50470,"2":290,"3":{"1":290000}},{"1":50399,"2":270,"3":{"1":270000}},{"1":51094,"2":270,"3":{"1":270000}},{"1":51591,"2":270,"3":{"1":270000}},{"1":51159,"2":250,"3":{"1":250000}},{"1":50120,"2":270,"3":{"1":270000}},{"1":51420,"2":270,"3":{"1":270000}},{"1":51715,"2":250,"3":{"1":250000}},{"1":50886,"2":270,"3":{"1":270000}},{"1":51262,"2":270,"3":{"1":270000}},{"1":50676,"2":270,"3":{"1":270000}},{"1":50726,"2":280,"3":{"1":280000}},{"1":51724,"2":260,"3":{"1":260000}},{"1":50501,"2":260,"3":{"1":260000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":50088,"2":130,"3":{"1":260000}},{"1":53600,"2":140,"3":{"1":280000}},{"1":50754,"2":130,"3":{"1":260000}},{"1":50164,"2":130,"3":{"1":260000}},{"1":50137,"2":130,"3":{"1":260000}},{"1":50958,"2":130,"3":{"1":260000}},{"1":51039,"2":130,"3":{"1":260000}},{"1":53722,"2":140,"3":{"1":280000}},{"1":53485,"2":140,"3":{"1":280000}},{"1":50064,"2":130,"3":{"1":260000}},{"1":51673,"2":130,"3":{"1":260000}},{"1":50797,"2":120,"3":{"1":240000}},{"1":50464,"2":130,"3":{"1":260000}},{"1":56293,"2":130,"3":{"1":260000}},{"1":53174,"2":130,"3":{"1":260000}},{"1":53448,"2":130,"3":{"1":260000}},{"1":53194,"2":130,"3":{"1":260000}},{"1":52061,"2":140,"3":{"1":280000}},{"1":50669,"2":120,"3":{"1":240000}},{"1":50294,"2":130,"3":{"1":260000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":50755,"2":590,"3":{"2":59000}},{"1":50558,"2":590,"3":{"2":59000}},{"1":50386,"2":610,"3":{"2":61000}},{"1":50189,"2":600,"3":{"2":60000}},{"1":50238,"2":610,"3":{"2":61000}},{"1":50642,"2":610,"3":{"2":61000}},{"1":50679,"2":610,"3":{"2":61000}},{"1":50143,"2":600,"3":{"2":60000}},{"1":50611,"2":660,"3":{"2":66000}},{"1":50121,"2":600,"3":{"2":60000}},{"1":50207,"2":600,"3":{"2":60000}},{"1":50340,"2":580,"3":{"2":58000}},{"1":50686,"2":660,"3":{"2":66000}},{"1":50670,"2":600,"3":{"2":60000}},{"1":50730,"2":540,"3":{"2":54000}},{"1":50135,"2":630,"3":{"2":63000}},{"1":50053,"2":600,"3":{"2":60000}},{"1":50073,"2":660,"3":{"2":66000}},{"1":50621,"2":620,"3":{"2":62000}},{"1":50224,"2":570,"3":{"2":57000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":50703,"2":470,"3":{"2":94000}},{"1":50568,"2":470,"3":{"2":94000}},{"1":50660,"2":470,"3":{"2":94000}},{"1":50482,"2":470,"3":{"2":94000}},{"1":51032,"2":470,"3":{"2":94000}},{"1":50614,"2":470,"3":{"2":94000}},{"1":50617,"2":470,"3":{"2":94000}},{"1":50332,"2":470,"3":{"2":94000}},{"1":50370,"2":500,"3":{"2":100000}},{"1":50123,"2":500,"3":{"2":100000}},{"1":50005,"2":500,"3":{"2":100000}},{"1":50229,"2":490,"3":{"2":98000}},{"1":54014,"2":300,"3":{"2":60000}},{"1":50769,"2":460,"3":{"2":92000}},{"1":50913,"2":480,"3":{"2":96000}},{"1":50520,"2":460,"3":{"2":92000}},{"1":50347,"2":440,"3":{"2":88000}},{"1":50835,"2":480,"3":{"2":96000}},{"1":50176,"2":470,"3":{"2":94000}},{"1":51028,"2":440,"3":{"2":88000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":51067,"2":150,"3":{"2":150000}},{"1":51138,"2":150,"3":{"2":150000}},{"1":52489,"2":150,"3":{"2":150000}},{"1":52685,"2":150,"3":{"2":150000}},{"1":52023,"2":150,"3":{"2":150000}},{"1":52501,"2":130,"3":{"2":130000}},{"1":50577,"2":130,"3":{"2":130000}},{"1":50521,"2":140,"3":{"2":140000}},{"1":52774,"2":150,"3":{"2":150000}},{"1":51614,"2":140,"3":{"2":140000}},{"1":54178,"2":140,"3":{"2":140000}},{"1":52020,"2":160,"3":{"2":160000}},{"1":52536,"2":160,"3":{"2":160000}},{"1":50516,"2":130,"3":{"2":130000}},{"1":53018,"2":150,"3":{"2":150000}},{"1":52101,"2":150,"3":{"2":150000}},{"1":51412,"2":150,"3":{"2":150000}},{"1":54097,"2":140,"3":{"2":140000}},{"1":50790,"2":130,"3":{"2":130000}},{"1":50714,"2":130,"3":{"2":130000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":51786,"2":70,"3":{"2":140000}},{"1":54757,"2":80,"3":{"2":160000}},{"1":55541,"2":80,"3":{"2":160000}},{"1":56373,"2":80,"3":{"2":160000}},{"1":56917,"2":80,"3":{"2":160000}},{"1":54907,"2":80,"3":{"2":160000}},{"1":55220,"2":80,"3":{"2":160000}},{"1":51250,"2":70,"3":{"2":140000}},{"1":50462,"2":70,"3":{"2":140000}},{"1":50619,"2":70,"3":{"2":140000}},{"1":53607,"2":60,"3":{"2":120000}},{"1":53666,"2":80,"3":{"2":160000}},{"1":50898,"2":80,"3":{"2":160000}},{"1":50567,"2":70,"3":{"2":140000}},{"1":51508,"2":70,"3":{"2":140000}},{"1":57016,"2":80,"3":{"2":160000}},{"1":54103,"2":80,"3":{"2":160000}},{"1":52079,"2":80,"3":{"2":160000}},{"1":51445,"2":70,"3":{"2":140000}},{"1":53356,"2":80,"3":{"2":160000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":50912,"2":520,"3":{"2":52000}},{"1":50494,"2":530,"3":{"2":53000}},{"1":50157,"2":540,"3":{"2":54000}},{"1":50684,"2":510,"3":{"2":51000}},{"1":50858,"2":550,"3":{"2":55000}},{"1":50871,"2":540,"3":{"2":54000}},{"1":50846,"2":520,"3":{"2":52000}},{"1":50164,"2":520,"3":{"2":52000}},{"1":50317,"2":540,"3":{"2":54000}},{"1":50473,"2":570,"3":{"2":57000}},{"1":50187,"2":550,"3":{"2":55000}},{"1":50320,"2":530,"3":{"2":53000}},{"1":50315,"2":550,"3":{"2":55000}},{"1":50403,"2":520,"3":{"2":52000}},{"1":50824,"2":550,"3":{"2":55000}},{"1":50560,"2":420,"3":{"2":42000}},{"1":50744,"2":500,"3":{"2":50000}},{"1":50718,"2":510,"3":{"2":51000}},{"1":50106,"2":470,"3":{"2":47000}},{"1":50154,"2":510,"3":{"2":51000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":50852,"2":490,"3":{"2":98000}},{"1":50877,"2":500,"3":{"2":100000}},{"1":50869,"2":460,"3":{"2":92000}},{"1":50147,"2":510,"3":{"2":102000}},{"1":50132,"2":510,"3":{"2":102000}},{"1":50455,"2":520,"3":{"2":104000}},{"1":50600,"2":480,"3":{"2":96000}},{"1":50844,"2":510,"3":{"2":102000}},{"1":50471,"2":490,"3":{"2":98000}},{"1":50680,"2":490,"3":{"2":98000}},{"1":50376,"2":420,"3":{"2":84000}},{"1":50727,"2":450,"3":{"2":90000}},{"1":50740,"2":440,"3":{"2":88000}},{"1":50318,"2":470,"3":{"2":94000}},{"1":50272,"2":450,"3":{"2":90000}},{"1":50434,"2":480,"3":{"2":96000}},{"1":50206,"2":460,"3":{"2":92000}},{"1":50292,"2":470,"3":{"2":94000}},{"1":51190,"2":400,"3":{"2":80000}},{"1":50994,"2":470,"3":{"2":94000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":51096,"2":230,"3":{"2":230000}},{"1":50385,"2":270,"3":{"2":270000}},{"1":50909,"2":270,"3":{"2":270000}},{"1":50686,"2":270,"3":{"2":270000}},{"1":51181,"2":270,"3":{"2":270000}},{"1":50565,"2":270,"3":{"2":270000}},{"1":51159,"2":270,"3":{"2":270000}},{"1":50846,"2":270,"3":{"2":270000}},{"1":50973,"2":270,"3":{"2":270000}},{"1":50010,"2":240,"3":{"2":240000}},{"1":51205,"2":250,"3":{"2":250000}},{"1":50679,"2":240,"3":{"2":240000}},{"1":50753,"2":240,"3":{"2":240000}},{"1":51430,"2":240,"3":{"2":240000}},{"1":51327,"2":230,"3":{"2":230000}},{"1":50072,"2":250,"3":{"2":250000}},{"1":51139,"2":260,"3":{"2":260000}},{"1":50519,"2":240,"3":{"2":240000}},{"1":50391,"2":220,"3":{"2":220000}},{"1":51332,"2":240,"3":{"2":240000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":54146,"2":130,"3":{"2":260000}},{"1":54071,"2":130,"3":{"2":260000}},{"1":50248,"2":120,"3":{"2":240000}},{"1":53935,"2":130,"3":{"2":260000}},{"1":51901,"2":130,"3":{"2":260000}},{"1":50223,"2":120,"3":{"2":240000}},{"1":52445,"2":120,"3":{"2":240000}},{"1":53278,"2":140,"3":{"2":280000}},{"1":51656,"2":120,"3":{"2":240000}},{"1":53518,"2":120,"3":{"2":240000}},{"1":52561,"2":120,"3":{"2":240000}},{"1":50068,"2":120,"3":{"2":240000}},{"1":51829,"2":120,"3":{"2":240000}},{"1":53273,"2":130,"3":{"2":260000}},{"1":51479,"2":110,"3":{"2":220000}},{"1":51167,"2":130,"3":{"2":260000}},{"1":51055,"2":130,"3":{"2":260000}},{"1":53569,"2":140,"3":{"2":280000}},{"1":50331,"2":120,"3":{"2":240000}},{"1":51164,"2":120,"3":{"2":240000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50028,"2":500,"3":{"4":50000}},{"1":50662,"2":640,"3":{"4":64000}},{"1":50002,"2":530,"3":{"4":53000}},{"1":51173,"2":510,"3":{"4":51000}},{"1":50094,"2":540,"3":{"4":54000}},{"1":50577,"2":550,"3":{"4":55000}},{"1":50796,"2":570,"3":{"4":57000}},{"1":50081,"2":540,"3":{"4":54000}},{"1":50699,"2":530,"3":{"4":53000}},{"1":50551,"2":400,"3":{"4":40000}},{"1":50175,"2":620,"3":{"4":62000}},{"1":50339,"2":630,"3":{"4":63000}},{"1":50452,"2":550,"3":{"4":55000}},{"1":50454,"2":560,"3":{"4":56000}},{"1":50620,"2":460,"3":{"4":46000}},{"1":50718,"2":470,"3":{"4":47000}},{"1":50718,"2":580,"3":{"4":58000}},{"1":50536,"2":540,"3":{"4":54000}},{"1":51284,"2":390,"3":{"4":39000}},{"1":50220,"2":480,"3":{"4":48000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50413,"2":420,"3":{"4":84000}},{"1":50363,"2":430,"3":{"4":86000}},{"1":50628,"2":420,"3":{"4":84000}},{"1":50967,"2":430,"3":{"4":86000}},{"1":50481,"2":410,"3":{"4":82000}},{"1":50241,"2":470,"3":{"4":94000}},{"1":50443,"2":400,"3":{"4":80000}},{"1":50231,"2":420,"3":{"4":84000}},{"1":50828,"2":420,"3":{"4":84000}},{"1":50659,"2":440,"3":{"4":88000}},{"1":51045,"2":400,"3":{"4":80000}},{"1":51219,"2":390,"3":{"4":78000}},{"1":50658,"2":470,"3":{"4":94000}},{"1":50162,"2":480,"3":{"4":96000}},{"1":50699,"2":480,"3":{"4":96000}},{"1":50980,"2":490,"3":{"4":98000}},{"1":50162,"2":480,"3":{"4":96000}},{"1":50985,"2":490,"3":{"4":98000}},{"1":50915,"2":480,"3":{"4":96000}},{"1":50007,"2":480,"3":{"4":96000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":53218,"2":150,"3":{"4":150000}},{"1":50902,"2":140,"3":{"4":140000}},{"1":51674,"2":110,"3":{"4":110000}},{"1":51937,"2":130,"3":{"4":130000}},{"1":52402,"2":120,"3":{"4":120000}},{"1":52910,"2":130,"3":{"4":130000}},{"1":51442,"2":130,"3":{"4":130000}},{"1":52826,"2":140,"3":{"4":140000}},{"1":53373,"2":150,"3":{"4":150000}},{"1":50103,"2":130,"3":{"4":130000}},{"1":52505,"2":150,"3":{"4":150000}},{"1":52541,"2":150,"3":{"4":150000}},{"1":52604,"2":150,"3":{"4":150000}},{"1":52542,"2":150,"3":{"4":150000}},{"1":53441,"2":150,"3":{"4":150000}},{"1":51035,"2":140,"3":{"4":140000}},{"1":52904,"2":150,"3":{"4":150000}},{"1":53303,"2":150,"3":{"4":150000}},{"1":50244,"2":140,"3":{"4":140000}},{"1":51195,"2":130,"3":{"4":130000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":58525,"2":60,"3":{"4":120000}},{"1":55960,"2":70,"3":{"4":140000}},{"1":54297,"2":70,"3":{"4":140000}},{"1":52951,"2":70,"3":{"4":140000}},{"1":55413,"2":70,"3":{"4":140000}},{"1":55025,"2":70,"3":{"4":140000}},{"1":53573,"2":70,"3":{"4":140000}},{"1":59609,"2":70,"3":{"4":140000}},{"1":56269,"2":70,"3":{"4":140000}},{"1":54972,"2":70,"3":{"4":140000}},{"1":56162,"2":80,"3":{"4":160000}},{"1":57003,"2":80,"3":{"4":160000}},{"1":56692,"2":80,"3":{"4":160000}},{"1":55826,"2":80,"3":{"4":160000}},{"1":55494,"2":70,"3":{"4":140000}},{"1":56796,"2":80,"3":{"4":160000}},{"1":56088,"2":80,"3":{"4":160000}},{"1":55940,"2":70,"3":{"4":140000}},{"1":55916,"2":80,"3":{"4":160000}},{"1":56294,"2":80,"3":{"4":160000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":52060,"2":70,"3":{"4":70000}},{"1":55703,"2":70,"3":{"4":70000}},{"1":51951,"2":70,"3":{"4":70000}},{"1":52309,"2":70,"3":{"4":70000}},{"1":51560,"2":70,"3":{"4":70000}},{"1":56056,"2":70,"3":{"4":70000}},{"1":53685,"2":60,"3":{"4":60000}},{"1":57196,"2":70,"3":{"4":70000}},{"1":51997,"2":60,"3":{"4":60000}},{"1":54825,"2":70,"3":{"4":70000}},{"1":53704,"2":60,"3":{"4":60000}},{"1":55741,"2":80,"3":{"4":80000}},{"1":56467,"2":80,"3":{"4":80000}},{"1":56482,"2":80,"3":{"4":80000}},{"1":57384,"2":80,"3":{"4":80000}},{"1":52196,"2":70,"3":{"4":70000}},{"1":56558,"2":80,"3":{"4":80000}},{"1":56455,"2":80,"3":{"4":80000}},{"1":54497,"2":70,"3":{"4":70000}},{"1":56320,"2":80,"3":{"4":80000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50910,"2":450,"3":{"4":45000}},{"1":50935,"2":480,"3":{"4":48000}},{"1":50751,"2":490,"3":{"4":49000}},{"1":50083,"2":470,"3":{"4":47000}},{"1":50432,"2":490,"3":{"4":49000}},{"1":50852,"2":490,"3":{"4":49000}},{"1":50545,"2":520,"3":{"4":52000}},{"1":50244,"2":520,"3":{"4":52000}},{"1":50242,"2":460,"3":{"4":46000}},{"1":51090,"2":450,"3":{"4":45000}},{"1":50000,"2":510,"3":{"4":51000}},{"1":50490,"2":510,"3":{"4":51000}},{"1":50419,"2":520,"3":{"4":52000}},{"1":50335,"2":520,"3":{"4":52000}},{"1":50257,"2":520,"3":{"4":52000}},{"1":50425,"2":520,"3":{"4":52000}},{"1":50271,"2":520,"3":{"4":52000}},{"1":50254,"2":520,"3":{"4":52000}},{"1":51847,"2":510,"3":{"4":51000}},{"1":50567,"2":440,"3":{"4":44000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50299,"2":450,"3":{"4":90000}},{"1":50194,"2":400,"3":{"4":80000}},{"1":50111,"2":450,"3":{"4":90000}},{"1":50408,"2":460,"3":{"4":92000}},{"1":50262,"2":400,"3":{"4":80000}},{"1":50207,"2":440,"3":{"4":88000}},{"1":50141,"2":450,"3":{"4":90000}},{"1":50730,"2":460,"3":{"4":92000}},{"1":50917,"2":460,"3":{"4":92000}},{"1":50338,"2":450,"3":{"4":90000}},{"1":50900,"2":460,"3":{"4":92000}},{"1":50635,"2":460,"3":{"4":92000}},{"1":50757,"2":460,"3":{"4":92000}},{"1":50430,"2":400,"3":{"4":80000}},{"1":50965,"2":400,"3":{"4":80000}},{"1":50477,"2":460,"3":{"4":92000}},{"1":50600,"2":400,"3":{"4":80000}},{"1":50546,"2":410,"3":{"4":82000}},{"1":50575,"2":460,"3":{"4":92000}},{"1":51694,"2":390,"3":{"4":78000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":51031,"2":190,"3":{"4":190000}},{"1":50531,"2":210,"3":{"4":210000}},{"1":50731,"2":210,"3":{"4":210000}},{"1":51804,"2":190,"3":{"4":190000}},{"1":50631,"2":190,"3":{"4":190000}},{"1":51962,"2":190,"3":{"4":190000}},{"1":53066,"2":210,"3":{"4":210000}},{"1":50219,"2":210,"3":{"4":210000}},{"1":52118,"2":170,"3":{"4":170000}},{"1":51245,"2":190,"3":{"4":190000}},{"1":50694,"2":190,"3":{"4":190000}},{"1":50358,"2":210,"3":{"4":210000}},{"1":51878,"2":220,"3":{"4":220000}},{"1":51777,"2":210,"3":{"4":210000}},{"1":51823,"2":210,"3":{"4":210000}},{"1":51828,"2":200,"3":{"4":200000}},{"1":51614,"2":180,"3":{"4":180000}},{"1":50234,"2":180,"3":{"4":180000}},{"1":52530,"2":170,"3":{"4":170000}},{"1":52205,"2":210,"3":{"4":210000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52644,"2":110,"3":{"4":220000}},{"1":54020,"2":90,"3":{"4":180000}},{"1":50008,"2":90,"3":{"4":180000}},{"1":50271,"2":90,"3":{"4":180000}},{"1":50440,"2":80,"3":{"4":160000}},{"1":54080,"2":100,"3":{"4":200000}},{"1":50721,"2":80,"3":{"4":160000}},{"1":50316,"2":80,"3":{"4":160000}},{"1":50396,"2":90,"3":{"4":180000}},{"1":53365,"2":90,"3":{"4":180000}},{"1":54330,"2":100,"3":{"4":200000}},{"1":52937,"2":100,"3":{"4":200000}},{"1":54545,"2":90,"3":{"4":180000}},{"1":53560,"2":110,"3":{"4":220000}},{"1":53264,"2":100,"3":{"4":200000}},{"1":51215,"2":100,"3":{"4":200000}},{"1":52104,"2":110,"3":{"4":220000}},{"1":50169,"2":100,"3":{"4":200000}},{"1":51676,"2":110,"3":{"4":220000}},{"1":52329,"2":110,"3":{"4":220000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":50385,"2":60,"3":{"4":60000}},{"1":54991,"2":80,"3":{"4":80000}},{"1":54042,"2":90,"3":{"4":90000}},{"1":53431,"2":90,"3":{"4":90000}},{"1":52057,"2":80,"3":{"4":80000}},{"1":53792,"2":90,"3":{"4":90000}},{"1":54088,"2":90,"3":{"4":90000}},{"1":52937,"2":80,"3":{"4":80000}},{"1":53372,"2":80,"3":{"4":80000}},{"1":53583,"2":90,"3":{"4":90000}},{"1":55733,"2":80,"3":{"4":80000}},{"1":53431,"2":80,"3":{"4":80000}},{"1":54054,"2":90,"3":{"4":90000}},{"1":54175,"2":90,"3":{"4":90000}},{"1":54049,"2":90,"3":{"4":90000}},{"1":50792,"2":80,"3":{"4":80000}},{"1":54600,"2":80,"3":{"4":80000}},{"1":55198,"2":90,"3":{"4":90000}},{"1":54039,"2":80,"3":{"4":80000}},{"1":52047,"2":70,"3":{"4":70000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/head/props_chrome.pb.json b/benchmark/data/skybrian-macbookpro/head/props_chrome.pb.json
deleted file mode 100644
index 458a188..0000000
--- a/benchmark/data/skybrian-macbookpro/head/props_chrome.pb.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/props.html",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "10": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+5"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf"},
-        {"1":"description","2":"path","3":"0.4.2","4":"../dart-protobuf"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+9"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50980,"2":81960,"3":{"4":8196000}},{"1":50000,"2":142730,"3":{"4":14273000}},{"1":50000,"2":141210,"3":{"4":14121000}},{"1":50000,"2":141510,"3":{"4":14151000}},{"1":50000,"2":141300,"3":{"4":14130000}},{"1":50000,"2":141820,"3":{"4":14182000}},{"1":50000,"2":142980,"3":{"4":14298000}},{"1":50000,"2":129590,"3":{"4":12959000}},{"1":50000,"2":133600,"3":{"4":13360000}},{"1":50000,"2":127120,"3":{"4":12712000}},{"1":50000,"2":141610,"3":{"4":14161000}},{"1":50000,"2":143160,"3":{"4":14316000}},{"1":50000,"2":141190,"3":{"4":14119000}},{"1":50000,"2":139590,"3":{"4":13959000}},{"1":50000,"2":142950,"3":{"4":14295000}},{"1":50000,"2":123420,"3":{"4":12342000}},{"1":50000,"2":138970,"3":{"4":13897000}},{"1":50000,"2":138020,"3":{"4":13802000}},{"1":50000,"2":145050,"3":{"4":14505000}},{"1":50000,"2":145800,"3":{"4":14580000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50000,"2":139800,"3":{"4":13980000}},{"1":50000,"2":144640,"3":{"4":14464000}},{"1":50000,"2":140750,"3":{"4":14075000}},{"1":50000,"2":141970,"3":{"4":14197000}},{"1":50000,"2":140820,"3":{"4":14082000}},{"1":50000,"2":141460,"3":{"4":14146000}},{"1":50000,"2":141820,"3":{"4":14182000}},{"1":50000,"2":140920,"3":{"4":14092000}},{"1":50000,"2":127000,"3":{"4":12700000}},{"1":50000,"2":140810,"3":{"4":14081000}},{"1":50000,"2":142450,"3":{"4":14245000}},{"1":50000,"2":141570,"3":{"4":14157000}},{"1":50000,"2":140530,"3":{"4":14053000}},{"1":50000,"2":139450,"3":{"4":13945000}},{"1":50000,"2":142170,"3":{"4":14217000}},{"1":50000,"2":134240,"3":{"4":13424000}},{"1":50000,"2":143580,"3":{"4":14358000}},{"1":50000,"2":144490,"3":{"4":14449000}},{"1":50000,"2":128580,"3":{"4":12858000}},{"1":50000,"2":149860,"3":{"4":14986000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50010,"2":8080,"3":{"5":808000}},{"1":50030,"2":7640,"3":{"5":764000}},{"1":50045,"2":8270,"3":{"5":827000}},{"1":50040,"2":8380,"3":{"5":838000}},{"1":50030,"2":8270,"3":{"5":827000}},{"1":50040,"2":7790,"3":{"5":779000}},{"1":50020,"2":8260,"3":{"5":826000}},{"1":50010,"2":8380,"3":{"5":838000}},{"1":50010,"2":8430,"3":{"5":843000}},{"1":50005,"2":7830,"3":{"5":783000}},{"1":50020,"2":8470,"3":{"5":847000}},{"1":50060,"2":8400,"3":{"5":840000}},{"1":50015,"2":8410,"3":{"5":841000}},{"1":50035,"2":8330,"3":{"5":833000}},{"1":50010,"2":8570,"3":{"5":857000}},{"1":50055,"2":8680,"3":{"5":868000}},{"1":50025,"2":8630,"3":{"5":863000}},{"1":50025,"2":8600,"3":{"5":860000}},{"1":50005,"2":7780,"3":{"5":778000}},{"1":50050,"2":8830,"3":{"5":883000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50020,"2":6990,"3":{"5":699000}},{"1":50050,"2":8480,"3":{"5":848000}},{"1":50010,"2":8360,"3":{"5":836000}},{"1":50015,"2":8240,"3":{"5":824000}},{"1":50010,"2":8360,"3":{"5":836000}},{"1":50005,"2":8280,"3":{"5":828000}},{"1":50040,"2":7610,"3":{"5":761000}},{"1":50040,"2":8590,"3":{"5":859000}},{"1":50040,"2":8450,"3":{"5":845000}},{"1":50005,"2":8360,"3":{"5":836000}},{"1":50035,"2":8440,"3":{"5":844000}},{"1":50025,"2":8400,"3":{"5":840000}},{"1":50055,"2":8410,"3":{"5":841000}},{"1":50035,"2":8450,"3":{"5":845000}},{"1":50010,"2":8780,"3":{"5":878000}},{"1":50055,"2":8470,"3":{"5":847000}},{"1":50045,"2":8580,"3":{"5":858000}},{"1":50050,"2":8640,"3":{"5":864000}},{"1":50040,"2":7640,"3":{"5":764000}},{"1":50025,"2":8600,"3":{"5":860000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50035,"2":9710,"3":{"4":971000}},{"1":50005,"2":10110,"3":{"4":1011000}},{"1":50010,"2":9800,"3":{"4":980000}},{"1":50025,"2":10080,"3":{"4":1008000}},{"1":50030,"2":10060,"3":{"4":1006000}},{"1":50030,"2":10130,"3":{"4":1013000}},{"1":50015,"2":10340,"3":{"4":1034000}},{"1":50000,"2":10450,"3":{"4":1045000}},{"1":50000,"2":10030,"3":{"4":1003000}},{"1":50005,"2":10030,"3":{"4":1003000}},{"1":50030,"2":10120,"3":{"4":1012000}},{"1":50010,"2":10050,"3":{"4":1005000}},{"1":50045,"2":10120,"3":{"4":1012000}},{"1":50020,"2":10070,"3":{"4":1007000}},{"1":50025,"2":10310,"3":{"4":1031000}},{"1":50005,"2":10560,"3":{"4":1056000}},{"1":50035,"2":10440,"3":{"4":1044000}},{"1":50025,"2":10630,"3":{"4":1063000}},{"1":50005,"2":10430,"3":{"4":1043000}},{"1":50045,"2":10410,"3":{"4":1041000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50025,"2":8370,"3":{"4":837000}},{"1":50040,"2":8790,"3":{"4":879000}},{"1":50005,"2":8840,"3":{"4":884000}},{"1":50040,"2":8680,"3":{"4":868000}},{"1":50010,"2":8600,"3":{"4":860000}},{"1":50000,"2":8880,"3":{"4":888000}},{"1":50050,"2":7890,"3":{"4":789000}},{"1":50010,"2":9070,"3":{"4":907000}},{"1":50020,"2":8840,"3":{"4":884000}},{"1":50035,"2":8740,"3":{"4":874000}},{"1":50010,"2":8930,"3":{"4":893000}},{"1":50050,"2":8470,"3":{"4":847000}},{"1":50000,"2":8770,"3":{"4":877000}},{"1":50020,"2":8780,"3":{"4":878000}},{"1":50020,"2":8950,"3":{"4":895000}},{"1":50040,"2":8940,"3":{"4":894000}},{"1":50040,"2":9350,"3":{"4":935000}},{"1":50025,"2":8910,"3":{"4":891000}},{"1":50035,"2":9000,"3":{"4":900000}},{"1":50015,"2":9320,"3":{"4":932000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian-macbookpro/head/props_vm.pb.json b/benchmark/data/skybrian-macbookpro/head/props_vm.pb.json
deleted file mode 100644
index 0947bdf..0000000
--- a/benchmark/data/skybrian-macbookpro/head/props_vm.pb.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "props_vm.dart",
-    "10": {
-      "1": "skybrian-macbookpro",
-      "2": 2,
-      "3": "1.12.0 (Mon Aug 31 04:17:53 2015) on \"macos_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+5"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf"},
-        {"1":"description","2":"path","3":"0.4.2","4":"../dart-protobuf"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+9"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50001,"2":335030,"3":{"4":33503000}},{"1":50000,"2":349700,"3":{"4":34970000}},{"1":50000,"2":382400,"3":{"4":38240000}},{"1":50000,"2":415760,"3":{"4":41576000}},{"1":50000,"2":419600,"3":{"4":41960000}},{"1":50000,"2":420440,"3":{"4":42044000}},{"1":50000,"2":403630,"3":{"4":40363000}},{"1":50000,"2":416660,"3":{"4":41666000}},{"1":50001,"2":401300,"3":{"4":40130000}},{"1":50000,"2":416590,"3":{"4":41659000}},{"1":50000,"2":417150,"3":{"4":41715000}},{"1":50000,"2":408390,"3":{"4":40839000}},{"1":50000,"2":410570,"3":{"4":41057000}},{"1":50000,"2":403980,"3":{"4":40398000}},{"1":50000,"2":410020,"3":{"4":41002000}},{"1":50000,"2":409430,"3":{"4":40943000}},{"1":50000,"2":408120,"3":{"4":40812000}},{"1":50000,"2":407020,"3":{"4":40702000}},{"1":50000,"2":370670,"3":{"4":37067000}},{"1":50000,"2":392900,"3":{"4":39290000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50000,"2":415820,"3":{"4":41582000}},{"1":50000,"2":409240,"3":{"4":40924000}},{"1":50001,"2":411250,"3":{"4":41125000}},{"1":50000,"2":410810,"3":{"4":41081000}},{"1":50000,"2":408470,"3":{"4":40847000}},{"1":50000,"2":411110,"3":{"4":41111000}},{"1":50000,"2":410430,"3":{"4":41043000}},{"1":50000,"2":380590,"3":{"4":38059000}},{"1":50001,"2":413440,"3":{"4":41344000}},{"1":50000,"2":415860,"3":{"4":41586000}},{"1":50000,"2":413940,"3":{"4":41394000}},{"1":50000,"2":413200,"3":{"4":41320000}},{"1":50000,"2":412600,"3":{"4":41260000}},{"1":50000,"2":375810,"3":{"4":37581000}},{"1":50000,"2":412710,"3":{"4":41271000}},{"1":50000,"2":414630,"3":{"4":41463000}},{"1":50000,"2":412740,"3":{"4":41274000}},{"1":50001,"2":410570,"3":{"4":41057000}},{"1":50001,"2":413910,"3":{"4":41391000}},{"1":50001,"2":412470,"3":{"4":41247000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50026,"2":12080,"3":{"5":1208000}},{"1":50016,"2":12170,"3":{"5":1217000}},{"1":50018,"2":12290,"3":{"5":1229000}},{"1":50040,"2":12210,"3":{"5":1221000}},{"1":50041,"2":12200,"3":{"5":1220000}},{"1":50031,"2":12240,"3":{"5":1224000}},{"1":50000,"2":12120,"3":{"5":1212000}},{"1":50048,"2":12170,"3":{"5":1217000}},{"1":50033,"2":12200,"3":{"5":1220000}},{"1":50018,"2":12180,"3":{"5":1218000}},{"1":50027,"2":12210,"3":{"5":1221000}},{"1":50004,"2":12000,"3":{"5":1200000}},{"1":50012,"2":12120,"3":{"5":1212000}},{"1":50019,"2":11970,"3":{"5":1197000}},{"1":50031,"2":11930,"3":{"5":1193000}},{"1":50009,"2":11890,"3":{"5":1189000}},{"1":50028,"2":10750,"3":{"5":1075000}},{"1":50019,"2":10900,"3":{"5":1090000}},{"1":50032,"2":11910,"3":{"5":1191000}},{"1":50012,"2":11960,"3":{"5":1196000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50007,"2":11610,"3":{"5":1161000}},{"1":50019,"2":11590,"3":{"5":1159000}},{"1":50031,"2":11600,"3":{"5":1160000}},{"1":50001,"2":11420,"3":{"5":1142000}},{"1":50030,"2":11500,"3":{"5":1150000}},{"1":50019,"2":11550,"3":{"5":1155000}},{"1":50009,"2":11500,"3":{"5":1150000}},{"1":50005,"2":11500,"3":{"5":1150000}},{"1":50002,"2":11590,"3":{"5":1159000}},{"1":50033,"2":12440,"3":{"5":1244000}},{"1":50000,"2":11720,"3":{"5":1172000}},{"1":50002,"2":11730,"3":{"5":1173000}},{"1":50033,"2":11720,"3":{"5":1172000}},{"1":50009,"2":11740,"3":{"5":1174000}},{"1":50010,"2":11710,"3":{"5":1171000}},{"1":50038,"2":11750,"3":{"5":1175000}},{"1":50041,"2":11720,"3":{"5":1172000}},{"1":50039,"2":11740,"3":{"5":1174000}},{"1":50036,"2":11830,"3":{"5":1183000}},{"1":50012,"2":12280,"3":{"5":1228000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50028,"2":16500,"3":{"4":1650000}},{"1":50014,"2":16180,"3":{"4":1618000}},{"1":50004,"2":16700,"3":{"4":1670000}},{"1":50025,"2":16630,"3":{"4":1663000}},{"1":50016,"2":16680,"3":{"4":1668000}},{"1":50001,"2":16670,"3":{"4":1667000}},{"1":50018,"2":16700,"3":{"4":1670000}},{"1":50002,"2":16650,"3":{"4":1665000}},{"1":50005,"2":15210,"3":{"4":1521000}},{"1":50030,"2":16840,"3":{"4":1684000}},{"1":50008,"2":16730,"3":{"4":1673000}},{"1":50010,"2":16720,"3":{"4":1672000}},{"1":50007,"2":16770,"3":{"4":1677000}},{"1":50012,"2":16590,"3":{"4":1659000}},{"1":50010,"2":16750,"3":{"4":1675000}},{"1":50017,"2":16710,"3":{"4":1671000}},{"1":50011,"2":15900,"3":{"4":1590000}},{"1":50010,"2":16670,"3":{"4":1667000}},{"1":50045,"2":16270,"3":{"4":1627000}},{"1":50023,"2":16680,"3":{"4":1668000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50021,"2":14480,"3":{"4":1448000}},{"1":50026,"2":14840,"3":{"4":1484000}},{"1":50030,"2":14790,"3":{"4":1479000}},{"1":50005,"2":14610,"3":{"4":1461000}},{"1":50001,"2":14550,"3":{"4":1455000}},{"1":50028,"2":14610,"3":{"4":1461000}},{"1":50014,"2":14490,"3":{"4":1449000}},{"1":50023,"2":14560,"3":{"4":1456000}},{"1":50017,"2":14560,"3":{"4":1456000}},{"1":50028,"2":14500,"3":{"4":1450000}},{"1":50014,"2":14550,"3":{"4":1455000}},{"1":50013,"2":14510,"3":{"4":1451000}},{"1":50030,"2":14620,"3":{"4":1462000}},{"1":50011,"2":14560,"3":{"4":1456000}},{"1":50008,"2":14540,"3":{"4":1454000}},{"1":50016,"2":14680,"3":{"4":1468000}},{"1":50019,"2":14660,"3":{"4":1466000}},{"1":50024,"2":14630,"3":{"4":1463000}},{"1":50014,"2":13110,"3":{"4":1311000}},{"1":50006,"2":14500,"3":{"4":1450000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian5/0.4.2/json_chrome.pb.json b/benchmark/data/skybrian5/0.4.2/json_chrome.pb.json
deleted file mode 100644
index a9d0bf4..0000000
--- a/benchmark/data/skybrian5/0.4.2/json_chrome.pb.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/readjson.html",
-    "10": {
-      "1": "skybrian5",
-      "10": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+3"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf","2":"hosted","3":"0.4.2"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.1"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+7"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":54740,"2":60,"3":{"1":6000}},{"1":55695,"2":70,"3":{"1":7000}},{"1":55715,"2":80,"3":{"1":8000}},{"1":55830,"2":80,"3":{"1":8000}},{"1":55035,"2":80,"3":{"1":8000}},{"1":54940,"2":80,"3":{"1":8000}},{"1":55965,"2":80,"3":{"1":8000}},{"1":55260,"2":80,"3":{"1":8000}},{"1":51155,"2":70,"3":{"1":7000}},{"1":52215,"2":70,"3":{"1":7000}},{"1":54485,"2":70,"3":{"1":7000}},{"1":53065,"2":70,"3":{"1":7000}},{"1":53405,"2":70,"3":{"1":7000}},{"1":52605,"2":70,"3":{"1":7000}},{"1":50825,"2":70,"3":{"1":7000}},{"1":51700,"2":70,"3":{"1":7000}},{"1":51140,"2":70,"3":{"1":7000}},{"1":51940,"2":70,"3":{"1":7000}},{"1":51160,"2":70,"3":{"1":7000}},{"1":50725,"2":70,"3":{"1":7000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":56340,"2":60,"3":{"1":12000}},{"1":53370,"2":60,"3":{"1":12000}},{"1":53640,"2":60,"3":{"1":12000}},{"1":52830,"2":60,"3":{"1":12000}},{"1":53215,"2":60,"3":{"1":12000}},{"1":54385,"2":60,"3":{"1":12000}},{"1":53690,"2":60,"3":{"1":12000}},{"1":53820,"2":60,"3":{"1":12000}},{"1":55040,"2":60,"3":{"1":12000}},{"1":55295,"2":60,"3":{"1":12000}},{"1":58035,"2":60,"3":{"1":12000}},{"1":57350,"2":60,"3":{"1":12000}},{"1":57730,"2":60,"3":{"1":12000}},{"1":56425,"2":60,"3":{"1":12000}},{"1":56600,"2":60,"3":{"1":12000}},{"1":57220,"2":60,"3":{"1":12000}},{"1":57020,"2":60,"3":{"1":12000}},{"1":58565,"2":60,"3":{"1":12000}},{"1":56410,"2":60,"3":{"1":12000}},{"1":56305,"2":60,"3":{"1":12000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":57665,"2":30,"3":{"1":30000}},{"1":55690,"2":30,"3":{"1":30000}},{"1":55835,"2":30,"3":{"1":30000}},{"1":52480,"2":30,"3":{"1":30000}},{"1":52460,"2":30,"3":{"1":30000}},{"1":52560,"2":30,"3":{"1":30000}},{"1":52600,"2":30,"3":{"1":30000}},{"1":53095,"2":30,"3":{"1":30000}},{"1":53870,"2":30,"3":{"1":30000}},{"1":53760,"2":30,"3":{"1":30000}},{"1":56350,"2":30,"3":{"1":30000}},{"1":54920,"2":30,"3":{"1":30000}},{"1":53985,"2":30,"3":{"1":30000}},{"1":54995,"2":30,"3":{"1":30000}},{"1":58280,"2":30,"3":{"1":30000}},{"1":56470,"2":30,"3":{"1":30000}},{"1":56585,"2":30,"3":{"1":30000}},{"1":57735,"2":30,"3":{"1":30000}},{"1":58315,"2":30,"3":{"1":30000}},{"1":57770,"2":30,"3":{"1":30000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":71790,"2":20,"3":{"1":40000}},{"1":74625,"2":20,"3":{"1":40000}},{"1":73615,"2":20,"3":{"1":40000}},{"1":69670,"2":20,"3":{"1":40000}},{"1":69405,"2":20,"3":{"1":40000}},{"1":69895,"2":20,"3":{"1":40000}},{"1":69845,"2":20,"3":{"1":40000}},{"1":70525,"2":20,"3":{"1":40000}},{"1":71445,"2":20,"3":{"1":40000}},{"1":72060,"2":20,"3":{"1":40000}},{"1":76905,"2":20,"3":{"1":40000}},{"1":72580,"2":20,"3":{"1":40000}},{"1":73670,"2":20,"3":{"1":40000}},{"1":73265,"2":20,"3":{"1":40000}},{"1":79080,"2":20,"3":{"1":40000}},{"1":74700,"2":20,"3":{"1":40000}},{"1":75045,"2":20,"3":{"1":40000}},{"1":77825,"2":20,"3":{"1":40000}},{"1":77250,"2":20,"3":{"1":40000}},{"1":77340,"2":20,"3":{"1":40000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":50835,"2":60,"3":{"1":6000}},{"1":52285,"2":60,"3":{"1":6000}},{"1":50945,"2":60,"3":{"1":6000}},{"1":58245,"2":70,"3":{"1":7000}},{"1":58280,"2":70,"3":{"1":7000}},{"1":50215,"2":60,"3":{"1":6000}},{"1":50145,"2":60,"3":{"1":6000}},{"1":58215,"2":70,"3":{"1":7000}},{"1":52810,"2":60,"3":{"1":6000}},{"1":52370,"2":60,"3":{"1":6000}},{"1":53990,"2":60,"3":{"1":6000}},{"1":53080,"2":60,"3":{"1":6000}},{"1":51830,"2":60,"3":{"1":6000}},{"1":51630,"2":60,"3":{"1":6000}},{"1":53415,"2":60,"3":{"1":6000}},{"1":52155,"2":60,"3":{"1":6000}},{"1":52510,"2":60,"3":{"1":6000}},{"1":54665,"2":60,"3":{"1":6000}},{"1":54655,"2":60,"3":{"1":6000}},{"1":52555,"2":60,"3":{"1":6000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":54990,"2":70,"3":{"1":14000}},{"1":50490,"2":60,"3":{"1":12000}},{"1":51845,"2":60,"3":{"1":12000}},{"1":50400,"2":60,"3":{"1":12000}},{"1":58410,"2":70,"3":{"1":14000}},{"1":50875,"2":60,"3":{"1":12000}},{"1":50890,"2":60,"3":{"1":12000}},{"1":50510,"2":60,"3":{"1":12000}},{"1":53175,"2":60,"3":{"1":12000}},{"1":53590,"2":60,"3":{"1":12000}},{"1":53810,"2":60,"3":{"1":12000}},{"1":53230,"2":60,"3":{"1":12000}},{"1":52715,"2":60,"3":{"1":12000}},{"1":52075,"2":60,"3":{"1":12000}},{"1":53890,"2":60,"3":{"1":12000}},{"1":52760,"2":60,"3":{"1":12000}},{"1":53115,"2":60,"3":{"1":12000}},{"1":55200,"2":60,"3":{"1":12000}},{"1":55090,"2":60,"3":{"1":12000}},{"1":53120,"2":60,"3":{"1":12000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":52695,"2":60,"3":{"1":60000}},{"1":56750,"2":60,"3":{"1":60000}},{"1":57305,"2":60,"3":{"1":60000}},{"1":56305,"2":60,"3":{"1":60000}},{"1":55620,"2":60,"3":{"1":60000}},{"1":56750,"2":60,"3":{"1":60000}},{"1":57260,"2":60,"3":{"1":60000}},{"1":56295,"2":60,"3":{"1":60000}},{"1":51055,"2":50,"3":{"1":50000}},{"1":59040,"2":60,"3":{"1":60000}},{"1":59135,"2":60,"3":{"1":60000}},{"1":50040,"2":50,"3":{"1":50000}},{"1":59000,"2":60,"3":{"1":60000}},{"1":58410,"2":60,"3":{"1":60000}},{"1":59785,"2":60,"3":{"1":60000}},{"1":50030,"2":50,"3":{"1":50000}},{"1":59130,"2":60,"3":{"1":60000}},{"1":50215,"2":50,"3":{"1":50000}},{"1":59740,"2":60,"3":{"1":60000}},{"1":59605,"2":60,"3":{"1":60000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":52100,"2":30,"3":{"1":60000}},{"1":55555,"2":30,"3":{"1":60000}},{"1":56690,"2":30,"3":{"1":60000}},{"1":55705,"2":30,"3":{"1":60000}},{"1":55325,"2":30,"3":{"1":60000}},{"1":56650,"2":30,"3":{"1":60000}},{"1":56710,"2":30,"3":{"1":60000}},{"1":55970,"2":30,"3":{"1":60000}},{"1":59500,"2":30,"3":{"1":60000}},{"1":58430,"2":30,"3":{"1":60000}},{"1":59425,"2":30,"3":{"1":60000}},{"1":60170,"2":30,"3":{"1":60000}},{"1":57695,"2":30,"3":{"1":60000}},{"1":57830,"2":30,"3":{"1":60000}},{"1":58695,"2":30,"3":{"1":60000}},{"1":57900,"2":30,"3":{"1":60000}},{"1":59415,"2":30,"3":{"1":60000}},{"1":59750,"2":30,"3":{"1":60000}},{"1":60215,"2":30,"3":{"1":60000}},{"1":58930,"2":30,"3":{"1":60000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":50900,"2":70,"3":{"2":7000}},{"1":51220,"2":70,"3":{"2":7000}},{"1":51025,"2":70,"3":{"2":7000}},{"1":55765,"2":80,"3":{"2":8000}},{"1":55340,"2":80,"3":{"2":8000}},{"1":56415,"2":80,"3":{"2":8000}},{"1":56865,"2":80,"3":{"2":8000}},{"1":56350,"2":80,"3":{"2":8000}},{"1":51910,"2":70,"3":{"2":7000}},{"1":51110,"2":70,"3":{"2":7000}},{"1":55635,"2":70,"3":{"2":7000}},{"1":55150,"2":70,"3":{"2":7000}},{"1":54770,"2":70,"3":{"2":7000}},{"1":54430,"2":70,"3":{"2":7000}},{"1":52470,"2":70,"3":{"2":7000}},{"1":53885,"2":70,"3":{"2":7000}},{"1":53325,"2":70,"3":{"2":7000}},{"1":55270,"2":70,"3":{"2":7000}},{"1":53045,"2":70,"3":{"2":7000}},{"1":53000,"2":70,"3":{"2":7000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":53765,"2":60,"3":{"2":12000}},{"1":56100,"2":60,"3":{"2":12000}},{"1":56410,"2":60,"3":{"2":12000}},{"1":54050,"2":60,"3":{"2":12000}},{"1":54490,"2":60,"3":{"2":12000}},{"1":55715,"2":60,"3":{"2":12000}},{"1":55740,"2":60,"3":{"2":12000}},{"1":55095,"2":60,"3":{"2":12000}},{"1":56760,"2":60,"3":{"2":12000}},{"1":57520,"2":60,"3":{"2":12000}},{"1":59335,"2":60,"3":{"2":12000}},{"1":59350,"2":60,"3":{"2":12000}},{"1":58525,"2":60,"3":{"2":12000}},{"1":58725,"2":60,"3":{"2":12000}},{"1":61230,"2":60,"3":{"2":12000}},{"1":58650,"2":60,"3":{"2":12000}},{"1":59120,"2":60,"3":{"2":12000}},{"1":50095,"2":50,"3":{"2":10000}},{"1":50465,"2":50,"3":{"2":10000}},{"1":59770,"2":60,"3":{"2":12000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":55335,"2":30,"3":{"2":30000}},{"1":59610,"2":30,"3":{"2":30000}},{"1":61670,"2":30,"3":{"2":30000}},{"1":54770,"2":30,"3":{"2":30000}},{"1":55210,"2":30,"3":{"2":30000}},{"1":55955,"2":30,"3":{"2":30000}},{"1":56665,"2":30,"3":{"2":30000}},{"1":57690,"2":30,"3":{"2":30000}},{"1":57475,"2":30,"3":{"2":30000}},{"1":57705,"2":30,"3":{"2":30000}},{"1":58680,"2":30,"3":{"2":30000}},{"1":58840,"2":30,"3":{"2":30000}},{"1":58305,"2":30,"3":{"2":30000}},{"1":58230,"2":30,"3":{"2":30000}},{"1":60445,"2":30,"3":{"2":30000}},{"1":61360,"2":30,"3":{"2":30000}},{"1":61370,"2":30,"3":{"2":30000}},{"1":60705,"2":30,"3":{"2":30000}},{"1":61450,"2":30,"3":{"2":30000}},{"1":60750,"2":30,"3":{"2":30000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":73480,"2":20,"3":{"2":40000}},{"1":79085,"2":20,"3":{"2":40000}},{"1":80740,"2":20,"3":{"2":40000}},{"1":73300,"2":20,"3":{"2":40000}},{"1":73935,"2":20,"3":{"2":40000}},{"1":74640,"2":20,"3":{"2":40000}},{"1":75355,"2":20,"3":{"2":40000}},{"1":76910,"2":20,"3":{"2":40000}},{"1":76400,"2":20,"3":{"2":40000}},{"1":77010,"2":20,"3":{"2":40000}},{"1":77705,"2":20,"3":{"2":40000}},{"1":78140,"2":20,"3":{"2":40000}},{"1":77465,"2":20,"3":{"2":40000}},{"1":77365,"2":20,"3":{"2":40000}},{"1":81030,"2":20,"3":{"2":40000}},{"1":81295,"2":20,"3":{"2":40000}},{"1":83295,"2":20,"3":{"2":40000}},{"1":80615,"2":20,"3":{"2":40000}},{"1":81155,"2":20,"3":{"2":40000}},{"1":80200,"2":20,"3":{"2":40000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":53435,"2":60,"3":{"2":6000}},{"1":50985,"2":60,"3":{"2":6000}},{"1":52570,"2":60,"3":{"2":6000}},{"1":57780,"2":70,"3":{"2":7000}},{"1":50215,"2":60,"3":{"2":6000}},{"1":57645,"2":70,"3":{"2":7000}},{"1":50770,"2":60,"3":{"2":6000}},{"1":57880,"2":70,"3":{"2":7000}},{"1":52315,"2":60,"3":{"2":6000}},{"1":52320,"2":60,"3":{"2":6000}},{"1":55710,"2":60,"3":{"2":6000}},{"1":54845,"2":60,"3":{"2":6000}},{"1":55120,"2":60,"3":{"2":6000}},{"1":55060,"2":60,"3":{"2":6000}},{"1":54920,"2":60,"3":{"2":6000}},{"1":54045,"2":60,"3":{"2":6000}},{"1":54205,"2":60,"3":{"2":6000}},{"1":54505,"2":60,"3":{"2":6000}},{"1":55960,"2":60,"3":{"2":6000}},{"1":53055,"2":60,"3":{"2":6000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":51680,"2":60,"3":{"2":12000}},{"1":52565,"2":60,"3":{"2":12000}},{"1":53370,"2":60,"3":{"2":12000}},{"1":50485,"2":60,"3":{"2":12000}},{"1":51020,"2":60,"3":{"2":12000}},{"1":50265,"2":60,"3":{"2":12000}},{"1":51270,"2":60,"3":{"2":12000}},{"1":53470,"2":60,"3":{"2":12000}},{"1":52925,"2":60,"3":{"2":12000}},{"1":52425,"2":60,"3":{"2":12000}},{"1":57150,"2":60,"3":{"2":12000}},{"1":55650,"2":60,"3":{"2":12000}},{"1":54985,"2":60,"3":{"2":12000}},{"1":55715,"2":60,"3":{"2":12000}},{"1":55175,"2":60,"3":{"2":12000}},{"1":54640,"2":60,"3":{"2":12000}},{"1":54945,"2":60,"3":{"2":12000}},{"1":55590,"2":60,"3":{"2":12000}},{"1":50030,"2":50,"3":{"2":10000}},{"1":54270,"2":60,"3":{"2":12000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":59745,"2":60,"3":{"2":60000}},{"1":50200,"2":50,"3":{"2":50000}},{"1":59495,"2":60,"3":{"2":60000}},{"1":58010,"2":60,"3":{"2":60000}},{"1":59020,"2":60,"3":{"2":60000}},{"1":57640,"2":60,"3":{"2":60000}},{"1":58640,"2":60,"3":{"2":60000}},{"1":58590,"2":60,"3":{"2":60000}},{"1":50510,"2":50,"3":{"2":50000}},{"1":50140,"2":50,"3":{"2":50000}},{"1":53370,"2":50,"3":{"2":50000}},{"1":52715,"2":50,"3":{"2":50000}},{"1":52720,"2":50,"3":{"2":50000}},{"1":52300,"2":50,"3":{"2":50000}},{"1":52500,"2":50,"3":{"2":50000}},{"1":52385,"2":50,"3":{"2":50000}},{"1":53035,"2":50,"3":{"2":50000}},{"1":52585,"2":50,"3":{"2":50000}},{"1":54315,"2":50,"3":{"2":50000}},{"1":51600,"2":50,"3":{"2":50000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":58865,"2":30,"3":{"2":60000}},{"1":58760,"2":30,"3":{"2":60000}},{"1":58835,"2":30,"3":{"2":60000}},{"1":57600,"2":30,"3":{"2":60000}},{"1":58030,"2":30,"3":{"2":60000}},{"1":56985,"2":30,"3":{"2":60000}},{"1":57835,"2":30,"3":{"2":60000}},{"1":57770,"2":30,"3":{"2":60000}},{"1":69280,"2":30,"3":{"2":60000}},{"1":59965,"2":30,"3":{"2":60000}},{"1":64205,"2":30,"3":{"2":60000}},{"1":62925,"2":30,"3":{"2":60000}},{"1":62020,"2":30,"3":{"2":60000}},{"1":62695,"2":30,"3":{"2":60000}},{"1":63500,"2":30,"3":{"2":60000}},{"1":61960,"2":30,"3":{"2":60000}},{"1":61340,"2":30,"3":{"2":60000}},{"1":62405,"2":30,"3":{"2":60000}},{"1":64630,"2":30,"3":{"2":60000}},{"1":61365,"2":30,"3":{"2":60000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":56900,"2":80,"3":{"4":8000}},{"1":56815,"2":80,"3":{"4":8000}},{"1":57210,"2":80,"3":{"4":8000}},{"1":54820,"2":80,"3":{"4":8000}},{"1":55475,"2":80,"3":{"4":8000}},{"1":56250,"2":80,"3":{"4":8000}},{"1":55700,"2":80,"3":{"4":8000}},{"1":55690,"2":80,"3":{"4":8000}},{"1":51595,"2":70,"3":{"4":7000}},{"1":52030,"2":70,"3":{"4":7000}},{"1":54560,"2":70,"3":{"4":7000}},{"1":55225,"2":70,"3":{"4":7000}},{"1":53625,"2":70,"3":{"4":7000}},{"1":53335,"2":70,"3":{"4":7000}},{"1":53350,"2":70,"3":{"4":7000}},{"1":53185,"2":70,"3":{"4":7000}},{"1":53220,"2":70,"3":{"4":7000}},{"1":54105,"2":70,"3":{"4":7000}},{"1":53140,"2":70,"3":{"4":7000}},{"1":52145,"2":70,"3":{"4":7000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":53610,"2":60,"3":{"4":12000}},{"1":54040,"2":60,"3":{"4":12000}},{"1":58610,"2":50,"3":{"4":10000}},{"1":53540,"2":60,"3":{"4":12000}},{"1":53790,"2":60,"3":{"4":12000}},{"1":58400,"2":50,"3":{"4":10000}},{"1":53985,"2":60,"3":{"4":12000}},{"1":54120,"2":60,"3":{"4":12000}},{"1":57705,"2":60,"3":{"4":12000}},{"1":55695,"2":60,"3":{"4":12000}},{"1":58565,"2":60,"3":{"4":12000}},{"1":58725,"2":60,"3":{"4":12000}},{"1":57850,"2":60,"3":{"4":12000}},{"1":57935,"2":60,"3":{"4":12000}},{"1":57980,"2":60,"3":{"4":12000}},{"1":57850,"2":60,"3":{"4":12000}},{"1":58925,"2":60,"3":{"4":12000}},{"1":58945,"2":60,"3":{"4":12000}},{"1":58910,"2":60,"3":{"4":12000}},{"1":57365,"2":60,"3":{"4":12000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":55625,"2":30,"3":{"4":30000}},{"1":55045,"2":30,"3":{"4":30000}},{"1":56220,"2":30,"3":{"4":30000}},{"1":53195,"2":30,"3":{"4":30000}},{"1":53575,"2":30,"3":{"4":30000}},{"1":54830,"2":30,"3":{"4":30000}},{"1":54150,"2":30,"3":{"4":30000}},{"1":54795,"2":30,"3":{"4":30000}},{"1":55275,"2":30,"3":{"4":30000}},{"1":56200,"2":30,"3":{"4":30000}},{"1":57275,"2":30,"3":{"4":30000}},{"1":55940,"2":30,"3":{"4":30000}},{"1":56995,"2":30,"3":{"4":30000}},{"1":55605,"2":30,"3":{"4":30000}},{"1":57820,"2":30,"3":{"4":30000}},{"1":57560,"2":30,"3":{"4":30000}},{"1":60500,"2":30,"3":{"4":30000}},{"1":58620,"2":30,"3":{"4":30000}},{"1":58540,"2":30,"3":{"4":30000}},{"1":57820,"2":30,"3":{"4":30000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":74235,"2":20,"3":{"4":40000}},{"1":73105,"2":20,"3":{"4":40000}},{"1":74050,"2":20,"3":{"4":40000}},{"1":70900,"2":20,"3":{"4":40000}},{"1":71610,"2":20,"3":{"4":40000}},{"1":73215,"2":20,"3":{"4":40000}},{"1":72165,"2":20,"3":{"4":40000}},{"1":75160,"2":20,"3":{"4":40000}},{"1":73505,"2":20,"3":{"4":40000}},{"1":74460,"2":20,"3":{"4":40000}},{"1":75630,"2":20,"3":{"4":40000}},{"1":74245,"2":20,"3":{"4":40000}},{"1":76095,"2":20,"3":{"4":40000}},{"1":73965,"2":20,"3":{"4":40000}},{"1":78465,"2":20,"3":{"4":40000}},{"1":76200,"2":20,"3":{"4":40000}},{"1":78820,"2":20,"3":{"4":40000}},{"1":76870,"2":20,"3":{"4":40000}},{"1":76795,"2":20,"3":{"4":40000}},{"1":77000,"2":20,"3":{"4":40000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":66525,"2":30,"3":{"4":30000}},{"1":63620,"2":30,"3":{"4":30000}},{"1":57840,"2":20,"3":{"4":20000}},{"1":63680,"2":30,"3":{"4":30000}},{"1":63945,"2":30,"3":{"4":30000}},{"1":66060,"2":20,"3":{"4":20000}},{"1":64680,"2":30,"3":{"4":30000}},{"1":76780,"2":30,"3":{"4":30000}},{"1":54280,"2":20,"3":{"4":20000}},{"1":65840,"2":30,"3":{"4":30000}},{"1":67705,"2":30,"3":{"4":30000}},{"1":61760,"2":30,"3":{"4":30000}},{"1":65005,"2":30,"3":{"4":30000}},{"1":64270,"2":30,"3":{"4":30000}},{"1":67130,"2":30,"3":{"4":30000}},{"1":65665,"2":30,"3":{"4":30000}},{"1":66905,"2":30,"3":{"4":30000}},{"1":84645,"2":30,"3":{"4":30000}},{"1":66705,"2":30,"3":{"4":30000}},{"1":66405,"2":30,"3":{"4":30000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":52550,"2":50,"3":{"4":5000}},{"1":51745,"2":60,"3":{"4":6000}},{"1":50570,"2":60,"3":{"4":6000}},{"1":51960,"2":60,"3":{"4":6000}},{"1":53910,"2":60,"3":{"4":6000}},{"1":51135,"2":60,"3":{"4":6000}},{"1":51690,"2":60,"3":{"4":6000}},{"1":51820,"2":60,"3":{"4":6000}},{"1":51900,"2":60,"3":{"4":6000}},{"1":55540,"2":60,"3":{"4":6000}},{"1":55800,"2":60,"3":{"4":6000}},{"1":53550,"2":60,"3":{"4":6000}},{"1":53255,"2":60,"3":{"4":6000}},{"1":54100,"2":60,"3":{"4":6000}},{"1":54050,"2":60,"3":{"4":6000}},{"1":53995,"2":60,"3":{"4":6000}},{"1":54555,"2":60,"3":{"4":6000}},{"1":61340,"2":40,"3":{"4":4000}},{"1":55070,"2":60,"3":{"4":6000}},{"1":53830,"2":60,"3":{"4":6000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":52040,"2":60,"3":{"4":12000}},{"1":52850,"2":60,"3":{"4":12000}},{"1":51710,"2":60,"3":{"4":12000}},{"1":52685,"2":60,"3":{"4":12000}},{"1":54640,"2":60,"3":{"4":12000}},{"1":52145,"2":60,"3":{"4":12000}},{"1":51755,"2":60,"3":{"4":12000}},{"1":55615,"2":60,"3":{"4":12000}},{"1":53045,"2":60,"3":{"4":12000}},{"1":58665,"2":50,"3":{"4":10000}},{"1":56060,"2":60,"3":{"4":12000}},{"1":57995,"2":60,"3":{"4":12000}},{"1":53940,"2":60,"3":{"4":12000}},{"1":54825,"2":60,"3":{"4":12000}},{"1":54565,"2":60,"3":{"4":12000}},{"1":55085,"2":60,"3":{"4":12000}},{"1":59305,"2":60,"3":{"4":12000}},{"1":55360,"2":50,"3":{"4":10000}},{"1":55740,"2":60,"3":{"4":12000}},{"1":54680,"2":60,"3":{"4":12000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":60050,"2":60,"3":{"4":60000}},{"1":59735,"2":60,"3":{"4":60000}},{"1":58925,"2":60,"3":{"4":60000}},{"1":60155,"2":60,"3":{"4":60000}},{"1":50635,"2":50,"3":{"4":50000}},{"1":59665,"2":60,"3":{"4":60000}},{"1":59300,"2":60,"3":{"4":60000}},{"1":50500,"2":50,"3":{"4":50000}},{"1":50015,"2":50,"3":{"4":50000}},{"1":52325,"2":50,"3":{"4":50000}},{"1":52700,"2":50,"3":{"4":50000}},{"1":52195,"2":50,"3":{"4":50000}},{"1":51220,"2":50,"3":{"4":50000}},{"1":51485,"2":50,"3":{"4":50000}},{"1":51510,"2":50,"3":{"4":50000}},{"1":51990,"2":50,"3":{"4":50000}},{"1":52495,"2":50,"3":{"4":50000}},{"1":53345,"2":50,"3":{"4":50000}},{"1":53025,"2":50,"3":{"4":50000}},{"1":52305,"2":50,"3":{"4":50000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":58805,"2":30,"3":{"4":60000}},{"1":59890,"2":30,"3":{"4":60000}},{"1":58165,"2":30,"3":{"4":60000}},{"1":59820,"2":30,"3":{"4":60000}},{"1":60565,"2":30,"3":{"4":60000}},{"1":59080,"2":30,"3":{"4":60000}},{"1":58620,"2":30,"3":{"4":60000}},{"1":60180,"2":30,"3":{"4":60000}},{"1":59610,"2":30,"3":{"4":60000}},{"1":62745,"2":30,"3":{"4":60000}},{"1":63110,"2":30,"3":{"4":60000}},{"1":61550,"2":30,"3":{"4":60000}},{"1":60815,"2":30,"3":{"4":60000}},{"1":62400,"2":30,"3":{"4":60000}},{"1":62235,"2":30,"3":{"4":60000}},{"1":61730,"2":30,"3":{"4":60000}},{"1":62465,"2":30,"3":{"4":60000}},{"1":63055,"2":30,"3":{"4":60000}},{"1":63040,"2":30,"3":{"4":60000}},{"1":61650,"2":30,"3":{"4":60000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":54420,"2":40,"3":{"4":40000}},{"1":51765,"2":40,"3":{"4":40000}},{"1":54135,"2":40,"3":{"4":40000}},{"1":52565,"2":40,"3":{"4":40000}},{"1":50200,"2":40,"3":{"4":40000}},{"1":54790,"2":40,"3":{"4":40000}},{"1":52130,"2":40,"3":{"4":40000}},{"1":61270,"2":50,"3":{"4":50000}},{"1":53135,"2":40,"3":{"4":40000}},{"1":52085,"2":30,"3":{"4":30000}},{"1":61885,"2":40,"3":{"4":40000}},{"1":53785,"2":40,"3":{"4":40000}},{"1":63620,"2":40,"3":{"4":40000}},{"1":50255,"2":30,"3":{"4":30000}},{"1":52085,"2":30,"3":{"4":30000}},{"1":66400,"2":40,"3":{"4":40000}},{"1":61110,"2":40,"3":{"4":40000}},{"1":62930,"2":40,"3":{"4":40000}},{"1":62415,"2":40,"3":{"4":40000}},{"1":62855,"2":40,"3":{"4":40000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian5/0.4.2/json_vm.pb.json b/benchmark/data/skybrian5/0.4.2/json_vm.pb.json
deleted file mode 100644
index 5b594c3..0000000
--- a/benchmark/data/skybrian5/0.4.2/json_vm.pb.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "readjson_vm.dart",
-    "10": {
-      "1": "skybrian5",
-      "2": 1,
-      "3": "1.12.0 (Mon Aug 31 03:24:52 2015) on \"linux_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+3"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf","2":"hosted","3":"0.4.2"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.1"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+7"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":50482,"2":350,"3":{"1":35000}},{"1":51340,"2":380,"3":{"1":38000}},{"1":50996,"2":390,"3":{"1":39000}},{"1":50182,"2":400,"3":{"1":40000}},{"1":50336,"2":400,"3":{"1":40000}},{"1":50175,"2":400,"3":{"1":40000}},{"1":50139,"2":400,"3":{"1":40000}},{"1":50107,"2":400,"3":{"1":40000}},{"1":50162,"2":400,"3":{"1":40000}},{"1":50208,"2":400,"3":{"1":40000}},{"1":50950,"2":370,"3":{"1":37000}},{"1":50250,"2":390,"3":{"1":39000}},{"1":50120,"2":390,"3":{"1":39000}},{"1":50091,"2":390,"3":{"1":39000}},{"1":50103,"2":390,"3":{"1":39000}},{"1":50128,"2":390,"3":{"1":39000}},{"1":50213,"2":390,"3":{"1":39000}},{"1":50011,"2":390,"3":{"1":39000}},{"1":50238,"2":390,"3":{"1":39000}},{"1":50203,"2":390,"3":{"1":39000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":50731,"2":340,"3":{"1":68000}},{"1":50593,"2":340,"3":{"1":68000}},{"1":51101,"2":340,"3":{"1":68000}},{"1":50430,"2":340,"3":{"1":68000}},{"1":50456,"2":340,"3":{"1":68000}},{"1":50460,"2":340,"3":{"1":68000}},{"1":50472,"2":340,"3":{"1":68000}},{"1":50441,"2":340,"3":{"1":68000}},{"1":50437,"2":340,"3":{"1":68000}},{"1":50471,"2":340,"3":{"1":68000}},{"1":51344,"2":340,"3":{"1":68000}},{"1":51382,"2":340,"3":{"1":68000}},{"1":51332,"2":340,"3":{"1":68000}},{"1":51335,"2":340,"3":{"1":68000}},{"1":51347,"2":340,"3":{"1":68000}},{"1":51468,"2":340,"3":{"1":68000}},{"1":51531,"2":340,"3":{"1":68000}},{"1":51421,"2":340,"3":{"1":68000}},{"1":51462,"2":340,"3":{"1":68000}},{"1":51397,"2":340,"3":{"1":68000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":50799,"2":130,"3":{"1":130000}},{"1":50836,"2":130,"3":{"1":130000}},{"1":50943,"2":130,"3":{"1":130000}},{"1":51148,"2":130,"3":{"1":130000}},{"1":50842,"2":130,"3":{"1":130000}},{"1":50888,"2":130,"3":{"1":130000}},{"1":50811,"2":130,"3":{"1":130000}},{"1":50848,"2":130,"3":{"1":130000}},{"1":50929,"2":130,"3":{"1":130000}},{"1":51131,"2":130,"3":{"1":130000}},{"1":51485,"2":130,"3":{"1":130000}},{"1":51532,"2":130,"3":{"1":130000}},{"1":51540,"2":130,"3":{"1":130000}},{"1":51556,"2":130,"3":{"1":130000}},{"1":51502,"2":130,"3":{"1":130000}},{"1":51521,"2":130,"3":{"1":130000}},{"1":51452,"2":130,"3":{"1":130000}},{"1":51453,"2":130,"3":{"1":130000}},{"1":51463,"2":130,"3":{"1":130000}},{"1":51502,"2":130,"3":{"1":130000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":54726,"2":70,"3":{"1":140000}},{"1":54706,"2":70,"3":{"1":140000}},{"1":54883,"2":70,"3":{"1":140000}},{"1":54741,"2":70,"3":{"1":140000}},{"1":54861,"2":70,"3":{"1":140000}},{"1":54843,"2":70,"3":{"1":140000}},{"1":54703,"2":70,"3":{"1":140000}},{"1":54757,"2":70,"3":{"1":140000}},{"1":54707,"2":70,"3":{"1":140000}},{"1":54899,"2":70,"3":{"1":140000}},{"1":55429,"2":70,"3":{"1":140000}},{"1":55402,"2":70,"3":{"1":140000}},{"1":55414,"2":70,"3":{"1":140000}},{"1":55542,"2":70,"3":{"1":140000}},{"1":55444,"2":70,"3":{"1":140000}},{"1":55546,"2":70,"3":{"1":140000}},{"1":55393,"2":70,"3":{"1":140000}},{"1":55648,"2":70,"3":{"1":140000}},{"1":55421,"2":70,"3":{"1":140000}},{"1":55412,"2":70,"3":{"1":140000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":51135,"2":320,"3":{"1":32000}},{"1":50235,"2":350,"3":{"1":35000}},{"1":50278,"2":350,"3":{"1":35000}},{"1":50240,"2":350,"3":{"1":35000}},{"1":50243,"2":350,"3":{"1":35000}},{"1":50239,"2":350,"3":{"1":35000}},{"1":50255,"2":350,"3":{"1":35000}},{"1":50147,"2":350,"3":{"1":35000}},{"1":50262,"2":350,"3":{"1":35000}},{"1":50223,"2":350,"3":{"1":35000}},{"1":50994,"2":320,"3":{"1":32000}},{"1":50169,"2":350,"3":{"1":35000}},{"1":50198,"2":350,"3":{"1":35000}},{"1":50154,"2":350,"3":{"1":35000}},{"1":50160,"2":350,"3":{"1":35000}},{"1":50149,"2":350,"3":{"1":35000}},{"1":50047,"2":350,"3":{"1":35000}},{"1":50198,"2":350,"3":{"1":35000}},{"1":50145,"2":350,"3":{"1":35000}},{"1":50183,"2":350,"3":{"1":35000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":50639,"2":340,"3":{"1":68000}},{"1":50610,"2":340,"3":{"1":68000}},{"1":50623,"2":340,"3":{"1":68000}},{"1":50770,"2":340,"3":{"1":68000}},{"1":50235,"2":340,"3":{"1":68000}},{"1":50193,"2":340,"3":{"1":68000}},{"1":50225,"2":340,"3":{"1":68000}},{"1":50112,"2":340,"3":{"1":68000}},{"1":50214,"2":340,"3":{"1":68000}},{"1":50213,"2":340,"3":{"1":68000}},{"1":50484,"2":340,"3":{"1":68000}},{"1":50510,"2":340,"3":{"1":68000}},{"1":50499,"2":340,"3":{"1":68000}},{"1":50504,"2":340,"3":{"1":68000}},{"1":50548,"2":340,"3":{"1":68000}},{"1":50546,"2":340,"3":{"1":68000}},{"1":50524,"2":340,"3":{"1":68000}},{"1":50501,"2":340,"3":{"1":68000}},{"1":50508,"2":340,"3":{"1":68000}},{"1":50514,"2":340,"3":{"1":68000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":50406,"2":250,"3":{"1":250000}},{"1":50366,"2":250,"3":{"1":250000}},{"1":50314,"2":250,"3":{"1":250000}},{"1":50381,"2":250,"3":{"1":250000}},{"1":50381,"2":250,"3":{"1":250000}},{"1":50337,"2":250,"3":{"1":250000}},{"1":50364,"2":250,"3":{"1":250000}},{"1":50266,"2":250,"3":{"1":250000}},{"1":51648,"2":250,"3":{"1":250000}},{"1":50354,"2":250,"3":{"1":250000}},{"1":50095,"2":250,"3":{"1":250000}},{"1":50075,"2":250,"3":{"1":250000}},{"1":50685,"2":250,"3":{"1":250000}},{"1":50574,"2":250,"3":{"1":250000}},{"1":50160,"2":250,"3":{"1":250000}},{"1":50096,"2":250,"3":{"1":250000}},{"1":50084,"2":250,"3":{"1":250000}},{"1":50155,"2":250,"3":{"1":250000}},{"1":50535,"2":250,"3":{"1":250000}},{"1":50554,"2":250,"3":{"1":250000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":52429,"2":130,"3":{"1":260000}},{"1":52567,"2":130,"3":{"1":260000}},{"1":52393,"2":130,"3":{"1":260000}},{"1":52394,"2":130,"3":{"1":260000}},{"1":52427,"2":130,"3":{"1":260000}},{"1":52385,"2":130,"3":{"1":260000}},{"1":52390,"2":130,"3":{"1":260000}},{"1":52402,"2":130,"3":{"1":260000}},{"1":52396,"2":130,"3":{"1":260000}},{"1":52634,"2":130,"3":{"1":260000}},{"1":52459,"2":130,"3":{"1":260000}},{"1":52457,"2":130,"3":{"1":260000}},{"1":52461,"2":130,"3":{"1":260000}},{"1":52325,"2":130,"3":{"1":260000}},{"1":52136,"2":130,"3":{"1":260000}},{"1":52036,"2":130,"3":{"1":260000}},{"1":52062,"2":130,"3":{"1":260000}},{"1":51809,"2":130,"3":{"1":260000}},{"1":52483,"2":130,"3":{"1":260000}},{"1":51996,"2":130,"3":{"1":260000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":50808,"2":350,"3":{"2":35000}},{"1":50244,"2":380,"3":{"2":38000}},{"1":50261,"2":380,"3":{"2":38000}},{"1":50490,"2":390,"3":{"2":39000}},{"1":50488,"2":390,"3":{"2":39000}},{"1":50444,"2":390,"3":{"2":39000}},{"1":50482,"2":390,"3":{"2":39000}},{"1":50468,"2":390,"3":{"2":39000}},{"1":50465,"2":390,"3":{"2":39000}},{"1":50521,"2":390,"3":{"2":39000}},{"1":50543,"2":350,"3":{"2":35000}},{"1":50580,"2":380,"3":{"2":38000}},{"1":50546,"2":380,"3":{"2":38000}},{"1":50577,"2":380,"3":{"2":38000}},{"1":50566,"2":380,"3":{"2":38000}},{"1":50551,"2":380,"3":{"2":38000}},{"1":50411,"2":380,"3":{"2":38000}},{"1":50555,"2":380,"3":{"2":38000}},{"1":50507,"2":380,"3":{"2":38000}},{"1":50536,"2":380,"3":{"2":38000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":51125,"2":330,"3":{"2":66000}},{"1":50992,"2":330,"3":{"2":66000}},{"1":51303,"2":330,"3":{"2":66000}},{"1":50939,"2":330,"3":{"2":66000}},{"1":51211,"2":330,"3":{"2":66000}},{"1":51047,"2":330,"3":{"2":66000}},{"1":51045,"2":330,"3":{"2":66000}},{"1":51026,"2":330,"3":{"2":66000}},{"1":51083,"2":330,"3":{"2":66000}},{"1":51067,"2":330,"3":{"2":66000}},{"1":50089,"2":320,"3":{"2":64000}},{"1":50083,"2":320,"3":{"2":64000}},{"1":50069,"2":320,"3":{"2":64000}},{"1":50077,"2":320,"3":{"2":64000}},{"1":51543,"2":330,"3":{"2":66000}},{"1":51527,"2":330,"3":{"2":66000}},{"1":51509,"2":330,"3":{"2":66000}},{"1":51511,"2":330,"3":{"2":66000}},{"1":50284,"2":320,"3":{"2":64000}},{"1":50063,"2":320,"3":{"2":64000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":51255,"2":120,"3":{"2":120000}},{"1":51190,"2":120,"3":{"2":120000}},{"1":51198,"2":120,"3":{"2":120000}},{"1":51447,"2":120,"3":{"2":120000}},{"1":51272,"2":120,"3":{"2":120000}},{"1":51258,"2":120,"3":{"2":120000}},{"1":51168,"2":120,"3":{"2":120000}},{"1":51210,"2":120,"3":{"2":120000}},{"1":51216,"2":120,"3":{"2":120000}},{"1":51285,"2":120,"3":{"2":120000}},{"1":53487,"2":130,"3":{"2":130000}},{"1":53418,"2":130,"3":{"2":130000}},{"1":53527,"2":130,"3":{"2":130000}},{"1":53408,"2":130,"3":{"2":130000}},{"1":53437,"2":130,"3":{"2":130000}},{"1":53639,"2":130,"3":{"2":130000}},{"1":53460,"2":130,"3":{"2":130000}},{"1":53498,"2":130,"3":{"2":130000}},{"1":53581,"2":130,"3":{"2":130000}},{"1":53562,"2":130,"3":{"2":130000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":51400,"2":60,"3":{"2":120000}},{"1":51254,"2":60,"3":{"2":120000}},{"1":51226,"2":60,"3":{"2":120000}},{"1":51297,"2":60,"3":{"2":120000}},{"1":51213,"2":60,"3":{"2":120000}},{"1":51260,"2":60,"3":{"2":120000}},{"1":51211,"2":60,"3":{"2":120000}},{"1":51434,"2":60,"3":{"2":120000}},{"1":51308,"2":60,"3":{"2":120000}},{"1":51215,"2":60,"3":{"2":120000}},{"1":57697,"2":70,"3":{"2":140000}},{"1":57973,"2":70,"3":{"2":140000}},{"1":57926,"2":70,"3":{"2":140000}},{"1":57706,"2":70,"3":{"2":140000}},{"1":57631,"2":70,"3":{"2":140000}},{"1":57618,"2":70,"3":{"2":140000}},{"1":57829,"2":70,"3":{"2":140000}},{"1":57587,"2":70,"3":{"2":140000}},{"1":57807,"2":70,"3":{"2":140000}},{"1":57612,"2":70,"3":{"2":140000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":54972,"2":340,"3":{"2":34000}},{"1":50370,"2":350,"3":{"2":35000}},{"1":50419,"2":350,"3":{"2":35000}},{"1":50358,"2":350,"3":{"2":35000}},{"1":50440,"2":350,"3":{"2":35000}},{"1":50412,"2":350,"3":{"2":35000}},{"1":50419,"2":350,"3":{"2":35000}},{"1":50400,"2":350,"3":{"2":35000}},{"1":50388,"2":350,"3":{"2":35000}},{"1":50417,"2":350,"3":{"2":35000}},{"1":50349,"2":310,"3":{"2":31000}},{"1":50688,"2":350,"3":{"2":35000}},{"1":50710,"2":350,"3":{"2":35000}},{"1":50705,"2":350,"3":{"2":35000}},{"1":50715,"2":350,"3":{"2":35000}},{"1":50682,"2":350,"3":{"2":35000}},{"1":50684,"2":350,"3":{"2":35000}},{"1":50685,"2":350,"3":{"2":35000}},{"1":50700,"2":350,"3":{"2":35000}},{"1":50688,"2":350,"3":{"2":35000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":51170,"2":340,"3":{"2":68000}},{"1":51215,"2":340,"3":{"2":68000}},{"1":51207,"2":340,"3":{"2":68000}},{"1":51389,"2":340,"3":{"2":68000}},{"1":50948,"2":340,"3":{"2":68000}},{"1":50980,"2":340,"3":{"2":68000}},{"1":50945,"2":340,"3":{"2":68000}},{"1":50925,"2":340,"3":{"2":68000}},{"1":50932,"2":340,"3":{"2":68000}},{"1":50966,"2":340,"3":{"2":68000}},{"1":51507,"2":340,"3":{"2":68000}},{"1":51457,"2":340,"3":{"2":68000}},{"1":51363,"2":340,"3":{"2":68000}},{"1":51506,"2":340,"3":{"2":68000}},{"1":51437,"2":340,"3":{"2":68000}},{"1":51436,"2":340,"3":{"2":68000}},{"1":51448,"2":340,"3":{"2":68000}},{"1":51459,"2":340,"3":{"2":68000}},{"1":51446,"2":340,"3":{"2":68000}},{"1":50066,"2":330,"3":{"2":66000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":50364,"2":240,"3":{"2":240000}},{"1":50362,"2":240,"3":{"2":240000}},{"1":50344,"2":240,"3":{"2":240000}},{"1":50374,"2":240,"3":{"2":240000}},{"1":50373,"2":240,"3":{"2":240000}},{"1":50348,"2":240,"3":{"2":240000}},{"1":50378,"2":240,"3":{"2":240000}},{"1":50689,"2":240,"3":{"2":240000}},{"1":50375,"2":240,"3":{"2":240000}},{"1":50389,"2":240,"3":{"2":240000}},{"1":50844,"2":240,"3":{"2":240000}},{"1":50835,"2":240,"3":{"2":240000}},{"1":50864,"2":240,"3":{"2":240000}},{"1":51017,"2":240,"3":{"2":240000}},{"1":50857,"2":240,"3":{"2":240000}},{"1":50846,"2":240,"3":{"2":240000}},{"1":50828,"2":240,"3":{"2":240000}},{"1":50839,"2":240,"3":{"2":240000}},{"1":50811,"2":240,"3":{"2":240000}},{"1":50867,"2":240,"3":{"2":240000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":50245,"2":120,"3":{"2":240000}},{"1":50262,"2":120,"3":{"2":240000}},{"1":50248,"2":120,"3":{"2":240000}},{"1":50246,"2":120,"3":{"2":240000}},{"1":50291,"2":120,"3":{"2":240000}},{"1":50209,"2":120,"3":{"2":240000}},{"1":50252,"2":120,"3":{"2":240000}},{"1":50222,"2":120,"3":{"2":240000}},{"1":50240,"2":120,"3":{"2":240000}},{"1":50199,"2":120,"3":{"2":240000}},{"1":50784,"2":120,"3":{"2":240000}},{"1":50686,"2":120,"3":{"2":240000}},{"1":50669,"2":120,"3":{"2":240000}},{"1":50743,"2":120,"3":{"2":240000}},{"1":50725,"2":120,"3":{"2":240000}},{"1":50664,"2":120,"3":{"2":240000}},{"1":50677,"2":120,"3":{"2":240000}},{"1":50673,"2":120,"3":{"2":240000}},{"1":50671,"2":120,"3":{"2":240000}},{"1":50663,"2":120,"3":{"2":240000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50749,"2":370,"3":{"4":37000}},{"1":50012,"2":370,"3":{"4":37000}},{"1":51276,"2":380,"3":{"4":38000}},{"1":51317,"2":380,"3":{"4":38000}},{"1":51292,"2":380,"3":{"4":38000}},{"1":51262,"2":380,"3":{"4":38000}},{"1":51284,"2":380,"3":{"4":38000}},{"1":51292,"2":380,"3":{"4":38000}},{"1":51274,"2":380,"3":{"4":38000}},{"1":51289,"2":380,"3":{"4":38000}},{"1":51910,"2":360,"3":{"4":36000}},{"1":51069,"2":380,"3":{"4":38000}},{"1":51063,"2":380,"3":{"4":38000}},{"1":51058,"2":380,"3":{"4":38000}},{"1":51130,"2":380,"3":{"4":38000}},{"1":51100,"2":380,"3":{"4":38000}},{"1":51102,"2":380,"3":{"4":38000}},{"1":51062,"2":380,"3":{"4":38000}},{"1":51037,"2":380,"3":{"4":38000}},{"1":51107,"2":380,"3":{"4":38000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50029,"2":310,"3":{"4":62000}},{"1":50012,"2":310,"3":{"4":62000}},{"1":50368,"2":310,"3":{"4":62000}},{"1":51543,"2":320,"3":{"4":64000}},{"1":51452,"2":320,"3":{"4":64000}},{"1":50325,"2":310,"3":{"4":62000}},{"1":50005,"2":310,"3":{"4":62000}},{"1":50088,"2":310,"3":{"4":62000}},{"1":51585,"2":320,"3":{"4":64000}},{"1":51618,"2":320,"3":{"4":64000}},{"1":51432,"2":320,"3":{"4":64000}},{"1":51321,"2":320,"3":{"4":64000}},{"1":51348,"2":320,"3":{"4":64000}},{"1":51314,"2":320,"3":{"4":64000}},{"1":51373,"2":320,"3":{"4":64000}},{"1":51332,"2":320,"3":{"4":64000}},{"1":51243,"2":320,"3":{"4":64000}},{"1":51264,"2":320,"3":{"4":64000}},{"1":51264,"2":320,"3":{"4":64000}},{"1":51266,"2":320,"3":{"4":64000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52517,"2":120,"3":{"4":120000}},{"1":52502,"2":120,"3":{"4":120000}},{"1":52897,"2":120,"3":{"4":120000}},{"1":52749,"2":120,"3":{"4":120000}},{"1":52599,"2":120,"3":{"4":120000}},{"1":52650,"2":120,"3":{"4":120000}},{"1":52505,"2":120,"3":{"4":120000}},{"1":52584,"2":120,"3":{"4":120000}},{"1":52499,"2":120,"3":{"4":120000}},{"1":52517,"2":120,"3":{"4":120000}},{"1":53207,"2":120,"3":{"4":120000}},{"1":52420,"2":120,"3":{"4":120000}},{"1":52382,"2":120,"3":{"4":120000}},{"1":52317,"2":120,"3":{"4":120000}},{"1":52513,"2":120,"3":{"4":120000}},{"1":53189,"2":120,"3":{"4":120000}},{"1":52264,"2":120,"3":{"4":120000}},{"1":52396,"2":120,"3":{"4":120000}},{"1":52329,"2":120,"3":{"4":120000}},{"1":52309,"2":120,"3":{"4":120000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52333,"2":60,"3":{"4":120000}},{"1":52470,"2":60,"3":{"4":120000}},{"1":52414,"2":60,"3":{"4":120000}},{"1":52343,"2":60,"3":{"4":120000}},{"1":52431,"2":60,"3":{"4":120000}},{"1":52315,"2":60,"3":{"4":120000}},{"1":52328,"2":60,"3":{"4":120000}},{"1":52335,"2":60,"3":{"4":120000}},{"1":52309,"2":60,"3":{"4":120000}},{"1":52366,"2":60,"3":{"4":120000}},{"1":52132,"2":60,"3":{"4":120000}},{"1":52201,"2":60,"3":{"4":120000}},{"1":58009,"2":60,"3":{"4":120000}},{"1":52442,"2":60,"3":{"4":120000}},{"1":52527,"2":60,"3":{"4":120000}},{"1":52541,"2":60,"3":{"4":120000}},{"1":52340,"2":60,"3":{"4":120000}},{"1":52364,"2":60,"3":{"4":120000}},{"1":52431,"2":60,"3":{"4":120000}},{"1":52233,"2":60,"3":{"4":120000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":50916,"2":70,"3":{"4":70000}},{"1":50433,"2":70,"3":{"4":70000}},{"1":50472,"2":70,"3":{"4":70000}},{"1":50900,"2":70,"3":{"4":70000}},{"1":50398,"2":70,"3":{"4":70000}},{"1":50359,"2":70,"3":{"4":70000}},{"1":50883,"2":70,"3":{"4":70000}},{"1":50360,"2":70,"3":{"4":70000}},{"1":50396,"2":70,"3":{"4":70000}},{"1":50834,"2":70,"3":{"4":70000}},{"1":50311,"2":70,"3":{"4":70000}},{"1":50330,"2":70,"3":{"4":70000}},{"1":50259,"2":70,"3":{"4":70000}},{"1":51171,"2":70,"3":{"4":70000}},{"1":50244,"2":70,"3":{"4":70000}},{"1":50354,"2":70,"3":{"4":70000}},{"1":50114,"2":70,"3":{"4":70000}},{"1":50825,"2":70,"3":{"4":70000}},{"1":50206,"2":70,"3":{"4":70000}},{"1":50232,"2":70,"3":{"4":70000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50911,"2":340,"3":{"4":34000}},{"1":51183,"2":340,"3":{"4":34000}},{"1":50550,"2":340,"3":{"4":34000}},{"1":50367,"2":340,"3":{"4":34000}},{"1":50260,"2":340,"3":{"4":34000}},{"1":50650,"2":340,"3":{"4":34000}},{"1":50399,"2":340,"3":{"4":34000}},{"1":50388,"2":340,"3":{"4":34000}},{"1":50350,"2":340,"3":{"4":34000}},{"1":50439,"2":340,"3":{"4":34000}},{"1":50275,"2":340,"3":{"4":34000}},{"1":50158,"2":340,"3":{"4":34000}},{"1":50398,"2":340,"3":{"4":34000}},{"1":50274,"2":340,"3":{"4":34000}},{"1":50270,"2":340,"3":{"4":34000}},{"1":50305,"2":340,"3":{"4":34000}},{"1":50325,"2":340,"3":{"4":34000}},{"1":50268,"2":340,"3":{"4":34000}},{"1":50263,"2":340,"3":{"4":34000}},{"1":50246,"2":340,"3":{"4":34000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50464,"2":320,"3":{"4":64000}},{"1":50475,"2":320,"3":{"4":64000}},{"1":50455,"2":320,"3":{"4":64000}},{"1":50477,"2":320,"3":{"4":64000}},{"1":50466,"2":320,"3":{"4":64000}},{"1":50446,"2":320,"3":{"4":64000}},{"1":50440,"2":320,"3":{"4":64000}},{"1":50336,"2":320,"3":{"4":64000}},{"1":50501,"2":320,"3":{"4":64000}},{"1":50453,"2":320,"3":{"4":64000}},{"1":50332,"2":320,"3":{"4":64000}},{"1":50329,"2":320,"3":{"4":64000}},{"1":50317,"2":320,"3":{"4":64000}},{"1":50337,"2":320,"3":{"4":64000}},{"1":50378,"2":320,"3":{"4":64000}},{"1":50323,"2":320,"3":{"4":64000}},{"1":50247,"2":320,"3":{"4":64000}},{"1":50331,"2":320,"3":{"4":64000}},{"1":50350,"2":320,"3":{"4":64000}},{"1":50212,"2":320,"3":{"4":64000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":51579,"2":210,"3":{"4":210000}},{"1":51565,"2":210,"3":{"4":210000}},{"1":51572,"2":210,"3":{"4":210000}},{"1":51567,"2":210,"3":{"4":210000}},{"1":51451,"2":210,"3":{"4":210000}},{"1":51631,"2":210,"3":{"4":210000}},{"1":51568,"2":210,"3":{"4":210000}},{"1":51565,"2":210,"3":{"4":210000}},{"1":51592,"2":210,"3":{"4":210000}},{"1":51563,"2":210,"3":{"4":210000}},{"1":51449,"2":210,"3":{"4":210000}},{"1":51571,"2":210,"3":{"4":210000}},{"1":51524,"2":210,"3":{"4":210000}},{"1":51466,"2":210,"3":{"4":210000}},{"1":51499,"2":210,"3":{"4":210000}},{"1":51532,"2":210,"3":{"4":210000}},{"1":51455,"2":210,"3":{"4":210000}},{"1":51438,"2":210,"3":{"4":210000}},{"1":51462,"2":210,"3":{"4":210000}},{"1":51430,"2":210,"3":{"4":210000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":53694,"2":110,"3":{"4":220000}},{"1":53704,"2":110,"3":{"4":220000}},{"1":53721,"2":110,"3":{"4":220000}},{"1":53690,"2":110,"3":{"4":220000}},{"1":53690,"2":110,"3":{"4":220000}},{"1":53689,"2":110,"3":{"4":220000}},{"1":53684,"2":110,"3":{"4":220000}},{"1":53673,"2":110,"3":{"4":220000}},{"1":53728,"2":110,"3":{"4":220000}},{"1":53681,"2":110,"3":{"4":220000}},{"1":53615,"2":110,"3":{"4":220000}},{"1":53600,"2":110,"3":{"4":220000}},{"1":53583,"2":110,"3":{"4":220000}},{"1":53565,"2":110,"3":{"4":220000}},{"1":53598,"2":110,"3":{"4":220000}},{"1":53560,"2":110,"3":{"4":220000}},{"1":53561,"2":110,"3":{"4":220000}},{"1":53569,"2":110,"3":{"4":220000}},{"1":53680,"2":110,"3":{"4":220000}},{"1":53574,"2":110,"3":{"4":220000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":52756,"2":100,"3":{"4":100000}},{"1":52779,"2":100,"3":{"4":100000}},{"1":52724,"2":100,"3":{"4":100000}},{"1":52609,"2":100,"3":{"4":100000}},{"1":52645,"2":100,"3":{"4":100000}},{"1":52687,"2":100,"3":{"4":100000}},{"1":52795,"2":100,"3":{"4":100000}},{"1":52639,"2":100,"3":{"4":100000}},{"1":52632,"2":100,"3":{"4":100000}},{"1":52630,"2":100,"3":{"4":100000}},{"1":52709,"2":100,"3":{"4":100000}},{"1":52664,"2":100,"3":{"4":100000}},{"1":52783,"2":100,"3":{"4":100000}},{"1":52859,"2":100,"3":{"4":100000}},{"1":52869,"2":100,"3":{"4":100000}},{"1":52645,"2":100,"3":{"4":100000}},{"1":52611,"2":100,"3":{"4":100000}},{"1":52635,"2":100,"3":{"4":100000}},{"1":52676,"2":100,"3":{"4":100000}},{"1":52686,"2":100,"3":{"4":100000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian5/0.4.2/props_chrome.pb.json b/benchmark/data/skybrian5/0.4.2/props_chrome.pb.json
deleted file mode 100644
index 5b30240..0000000
--- a/benchmark/data/skybrian5/0.4.2/props_chrome.pb.json
+++ /dev/null
@@ -1,60 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/props.html",
-    "10": {
-      "1": "skybrian5",
-      "10": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+6"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf","2":"hosted","3":"0.4.2"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+9"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50230,"2":7100,"3":{"4":710000}},{"1":50570,"2":7300,"3":{"4":730000}},{"1":50490,"2":7300,"3":{"4":730000}},{"1":50475,"2":7300,"3":{"4":730000}},{"1":50230,"2":7300,"3":{"4":730000}},{"1":50195,"2":7300,"3":{"4":730000}},{"1":50480,"2":7300,"3":{"4":730000}},{"1":50300,"2":7300,"3":{"4":730000}},{"1":50290,"2":7300,"3":{"4":730000}},{"1":50415,"2":7300,"3":{"4":730000}},{"1":50395,"2":7300,"3":{"4":730000}},{"1":50680,"2":7300,"3":{"4":730000}},{"1":50665,"2":7300,"3":{"4":730000}},{"1":50545,"2":7300,"3":{"4":730000}},{"1":50270,"2":7300,"3":{"4":730000}},{"1":50310,"2":7300,"3":{"4":730000}},{"1":50305,"2":7300,"3":{"4":730000}},{"1":50360,"2":7300,"3":{"4":730000}},{"1":50295,"2":7300,"3":{"4":730000}},{"1":50365,"2":7300,"3":{"4":730000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50090,"2":15200,"3":{"4":1520000}},{"1":50080,"2":15400,"3":{"4":1540000}},{"1":50050,"2":15400,"3":{"4":1540000}},{"1":50240,"2":15400,"3":{"4":1540000}},{"1":50040,"2":15300,"3":{"4":1530000}},{"1":50075,"2":15400,"3":{"4":1540000}},{"1":50030,"2":15400,"3":{"4":1540000}},{"1":50250,"2":15400,"3":{"4":1540000}},{"1":50170,"2":15400,"3":{"4":1540000}},{"1":50225,"2":15300,"3":{"4":1530000}},{"1":50230,"2":15300,"3":{"4":1530000}},{"1":50065,"2":15400,"3":{"4":1540000}},{"1":50245,"2":15200,"3":{"4":1520000}},{"1":50045,"2":15300,"3":{"4":1530000}},{"1":50075,"2":15400,"3":{"4":1540000}},{"1":50085,"2":15100,"3":{"4":1510000}},{"1":50170,"2":15400,"3":{"4":1540000}},{"1":50150,"2":15400,"3":{"4":1540000}},{"1":50130,"2":15400,"3":{"4":1540000}},{"1":50040,"2":15400,"3":{"4":1540000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50800,"2":4000,"3":{"5":400000}},{"1":51145,"2":4300,"3":{"5":430000}},{"1":50870,"2":4300,"3":{"5":430000}},{"1":50645,"2":4200,"3":{"5":420000}},{"1":50110,"2":4200,"3":{"5":420000}},{"1":50975,"2":4300,"3":{"5":430000}},{"1":50965,"2":4300,"3":{"5":430000}},{"1":50345,"2":4200,"3":{"5":420000}},{"1":51050,"2":4300,"3":{"5":430000}},{"1":50990,"2":4200,"3":{"5":420000}},{"1":50700,"2":4200,"3":{"5":420000}},{"1":50935,"2":4300,"3":{"5":430000}},{"1":50490,"2":4200,"3":{"5":420000}},{"1":50115,"2":4200,"3":{"5":420000}},{"1":50980,"2":4300,"3":{"5":430000}},{"1":50660,"2":4200,"3":{"5":420000}},{"1":51105,"2":4300,"3":{"5":430000}},{"1":51045,"2":4300,"3":{"5":430000}},{"1":50985,"2":4300,"3":{"5":430000}},{"1":50790,"2":4300,"3":{"5":430000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50415,"2":4000,"3":{"5":400000}},{"1":51145,"2":4300,"3":{"5":430000}},{"1":50835,"2":4300,"3":{"5":430000}},{"1":51490,"2":4200,"3":{"5":420000}},{"1":50400,"2":4200,"3":{"5":420000}},{"1":50075,"2":4200,"3":{"5":420000}},{"1":50950,"2":4300,"3":{"5":430000}},{"1":50065,"2":4200,"3":{"5":420000}},{"1":51140,"2":4300,"3":{"5":430000}},{"1":51005,"2":4300,"3":{"5":430000}},{"1":50685,"2":4200,"3":{"5":420000}},{"1":50995,"2":4300,"3":{"5":430000}},{"1":50875,"2":4300,"3":{"5":430000}},{"1":50165,"2":4200,"3":{"5":420000}},{"1":50000,"2":4200,"3":{"5":420000}},{"1":50300,"2":4200,"3":{"5":420000}},{"1":50015,"2":4200,"3":{"5":420000}},{"1":50185,"2":4200,"3":{"5":420000}},{"1":50135,"2":4200,"3":{"5":420000}},{"1":50880,"2":4300,"3":{"5":430000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50135,"2":31800,"3":{"4":3180000}},{"1":50020,"2":33200,"3":{"4":3320000}},{"1":50085,"2":33400,"3":{"4":3340000}},{"1":50010,"2":33000,"3":{"4":3300000}},{"1":50090,"2":33200,"3":{"4":3320000}},{"1":50010,"2":33200,"3":{"4":3320000}},{"1":50085,"2":33100,"3":{"4":3310000}},{"1":50070,"2":33300,"3":{"4":3330000}},{"1":50020,"2":33200,"3":{"4":3320000}},{"1":50095,"2":33400,"3":{"4":3340000}},{"1":50100,"2":32800,"3":{"4":3280000}},{"1":50115,"2":32900,"3":{"4":3290000}},{"1":50050,"2":33400,"3":{"4":3340000}},{"1":50105,"2":33100,"3":{"4":3310000}},{"1":50110,"2":33400,"3":{"4":3340000}},{"1":50010,"2":33000,"3":{"4":3300000}},{"1":50130,"2":33300,"3":{"4":3330000}},{"1":50025,"2":33300,"3":{"4":3330000}},{"1":50120,"2":33400,"3":{"4":3340000}},{"1":50000,"2":33200,"3":{"4":3320000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50145,"2":11500,"3":{"4":1150000}},{"1":50030,"2":11900,"3":{"4":1190000}},{"1":50010,"2":11900,"3":{"4":1190000}},{"1":50205,"2":12000,"3":{"4":1200000}},{"1":50050,"2":11700,"3":{"4":1170000}},{"1":50395,"2":11900,"3":{"4":1190000}},{"1":50330,"2":12000,"3":{"4":1200000}},{"1":50270,"2":11600,"3":{"4":1160000}},{"1":50355,"2":12000,"3":{"4":1200000}},{"1":50155,"2":11900,"3":{"4":1190000}},{"1":50235,"2":11900,"3":{"4":1190000}},{"1":50420,"2":11900,"3":{"4":1190000}},{"1":50075,"2":11900,"3":{"4":1190000}},{"1":50215,"2":12000,"3":{"4":1200000}},{"1":50300,"2":12000,"3":{"4":1200000}},{"1":50365,"2":11900,"3":{"4":1190000}},{"1":50410,"2":12000,"3":{"4":1200000}},{"1":50335,"2":12000,"3":{"4":1200000}},{"1":50160,"2":12000,"3":{"4":1200000}},{"1":50020,"2":11900,"3":{"4":1190000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian5/0.4.2/props_vm.pb.json b/benchmark/data/skybrian5/0.4.2/props_vm.pb.json
deleted file mode 100644
index a91b6c5..0000000
--- a/benchmark/data/skybrian5/0.4.2/props_vm.pb.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "props_vm.dart",
-    "10": {
-      "1": "skybrian5",
-      "2": 1,
-      "3": "1.12.0 (Mon Aug 31 03:24:52 2015) on \"linux_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+6"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf","2":"hosted","3":"0.4.2"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+9"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50025,"2":14600,"3":{"4":1460000}},{"1":50137,"2":14800,"3":{"4":1480000}},{"1":50122,"2":14800,"3":{"4":1480000}},{"1":50246,"2":14800,"3":{"4":1480000}},{"1":50121,"2":14800,"3":{"4":1480000}},{"1":50073,"2":14800,"3":{"4":1480000}},{"1":50213,"2":14800,"3":{"4":1480000}},{"1":50073,"2":14800,"3":{"4":1480000}},{"1":50244,"2":14800,"3":{"4":1480000}},{"1":50085,"2":14800,"3":{"4":1480000}},{"1":50124,"2":14800,"3":{"4":1480000}},{"1":50214,"2":14800,"3":{"4":1480000}},{"1":50238,"2":14700,"3":{"4":1470000}},{"1":50229,"2":14800,"3":{"4":1480000}},{"1":50240,"2":14800,"3":{"4":1480000}},{"1":50123,"2":14800,"3":{"4":1480000}},{"1":50283,"2":14800,"3":{"4":1480000}},{"1":50042,"2":14700,"3":{"4":1470000}},{"1":50272,"2":14800,"3":{"4":1480000}},{"1":50240,"2":14800,"3":{"4":1480000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50056,"2":30800,"3":{"4":3080000}},{"1":50012,"2":30600,"3":{"4":3060000}},{"1":50016,"2":30700,"3":{"4":3070000}},{"1":50161,"2":30800,"3":{"4":3080000}},{"1":50099,"2":29300,"3":{"4":2930000}},{"1":50079,"2":30800,"3":{"4":3080000}},{"1":50126,"2":30900,"3":{"4":3090000}},{"1":50044,"2":30800,"3":{"4":3080000}},{"1":50146,"2":30900,"3":{"4":3090000}},{"1":50045,"2":30300,"3":{"4":3030000}},{"1":50019,"2":30400,"3":{"4":3040000}},{"1":50044,"2":30800,"3":{"4":3080000}},{"1":50132,"2":30800,"3":{"4":3080000}},{"1":50018,"2":30800,"3":{"4":3080000}},{"1":50157,"2":30800,"3":{"4":3080000}},{"1":50160,"2":30700,"3":{"4":3070000}},{"1":50017,"2":30800,"3":{"4":3080000}},{"1":50127,"2":30500,"3":{"4":3050000}},{"1":50115,"2":30600,"3":{"4":3060000}},{"1":50078,"2":30600,"3":{"4":3060000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50193,"2":10600,"3":{"5":1060000}},{"1":50230,"2":10700,"3":{"5":1070000}},{"1":50337,"2":10700,"3":{"5":1070000}},{"1":50224,"2":10700,"3":{"5":1070000}},{"1":50013,"2":10600,"3":{"5":1060000}},{"1":50025,"2":10600,"3":{"5":1060000}},{"1":50166,"2":10700,"3":{"5":1070000}},{"1":50375,"2":10700,"3":{"5":1070000}},{"1":50171,"2":10700,"3":{"5":1070000}},{"1":50316,"2":10700,"3":{"5":1070000}},{"1":50401,"2":10700,"3":{"5":1070000}},{"1":50203,"2":10700,"3":{"5":1070000}},{"1":50192,"2":10700,"3":{"5":1070000}},{"1":50278,"2":10700,"3":{"5":1070000}},{"1":50214,"2":10700,"3":{"5":1070000}},{"1":50318,"2":10700,"3":{"5":1070000}},{"1":50295,"2":10700,"3":{"5":1070000}},{"1":50293,"2":10700,"3":{"5":1070000}},{"1":50308,"2":10700,"3":{"5":1070000}},{"1":50190,"2":10700,"3":{"5":1070000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50224,"2":10700,"3":{"5":1070000}},{"1":50223,"2":10700,"3":{"5":1070000}},{"1":50312,"2":10700,"3":{"5":1070000}},{"1":50305,"2":10700,"3":{"5":1070000}},{"1":50302,"2":10700,"3":{"5":1070000}},{"1":50123,"2":10600,"3":{"5":1060000}},{"1":50203,"2":10700,"3":{"5":1070000}},{"1":50362,"2":10700,"3":{"5":1070000}},{"1":50180,"2":10700,"3":{"5":1070000}},{"1":50283,"2":10700,"3":{"5":1070000}},{"1":50020,"2":10600,"3":{"5":1060000}},{"1":50416,"2":10700,"3":{"5":1070000}},{"1":50208,"2":10700,"3":{"5":1070000}},{"1":50301,"2":10700,"3":{"5":1070000}},{"1":50183,"2":10700,"3":{"5":1070000}},{"1":50170,"2":10700,"3":{"5":1070000}},{"1":50178,"2":10700,"3":{"5":1070000}},{"1":50255,"2":10700,"3":{"5":1070000}},{"1":50229,"2":10700,"3":{"5":1070000}},{"1":50175,"2":10700,"3":{"5":1070000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50062,"2":44300,"3":{"4":4430000}},{"1":50074,"2":44700,"3":{"4":4470000}},{"1":50010,"2":44700,"3":{"4":4470000}},{"1":50055,"2":44700,"3":{"4":4470000}},{"1":50077,"2":44800,"3":{"4":4480000}},{"1":50047,"2":44800,"3":{"4":4480000}},{"1":50026,"2":44900,"3":{"4":4490000}},{"1":50060,"2":44900,"3":{"4":4490000}},{"1":50091,"2":45000,"3":{"4":4500000}},{"1":50071,"2":45000,"3":{"4":4500000}},{"1":50059,"2":45000,"3":{"4":4500000}},{"1":50281,"2":45000,"3":{"4":4500000}},{"1":50103,"2":45000,"3":{"4":4500000}},{"1":50062,"2":45000,"3":{"4":4500000}},{"1":50076,"2":44900,"3":{"4":4490000}},{"1":50097,"2":45000,"3":{"4":4500000}},{"1":50101,"2":45000,"3":{"4":4500000}},{"1":50072,"2":45000,"3":{"4":4500000}},{"1":50008,"2":44900,"3":{"4":4490000}},{"1":50044,"2":45000,"3":{"4":4500000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50164,"2":17400,"3":{"4":1740000}},{"1":50040,"2":17600,"3":{"4":1760000}},{"1":50152,"2":17600,"3":{"4":1760000}},{"1":50135,"2":17600,"3":{"4":1760000}},{"1":50108,"2":17600,"3":{"4":1760000}},{"1":50126,"2":17600,"3":{"4":1760000}},{"1":50111,"2":17600,"3":{"4":1760000}},{"1":50279,"2":17700,"3":{"4":1770000}},{"1":50281,"2":17700,"3":{"4":1770000}},{"1":50067,"2":17600,"3":{"4":1760000}},{"1":50079,"2":17800,"3":{"4":1780000}},{"1":50235,"2":17900,"3":{"4":1790000}},{"1":50179,"2":17700,"3":{"4":1770000}},{"1":50092,"2":17700,"3":{"4":1770000}},{"1":50070,"2":17700,"3":{"4":1770000}},{"1":50035,"2":17700,"3":{"4":1770000}},{"1":50028,"2":17700,"3":{"4":1770000}},{"1":50003,"2":17600,"3":{"4":1760000}},{"1":50196,"2":17700,"3":{"4":1770000}},{"1":50060,"2":17700,"3":{"4":1770000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian5/head/json_chrome.pb.json b/benchmark/data/skybrian5/head/json_chrome.pb.json
deleted file mode 100644
index d3ad3b1..0000000
--- a/benchmark/data/skybrian5/head/json_chrome.pb.json
+++ /dev/null
@@ -1,81 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/readjson.html",
-    "10": {
-      "1": "skybrian5",
-      "10": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+4"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf"},
-        {"1":"description","2":"path","3":"0.4.2","4":"../dart-protobuf"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+8"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":51080,"2":230,"3":{"1":23000}},{"1":57095,"2":90,"3":{"1":9000}},{"1":50280,"2":200,"3":{"1":20000}},{"1":51315,"2":190,"3":{"1":19000}},{"1":50245,"2":220,"3":{"1":22000}},{"1":51620,"2":230,"3":{"1":23000}},{"1":50275,"2":220,"3":{"1":22000}},{"1":50165,"2":210,"3":{"1":21000}},{"1":50260,"2":210,"3":{"1":21000}},{"1":50415,"2":210,"3":{"1":21000}},{"1":51105,"2":200,"3":{"1":20000}},{"1":50255,"2":220,"3":{"1":22000}},{"1":50450,"2":200,"3":{"1":20000}},{"1":51420,"2":190,"3":{"1":19000}},{"1":50365,"2":190,"3":{"1":19000}},{"1":51270,"2":210,"3":{"1":21000}},{"1":52890,"2":200,"3":{"1":20000}},{"1":51375,"2":200,"3":{"1":20000}},{"1":50950,"2":200,"3":{"1":20000}},{"1":50270,"2":200,"3":{"1":20000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":52070,"2":190,"3":{"1":38000}},{"1":52550,"2":130,"3":{"1":26000}},{"1":50830,"2":170,"3":{"1":34000}},{"1":51060,"2":150,"3":{"1":30000}},{"1":51270,"2":170,"3":{"1":34000}},{"1":52220,"2":120,"3":{"1":24000}},{"1":51015,"2":170,"3":{"1":34000}},{"1":51015,"2":170,"3":{"1":34000}},{"1":51470,"2":170,"3":{"1":34000}},{"1":51510,"2":170,"3":{"1":34000}},{"1":51515,"2":160,"3":{"1":32000}},{"1":50270,"2":170,"3":{"1":34000}},{"1":50115,"2":170,"3":{"1":34000}},{"1":50930,"2":150,"3":{"1":30000}},{"1":52900,"2":160,"3":{"1":32000}},{"1":51980,"2":170,"3":{"1":34000}},{"1":52285,"2":160,"3":{"1":32000}},{"1":51420,"2":160,"3":{"1":32000}},{"1":51625,"2":160,"3":{"1":32000}},{"1":51910,"2":160,"3":{"1":32000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":54610,"2":80,"3":{"1":80000}},{"1":50810,"2":60,"3":{"1":60000}},{"1":55700,"2":80,"3":{"1":80000}},{"1":50410,"2":60,"3":{"1":60000}},{"1":60085,"2":60,"3":{"1":60000}},{"1":52055,"2":70,"3":{"1":70000}},{"1":52545,"2":50,"3":{"1":50000}},{"1":56540,"2":80,"3":{"1":80000}},{"1":56550,"2":80,"3":{"1":80000}},{"1":51495,"2":70,"3":{"1":70000}},{"1":55590,"2":70,"3":{"1":70000}},{"1":55595,"2":80,"3":{"1":80000}},{"1":51715,"2":70,"3":{"1":70000}},{"1":56265,"2":70,"3":{"1":70000}},{"1":55900,"2":70,"3":{"1":70000}},{"1":51435,"2":70,"3":{"1":70000}},{"1":53410,"2":70,"3":{"1":70000}},{"1":56345,"2":70,"3":{"1":70000}},{"1":55120,"2":70,"3":{"1":70000}},{"1":56235,"2":70,"3":{"1":70000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":54065,"2":40,"3":{"1":80000}},{"1":50340,"2":30,"3":{"1":60000}},{"1":55245,"2":40,"3":{"1":80000}},{"1":50760,"2":30,"3":{"1":60000}},{"1":58800,"2":40,"3":{"1":80000}},{"1":56125,"2":40,"3":{"1":80000}},{"1":58820,"2":40,"3":{"1":80000}},{"1":63110,"2":40,"3":{"1":80000}},{"1":63195,"2":40,"3":{"1":80000}},{"1":57930,"2":40,"3":{"1":80000}},{"1":62915,"2":40,"3":{"1":80000}},{"1":55225,"2":40,"3":{"1":80000}},{"1":58570,"2":40,"3":{"1":80000}},{"1":64125,"2":40,"3":{"1":80000}},{"1":58825,"2":40,"3":{"1":80000}},{"1":59470,"2":40,"3":{"1":80000}},{"1":60560,"2":40,"3":{"1":80000}},{"1":62940,"2":40,"3":{"1":80000}},{"1":55890,"2":30,"3":{"1":60000}},{"1":63955,"2":40,"3":{"1":80000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":50230,"2":190,"3":{"1":19000}},{"1":52770,"2":160,"3":{"1":16000}},{"1":51450,"2":160,"3":{"1":16000}},{"1":52335,"2":120,"3":{"1":12000}},{"1":51970,"2":150,"3":{"1":15000}},{"1":52390,"2":150,"3":{"1":15000}},{"1":52025,"2":140,"3":{"1":14000}},{"1":50990,"2":140,"3":{"1":14000}},{"1":50915,"2":160,"3":{"1":16000}},{"1":52730,"2":100,"3":{"1":10000}},{"1":50780,"2":110,"3":{"1":11000}},{"1":52485,"2":160,"3":{"1":16000}},{"1":52235,"2":160,"3":{"1":16000}},{"1":51740,"2":90,"3":{"1":9000}},{"1":53950,"2":120,"3":{"1":12000}},{"1":51975,"2":150,"3":{"1":15000}},{"1":51905,"2":110,"3":{"1":11000}},{"1":51445,"2":100,"3":{"1":10000}},{"1":53020,"2":150,"3":{"1":15000}},{"1":52330,"2":150,"3":{"1":15000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":50325,"2":190,"3":{"1":38000}},{"1":50210,"2":130,"3":{"1":26000}},{"1":51370,"2":150,"3":{"1":30000}},{"1":51340,"2":140,"3":{"1":28000}},{"1":51215,"2":110,"3":{"1":22000}},{"1":60955,"2":160,"3":{"1":32000}},{"1":52130,"2":140,"3":{"1":28000}},{"1":58245,"2":150,"3":{"1":30000}},{"1":51565,"2":150,"3":{"1":30000}},{"1":52300,"2":160,"3":{"1":32000}},{"1":50285,"2":150,"3":{"1":30000}},{"1":50010,"2":140,"3":{"1":28000}},{"1":51335,"2":100,"3":{"1":20000}},{"1":51455,"2":140,"3":{"1":28000}},{"1":55525,"2":170,"3":{"1":34000}},{"1":50885,"2":160,"3":{"1":32000}},{"1":51005,"2":140,"3":{"1":28000}},{"1":50555,"2":150,"3":{"1":30000}},{"1":57600,"2":150,"3":{"1":30000}},{"1":54955,"2":100,"3":{"1":20000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":50225,"2":130,"3":{"1":130000}},{"1":52995,"2":120,"3":{"1":120000}},{"1":50465,"2":120,"3":{"1":120000}},{"1":54635,"2":110,"3":{"1":110000}},{"1":51640,"2":110,"3":{"1":110000}},{"1":50095,"2":110,"3":{"1":110000}},{"1":51850,"2":90,"3":{"1":90000}},{"1":53570,"2":90,"3":{"1":90000}},{"1":52240,"2":110,"3":{"1":110000}},{"1":50685,"2":120,"3":{"1":120000}},{"1":53020,"2":110,"3":{"1":110000}},{"1":50870,"2":120,"3":{"1":120000}},{"1":50450,"2":130,"3":{"1":130000}},{"1":61140,"2":110,"3":{"1":110000}},{"1":53620,"2":130,"3":{"1":130000}},{"1":53190,"2":130,"3":{"1":130000}},{"1":54725,"2":110,"3":{"1":110000}},{"1":53950,"2":110,"3":{"1":110000}},{"1":56125,"2":90,"3":{"1":90000}},{"1":53500,"2":110,"3":{"1":110000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":51315,"2":70,"3":{"1":140000}},{"1":52190,"2":60,"3":{"1":120000}},{"1":51605,"2":60,"3":{"1":120000}},{"1":58665,"2":60,"3":{"1":120000}},{"1":55810,"2":60,"3":{"1":120000}},{"1":54505,"2":60,"3":{"1":120000}},{"1":54970,"2":60,"3":{"1":120000}},{"1":54600,"2":60,"3":{"1":120000}},{"1":51505,"2":40,"3":{"1":80000}},{"1":61975,"2":50,"3":{"1":100000}},{"1":54480,"2":40,"3":{"1":80000}},{"1":52070,"2":60,"3":{"1":120000}},{"1":55065,"2":70,"3":{"1":140000}},{"1":56040,"2":60,"3":{"1":120000}},{"1":51055,"2":60,"3":{"1":120000}},{"1":51275,"2":50,"3":{"1":100000}},{"1":59300,"2":60,"3":{"1":120000}},{"1":54940,"2":60,"3":{"1":120000}},{"1":55320,"2":60,"3":{"1":120000}},{"1":54815,"2":60,"3":{"1":120000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":51620,"2":250,"3":{"2":25000}},{"1":53075,"2":130,"3":{"2":13000}},{"1":51060,"2":210,"3":{"2":21000}},{"1":50290,"2":140,"3":{"2":14000}},{"1":53100,"2":170,"3":{"2":17000}},{"1":53810,"2":180,"3":{"2":18000}},{"1":52645,"2":170,"3":{"2":17000}},{"1":50240,"2":180,"3":{"2":18000}},{"1":50955,"2":200,"3":{"2":20000}},{"1":52265,"2":210,"3":{"2":21000}},{"1":50855,"2":190,"3":{"2":19000}},{"1":50820,"2":210,"3":{"2":21000}},{"1":51755,"2":170,"3":{"2":17000}},{"1":50255,"2":170,"3":{"2":17000}},{"1":51710,"2":220,"3":{"2":22000}},{"1":51715,"2":220,"3":{"2":22000}},{"1":51070,"2":150,"3":{"2":15000}},{"1":52245,"2":190,"3":{"2":19000}},{"1":51050,"2":170,"3":{"2":17000}},{"1":50475,"2":110,"3":{"2":11000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":50115,"2":190,"3":{"2":38000}},{"1":50385,"2":150,"3":{"2":30000}},{"1":58485,"2":170,"3":{"2":34000}},{"1":52100,"2":130,"3":{"2":26000}},{"1":52555,"2":150,"3":{"2":30000}},{"1":61145,"2":110,"3":{"2":22000}},{"1":52455,"2":160,"3":{"2":32000}},{"1":50370,"2":140,"3":{"2":28000}},{"1":52605,"2":160,"3":{"2":32000}},{"1":52290,"2":160,"3":{"2":32000}},{"1":50860,"2":140,"3":{"2":28000}},{"1":50295,"2":160,"3":{"2":32000}},{"1":52530,"2":150,"3":{"2":30000}},{"1":52615,"2":150,"3":{"2":30000}},{"1":59140,"2":170,"3":{"2":34000}},{"1":58920,"2":170,"3":{"2":34000}},{"1":51310,"2":150,"3":{"2":30000}},{"1":51530,"2":140,"3":{"2":28000}},{"1":52295,"2":150,"3":{"2":30000}},{"1":50060,"2":160,"3":{"2":32000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":53425,"2":80,"3":{"2":80000}},{"1":57635,"2":60,"3":{"2":60000}},{"1":51560,"2":50,"3":{"2":50000}},{"1":66370,"2":60,"3":{"2":60000}},{"1":50980,"2":60,"3":{"2":60000}},{"1":58800,"2":60,"3":{"2":60000}},{"1":53275,"2":60,"3":{"2":60000}},{"1":52985,"2":40,"3":{"2":40000}},{"1":53135,"2":50,"3":{"2":50000}},{"1":50120,"2":50,"3":{"2":50000}},{"1":55580,"2":60,"3":{"2":60000}},{"1":58315,"2":70,"3":{"2":70000}},{"1":57150,"2":60,"3":{"2":60000}},{"1":56500,"2":60,"3":{"2":60000}},{"1":53430,"2":50,"3":{"2":50000}},{"1":53565,"2":50,"3":{"2":50000}},{"1":55160,"2":60,"3":{"2":60000}},{"1":56520,"2":60,"3":{"2":60000}},{"1":69995,"2":50,"3":{"2":50000}},{"1":52445,"2":60,"3":{"2":60000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":52210,"2":40,"3":{"2":80000}},{"1":51180,"2":20,"3":{"2":40000}},{"1":62990,"2":40,"3":{"2":80000}},{"1":62010,"2":20,"3":{"2":40000}},{"1":50985,"2":30,"3":{"2":60000}},{"1":57675,"2":30,"3":{"2":60000}},{"1":50935,"2":30,"3":{"2":60000}},{"1":56270,"2":30,"3":{"2":60000}},{"1":51120,"2":30,"3":{"2":60000}},{"1":50370,"2":30,"3":{"2":60000}},{"1":56155,"2":30,"3":{"2":60000}},{"1":72330,"2":30,"3":{"2":60000}},{"1":56355,"2":30,"3":{"2":60000}},{"1":51635,"2":20,"3":{"2":40000}},{"1":62565,"2":40,"3":{"2":80000}},{"1":66530,"2":40,"3":{"2":80000}},{"1":55000,"2":30,"3":{"2":60000}},{"1":75095,"2":30,"3":{"2":60000}},{"1":57610,"2":30,"3":{"2":60000}},{"1":52385,"2":30,"3":{"2":60000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":51240,"2":200,"3":{"2":20000}},{"1":51985,"2":140,"3":{"2":14000}},{"1":50810,"2":160,"3":{"2":16000}},{"1":51945,"2":150,"3":{"2":15000}},{"1":52680,"2":150,"3":{"2":15000}},{"1":51850,"2":130,"3":{"2":13000}},{"1":50455,"2":120,"3":{"2":12000}},{"1":52605,"2":140,"3":{"2":14000}},{"1":50870,"2":150,"3":{"2":15000}},{"1":51755,"2":160,"3":{"2":16000}},{"1":53085,"2":90,"3":{"2":9000}},{"1":51860,"2":180,"3":{"2":18000}},{"1":51480,"2":90,"3":{"2":9000}},{"1":50580,"2":140,"3":{"2":14000}},{"1":52260,"2":170,"3":{"2":17000}},{"1":53065,"2":160,"3":{"2":16000}},{"1":54485,"2":130,"3":{"2":13000}},{"1":51645,"2":140,"3":{"2":14000}},{"1":54945,"2":140,"3":{"2":14000}},{"1":52410,"2":180,"3":{"2":18000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":50050,"2":190,"3":{"2":38000}},{"1":50530,"2":120,"3":{"2":24000}},{"1":53645,"2":150,"3":{"2":30000}},{"1":55260,"2":120,"3":{"2":24000}},{"1":51830,"2":150,"3":{"2":30000}},{"1":53655,"2":110,"3":{"2":22000}},{"1":51505,"2":140,"3":{"2":28000}},{"1":50065,"2":110,"3":{"2":22000}},{"1":52065,"2":100,"3":{"2":20000}},{"1":53450,"2":100,"3":{"2":20000}},{"1":53705,"2":130,"3":{"2":26000}},{"1":50370,"2":120,"3":{"2":24000}},{"1":52540,"2":150,"3":{"2":30000}},{"1":50705,"2":130,"3":{"2":26000}},{"1":50910,"2":100,"3":{"2":20000}},{"1":50940,"2":90,"3":{"2":18000}},{"1":51980,"2":120,"3":{"2":24000}},{"1":51045,"2":130,"3":{"2":26000}},{"1":52955,"2":100,"3":{"2":20000}},{"1":51455,"2":150,"3":{"2":30000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":50660,"2":130,"3":{"2":130000}},{"1":51170,"2":60,"3":{"2":60000}},{"1":53730,"2":110,"3":{"2":110000}},{"1":58095,"2":60,"3":{"2":60000}},{"1":52630,"2":100,"3":{"2":100000}},{"1":51845,"2":80,"3":{"2":80000}},{"1":52875,"2":70,"3":{"2":70000}},{"1":51940,"2":80,"3":{"2":80000}},{"1":51380,"2":90,"3":{"2":90000}},{"1":60360,"2":110,"3":{"2":110000}},{"1":53325,"2":70,"3":{"2":70000}},{"1":51675,"2":110,"3":{"2":110000}},{"1":56890,"2":90,"3":{"2":90000}},{"1":56070,"2":70,"3":{"2":70000}},{"1":57830,"2":100,"3":{"2":100000}},{"1":52100,"2":100,"3":{"2":100000}},{"1":58465,"2":60,"3":{"2":60000}},{"1":58770,"2":60,"3":{"2":60000}},{"1":54595,"2":90,"3":{"2":90000}},{"1":55115,"2":100,"3":{"2":100000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":53515,"2":70,"3":{"2":140000}},{"1":55765,"2":50,"3":{"2":100000}},{"1":60395,"2":50,"3":{"2":100000}},{"1":64160,"2":50,"3":{"2":100000}},{"1":50590,"2":40,"3":{"2":80000}},{"1":50860,"2":50,"3":{"2":100000}},{"1":56815,"2":50,"3":{"2":100000}},{"1":51015,"2":40,"3":{"2":80000}},{"1":59475,"2":60,"3":{"2":120000}},{"1":55680,"2":50,"3":{"2":100000}},{"1":56270,"2":60,"3":{"2":120000}},{"1":64350,"2":40,"3":{"2":80000}},{"1":60190,"2":50,"3":{"2":100000}},{"1":61175,"2":50,"3":{"2":100000}},{"1":58705,"2":50,"3":{"2":100000}},{"1":59140,"2":40,"3":{"2":80000}},{"1":57010,"2":50,"3":{"2":100000}},{"1":61285,"2":50,"3":{"2":100000}},{"1":59740,"2":50,"3":{"2":100000}},{"1":50845,"2":50,"3":{"2":100000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50935,"2":140,"3":{"4":14000}},{"1":50855,"2":190,"3":{"4":19000}},{"1":50345,"2":210,"3":{"4":21000}},{"1":53525,"2":180,"3":{"4":18000}},{"1":51115,"2":200,"3":{"4":20000}},{"1":50785,"2":190,"3":{"4":19000}},{"1":51065,"2":200,"3":{"4":20000}},{"1":54715,"2":190,"3":{"4":19000}},{"1":50070,"2":200,"3":{"4":20000}},{"1":50320,"2":200,"3":{"4":20000}},{"1":50005,"2":190,"3":{"4":19000}},{"1":50915,"2":190,"3":{"4":19000}},{"1":50255,"2":180,"3":{"4":18000}},{"1":51390,"2":190,"3":{"4":19000}},{"1":50275,"2":210,"3":{"4":21000}},{"1":51070,"2":200,"3":{"4":20000}},{"1":50925,"2":180,"3":{"4":18000}},{"1":51425,"2":190,"3":{"4":19000}},{"1":51230,"2":150,"3":{"4":15000}},{"1":50395,"2":200,"3":{"4":20000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50490,"2":170,"3":{"4":34000}},{"1":51380,"2":120,"3":{"4":24000}},{"1":56865,"2":170,"3":{"4":34000}},{"1":52585,"2":110,"3":{"4":22000}},{"1":51565,"2":160,"3":{"4":32000}},{"1":52045,"2":170,"3":{"4":34000}},{"1":53420,"2":110,"3":{"4":22000}},{"1":52665,"2":160,"3":{"4":32000}},{"1":50570,"2":160,"3":{"4":32000}},{"1":52690,"2":160,"3":{"4":32000}},{"1":55035,"2":130,"3":{"4":26000}},{"1":51600,"2":160,"3":{"4":32000}},{"1":51630,"2":150,"3":{"4":30000}},{"1":51105,"2":150,"3":{"4":30000}},{"1":50495,"2":160,"3":{"4":32000}},{"1":51595,"2":170,"3":{"4":34000}},{"1":52880,"2":100,"3":{"4":20000}},{"1":52480,"2":120,"3":{"4":24000}},{"1":51470,"2":160,"3":{"4":32000}},{"1":53000,"2":150,"3":{"4":30000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":53175,"2":70,"3":{"4":70000}},{"1":54150,"2":60,"3":{"4":60000}},{"1":51880,"2":60,"3":{"4":60000}},{"1":56980,"2":60,"3":{"4":60000}},{"1":59615,"2":50,"3":{"4":50000}},{"1":51335,"2":60,"3":{"4":60000}},{"1":57395,"2":70,"3":{"4":70000}},{"1":52830,"2":60,"3":{"4":60000}},{"1":57655,"2":70,"3":{"4":70000}},{"1":57390,"2":50,"3":{"4":50000}},{"1":57405,"2":70,"3":{"4":70000}},{"1":58080,"2":70,"3":{"4":70000}},{"1":51090,"2":60,"3":{"4":60000}},{"1":52640,"2":60,"3":{"4":60000}},{"1":57700,"2":70,"3":{"4":70000}},{"1":57435,"2":60,"3":{"4":60000}},{"1":52665,"2":60,"3":{"4":60000}},{"1":53250,"2":60,"3":{"4":60000}},{"1":52155,"2":60,"3":{"4":60000}},{"1":57225,"2":70,"3":{"4":70000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":59920,"2":40,"3":{"4":80000}},{"1":53105,"2":30,"3":{"4":60000}},{"1":50025,"2":30,"3":{"4":60000}},{"1":55990,"2":30,"3":{"4":60000}},{"1":65380,"2":40,"3":{"4":80000}},{"1":67005,"2":40,"3":{"4":80000}},{"1":65520,"2":40,"3":{"4":80000}},{"1":52425,"2":30,"3":{"4":60000}},{"1":70445,"2":30,"3":{"4":60000}},{"1":52050,"2":30,"3":{"4":60000}},{"1":65315,"2":40,"3":{"4":80000}},{"1":66125,"2":40,"3":{"4":80000}},{"1":50870,"2":30,"3":{"4":60000}},{"1":52075,"2":30,"3":{"4":60000}},{"1":50010,"2":30,"3":{"4":60000}},{"1":62370,"2":40,"3":{"4":80000}},{"1":51445,"2":30,"3":{"4":60000}},{"1":51395,"2":30,"3":{"4":60000}},{"1":67020,"2":30,"3":{"4":60000}},{"1":64410,"2":40,"3":{"4":80000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":51755,"2":60,"3":{"4":60000}},{"1":54510,"2":40,"3":{"4":40000}},{"1":55960,"2":40,"3":{"4":40000}},{"1":51105,"2":40,"3":{"4":40000}},{"1":52290,"2":50,"3":{"4":50000}},{"1":56300,"2":40,"3":{"4":40000}},{"1":55570,"2":40,"3":{"4":40000}},{"1":57260,"2":40,"3":{"4":40000}},{"1":52180,"2":50,"3":{"4":50000}},{"1":56075,"2":50,"3":{"4":50000}},{"1":52110,"2":40,"3":{"4":40000}},{"1":55350,"2":40,"3":{"4":40000}},{"1":63635,"2":50,"3":{"4":50000}},{"1":61215,"2":40,"3":{"4":40000}},{"1":55605,"2":40,"3":{"4":40000}},{"1":51215,"2":50,"3":{"4":50000}},{"1":56840,"2":50,"3":{"4":50000}},{"1":61235,"2":40,"3":{"4":40000}},{"1":55900,"2":50,"3":{"4":50000}},{"1":63275,"2":50,"3":{"4":50000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":53860,"2":170,"3":{"4":17000}},{"1":50560,"2":160,"3":{"4":16000}},{"1":50205,"2":160,"3":{"4":16000}},{"1":50970,"2":120,"3":{"4":12000}},{"1":50735,"2":150,"3":{"4":15000}},{"1":53790,"2":160,"3":{"4":16000}},{"1":51755,"2":150,"3":{"4":15000}},{"1":52910,"2":150,"3":{"4":15000}},{"1":60575,"2":110,"3":{"4":11000}},{"1":50725,"2":140,"3":{"4":14000}},{"1":51520,"2":160,"3":{"4":16000}},{"1":50130,"2":180,"3":{"4":18000}},{"1":50955,"2":150,"3":{"4":15000}},{"1":51925,"2":160,"3":{"4":16000}},{"1":52120,"2":160,"3":{"4":16000}},{"1":52650,"2":140,"3":{"4":14000}},{"1":51865,"2":160,"3":{"4":16000}},{"1":51780,"2":160,"3":{"4":16000}},{"1":53285,"2":150,"3":{"4":15000}},{"1":52145,"2":160,"3":{"4":16000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":51105,"2":110,"3":{"4":22000}},{"1":51970,"2":160,"3":{"4":32000}},{"1":52385,"2":140,"3":{"4":28000}},{"1":52045,"2":140,"3":{"4":28000}},{"1":53035,"2":150,"3":{"4":30000}},{"1":53210,"2":130,"3":{"4":26000}},{"1":57450,"2":140,"3":{"4":28000}},{"1":50670,"2":130,"3":{"4":26000}},{"1":52635,"2":150,"3":{"4":30000}},{"1":50405,"2":130,"3":{"4":26000}},{"1":53090,"2":140,"3":{"4":28000}},{"1":54600,"2":150,"3":{"4":30000}},{"1":50020,"2":120,"3":{"4":24000}},{"1":53675,"2":140,"3":{"4":28000}},{"1":54595,"2":130,"3":{"4":26000}},{"1":52165,"2":150,"3":{"4":30000}},{"1":50510,"2":140,"3":{"4":28000}},{"1":52695,"2":140,"3":{"4":28000}},{"1":50470,"2":140,"3":{"4":28000}},{"1":54020,"2":140,"3":{"4":28000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":53755,"2":90,"3":{"4":90000}},{"1":52475,"2":70,"3":{"4":70000}},{"1":51075,"2":110,"3":{"4":110000}},{"1":56290,"2":80,"3":{"4":80000}},{"1":60220,"2":70,"3":{"4":70000}},{"1":54015,"2":90,"3":{"4":90000}},{"1":61955,"2":90,"3":{"4":90000}},{"1":53300,"2":100,"3":{"4":100000}},{"1":50640,"2":110,"3":{"4":110000}},{"1":50835,"2":70,"3":{"4":70000}},{"1":50865,"2":110,"3":{"4":110000}},{"1":53790,"2":110,"3":{"4":110000}},{"1":51695,"2":90,"3":{"4":90000}},{"1":56575,"2":80,"3":{"4":80000}},{"1":53140,"2":100,"3":{"4":100000}},{"1":52695,"2":90,"3":{"4":90000}},{"1":50090,"2":90,"3":{"4":90000}},{"1":50125,"2":70,"3":{"4":70000}},{"1":57510,"2":100,"3":{"4":100000}},{"1":51430,"2":110,"3":{"4":110000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":53455,"2":50,"3":{"4":100000}},{"1":55275,"2":60,"3":{"4":120000}},{"1":54530,"2":60,"3":{"4":120000}},{"1":54900,"2":50,"3":{"4":100000}},{"1":54255,"2":50,"3":{"4":100000}},{"1":56310,"2":50,"3":{"4":100000}},{"1":59520,"2":50,"3":{"4":100000}},{"1":54010,"2":50,"3":{"4":100000}},{"1":52505,"2":60,"3":{"4":120000}},{"1":50825,"2":50,"3":{"4":100000}},{"1":53770,"2":60,"3":{"4":120000}},{"1":57660,"2":60,"3":{"4":120000}},{"1":55775,"2":50,"3":{"4":100000}},{"1":55780,"2":50,"3":{"4":100000}},{"1":54295,"2":60,"3":{"4":120000}},{"1":55915,"2":50,"3":{"4":100000}},{"1":52880,"2":50,"3":{"4":100000}},{"1":51460,"2":50,"3":{"4":100000}},{"1":51650,"2":50,"3":{"4":100000}},{"1":53570,"2":50,"3":{"4":100000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":58505,"2":50,"3":{"4":50000}},{"1":57735,"2":50,"3":{"4":50000}},{"1":55140,"2":70,"3":{"4":70000}},{"1":58475,"2":50,"3":{"4":50000}},{"1":56085,"2":60,"3":{"4":60000}},{"1":53515,"2":50,"3":{"4":50000}},{"1":51225,"2":40,"3":{"4":40000}},{"1":61515,"2":50,"3":{"4":50000}},{"1":53270,"2":60,"3":{"4":60000}},{"1":56845,"2":60,"3":{"4":60000}},{"1":52335,"2":60,"3":{"4":60000}},{"1":52100,"2":80,"3":{"4":80000}},{"1":74785,"2":60,"3":{"4":60000}},{"1":56865,"2":60,"3":{"4":60000}},{"1":50880,"2":60,"3":{"4":60000}},{"1":59935,"2":70,"3":{"4":70000}},{"1":53055,"2":50,"3":{"4":50000}},{"1":59875,"2":50,"3":{"4":50000}},{"1":51945,"2":60,"3":{"4":60000}},{"1":55500,"2":70,"3":{"4":70000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian5/head/json_vm.pb.json b/benchmark/data/skybrian5/head/json_vm.pb.json
deleted file mode 100644
index fe8d085..0000000
--- a/benchmark/data/skybrian5/head/json_vm.pb.json
+++ /dev/null
@@ -1,82 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "readjson_vm.dart",
-    "10": {
-      "1": "skybrian5",
-      "2": 1,
-      "3": "1.12.0 (Mon Aug 31 03:24:52 2015) on \"linux_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+4"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf"},
-        {"1":"description","2":"path","3":"0.4.2","4":"../dart-protobuf"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+8"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":1,"2":{"1":100,"2":1},"3":20,"4":50},"2":[{"1":50173,"2":750,"3":{"1":75000}},{"1":50197,"2":940,"3":{"1":94000}},{"1":50136,"2":940,"3":{"1":94000}},{"1":50146,"2":940,"3":{"1":94000}},{"1":50100,"2":940,"3":{"1":94000}},{"1":50303,"2":930,"3":{"1":93000}},{"1":50067,"2":930,"3":{"1":93000}},{"1":50066,"2":930,"3":{"1":93000}},{"1":50492,"2":940,"3":{"1":94000}},{"1":50477,"2":940,"3":{"1":94000}},{"1":50509,"2":930,"3":{"1":93000}},{"1":50480,"2":930,"3":{"1":93000}},{"1":50474,"2":930,"3":{"1":93000}},{"1":50473,"2":930,"3":{"1":93000}},{"1":50380,"2":930,"3":{"1":93000}},{"1":50390,"2":930,"3":{"1":93000}},{"1":50528,"2":930,"3":{"1":93000}},{"1":50290,"2":910,"3":{"1":91000}},{"1":50480,"2":920,"3":{"1":92000}},{"1":50384,"2":920,"3":{"1":92000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":2},"3":20,"4":50},"2":[{"1":50058,"2":730,"3":{"1":146000}},{"1":50151,"2":730,"3":{"1":146000}},{"1":50097,"2":730,"3":{"1":146000}},{"1":50162,"2":730,"3":{"1":146000}},{"1":50047,"2":730,"3":{"1":146000}},{"1":50036,"2":730,"3":{"1":146000}},{"1":50068,"2":730,"3":{"1":146000}},{"1":50155,"2":730,"3":{"1":146000}},{"1":50152,"2":730,"3":{"1":146000}},{"1":50053,"2":730,"3":{"1":146000}},{"1":50391,"2":720,"3":{"1":144000}},{"1":50352,"2":720,"3":{"1":144000}},{"1":50373,"2":720,"3":{"1":144000}},{"1":50448,"2":720,"3":{"1":144000}},{"1":50348,"2":720,"3":{"1":144000}},{"1":50350,"2":720,"3":{"1":144000}},{"1":50363,"2":720,"3":{"1":144000}},{"1":50420,"2":720,"3":{"1":144000}},{"1":50354,"2":720,"3":{"1":144000}},{"1":50361,"2":720,"3":{"1":144000}}]},
-    {"1":{"1":1,"2":{"1":100,"2":10},"3":20,"4":50},"2":[{"1":51668,"2":230,"3":{"1":230000}},{"1":51730,"2":230,"3":{"1":230000}},{"1":51788,"2":230,"3":{"1":230000}},{"1":51805,"2":230,"3":{"1":230000}},{"1":51798,"2":230,"3":{"1":230000}},{"1":51781,"2":230,"3":{"1":230000}},{"1":51860,"2":230,"3":{"1":230000}},{"1":51809,"2":230,"3":{"1":230000}},{"1":51650,"2":230,"3":{"1":230000}},{"1":51628,"2":230,"3":{"1":230000}},{"1":52183,"2":230,"3":{"1":230000}},{"1":52088,"2":230,"3":{"1":230000}},{"1":52194,"2":230,"3":{"1":230000}},{"1":50035,"2":220,"3":{"1":220000}},{"1":52243,"2":230,"3":{"1":230000}},{"1":52239,"2":230,"3":{"1":230000}},{"1":50050,"2":220,"3":{"1":220000}},{"1":51812,"2":210,"3":{"1":210000}},{"1":50170,"2":220,"3":{"1":220000}},{"1":52133,"2":230,"3":{"1":230000}}]},
-    {"1":{"1":1,"2":{"1":200,"2":10},"3":20,"4":50},"2":[{"1":54170,"2":120,"3":{"1":240000}},{"1":54261,"2":120,"3":{"1":240000}},{"1":54221,"2":120,"3":{"1":240000}},{"1":54211,"2":120,"3":{"1":240000}},{"1":54131,"2":120,"3":{"1":240000}},{"1":54096,"2":120,"3":{"1":240000}},{"1":53967,"2":120,"3":{"1":240000}},{"1":53989,"2":120,"3":{"1":240000}},{"1":54044,"2":120,"3":{"1":240000}},{"1":54130,"2":120,"3":{"1":240000}},{"1":50006,"2":110,"3":{"1":220000}},{"1":50002,"2":110,"3":{"1":220000}},{"1":50036,"2":110,"3":{"1":220000}},{"1":50302,"2":110,"3":{"1":220000}},{"1":50274,"2":110,"3":{"1":220000}},{"1":50369,"2":110,"3":{"1":220000}},{"1":50253,"2":110,"3":{"1":220000}},{"1":50436,"2":110,"3":{"1":220000}},{"1":50220,"2":110,"3":{"1":220000}},{"1":50249,"2":110,"3":{"1":220000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":1},"3":20,"4":50},"2":[{"1":50174,"2":780,"3":{"1":78000}},{"1":50132,"2":780,"3":{"1":78000}},{"1":50151,"2":780,"3":{"1":78000}},{"1":50172,"2":770,"3":{"1":77000}},{"1":50037,"2":770,"3":{"1":77000}},{"1":50041,"2":780,"3":{"1":78000}},{"1":50414,"2":770,"3":{"1":77000}},{"1":50638,"2":780,"3":{"1":78000}},{"1":50124,"2":780,"3":{"1":78000}},{"1":50101,"2":780,"3":{"1":78000}},{"1":50209,"2":760,"3":{"1":76000}},{"1":50154,"2":750,"3":{"1":75000}},{"1":50634,"2":760,"3":{"1":76000}},{"1":50347,"2":760,"3":{"1":76000}},{"1":50577,"2":760,"3":{"1":76000}},{"1":50014,"2":750,"3":{"1":75000}},{"1":50007,"2":750,"3":{"1":75000}},{"1":50034,"2":750,"3":{"1":75000}},{"1":50049,"2":750,"3":{"1":75000}},{"1":50032,"2":760,"3":{"1":76000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":2},"3":20,"4":50},"2":[{"1":50053,"2":710,"3":{"1":142000}},{"1":50599,"2":720,"3":{"1":144000}},{"1":50058,"2":710,"3":{"1":142000}},{"1":50607,"2":720,"3":{"1":144000}},{"1":50012,"2":710,"3":{"1":142000}},{"1":50684,"2":720,"3":{"1":144000}},{"1":50591,"2":720,"3":{"1":144000}},{"1":50007,"2":710,"3":{"1":142000}},{"1":50616,"2":720,"3":{"1":144000}},{"1":50701,"2":720,"3":{"1":144000}},{"1":50340,"2":700,"3":{"1":140000}},{"1":50322,"2":700,"3":{"1":140000}},{"1":50321,"2":700,"3":{"1":140000}},{"1":50406,"2":700,"3":{"1":140000}},{"1":50324,"2":700,"3":{"1":140000}},{"1":50422,"2":700,"3":{"1":140000}},{"1":50288,"2":700,"3":{"1":140000}},{"1":50283,"2":700,"3":{"1":140000}},{"1":50358,"2":700,"3":{"1":140000}},{"1":50315,"2":700,"3":{"1":140000}}]},
-    {"1":{"1":2,"2":{"1":100,"3":10},"3":20,"4":50},"2":[{"1":50478,"2":390,"3":{"1":390000}},{"1":50471,"2":390,"3":{"1":390000}},{"1":50479,"2":390,"3":{"1":390000}},{"1":50407,"2":390,"3":{"1":390000}},{"1":50466,"2":390,"3":{"1":390000}},{"1":50361,"2":390,"3":{"1":390000}},{"1":50728,"2":390,"3":{"1":390000}},{"1":50495,"2":390,"3":{"1":390000}},{"1":50396,"2":390,"3":{"1":390000}},{"1":50453,"2":390,"3":{"1":390000}},{"1":50968,"2":390,"3":{"1":390000}},{"1":50812,"2":390,"3":{"1":390000}},{"1":51000,"2":390,"3":{"1":390000}},{"1":51011,"2":390,"3":{"1":390000}},{"1":50885,"2":390,"3":{"1":390000}},{"1":50978,"2":390,"3":{"1":390000}},{"1":50866,"2":390,"3":{"1":390000}},{"1":50937,"2":390,"3":{"1":390000}},{"1":50923,"2":390,"3":{"1":390000}},{"1":50864,"2":390,"3":{"1":390000}}]},
-    {"1":{"1":2,"2":{"1":200,"3":10},"3":20,"4":50},"2":[{"1":52576,"2":200,"3":{"1":400000}},{"1":52551,"2":200,"3":{"1":400000}},{"1":52524,"2":200,"3":{"1":400000}},{"1":52526,"2":200,"3":{"1":400000}},{"1":52541,"2":200,"3":{"1":400000}},{"1":52558,"2":200,"3":{"1":400000}},{"1":52466,"2":200,"3":{"1":400000}},{"1":52531,"2":200,"3":{"1":400000}},{"1":52417,"2":200,"3":{"1":400000}},{"1":52575,"2":200,"3":{"1":400000}},{"1":50128,"2":190,"3":{"1":380000}},{"1":50045,"2":190,"3":{"1":380000}},{"1":50163,"2":190,"3":{"1":380000}},{"1":50175,"2":190,"3":{"1":380000}},{"1":50041,"2":190,"3":{"1":380000}},{"1":50404,"2":190,"3":{"1":380000}},{"1":50097,"2":190,"3":{"1":380000}},{"1":50171,"2":190,"3":{"1":380000}},{"1":50081,"2":190,"3":{"1":380000}},{"1":50153,"2":190,"3":{"1":380000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":1},"3":20,"4":50},"2":[{"1":50459,"2":860,"3":{"2":86000}},{"1":50496,"2":890,"3":{"2":89000}},{"1":50516,"2":890,"3":{"2":89000}},{"1":50543,"2":890,"3":{"2":89000}},{"1":50377,"2":880,"3":{"2":88000}},{"1":50207,"2":880,"3":{"2":88000}},{"1":50163,"2":880,"3":{"2":88000}},{"1":50273,"2":880,"3":{"2":88000}},{"1":50232,"2":880,"3":{"2":88000}},{"1":50448,"2":880,"3":{"2":88000}},{"1":50008,"2":900,"3":{"2":90000}},{"1":50471,"2":910,"3":{"2":91000}},{"1":50195,"2":900,"3":{"2":90000}},{"1":50532,"2":910,"3":{"2":91000}},{"1":50494,"2":910,"3":{"2":91000}},{"1":50492,"2":910,"3":{"2":91000}},{"1":50015,"2":900,"3":{"2":90000}},{"1":50456,"2":910,"3":{"2":91000}},{"1":50508,"2":910,"3":{"2":91000}},{"1":50430,"2":900,"3":{"2":90000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":2},"3":20,"4":50},"2":[{"1":50358,"2":680,"3":{"2":136000}},{"1":50256,"2":680,"3":{"2":136000}},{"1":50299,"2":680,"3":{"2":136000}},{"1":50268,"2":680,"3":{"2":136000}},{"1":50187,"2":680,"3":{"2":136000}},{"1":50225,"2":680,"3":{"2":136000}},{"1":50181,"2":680,"3":{"2":136000}},{"1":50201,"2":680,"3":{"2":136000}},{"1":50206,"2":680,"3":{"2":136000}},{"1":50224,"2":680,"3":{"2":136000}},{"1":50209,"2":700,"3":{"2":140000}},{"1":50129,"2":700,"3":{"2":140000}},{"1":50160,"2":700,"3":{"2":140000}},{"1":50176,"2":700,"3":{"2":140000}},{"1":50131,"2":700,"3":{"2":140000}},{"1":50134,"2":700,"3":{"2":140000}},{"1":50232,"2":700,"3":{"2":140000}},{"1":50175,"2":700,"3":{"2":140000}},{"1":50182,"2":700,"3":{"2":140000}},{"1":50176,"2":700,"3":{"2":140000}}]},
-    {"1":{"1":3,"2":{"1":100,"4":10},"3":20,"4":50},"2":[{"1":51273,"2":210,"3":{"2":210000}},{"1":51543,"2":210,"3":{"2":210000}},{"1":51409,"2":210,"3":{"2":210000}},{"1":51442,"2":210,"3":{"2":210000}},{"1":51403,"2":210,"3":{"2":210000}},{"1":51401,"2":210,"3":{"2":210000}},{"1":51454,"2":210,"3":{"2":210000}},{"1":51432,"2":210,"3":{"2":210000}},{"1":51390,"2":210,"3":{"2":210000}},{"1":51471,"2":210,"3":{"2":210000}},{"1":52239,"2":220,"3":{"2":220000}},{"1":52138,"2":220,"3":{"2":220000}},{"1":51844,"2":220,"3":{"2":220000}},{"1":51912,"2":220,"3":{"2":220000}},{"1":51931,"2":220,"3":{"2":220000}},{"1":51838,"2":220,"3":{"2":220000}},{"1":51965,"2":220,"3":{"2":220000}},{"1":51991,"2":220,"3":{"2":220000}},{"1":52118,"2":220,"3":{"2":220000}},{"1":52072,"2":220,"3":{"2":220000}}]},
-    {"1":{"1":3,"2":{"1":200,"4":10},"3":20,"4":50},"2":[{"1":54006,"2":110,"3":{"2":220000}},{"1":54032,"2":110,"3":{"2":220000}},{"1":54016,"2":110,"3":{"2":220000}},{"1":53931,"2":110,"3":{"2":220000}},{"1":54112,"2":110,"3":{"2":220000}},{"1":53988,"2":110,"3":{"2":220000}},{"1":54096,"2":110,"3":{"2":220000}},{"1":54007,"2":110,"3":{"2":220000}},{"1":54107,"2":110,"3":{"2":220000}},{"1":54082,"2":110,"3":{"2":220000}},{"1":52082,"2":110,"3":{"2":220000}},{"1":52292,"2":110,"3":{"2":220000}},{"1":52083,"2":110,"3":{"2":220000}},{"1":52058,"2":110,"3":{"2":220000}},{"1":52212,"2":110,"3":{"2":220000}},{"1":52060,"2":110,"3":{"2":220000}},{"1":52104,"2":110,"3":{"2":220000}},{"1":52203,"2":110,"3":{"2":220000}},{"1":52069,"2":110,"3":{"2":220000}},{"1":52116,"2":110,"3":{"2":220000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":1},"3":20,"4":50},"2":[{"1":50530,"2":780,"3":{"2":78000}},{"1":50194,"2":770,"3":{"2":77000}},{"1":50507,"2":780,"3":{"2":78000}},{"1":50082,"2":770,"3":{"2":77000}},{"1":50478,"2":780,"3":{"2":78000}},{"1":50188,"2":770,"3":{"2":77000}},{"1":50251,"2":770,"3":{"2":77000}},{"1":50045,"2":770,"3":{"2":77000}},{"1":50194,"2":770,"3":{"2":77000}},{"1":50055,"2":770,"3":{"2":77000}},{"1":50463,"2":760,"3":{"2":76000}},{"1":50283,"2":750,"3":{"2":75000}},{"1":50347,"2":750,"3":{"2":75000}},{"1":50339,"2":750,"3":{"2":75000}},{"1":50381,"2":750,"3":{"2":75000}},{"1":50433,"2":750,"3":{"2":75000}},{"1":50495,"2":750,"3":{"2":75000}},{"1":50591,"2":750,"3":{"2":75000}},{"1":50528,"2":760,"3":{"2":76000}},{"1":50554,"2":760,"3":{"2":76000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":2},"3":20,"4":50},"2":[{"1":50298,"2":700,"3":{"2":140000}},{"1":50406,"2":700,"3":{"2":140000}},{"1":50443,"2":700,"3":{"2":140000}},{"1":50365,"2":700,"3":{"2":140000}},{"1":50420,"2":700,"3":{"2":140000}},{"1":50431,"2":700,"3":{"2":140000}},{"1":50392,"2":700,"3":{"2":140000}},{"1":50324,"2":700,"3":{"2":140000}},{"1":50386,"2":700,"3":{"2":140000}},{"1":50393,"2":700,"3":{"2":140000}},{"1":50047,"2":680,"3":{"2":136000}},{"1":50100,"2":680,"3":{"2":136000}},{"1":50141,"2":680,"3":{"2":136000}},{"1":50708,"2":690,"3":{"2":138000}},{"1":50108,"2":680,"3":{"2":136000}},{"1":50061,"2":680,"3":{"2":136000}},{"1":50720,"2":690,"3":{"2":138000}},{"1":50166,"2":680,"3":{"2":136000}},{"1":50069,"2":680,"3":{"2":136000}},{"1":50005,"2":680,"3":{"2":136000}}]},
-    {"1":{"1":4,"2":{"1":100,"5":10},"3":20,"4":50},"2":[{"1":51226,"2":370,"3":{"2":370000}},{"1":51216,"2":370,"3":{"2":370000}},{"1":51329,"2":370,"3":{"2":370000}},{"1":51122,"2":370,"3":{"2":370000}},{"1":51238,"2":370,"3":{"2":370000}},{"1":51309,"2":370,"3":{"2":370000}},{"1":51208,"2":370,"3":{"2":370000}},{"1":51211,"2":370,"3":{"2":370000}},{"1":51128,"2":370,"3":{"2":370000}},{"1":51270,"2":370,"3":{"2":370000}},{"1":50466,"2":360,"3":{"2":360000}},{"1":50461,"2":360,"3":{"2":360000}},{"1":50559,"2":360,"3":{"2":360000}},{"1":50482,"2":360,"3":{"2":360000}},{"1":50607,"2":360,"3":{"2":360000}},{"1":50487,"2":360,"3":{"2":360000}},{"1":50487,"2":360,"3":{"2":360000}},{"1":50464,"2":360,"3":{"2":360000}},{"1":50491,"2":360,"3":{"2":360000}},{"1":50530,"2":360,"3":{"2":360000}}]},
-    {"1":{"1":4,"2":{"1":200,"5":10},"3":20,"4":50},"2":[{"1":50094,"2":180,"3":{"2":360000}},{"1":52809,"2":190,"3":{"2":380000}},{"1":50090,"2":180,"3":{"2":360000}},{"1":50176,"2":180,"3":{"2":360000}},{"1":50081,"2":180,"3":{"2":360000}},{"1":50031,"2":180,"3":{"2":360000}},{"1":50141,"2":180,"3":{"2":360000}},{"1":50084,"2":180,"3":{"2":360000}},{"1":50088,"2":180,"3":{"2":360000}},{"1":50150,"2":180,"3":{"2":360000}},{"1":50724,"2":180,"3":{"2":360000}},{"1":50763,"2":180,"3":{"2":360000}},{"1":50720,"2":180,"3":{"2":360000}},{"1":50810,"2":180,"3":{"2":360000}},{"1":50800,"2":180,"3":{"2":360000}},{"1":50686,"2":180,"3":{"2":360000}},{"1":50739,"2":180,"3":{"2":360000}},{"1":50780,"2":180,"3":{"2":360000}},{"1":50669,"2":180,"3":{"2":360000}},{"1":50666,"2":180,"3":{"2":360000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50267,"2":840,"3":{"4":84000}},{"1":50005,"2":850,"3":{"4":85000}},{"1":50443,"2":860,"3":{"4":86000}},{"1":50429,"2":860,"3":{"4":86000}},{"1":50513,"2":860,"3":{"4":86000}},{"1":50237,"2":850,"3":{"4":85000}},{"1":50571,"2":860,"3":{"4":86000}},{"1":50552,"2":860,"3":{"4":86000}},{"1":50015,"2":850,"3":{"4":85000}},{"1":50574,"2":860,"3":{"4":86000}},{"1":50182,"2":850,"3":{"4":85000}},{"1":50343,"2":850,"3":{"4":85000}},{"1":50285,"2":850,"3":{"4":85000}},{"1":50305,"2":850,"3":{"4":85000}},{"1":50247,"2":850,"3":{"4":85000}},{"1":50305,"2":850,"3":{"4":85000}},{"1":50200,"2":840,"3":{"4":84000}},{"1":50298,"2":850,"3":{"4":85000}},{"1":50313,"2":850,"3":{"4":85000}},{"1":50267,"2":850,"3":{"4":85000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50343,"2":650,"3":{"4":130000}},{"1":50282,"2":650,"3":{"4":130000}},{"1":50382,"2":650,"3":{"4":130000}},{"1":50389,"2":650,"3":{"4":130000}},{"1":50374,"2":650,"3":{"4":130000}},{"1":50448,"2":650,"3":{"4":130000}},{"1":50447,"2":650,"3":{"4":130000}},{"1":50401,"2":650,"3":{"4":130000}},{"1":50348,"2":650,"3":{"4":130000}},{"1":50286,"2":650,"3":{"4":130000}},{"1":50614,"2":650,"3":{"4":130000}},{"1":50597,"2":650,"3":{"4":130000}},{"1":50579,"2":650,"3":{"4":130000}},{"1":50575,"2":650,"3":{"4":130000}},{"1":50717,"2":650,"3":{"4":130000}},{"1":50583,"2":650,"3":{"4":130000}},{"1":50562,"2":650,"3":{"4":130000}},{"1":50572,"2":650,"3":{"4":130000}},{"1":50582,"2":650,"3":{"4":130000}},{"1":50569,"2":650,"3":{"4":130000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52621,"2":200,"3":{"4":200000}},{"1":50035,"2":190,"3":{"4":190000}},{"1":50109,"2":190,"3":{"4":190000}},{"1":50001,"2":190,"3":{"4":190000}},{"1":50010,"2":190,"3":{"4":190000}},{"1":50136,"2":190,"3":{"4":190000}},{"1":50014,"2":190,"3":{"4":190000}},{"1":52487,"2":200,"3":{"4":200000}},{"1":52615,"2":200,"3":{"4":200000}},{"1":52583,"2":200,"3":{"4":200000}},{"1":50216,"2":190,"3":{"4":190000}},{"1":50073,"2":190,"3":{"4":190000}},{"1":50182,"2":190,"3":{"4":190000}},{"1":50160,"2":190,"3":{"4":190000}},{"1":50263,"2":190,"3":{"4":190000}},{"1":50142,"2":190,"3":{"4":190000}},{"1":50139,"2":190,"3":{"4":190000}},{"1":50244,"2":190,"3":{"4":190000}},{"1":50199,"2":190,"3":{"4":190000}},{"1":50127,"2":190,"3":{"4":190000}}]},
-    {"1":{"1":5,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52489,"2":100,"3":{"4":200000}},{"1":52578,"2":100,"3":{"4":200000}},{"1":52576,"2":100,"3":{"4":200000}},{"1":52683,"2":100,"3":{"4":200000}},{"1":52618,"2":100,"3":{"4":200000}},{"1":52571,"2":100,"3":{"4":200000}},{"1":52649,"2":100,"3":{"4":200000}},{"1":52565,"2":100,"3":{"4":200000}},{"1":52623,"2":100,"3":{"4":200000}},{"1":52666,"2":100,"3":{"4":200000}},{"1":52786,"2":100,"3":{"4":200000}},{"1":52770,"2":100,"3":{"4":200000}},{"1":52663,"2":100,"3":{"4":200000}},{"1":53093,"2":100,"3":{"4":200000}},{"1":52770,"2":100,"3":{"4":200000}},{"1":52743,"2":100,"3":{"4":200000}},{"1":52993,"2":100,"3":{"4":200000}},{"1":52749,"2":100,"3":{"4":200000}},{"1":52694,"2":100,"3":{"4":200000}},{"1":52903,"2":100,"3":{"4":200000}}]},
-    {"1":{"1":5,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":54298,"2":100,"3":{"4":100000}},{"1":54265,"2":100,"3":{"4":100000}},{"1":54276,"2":100,"3":{"4":100000}},{"1":54285,"2":100,"3":{"4":100000}},{"1":54277,"2":100,"3":{"4":100000}},{"1":54222,"2":100,"3":{"4":100000}},{"1":54264,"2":100,"3":{"4":100000}},{"1":54284,"2":100,"3":{"4":100000}},{"1":54297,"2":100,"3":{"4":100000}},{"1":54292,"2":100,"3":{"4":100000}},{"1":54384,"2":100,"3":{"4":100000}},{"1":54372,"2":100,"3":{"4":100000}},{"1":54376,"2":100,"3":{"4":100000}},{"1":54388,"2":100,"3":{"4":100000}},{"1":54384,"2":100,"3":{"4":100000}},{"1":54372,"2":100,"3":{"4":100000}},{"1":54347,"2":100,"3":{"4":100000}},{"1":54334,"2":100,"3":{"4":100000}},{"1":54380,"2":100,"3":{"4":100000}},{"1":54373,"2":100,"3":{"4":100000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":1,"8":10},"3":20,"4":50},"2":[{"1":50660,"2":720,"3":{"4":72000}},{"1":50101,"2":720,"3":{"4":72000}},{"1":50133,"2":720,"3":{"4":72000}},{"1":50635,"2":730,"3":{"4":73000}},{"1":50675,"2":730,"3":{"4":73000}},{"1":50007,"2":720,"3":{"4":72000}},{"1":50039,"2":720,"3":{"4":72000}},{"1":50644,"2":730,"3":{"4":73000}},{"1":50612,"2":730,"3":{"4":73000}},{"1":50058,"2":720,"3":{"4":72000}},{"1":50185,"2":720,"3":{"4":72000}},{"1":50328,"2":720,"3":{"4":72000}},{"1":50320,"2":720,"3":{"4":72000}},{"1":50269,"2":720,"3":{"4":72000}},{"1":50290,"2":720,"3":{"4":72000}},{"1":50207,"2":720,"3":{"4":72000}},{"1":50221,"2":720,"3":{"4":72000}},{"1":50349,"2":720,"3":{"4":72000}},{"1":50300,"2":720,"3":{"4":72000}},{"1":50284,"2":720,"3":{"4":72000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":2,"8":10},"3":20,"4":50},"2":[{"1":50050,"2":630,"3":{"4":126000}},{"1":50761,"2":640,"3":{"4":128000}},{"1":50037,"2":630,"3":{"4":126000}},{"1":50119,"2":630,"3":{"4":126000}},{"1":50790,"2":640,"3":{"4":128000}},{"1":50038,"2":630,"3":{"4":126000}},{"1":50772,"2":640,"3":{"4":128000}},{"1":50038,"2":630,"3":{"4":126000}},{"1":50743,"2":640,"3":{"4":128000}},{"1":50051,"2":630,"3":{"4":126000}},{"1":50285,"2":630,"3":{"4":126000}},{"1":50251,"2":630,"3":{"4":126000}},{"1":50261,"2":630,"3":{"4":126000}},{"1":50273,"2":630,"3":{"4":126000}},{"1":50267,"2":630,"3":{"4":126000}},{"1":50213,"2":630,"3":{"4":126000}},{"1":50316,"2":630,"3":{"4":126000}},{"1":50230,"2":630,"3":{"4":126000}},{"1":50321,"2":630,"3":{"4":126000}},{"1":50230,"2":630,"3":{"4":126000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":10},"3":20,"4":50},"2":[{"1":50696,"2":290,"3":{"4":290000}},{"1":50616,"2":290,"3":{"4":290000}},{"1":50735,"2":290,"3":{"4":290000}},{"1":50708,"2":290,"3":{"4":290000}},{"1":50634,"2":290,"3":{"4":290000}},{"1":50683,"2":290,"3":{"4":290000}},{"1":50770,"2":290,"3":{"4":290000}},{"1":50680,"2":290,"3":{"4":290000}},{"1":50689,"2":290,"3":{"4":290000}},{"1":50732,"2":290,"3":{"4":290000}},{"1":50784,"2":290,"3":{"4":290000}},{"1":50862,"2":290,"3":{"4":290000}},{"1":50704,"2":290,"3":{"4":290000}},{"1":51028,"2":290,"3":{"4":290000}},{"1":50817,"2":290,"3":{"4":290000}},{"1":50814,"2":290,"3":{"4":290000}},{"1":50710,"2":290,"3":{"4":290000}},{"1":50829,"2":290,"3":{"4":290000}},{"1":50912,"2":290,"3":{"4":290000}},{"1":50764,"2":290,"3":{"4":290000}}]},
-    {"1":{"1":6,"2":{"1":200,"6":10,"8":10},"3":20,"4":50},"2":[{"1":52205,"2":150,"3":{"4":300000}},{"1":52159,"2":150,"3":{"4":300000}},{"1":52216,"2":150,"3":{"4":300000}},{"1":52500,"2":150,"3":{"4":300000}},{"1":52198,"2":150,"3":{"4":300000}},{"1":52153,"2":150,"3":{"4":300000}},{"1":52168,"2":150,"3":{"4":300000}},{"1":52212,"2":150,"3":{"4":300000}},{"1":52191,"2":150,"3":{"4":300000}},{"1":52051,"2":150,"3":{"4":300000}},{"1":52137,"2":150,"3":{"4":300000}},{"1":52349,"2":150,"3":{"4":300000}},{"1":52322,"2":150,"3":{"4":300000}},{"1":52271,"2":150,"3":{"4":300000}},{"1":52159,"2":150,"3":{"4":300000}},{"1":52334,"2":150,"3":{"4":300000}},{"1":52290,"2":150,"3":{"4":300000}},{"1":52316,"2":150,"3":{"4":300000}},{"1":52241,"2":150,"3":{"4":300000}},{"1":52316,"2":150,"3":{"4":300000}}]},
-    {"1":{"1":6,"2":{"1":100,"6":10,"8":100},"3":20,"4":50},"2":[{"1":50129,"2":110,"3":{"4":110000}},{"1":50085,"2":110,"3":{"4":110000}},{"1":50309,"2":110,"3":{"4":110000}},{"1":50097,"2":110,"3":{"4":110000}},{"1":50324,"2":110,"3":{"4":110000}},{"1":50089,"2":110,"3":{"4":110000}},{"1":50265,"2":110,"3":{"4":110000}},{"1":50275,"2":110,"3":{"4":110000}},{"1":50079,"2":110,"3":{"4":110000}},{"1":50291,"2":110,"3":{"4":110000}},{"1":50082,"2":110,"3":{"4":110000}},{"1":50548,"2":110,"3":{"4":110000}},{"1":50205,"2":110,"3":{"4":110000}},{"1":50073,"2":110,"3":{"4":110000}},{"1":50490,"2":110,"3":{"4":110000}},{"1":50075,"2":110,"3":{"4":110000}},{"1":50011,"2":110,"3":{"4":110000}},{"1":50105,"2":110,"3":{"4":110000}},{"1":50090,"2":110,"3":{"4":110000}},{"1":50368,"2":110,"3":{"4":110000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian5/head/props_chrome.pb.json b/benchmark/data/skybrian5/head/props_chrome.pb.json
deleted file mode 100644
index f5352d4..0000000
--- a/benchmark/data/skybrian5/head/props_chrome.pb.json
+++ /dev/null
@@ -1,61 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "2": "/props.html",
-    "10": {
-      "1": "skybrian5",
-      "10": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.99 Safari/537.36",
-      "20": false,
-      "21": false
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+6"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf"},
-        {"1":"description","2":"path","3":"0.4.2","4":"../dart-protobuf"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+9"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50410,"2":12300,"3":{"4":1230000}},{"1":50115,"2":12400,"3":{"4":1240000}},{"1":50230,"2":12400,"3":{"4":1240000}},{"1":50015,"2":12400,"3":{"4":1240000}},{"1":50240,"2":12300,"3":{"4":1230000}},{"1":50360,"2":12400,"3":{"4":1240000}},{"1":50380,"2":12300,"3":{"4":1230000}},{"1":50160,"2":12100,"3":{"4":1210000}},{"1":50120,"2":12200,"3":{"4":1220000}},{"1":50200,"2":12400,"3":{"4":1240000}},{"1":50150,"2":12300,"3":{"4":1230000}},{"1":50370,"2":12500,"3":{"4":1250000}},{"1":50100,"2":12400,"3":{"4":1240000}},{"1":50230,"2":12400,"3":{"4":1240000}},{"1":50300,"2":12500,"3":{"4":1250000}},{"1":50310,"2":12500,"3":{"4":1250000}},{"1":50285,"2":11900,"3":{"4":1190000}},{"1":50350,"2":12500,"3":{"4":1250000}},{"1":50355,"2":12300,"3":{"4":1230000}},{"1":50170,"2":12400,"3":{"4":1240000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50105,"2":23400,"3":{"4":2340000}},{"1":50105,"2":23400,"3":{"4":2340000}},{"1":50115,"2":23500,"3":{"4":2350000}},{"1":50045,"2":23600,"3":{"4":2360000}},{"1":50010,"2":23400,"3":{"4":2340000}},{"1":50110,"2":23500,"3":{"4":2350000}},{"1":50050,"2":23200,"3":{"4":2320000}},{"1":50165,"2":23600,"3":{"4":2360000}},{"1":50145,"2":23300,"3":{"4":2330000}},{"1":50165,"2":23500,"3":{"4":2350000}},{"1":50110,"2":23500,"3":{"4":2350000}},{"1":50045,"2":23500,"3":{"4":2350000}},{"1":50155,"2":23500,"3":{"4":2350000}},{"1":50175,"2":23300,"3":{"4":2330000}},{"1":50050,"2":23500,"3":{"4":2350000}},{"1":50070,"2":23500,"3":{"4":2350000}},{"1":50135,"2":23500,"3":{"4":2350000}},{"1":50140,"2":23500,"3":{"4":2350000}},{"1":50085,"2":23500,"3":{"4":2350000}},{"1":50015,"2":23300,"3":{"4":2330000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50200,"2":19300,"3":{"5":1930000}},{"1":50095,"2":19900,"3":{"5":1990000}},{"1":50145,"2":20200,"3":{"5":2020000}},{"1":50020,"2":20100,"3":{"5":2010000}},{"1":50020,"2":19800,"3":{"5":1980000}},{"1":50020,"2":20100,"3":{"5":2010000}},{"1":50220,"2":20100,"3":{"5":2010000}},{"1":50015,"2":20100,"3":{"5":2010000}},{"1":50175,"2":20100,"3":{"5":2010000}},{"1":50180,"2":20100,"3":{"5":2010000}},{"1":50005,"2":19900,"3":{"5":1990000}},{"1":50215,"2":20100,"3":{"5":2010000}},{"1":50210,"2":20100,"3":{"5":2010000}},{"1":50140,"2":19800,"3":{"5":1980000}},{"1":50145,"2":20100,"3":{"5":2010000}},{"1":50185,"2":20100,"3":{"5":2010000}},{"1":50090,"2":16100,"3":{"5":1610000}},{"1":50170,"2":20000,"3":{"5":2000000}},{"1":50045,"2":19800,"3":{"5":1980000}},{"1":50015,"2":20200,"3":{"5":2020000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50215,"2":20200,"3":{"5":2020000}},{"1":50030,"2":20100,"3":{"5":2010000}},{"1":50150,"2":20200,"3":{"5":2020000}},{"1":50225,"2":20200,"3":{"5":2020000}},{"1":50090,"2":19900,"3":{"5":1990000}},{"1":50230,"2":20100,"3":{"5":2010000}},{"1":50125,"2":20000,"3":{"5":2000000}},{"1":50020,"2":20100,"3":{"5":2010000}},{"1":50085,"2":20100,"3":{"5":2010000}},{"1":50090,"2":20100,"3":{"5":2010000}},{"1":50105,"2":20100,"3":{"5":2010000}},{"1":50130,"2":20100,"3":{"5":2010000}},{"1":50145,"2":20000,"3":{"5":2000000}},{"1":50130,"2":19900,"3":{"5":1990000}},{"1":50080,"2":20000,"3":{"5":2000000}},{"1":50095,"2":20100,"3":{"5":2010000}},{"1":50055,"2":20200,"3":{"5":2020000}},{"1":50025,"2":20100,"3":{"5":2010000}},{"1":50075,"2":19600,"3":{"5":1960000}},{"1":50030,"2":20200,"3":{"5":2020000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50000,"2":24700,"3":{"4":2470000}},{"1":50185,"2":25900,"3":{"4":2590000}},{"1":50025,"2":25900,"3":{"4":2590000}},{"1":50080,"2":25900,"3":{"4":2590000}},{"1":50175,"2":25800,"3":{"4":2580000}},{"1":50080,"2":25700,"3":{"4":2570000}},{"1":50140,"2":25300,"3":{"4":2530000}},{"1":50070,"2":25800,"3":{"4":2580000}},{"1":50085,"2":25900,"3":{"4":2590000}},{"1":50130,"2":25900,"3":{"4":2590000}},{"1":50145,"2":25900,"3":{"4":2590000}},{"1":50020,"2":25900,"3":{"4":2590000}},{"1":50190,"2":25900,"3":{"4":2590000}},{"1":50015,"2":25800,"3":{"4":2580000}},{"1":50060,"2":25900,"3":{"4":2590000}},{"1":50050,"2":25400,"3":{"4":2540000}},{"1":50045,"2":25900,"3":{"4":2590000}},{"1":50135,"2":25800,"3":{"4":2580000}},{"1":50155,"2":25900,"3":{"4":2590000}},{"1":50000,"2":25500,"3":{"4":2550000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50025,"2":24000,"3":{"4":2400000}},{"1":50050,"2":25100,"3":{"4":2510000}},{"1":50030,"2":25100,"3":{"4":2510000}},{"1":50075,"2":25000,"3":{"4":2500000}},{"1":50135,"2":25000,"3":{"4":2500000}},{"1":50080,"2":24900,"3":{"4":2490000}},{"1":50040,"2":24600,"3":{"4":2460000}},{"1":50025,"2":24900,"3":{"4":2490000}},{"1":50000,"2":25000,"3":{"4":2500000}},{"1":50020,"2":24700,"3":{"4":2470000}},{"1":50000,"2":24900,"3":{"4":2490000}},{"1":50060,"2":24900,"3":{"4":2490000}},{"1":50050,"2":25000,"3":{"4":2500000}},{"1":50060,"2":25000,"3":{"4":2500000}},{"1":50045,"2":25000,"3":{"4":2500000}},{"1":50030,"2":24600,"3":{"4":2460000}},{"1":50015,"2":25100,"3":{"4":2510000}},{"1":50190,"2":24900,"3":{"4":2490000}},{"1":50110,"2":25100,"3":{"4":2510000}},{"1":50145,"2":24800,"3":{"4":2480000}}]}
-  ]
-}
diff --git a/benchmark/data/skybrian5/head/props_vm.pb.json b/benchmark/data/skybrian5/head/props_vm.pb.json
deleted file mode 100644
index bfd5d68..0000000
--- a/benchmark/data/skybrian5/head/props_vm.pb.json
+++ /dev/null
@@ -1,62 +0,0 @@
-{
-  "1": 2,
-  "2": "Done",
-  "3": {
-    "1": "props_vm.dart",
-    "10": {
-      "1": "skybrian5",
-      "2": 1,
-      "3": "1.12.0 (Mon Aug 31 03:24:52 2015) on \"linux_x64\"",
-      "20": false,
-      "21": true
-    },
-    "11": {
-      "1": "0.4.2",
-      "2": [
-        {"1":"analyzer","2":"hosted","3":"0.26.1+6"},
-        {"1":"args","2":"hosted","3":"0.13.2"},
-        {"1":"async","2":"hosted","3":"1.3.0"},
-        {"1":"barback","2":"hosted","3":"0.15.2+7"},
-        {"1":"browser","2":"hosted","3":"0.10.0+2"},
-        {"1":"charcode","2":"hosted","3":"1.1.0"},
-        {"1":"collection","2":"hosted","3":"1.1.3"},
-        {"1":"crypto","2":"hosted","3":"0.9.1"},
-        {"1":"csslib","2":"hosted","3":"0.12.1"},
-        {"1":"fixnum","2":"hosted","3":"0.9.1+2"},
-        {"1":"glob","2":"hosted","3":"1.0.5"},
-        {"1":"html","2":"hosted","3":"0.12.2"},
-        {"1":"http_multi_server","2":"hosted","3":"1.3.2"},
-        {"1":"http_parser","2":"hosted","3":"1.0.0"},
-        {"1":"logging","2":"hosted","3":"0.11.1+1"},
-        {"1":"matcher","2":"hosted","3":"0.12.0+1"},
-        {"1":"mime","2":"hosted","3":"0.9.3"},
-        {"1":"package_config","2":"hosted","3":"0.1.3"},
-        {"1":"path","2":"hosted","3":"1.3.6"},
-        {"1":"plugin","2":"hosted","3":"0.1.0"},
-        {"1":"pool","2":"hosted","3":"1.1.0"},
-        {"1":"protobuf"},
-        {"1":"description","2":"path","3":"0.4.2","4":"../dart-protobuf"},
-        {"1":"pub_semver","2":"hosted","3":"1.2.2"},
-        {"1":"shelf","2":"hosted","3":"0.6.3"},
-        {"1":"shelf_static","2":"hosted","3":"0.2.3+1"},
-        {"1":"shelf_web_socket","2":"hosted","3":"0.0.1+4"},
-        {"1":"source_map_stack_trace","2":"hosted","3":"1.0.4"},
-        {"1":"source_maps","2":"hosted","3":"0.10.1"},
-        {"1":"source_span","2":"hosted","3":"1.2.0"},
-        {"1":"stack_trace","2":"hosted","3":"1.4.2"},
-        {"1":"string_scanner","2":"hosted","3":"0.1.4"},
-        {"1":"test","2":"hosted","3":"0.12.4+9"},
-        {"1":"utf","2":"hosted","3":"0.9.0+2"},
-        {"1":"watcher","2":"hosted","3":"0.9.7"}
-      ]
-    }
-  },
-  "4": [
-    {"1":{"1":20,"2":{"1":10},"3":20,"4":50},"2":[{"1":50131,"2":14500,"3":{"4":1450000}},{"1":50300,"2":14700,"3":{"4":1470000}},{"1":50297,"2":14700,"3":{"4":1470000}},{"1":50118,"2":14600,"3":{"4":1460000}},{"1":50249,"2":14700,"3":{"4":1470000}},{"1":50255,"2":14700,"3":{"4":1470000}},{"1":50266,"2":14700,"3":{"4":1470000}},{"1":50276,"2":14700,"3":{"4":1470000}},{"1":50275,"2":14700,"3":{"4":1470000}},{"1":50302,"2":14700,"3":{"4":1470000}},{"1":50019,"2":14500,"3":{"4":1450000}},{"1":50100,"2":14500,"3":{"4":1450000}},{"1":50035,"2":14500,"3":{"4":1450000}},{"1":50025,"2":14500,"3":{"4":1450000}},{"1":50342,"2":14600,"3":{"4":1460000}},{"1":50005,"2":14500,"3":{"4":1450000}},{"1":50001,"2":14500,"3":{"4":1450000}},{"1":50003,"2":14500,"3":{"4":1450000}},{"1":50043,"2":14500,"3":{"4":1450000}},{"1":50002,"2":14500,"3":{"4":1450000}}]},
-    {"1":{"1":20,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50021,"2":179700,"3":{"4":17970000}},{"1":50014,"2":178000,"3":{"4":17800000}},{"1":50002,"2":181900,"3":{"4":18190000}},{"1":50000,"2":181400,"3":{"4":18140000}},{"1":50003,"2":181900,"3":{"4":18190000}},{"1":50005,"2":181900,"3":{"4":18190000}},{"1":50015,"2":181700,"3":{"4":18170000}},{"1":50020,"2":182000,"3":{"4":18200000}},{"1":50026,"2":181900,"3":{"4":18190000}},{"1":50011,"2":181600,"3":{"4":18160000}},{"1":50025,"2":181500,"3":{"4":18150000}},{"1":50020,"2":181800,"3":{"4":18180000}},{"1":50017,"2":182600,"3":{"4":18260000}},{"1":50008,"2":182600,"3":{"4":18260000}},{"1":50003,"2":182400,"3":{"4":18240000}},{"1":50024,"2":182600,"3":{"4":18260000}},{"1":50011,"2":182600,"3":{"4":18260000}},{"1":50025,"2":182000,"3":{"4":18200000}},{"1":50017,"2":182600,"3":{"4":18260000}},{"1":50016,"2":182400,"3":{"4":18240000}}]},
-    {"1":{"1":21,"2":{"1":10},"3":20,"4":50},"2":[{"1":50022,"2":67700,"3":{"5":6770000}},{"1":50061,"2":68300,"3":{"5":6830000}},{"1":50044,"2":68300,"3":{"5":6830000}},{"1":50035,"2":68500,"3":{"5":6850000}},{"1":50016,"2":68400,"3":{"5":6840000}},{"1":50024,"2":68500,"3":{"5":6850000}},{"1":50012,"2":67800,"3":{"5":6780000}},{"1":50073,"2":68600,"3":{"5":6860000}},{"1":50040,"2":68500,"3":{"5":6850000}},{"1":50019,"2":68500,"3":{"5":6850000}},{"1":50045,"2":68500,"3":{"5":6850000}},{"1":50053,"2":68500,"3":{"5":6850000}},{"1":50036,"2":68200,"3":{"5":6820000}},{"1":50030,"2":68200,"3":{"5":6820000}},{"1":50032,"2":68200,"3":{"5":6820000}},{"1":50032,"2":67900,"3":{"5":6790000}},{"1":50011,"2":68000,"3":{"5":6800000}},{"1":50056,"2":68100,"3":{"5":6810000}},{"1":50072,"2":68100,"3":{"5":6810000}},{"1":50070,"2":68100,"3":{"5":6810000}}]},
-    {"1":{"1":21,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50013,"2":68400,"3":{"5":6840000}},{"1":50029,"2":68400,"3":{"5":6840000}},{"1":50050,"2":68400,"3":{"5":6840000}},{"1":50029,"2":68000,"3":{"5":6800000}},{"1":50002,"2":68300,"3":{"5":6830000}},{"1":50013,"2":68300,"3":{"5":6830000}},{"1":50013,"2":68300,"3":{"5":6830000}},{"1":50072,"2":68400,"3":{"5":6840000}},{"1":50032,"2":68300,"3":{"5":6830000}},{"1":50013,"2":68300,"3":{"5":6830000}},{"1":50028,"2":67900,"3":{"5":6790000}},{"1":50040,"2":67900,"3":{"5":6790000}},{"1":50020,"2":68100,"3":{"5":6810000}},{"1":50041,"2":68300,"3":{"5":6830000}},{"1":50004,"2":68300,"3":{"5":6830000}},{"1":50018,"2":68300,"3":{"5":6830000}},{"1":50018,"2":68100,"3":{"5":6810000}},{"1":50042,"2":68000,"3":{"5":6800000}},{"1":50023,"2":68100,"3":{"5":6810000}},{"1":50065,"2":68000,"3":{"5":6800000}}]},
-    {"1":{"1":22,"2":{"1":10},"3":20,"4":50},"2":[{"1":50008,"2":223900,"3":{"4":22390000}},{"1":50219,"2":226200,"3":{"4":22620000}},{"1":50018,"2":227100,"3":{"4":22710000}},{"1":50008,"2":227100,"3":{"4":22710000}},{"1":50016,"2":227600,"3":{"4":22760000}},{"1":50001,"2":227500,"3":{"4":22750000}},{"1":50001,"2":227600,"3":{"4":22760000}},{"1":50000,"2":227500,"3":{"4":22750000}},{"1":50017,"2":227200,"3":{"4":22720000}},{"1":50006,"2":227100,"3":{"4":22710000}},{"1":50020,"2":227400,"3":{"4":22740000}},{"1":50007,"2":227300,"3":{"4":22730000}},{"1":50000,"2":227200,"3":{"4":22720000}},{"1":50011,"2":227700,"3":{"4":22770000}},{"1":50000,"2":227200,"3":{"4":22720000}},{"1":50007,"2":227100,"3":{"4":22710000}},{"1":50010,"2":227900,"3":{"4":22790000}},{"1":50015,"2":227600,"3":{"4":22760000}},{"1":50009,"2":228000,"3":{"4":22800000}},{"1":50021,"2":227900,"3":{"4":22790000}}]},
-    {"1":{"1":22,"2":{"1":10,"9":"x"},"3":20,"4":50},"2":[{"1":50020,"2":209400,"3":{"4":20940000}},{"1":50005,"2":211800,"3":{"4":21180000}},{"1":50019,"2":211500,"3":{"4":21150000}},{"1":50006,"2":197000,"3":{"4":19700000}},{"1":50013,"2":211500,"3":{"4":21150000}},{"1":50018,"2":211500,"3":{"4":21150000}},{"1":50005,"2":211500,"3":{"4":21150000}},{"1":50013,"2":211600,"3":{"4":21160000}},{"1":50009,"2":211000,"3":{"4":21100000}},{"1":50006,"2":211400,"3":{"4":21140000}},{"1":50018,"2":211500,"3":{"4":21150000}},{"1":50017,"2":210800,"3":{"4":21080000}},{"1":50017,"2":209600,"3":{"4":20960000}},{"1":50004,"2":209600,"3":{"4":20960000}},{"1":50021,"2":209600,"3":{"4":20960000}},{"1":50018,"2":209300,"3":{"4":20930000}},{"1":50023,"2":209800,"3":{"4":20980000}},{"1":50002,"2":209600,"3":{"4":20960000}},{"1":50023,"2":209700,"3":{"4":20970000}},{"1":50019,"2":209800,"3":{"4":20980000}}]}
-  ]
-}
diff --git a/benchmark/lib/benchmark.dart b/benchmark/lib/benchmark.dart
deleted file mode 100644
index 81e249c..0000000
--- a/benchmark/lib/benchmark.dart
+++ /dev/null
@@ -1,204 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark;
-
-import 'generated/benchmark.pb.dart' as pb;
-
-typedef Benchmark CreateBenchmarkFunc(pb.Request request);
-
-// Describes how to construct a benchmark.
-class BenchmarkType {
-  final pb.BenchmarkID id;
-  final CreateBenchmarkFunc create;
-  const BenchmarkType(this.id, this.create);
-}
-
-abstract class Profiler {
-  void startProfile(pb.Request request);
-  void endProfile(pb.Sample s);
-}
-
-/// A benchmark that also reports the counts for various operations.
-/// (A modification of BenchmarkBase from the benchmark_harness library.)
-abstract class Benchmark {
-  static const int _DEFAULT_REPS = 10;
-
-  final pb.BenchmarkID id;
-  Benchmark(this.id);
-
-  String get summary => id.name;
-
-  pb.Request makeRequest(
-          [Duration duration = const Duration(milliseconds: 50),
-          int samples = 20]) =>
-      new pb.Request()
-        ..id = id
-        ..params = makeParams()
-        ..duration = duration.inMilliseconds
-        ..samples = samples;
-
-  pb.Params makeParams();
-
-  /// Runs a benchmark for the requested number of times.
-  ///
-  /// The length of each iterator is the number of [samples]
-  /// requested. If you create more than one iterator, each
-  /// iterator runs benchmarks independently and will return
-  /// different samples.
-  ///
-  /// If a [profiler] is provided, it will be used for one extra sample.
-  /// (Not included in results.)
-  Iterable<pb.Sample> measure(pb.Request r, int samples,
-      {Profiler profiler}) sync* {
-    checkRequest(r);
-
-    int sampleMillis = r.duration;
-    setup();
-
-    for (int i = 0; i < samples; i++) {
-      yield _measureOnce(sampleMillis);
-    }
-
-    if (profiler != null) {
-      profiler.startProfile(r);
-      var s = _measureOnce(sampleMillis);
-      profiler.endProfile(s);
-    }
-
-    teardown();
-  }
-
-  void checkRequest(pb.Request r) {
-    if (r.id != id) {
-      throw new ArgumentError("invalid benchmark id: ${r.id}");
-    }
-    if (r.params != makeParams()) {
-      throw new ArgumentError("parameters don't match: ${r.params}");
-    }
-  }
-
-  pb.Sample _measureOnce(int sampleMillis) {
-    // Warmup for at least 100ms. Discard result.
-    _measureFor(() {
-      warmup();
-      return 1;
-    }, 100);
-
-    var sample = _measureFor(exercise, sampleMillis);
-    setCounts(sample);
-    return sample;
-  }
-
-  // Lifecycle methods
-
-  /// Called before the benchmark runs. (Not measured.)
-  void setup() {}
-
-  /// Runs a short version of the benchmark. By default invokes [run] once.
-  /// (Not measured.)
-  void warmup() {
-    run();
-  }
-
-  /// Exercises the code and returns the number of repetitions.
-  int exercise() {
-    for (int i = 0; i < _DEFAULT_REPS; i++) {
-      run();
-    }
-    return _DEFAULT_REPS;
-  }
-
-  /// The code being measured.
-  void run();
-
-  /// Sets any counters in the sample.
-  /// (Clears them for the next run if necessary.)
-  void setCounts(pb.Sample m) {}
-
-  /// Called after the benchmark finishes.
-  void teardown() {}
-
-  String summarizeResponse(pb.Response r) {
-    checkRequest(r.request);
-
-    var prefix = summary.padRight(39);
-    var sampleCount = r.samples.length.toStringAsFixed(0).padLeft(2);
-    var median = measureSample(medianSample(r)).toStringAsFixed(0).padLeft(4);
-    var max = measureSample(maxSample(r)).toStringAsFixed(0).padLeft(4);
-
-    return "$prefix samples: $sampleCount"
-        " median: $median max: $max $measureSampleUnits";
-  }
-
-  /// Returns the sample with the median measurement.
-  pb.Sample medianSample(pb.Response response) {
-    if (response == null || response.samples.isEmpty) return null;
-    var samples = []..addAll(response.samples);
-    samples.sort((a, b) {
-      return measureSample(a).compareTo(measureSample(b));
-    });
-    int index = samples.length ~/ 2;
-    return samples[index];
-  }
-
-  /// Returns the sample with the highest measurement.
-  pb.Sample maxSample(pb.Response response) {
-    if (response == null) return null;
-    pb.Sample best;
-    for (var s in response.samples) {
-      if (best == null) best = s;
-      if (measureSample(best) < measureSample(s)) {
-        best = s;
-      }
-    }
-    return best;
-  }
-
-  double measureSample(pb.Sample s);
-
-  String get measureSampleUnits;
-
-  @override
-  toString() => summary;
-
-  /// Measures the average time spent per repetition.
-  ///
-  /// Executes [runner] repeatedly until [minimumMillis] has been reached.
-  /// [runner] should return the number of times it ran the benchmark.
-  static pb.Sample _measureFor(Function runner, int minimumMillis) {
-    int minimumMicros = minimumMillis * 1000;
-    int reps = 0;
-    int elapsed = 0;
-    Stopwatch watch = new Stopwatch()..start();
-    while (elapsed < minimumMicros) {
-      reps += runner();
-      elapsed = watch.elapsedMicroseconds;
-    }
-    return new pb.Sample()
-      ..duration = elapsed
-      ..loopCount = reps
-      ..counts = new pb.Counts();
-  }
-}
-
-double int32ReadsPerMillisecond(pb.Sample s) {
-  if (s == null || !s.counts.hasInt32Reads() || !s.hasDuration()) return 0.0;
-  return s.counts.int32Reads * 1000 / s.duration;
-}
-
-double int64ReadsPerMillisecond(pb.Sample s) {
-  if (s == null || !s.counts.hasInt64Reads() || !s.hasDuration()) return 0.0;
-  return s.counts.int64Reads * 1000 / s.duration;
-}
-
-double stringReadsPerMillisecond(pb.Sample s) {
-  if (s == null || !s.counts.hasStringReads() || !s.hasDuration()) return 0.0;
-  return s.counts.stringReads * 1000 / s.duration;
-}
-
-double stringWritesPerMillisecond(pb.Sample s) {
-  if (s == null || !s.counts.hasStringWrites() || !s.hasDuration()) return 0.0;
-  return s.counts.stringWrites * 1000 / s.duration;
-}
diff --git a/benchmark/lib/benchmarks/get_strings.dart b/benchmark/lib/benchmarks/get_strings.dart
deleted file mode 100644
index 94017e4..0000000
--- a/benchmark/lib/benchmarks/get_strings.dart
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.get_strings;
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/string_grid.pb.dart' as pb;
-
-/// A benchmark that accesses each value in a grid of string fields.
-class GetStringsBenchmark extends Benchmark {
-  static const width = 10;
-  final int height;
-  final String fillValue; // null means start uninitialized.
-  pb.Grid10 grid;
-
-  GetStringsBenchmark(this.height, this.fillValue) : super($id);
-
-  @override
-  get summary {
-    var fill = fillValue == null ? "null" : "'$fillValue'";
-    return "${id.name}($height x $fill)";
-  }
-
-  @override
-  Params makeParams() {
-    var p = new Params()..messageCount = height;
-    if (fillValue != null) p.stringValue = fillValue;
-    return p;
-  }
-
-  @override
-  void setup() {
-    grid = _makeGrid(height, fillValue);
-  }
-
-  // makes a rectangle where every cell has the same value.
-  static pb.Grid10 _makeGrid(int height, String fillValue) {
-    var grid = new pb.Grid10();
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line10();
-      if (fillValue != null) {
-        for (int x = 0; x < width; x++) {
-          int tag = getTagForColumn(line, x);
-          line.setField(tag, fillValue);
-        }
-      }
-      grid.lines.add(line);
-    }
-
-    return grid;
-  }
-
-  static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
-  }
-
-  @override
-  int exercise() {
-    const reps = 100;
-    for (int i = 0; i < reps; i++) {
-      run();
-    }
-    return reps;
-  }
-
-  @override
-  void run() {
-    if (fillValue == null) {
-      _getDefaults();
-    } else {
-      _getStrings();
-    }
-  }
-
-  void _getDefaults() {
-    bool ok = true;
-    for (var line in grid.lines) {
-      ok = ok && line.cell1.isEmpty;
-      ok = ok && line.cell2.isEmpty;
-      ok = ok && line.cell3.isEmpty;
-      ok = ok && line.cell4.isEmpty;
-      ok = ok && line.cell5.isEmpty;
-      ok = ok && line.cell6.isEmpty;
-      ok = ok && line.cell7.isEmpty;
-      ok = ok && line.cell8.isEmpty;
-      ok = ok && line.cell9.isEmpty;
-      ok = ok && line.cell10.isEmpty;
-    }
-    if (!ok) throw "failed";
-  }
-
-  void _getStrings() {
-    bool ok = true;
-    for (var line in grid.lines) {
-      ok = ok && line.cell1.isNotEmpty;
-      ok = ok && line.cell2.isNotEmpty;
-      ok = ok && line.cell3.isNotEmpty;
-      ok = ok && line.cell4.isNotEmpty;
-      ok = ok && line.cell5.isNotEmpty;
-      ok = ok && line.cell6.isNotEmpty;
-      ok = ok && line.cell7.isNotEmpty;
-      ok = ok && line.cell8.isNotEmpty;
-      ok = ok && line.cell9.isNotEmpty;
-      ok = ok && line.cell10.isNotEmpty;
-    }
-    if (!ok) throw "failed";
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.stringReads = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => stringReadsPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "string reads/ms";
-
-  static const $id = BenchmarkID.GET_STRINGS;
-  static final $type = new BenchmarkType($id, $create);
-
-  static GetStringsBenchmark $create(Request r) {
-    assert(r.params.hasMessageCount());
-    var value = null;
-    if (r.params.hasStringValue()) value = r.params.stringValue;
-    return new GetStringsBenchmark(r.params.messageCount, value);
-  }
-}
diff --git a/benchmark/lib/benchmarks/has_strings.dart b/benchmark/lib/benchmarks/has_strings.dart
deleted file mode 100644
index 3b46eee..0000000
--- a/benchmark/lib/benchmarks/has_strings.dart
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.has_strings;
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/string_grid.pb.dart' as pb;
-
-/// A benchmark that checks the existence of each item in a grid of strings.
-class HasStringsBenchmark extends Benchmark {
-  static const width = 10;
-  final int height;
-  final String fillValue;
-  pb.Grid10 grid;
-
-  HasStringsBenchmark(this.height, this.fillValue) : super($id);
-
-  @override
-  get summary {
-    var fill = fillValue == null ? "null" : "'$fillValue'";
-    return "${id.name}($height x $fill)";
-  }
-
-  @override
-  Params makeParams() {
-    var p = new Params()..messageCount = height;
-    if (fillValue != null) p.stringValue = fillValue;
-    return p;
-  }
-
-  @override
-  void setup() {
-    grid = _makeGrid(width, height, fillValue);
-  }
-
-  // makes a rectangle where no fields have been set.
-  static pb.Grid10 _makeGrid(int width, int height, String fillValue) {
-    var grid = new pb.Grid10();
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line10();
-      if (fillValue != null) {
-        for (int x = 0; x < width; x++) {
-          int tag = getTagForColumn(line, x);
-          line.setField(tag, fillValue);
-        }
-      }
-      grid.lines.add(line);
-    }
-
-    return grid;
-  }
-
-  static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
-  }
-
-  @override
-  int exercise() {
-    const reps = 100;
-    for (int i = 0; i < reps; i++) {
-      run();
-    }
-    return reps;
-  }
-
-  @override
-  void run() {
-    if (fillValue == null) {
-      runEmpty();
-    } else {
-      runFilled();
-    }
-  }
-
-  void runFilled() {
-    var allPresent = true;
-    for (var line in grid.lines) {
-      allPresent = allPresent && line.hasCell1();
-      allPresent = allPresent && line.hasCell2();
-      allPresent = allPresent && line.hasCell3();
-      allPresent = allPresent && line.hasCell4();
-      allPresent = allPresent && line.hasCell5();
-      allPresent = allPresent && line.hasCell6();
-      allPresent = allPresent && line.hasCell7();
-      allPresent = allPresent && line.hasCell8();
-      allPresent = allPresent && line.hasCell9();
-      allPresent = allPresent && line.hasCell10();
-    }
-    if (!allPresent) throw "failed";
-  }
-
-  void runEmpty() {
-    var allEmpty = true;
-    for (var line in grid.lines) {
-      allEmpty = allEmpty && !line.hasCell1();
-      allEmpty = allEmpty && !line.hasCell2();
-      allEmpty = allEmpty && !line.hasCell3();
-      allEmpty = allEmpty && !line.hasCell4();
-      allEmpty = allEmpty && !line.hasCell5();
-      allEmpty = allEmpty && !line.hasCell6();
-      allEmpty = allEmpty && !line.hasCell7();
-      allEmpty = allEmpty && !line.hasCell8();
-      allEmpty = allEmpty && !line.hasCell9();
-      allEmpty = allEmpty && !line.hasCell10();
-    }
-    if (!allEmpty) throw "failed";
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.stringReads = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => stringReadsPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "string reads/ms";
-
-  static const $id = BenchmarkID.HAS_STRINGS;
-  static final $type = new BenchmarkType($id, $create);
-
-  static HasStringsBenchmark $create(Request r) {
-    assert(r.params.hasMessageCount());
-    var value = null;
-    if (r.params.hasStringValue()) value = r.params.stringValue;
-    return new HasStringsBenchmark(r.params.messageCount, value);
-  }
-}
diff --git a/benchmark/lib/benchmarks/index.dart b/benchmark/lib/benchmarks/index.dart
deleted file mode 100644
index ad011ff..0000000
--- a/benchmark/lib/benchmarks/index.dart
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.index;
-
-import "../benchmark.dart";
-
-import "int32_json.dart";
-import "int64_json.dart";
-import "string_json.dart";
-
-import "repeated_int32_json.dart";
-import "repeated_int64_json.dart";
-import "repeated_string_json.dart";
-
-import "get_strings.dart";
-import "set_strings.dart";
-import "has_strings.dart";
-
-import '../generated/benchmark.pb.dart' as pb;
-
-/// Creates the appropriate Benchmark instance for a protobuf.
-Benchmark createBenchmark(pb.Request r) {
-  var type = allBenchmarks[r.id];
-  if (type == null) {
-    throw new ArgumentError("unknown benchmark: ${r.id.name}");
-  }
-  return type.create(r);
-}
-
-final Map<pb.BenchmarkID, BenchmarkType> allBenchmarks = _makeTypeMap([
-  Int32Benchmark.$type,
-  Int64Benchmark.$type,
-  StringBenchmark.$type,
-  RepeatedInt32Benchmark.$type,
-  RepeatedInt64Benchmark.$type,
-  RepeatedStringBenchmark.$type,
-  GetStringsBenchmark.$type,
-  SetStringsBenchmark.$type,
-  HasStringsBenchmark.$type,
-]);
-
-Map<pb.BenchmarkID, BenchmarkType> _makeTypeMap(List<BenchmarkType> types) {
-  var out = <pb.BenchmarkID, BenchmarkType>{};
-  for (var type in types) {
-    if (out.containsKey(type.id)) {
-      throw "already added: $type.id.name";
-    }
-    out[type.id] = type;
-  }
-  return new Map.unmodifiable(out);
-}
diff --git a/benchmark/lib/benchmarks/int32_json.dart b/benchmark/lib/benchmarks/int32_json.dart
deleted file mode 100644
index 5efb61e..0000000
--- a/benchmark/lib/benchmarks/int32_json.dart
+++ /dev/null
@@ -1,86 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.int32_json;
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/int32grid.pb.dart' as pb;
-
-/// A benchmark that deserializes a grid of int fields.
-class Int32Benchmark extends Benchmark {
-  final int width;
-  final int height;
-  String json;
-  int lastFieldTag;
-
-  Int32Benchmark(this.width, this.height) : super($id);
-
-  @override
-  get summary => "${id.name}($width x $height int32s)";
-
-  @override
-  Params makeParams() => new Params()
-    ..int32FieldCount = width
-    ..messageCount = height;
-
-  @override
-  void setup() {
-    var grid = _makeGrid(width, height);
-    json = grid.writeToJson();
-    lastFieldTag = getTagForColumn(new pb.Line10(), width - 1);
-  }
-
-  // makes a rectangle of the of the form:
-  // 0 1 2 3
-  // 1 2 3 4
-  // 2 3 4 5
-  static pb.Grid10 _makeGrid(int width, int height) {
-    if (width > 10) throw new ArgumentError("width out of range: ${width}");
-    var grid = new pb.Grid10();
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line10();
-      for (int x = 0; x < width; x++) {
-        int tag = getTagForColumn(line, x);
-        line.setField(tag, x + y);
-      }
-      grid.lines.add(line);
-    }
-
-    return grid;
-  }
-
-  static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
-  }
-
-  @override
-  void run() {
-    pb.Grid10 grid = new pb.Grid10.fromJson(json);
-    var actual = grid.lines[height - 1].getField(lastFieldTag);
-    if (actual != width + height - 2) throw "failed; got ${actual}";
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.int32Reads = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => int32ReadsPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "int32 reads/ms";
-
-  static const $id = BenchmarkID.READ_INT32_FIELDS_JSON;
-  static final $type = new BenchmarkType($id, $create);
-
-  static Int32Benchmark $create(Request r) {
-    assert(r.params.hasInt32FieldCount());
-    assert(r.params.hasMessageCount());
-    return new Int32Benchmark(r.params.int32FieldCount, r.params.messageCount);
-  }
-}
diff --git a/benchmark/lib/benchmarks/int64_json.dart b/benchmark/lib/benchmarks/int64_json.dart
deleted file mode 100644
index c691749..0000000
--- a/benchmark/lib/benchmarks/int64_json.dart
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.int64_json;
-
-import 'package:fixnum/fixnum.dart' show Int64;
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/int64grid.pb.dart' as pb;
-
-/// A benchmark that deserializes a grid of int fields.
-class Int64Benchmark extends Benchmark {
-  final int width;
-  final int height;
-  String json;
-  int lastFieldTag;
-
-  Int64Benchmark(this.width, this.height) : super($id);
-
-  @override
-  get summary => "${id.name}($width x $height int64s)";
-
-  @override
-  Params makeParams() => new Params()
-    ..int64FieldCount = width
-    ..messageCount = height;
-
-  @override
-  void setup() {
-    var grid = _makeGrid(width, height);
-    json = grid.writeToJson();
-    lastFieldTag = getTagForColumn(new pb.Line10(), width - 1);
-  }
-
-  // makes a rectangle of the of the form:
-  // 0 1 2 3
-  // 1 2 3 4
-  // 2 3 4 5
-  static pb.Grid10 _makeGrid(int width, int height) {
-    if (width > 10) throw new ArgumentError("width out of range: ${width}");
-    var grid = new pb.Grid10();
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line10();
-      for (int x = 0; x < width; x++) {
-        int tag = getTagForColumn(line, x);
-        line.setField(tag, new Int64(x + y));
-      }
-      grid.lines.add(line);
-    }
-
-    return grid;
-  }
-
-  static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
-  }
-
-  @override
-  void run() {
-    pb.Grid10 grid = new pb.Grid10.fromJson(json);
-    var actual = grid.lines[height - 1].getField(lastFieldTag);
-    if (actual != width + height - 2) throw "failed; got ${actual}";
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.int64Reads = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => int64ReadsPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "int64 reads/ms";
-
-  static const $id = BenchmarkID.READ_INT64_FIELDS_JSON;
-  static final $type = new BenchmarkType($id, $create);
-
-  static Int64Benchmark $create(Request r) {
-    assert(r.params.hasInt64FieldCount());
-    assert(r.params.hasMessageCount());
-    return new Int64Benchmark(r.params.int64FieldCount, r.params.messageCount);
-  }
-}
diff --git a/benchmark/lib/benchmarks/repeated_int32_json.dart b/benchmark/lib/benchmarks/repeated_int32_json.dart
deleted file mode 100644
index cd9fc0d..0000000
--- a/benchmark/lib/benchmarks/repeated_int32_json.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.repeated_int32_json;
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/int32grid.pb.dart' as pb;
-
-/// A benchmark that deserializes a grid of repeated ints.
-class RepeatedInt32Benchmark extends Benchmark {
-  final int width;
-  final int height;
-  String json;
-
-  RepeatedInt32Benchmark(this.width, this.height) : super($id);
-
-  @override
-  get summary => "${id.name}($width x $height ints)";
-
-  @override
-  Params makeParams() => new Params()
-    ..int32RepeatCount = width
-    ..messageCount = height;
-
-  @override
-  void setup() {
-    var grid = _makeGrid(width, height);
-    json = grid.writeToJson();
-  }
-
-  // makes a rectangle of the of the form:
-  // 0 1 2 3
-  // 1 2 3 4
-  // 2 3 4 5
-  static pb.Grid _makeGrid(int width, int height) {
-    var grid = new pb.Grid();
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line();
-      for (int x = 0; x < width; x++) {
-        line.cells.add(x + y);
-      }
-      grid.lines.add(line);
-    }
-
-    return grid;
-  }
-
-  @override
-  void run() {
-    pb.Grid grid = new pb.Grid.fromJson(json);
-    var actual = grid.lines[height - 1].cells[width - 1];
-    if (actual != width + height - 2) throw "failed; got ${actual}";
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.int32Reads = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => int32ReadsPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "int32 reads/ms";
-
-  static const $id = BenchmarkID.READ_INT32_REPEATED_JSON;
-  static final $type = new BenchmarkType($id, $create);
-  static RepeatedInt32Benchmark $create(Request r) {
-    assert(r.params.hasInt32RepeatCount());
-    assert(r.params.hasMessageCount());
-    return new RepeatedInt32Benchmark(
-        r.params.int32RepeatCount, r.params.messageCount);
-  }
-}
diff --git a/benchmark/lib/benchmarks/repeated_int64_json.dart b/benchmark/lib/benchmarks/repeated_int64_json.dart
deleted file mode 100644
index 3ad18cd..0000000
--- a/benchmark/lib/benchmarks/repeated_int64_json.dart
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.repeated_int64_json;
-
-import 'package:fixnum/fixnum.dart';
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/int64grid.pb.dart' as pb;
-
-/// A benchmark that deserializes a grid of repeated ints.
-class RepeatedInt64Benchmark extends Benchmark {
-  final int width;
-  final int height;
-  String json;
-
-  RepeatedInt64Benchmark(this.width, this.height) : super($id);
-
-  @override
-  get summary => "${id.name}($width x $height ints)";
-
-  @override
-  Params makeParams() => new Params()
-    ..int64RepeatCount = width
-    ..messageCount = height;
-
-  @override
-  void setup() {
-    var grid = _makeGrid(width, height);
-    json = grid.writeToJson();
-  }
-
-  // makes a rectangle of the of the form:
-  // 0 1 2 3
-  // 1 2 3 4
-  // 2 3 4 5
-  static pb.Grid _makeGrid(int width, int height) {
-    var grid = new pb.Grid();
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line();
-      for (int x = 0; x < width; x++) {
-        line.cells.add(new Int64(x + y));
-      }
-      grid.lines.add(line);
-    }
-
-    return grid;
-  }
-
-  @override
-  void run() {
-    pb.Grid grid = new pb.Grid.fromJson(json);
-    var actual = grid.lines[height - 1].cells[width - 1];
-    if (actual != width + height - 2) throw "failed; got ${actual}";
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.int64Reads = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => int64ReadsPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "int64 reads/ms";
-
-  static const $id = BenchmarkID.READ_INT64_REPEATED_JSON;
-  static final $type = new BenchmarkType($id, $create);
-  static RepeatedInt64Benchmark $create(Request r) {
-    assert(r.params.hasInt64RepeatCount());
-    assert(r.params.hasMessageCount());
-    return new RepeatedInt64Benchmark(
-        r.params.int64RepeatCount, r.params.messageCount);
-  }
-}
diff --git a/benchmark/lib/benchmarks/repeated_string_json.dart b/benchmark/lib/benchmarks/repeated_string_json.dart
deleted file mode 100644
index fbbc4e3..0000000
--- a/benchmark/lib/benchmarks/repeated_string_json.dart
+++ /dev/null
@@ -1,90 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.repeated_string_json;
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/string_grid.pb.dart' as pb;
-
-/// A benchmark that deserializes a grid of string fields.
-class RepeatedStringBenchmark extends Benchmark {
-  final int width;
-  final int height;
-  final int stringSize;
-  String json;
-  int lastFieldTag;
-
-  RepeatedStringBenchmark(this.width, this.height, this.stringSize)
-      : super($id);
-
-  @override
-  get summary => "${id.name}($width x $height x $stringSize)";
-
-  @override
-  Params makeParams() => new Params()
-    ..stringFieldCount = width
-    ..messageCount = height
-    ..stringSize = stringSize;
-
-  @override
-  void setup() {
-    var grid = _makeGrid(width, height, stringSize);
-    json = grid.writeToJson();
-  }
-
-  // makes a rectangle of the of the form:
-  // "01" "12" "23" "34"
-  // "12" "23" "34" "45"
-  // "23" "34" "45" "56"
-  static pb.Grid _makeGrid(int width, int height, int stringSize) {
-    if (width > 10) throw new ArgumentError("width out of range: ${width}");
-    var grid = new pb.Grid();
-
-    int zero = "0".codeUnits[0];
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line();
-      for (int x = 0; x < width; x++) {
-        var charCodes = <int>[];
-        for (var i = 0; i < stringSize; i++) {
-          charCodes.add(zero + ((x + y + i) % 10));
-        }
-        line.cells.add(new String.fromCharCodes(charCodes));
-      }
-      grid.lines.add(line);
-    }
-    return grid;
-  }
-
-  @override
-  void run() {
-    pb.Grid grid = new pb.Grid.fromJson(json);
-    var actual = grid.lines[height - 1].cells[width - 1];
-    if (actual.length != stringSize) throw "failed; got ${actual}";
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.stringReads = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => stringReadsPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "string reads/ms";
-
-  static const $id = BenchmarkID.READ_STRING_REPEATED_JSON;
-  static final $type = new BenchmarkType($id, $create);
-
-  static RepeatedStringBenchmark $create(Request r) {
-    assert(r.params.hasStringFieldCount());
-    assert(r.params.hasMessageCount());
-    assert(r.params.hasStringSize());
-    return new RepeatedStringBenchmark(
-        r.params.stringFieldCount, r.params.messageCount, r.params.stringSize);
-  }
-}
diff --git a/benchmark/lib/benchmarks/set_strings.dart b/benchmark/lib/benchmarks/set_strings.dart
deleted file mode 100644
index bf9d349..0000000
--- a/benchmark/lib/benchmarks/set_strings.dart
+++ /dev/null
@@ -1,107 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.set_strings;
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/string_grid.pb.dart' as pb;
-
-/// A benchmark that sets each value in a grid of string fields.
-class SetStringsBenchmark extends Benchmark {
-  static const width = 10;
-  final int height;
-  final String fillValue;
-  pb.Grid10 grid;
-
-  SetStringsBenchmark(this.height, this.fillValue) : super($id);
-
-  @override
-  get summary {
-    var fill = fillValue == null ? "null" : "'$fillValue'";
-    return "${id.name}($height x $fill)";
-  }
-
-  @override
-  Params makeParams() {
-    var p = new Params()..messageCount = height;
-    if (fillValue != null) p.stringValue = fillValue;
-    return p;
-  }
-
-  @override
-  void setup() {
-    grid = _makeGrid(width, height, fillValue);
-  }
-
-  // makes a rectangle where no fields have been set.
-  static pb.Grid10 _makeGrid(int width, int height, String fillValue) {
-    var grid = new pb.Grid10();
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line10();
-      if (fillValue != null) {
-        for (int x = 0; x < width; x++) {
-          int tag = getTagForColumn(line, x);
-          line.setField(tag, fillValue);
-        }
-      }
-      grid.lines.add(line);
-    }
-
-    return grid;
-  }
-
-  static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
-  }
-
-  @override
-  int exercise() {
-    const reps = 100;
-    for (int i = 0; i < reps; i++) {
-      run();
-    }
-    return reps;
-  }
-
-  @override
-  void run() {
-    var newValue = "";
-    for (var line in grid.lines) {
-      line.cell1 = newValue;
-      line.cell2 = newValue;
-      line.cell3 = newValue;
-      line.cell4 = newValue;
-      line.cell5 = newValue;
-      line.cell6 = newValue;
-      line.cell7 = newValue;
-      line.cell8 = newValue;
-      line.cell9 = newValue;
-      line.cell10 = newValue;
-    }
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.stringWrites = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => stringWritesPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "string writes/ms";
-
-  static const $id = BenchmarkID.SET_STRINGS;
-  static final $type = new BenchmarkType($id, $create);
-
-  static SetStringsBenchmark $create(Request r) {
-    assert(r.params.hasMessageCount());
-    var value = null;
-    if (r.params.hasStringValue()) value = r.params.stringValue;
-    return new SetStringsBenchmark(r.params.messageCount, value);
-  }
-}
diff --git a/benchmark/lib/benchmarks/string_json.dart b/benchmark/lib/benchmarks/string_json.dart
deleted file mode 100644
index acd88d6..0000000
--- a/benchmark/lib/benchmarks/string_json.dart
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.string_json;
-
-import '../benchmark.dart';
-import '../generated/benchmark.pb.dart'
-    show BenchmarkID, Request, Params, Sample;
-import '../generated/string_grid.pb.dart' as pb;
-
-/// A benchmark that deserializes a grid of string fields.
-class StringBenchmark extends Benchmark {
-  final int width;
-  final int height;
-  final int stringSize;
-  String json;
-  int lastFieldTag;
-
-  StringBenchmark(this.width, this.height, this.stringSize) : super($id);
-
-  @override
-  get summary => "${id.name}($width x $height x $stringSize)";
-
-  @override
-  Params makeParams() => new Params()
-    ..stringFieldCount = width
-    ..messageCount = height
-    ..stringSize = stringSize;
-
-  @override
-  void setup() {
-    var grid = _makeGrid(width, height, stringSize);
-    json = grid.writeToJson();
-    lastFieldTag = getTagForColumn(new pb.Line10(), width - 1);
-  }
-
-  // makes a rectangle of the of the form:
-  // "01" "12" "23" "34"
-  // "12" "23" "34" "45"
-  // "23" "34" "45" "56"
-  static pb.Grid10 _makeGrid(int width, int height, int stringSize) {
-    if (width > 10) throw new ArgumentError("width out of range: ${width}");
-    var grid = new pb.Grid10();
-
-    int zero = "0".codeUnits[0];
-
-    for (int y = 0; y < height; y++) {
-      var line = new pb.Line10();
-      for (int x = 0; x < width; x++) {
-        int tag = getTagForColumn(line, x);
-        var charCodes = <int>[];
-        for (var i = 0; i < stringSize; i++) {
-          charCodes.add(zero + ((x + y + i) % 10));
-        }
-        line.setField(tag, new String.fromCharCodes(charCodes));
-      }
-      grid.lines.add(line);
-    }
-
-    return grid;
-  }
-
-  static int getTagForColumn(pb.Line10 line, int x) {
-    return line.getTagNumber('cell${x + 1}'); // assume x start from 1
-  }
-
-  @override
-  void run() {
-    pb.Grid10 grid = new pb.Grid10.fromJson(json);
-    var actual = grid.lines[height - 1].getField(lastFieldTag);
-    if (actual.length != stringSize) throw "failed; got ${actual}";
-  }
-
-  @override
-  void setCounts(Sample s) {
-    s.counts.stringReads = width * height * s.loopCount;
-  }
-
-  @override
-  measureSample(Sample s) => stringReadsPerMillisecond(s);
-
-  @override
-  get measureSampleUnits => "string reads/ms";
-
-  static const $id = BenchmarkID.READ_STRING_FIELDS_JSON;
-  static final $type = new BenchmarkType($id, $create);
-
-  static StringBenchmark $create(Request r) {
-    assert(r.params.hasStringFieldCount());
-    assert(r.params.hasMessageCount());
-    assert(r.params.hasStringSize());
-    return new StringBenchmark(
-        r.params.stringFieldCount, r.params.messageCount, r.params.stringSize);
-  }
-}
diff --git a/benchmark/lib/dashboard.dart b/benchmark/lib/dashboard.dart
deleted file mode 100644
index 08d2fa7..0000000
--- a/benchmark/lib/dashboard.dart
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.html_runner;
-
-import 'dart:async' show Future;
-import 'dart:convert';
-import 'dart:html';
-import 'dart:js' show context, JsObject;
-
-import 'generated/benchmark.pb.dart' as pb;
-
-import 'benchmark.dart' show Profiler;
-import 'dashboard_model.dart' show DashboardModel, Table, SelectEvent;
-import 'dashboard_view.dart' show DashboardView;
-import 'report.dart' show createPlatform, createPackages;
-import 'suite.dart' show runSuite;
-
-import '../data/index.dart' as data;
-
-/// Displays a dashboard that can be used to run benchmarks.
-Future showDashboard(pb.Suite suite, Element container) async {
-  // set up model
-
-  var env = await loadBrowserEnv();
-  var reports = await loadReports(suite);
-
-  var defaultReport = new pb.Report()..env = env;
-  var model = new DashboardModel(reports, new Table(suite), defaultReport);
-
-  var baseline = chooseBaseline(env, reports);
-  if (baseline != null) {
-    model = model.withBaseline(baseline);
-  }
-
-  var view = new DashboardView();
-
-  Future render(pb.Report report) async {
-    report.env = env;
-    model = model.withReport(report);
-    await window.animationFrame;
-    view.render(model);
-    await new Future(() => null); // exit to regular timer task
-  }
-
-  // Set up the main loop that runs the suite.
-
-  bool running = false;
-  void runBenchmarks() {
-    if (running) return;
-    var profiler = new JsProfiler();
-    running = true;
-    () async {
-      var requests = model.table.selections.toList();
-      for (pb.Report report in runSuite(requests, profiler: profiler)) {
-        await render(report);
-      }
-    }()
-        .whenComplete(() {
-      running = false;
-    });
-  }
-
-  // set up event handlers
-
-  view.onRunButtonClick.listen((_) => runBenchmarks());
-  view.onSelectAllClick.listen((_) {
-    model = model.withTable(model.table.withAllSelected());
-    view.render(model);
-  });
-  view.onSelectNoneClick.listen((_) {
-    model = model.withTable(model.table.withNoneSelected());
-    view.render(model);
-  });
-
-  view.onMenuChange.listen((String item) {
-    model = model.withBaseline(item);
-    view.render(model);
-  });
-
-  view.onSelectionChange.listen((SelectEvent e) {
-    model = model.withTable(model.table.withSelection(e.item, e.selected));
-    view.render(model);
-  });
-
-  // show the view
-
-  view.render(model);
-  container.children.clear();
-  container.append(view.elt);
-}
-
-/// Starts and stops the DevTools profiler.
-class JsProfiler implements Profiler {
-  static JsObject console = context["console"];
-
-  int count = 1;
-
-  startProfile(pb.Request request) {
-    var label = "$count-${request.id.name}";
-    count++;
-    console.callMethod("profile", [label]);
-  }
-
-  endProfile(pb.Sample s) {
-    console.callMethod("profileEnd");
-    print("profile: $s");
-  }
-}
-
-Future<pb.Env> loadBrowserEnv() async {
-  const advice = "Run a VM benchmark to create this file.";
-  var pubspecYaml = await _loadDataFile(data.pubspecYamlName, advice: advice);
-  var pubspecLock = await _loadDataFile(data.pubspecLockName, advice: advice);
-  var hostname = await _loadDataFile(data.hostfileName, advice: advice);
-
-  var platform = createPlatform()
-    ..hostname = hostname
-    ..userAgent = window.navigator.userAgent;
-
-  return new pb.Env()
-    ..page = window.location.pathname
-    ..platform = platform
-    ..packages = createPackages(pubspecYaml, pubspecLock);
-}
-
-/// Loads all the reports saved to benchmark/data.
-Future<Map<String, pb.Report>> loadReports(pb.Suite suite) async {
-  var out = <String, pb.Report>{};
-
-  var dataJsonContent = await _loadDataFile('data.json');
-  var dataJson = jsonDecode(dataJsonContent) as Map<String, dynamic>;
-
-  for (var entry in dataJson.entries) {
-    var report = new pb.Report.fromJson(entry.value);
-    if (isCompatibleBaseline(suite, report)) {
-      out[entry.key] = report;
-    }
-  }
-  print("loaded ${out.length} reports");
-  return out;
-}
-
-/// Choose the report to display on the left side for comparison.
-/// Returns null if no comparable report is found.
-String chooseBaseline(pb.Env env, Map<String, pb.Report> reports) {
-  for (var name in reports.keys) {
-    var candidate = reports[name];
-    if (candidate.env.platform == env.platform) {
-      return name;
-    }
-  }
-  return null;
-}
-
-/// Returns true if the baseline report used the same benchmarks.
-bool isCompatibleBaseline(pb.Suite suite, pb.Report report) {
-  for (int i = 0; i < suite.requests.length; i++) {
-    if (i >= report.responses.length) {
-      return true; // additional benchmarks ok
-    }
-    var request = suite.requests[i];
-    var response = report.responses[i];
-    if (request != response.request) return false;
-  }
-  return true;
-}
-
-Future<String> _loadDataFile(String name,
-    {bool optional = false, String advice}) async {
-  try {
-    return await HttpRequest.getString("/data/$name");
-  } catch (e) {
-    if (optional) return null;
-    String error = "File is missing in benchmark/data: $name";
-    if (advice != null) {
-      error += ". $advice";
-    }
-    throw error;
-  }
-}
diff --git a/benchmark/lib/dashboard_model.dart b/benchmark/lib/dashboard_model.dart
deleted file mode 100644
index 289379f..0000000
--- a/benchmark/lib/dashboard_model.dart
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.dashboard_model;
-
-import 'generated/benchmark.pb.dart' as pb;
-
-import 'benchmark.dart' show Benchmark;
-import 'benchmarks/index.dart' show createBenchmark;
-
-/// Contains the viewable state of the dashboard. (Immutable.)
-class DashboardModel {
-  final Map<String, pb.Report> savedReports;
-  final Table table;
-  final pb.Report latest;
-
-  DashboardModel(this.savedReports, this.table, this.latest);
-
-  DashboardModel withBaseline(String name) {
-    var nextTable = table.withBaseline(name, savedReports[name]);
-    return new DashboardModel(savedReports, nextTable, latest);
-  }
-
-  DashboardModel withReport(pb.Report right) =>
-      new DashboardModel(savedReports, table, right);
-
-  DashboardModel withTable(Table table) =>
-      new DashboardModel(savedReports, table, latest);
-
-  /// Returns true if the Run button should be enabled.
-  bool get canRun => !latest.hasStatus() || latest.status != pb.Status.RUNNING;
-}
-
-/// The parts of the benchmark results table that don't change often.
-class Table {
-  final pb.Suite suite;
-  final String baseline;
-  final pb.Report report;
-  final Set<pb.Request> selections;
-  final rows = <Row>[];
-
-  factory Table(pb.Suite suite) => new Table._raw(
-      suite, null, null, new Set<pb.Request>.from(suite.requests));
-
-  Table._raw(this.suite, this.baseline, this.report, this.selections) {
-    Iterator it = report == null ? [].iterator : report.responses.iterator;
-    for (var r in suite.requests) {
-      var b = createBenchmark(r);
-      pb.Sample baseline;
-      if (it.moveNext()) {
-        b.checkRequest(it.current.request);
-        baseline = b.medianSample(it.current);
-      }
-      rows.add(new Row(r, b, baseline, selected: this.selections.contains(r)));
-    }
-  }
-
-  Table withBaseline(String baseline, pb.Report report) =>
-      new Table._raw(suite, baseline, report, selections);
-
-  Table withAllSelected() {
-    return new Table._raw(
-        suite, baseline, report, new Set<pb.Request>.from(suite.requests));
-  }
-
-  Table withNoneSelected() {
-    return new Table._raw(suite, baseline, report, new Set<pb.Request>());
-  }
-
-  Table withSelection(pb.Request request, bool selected) {
-    var s = new Set<pb.Request>.from(selections);
-    if (selected) {
-      s.add(request);
-    } else {
-      s.remove(request);
-    }
-    return new Table._raw(suite, baseline, report, s);
-  }
-}
-
-/// The parts of a row in the benchmark results table that don't change often.
-class Row {
-  final pb.Request request;
-  final Benchmark benchmark;
-  final pb.Sample baseline;
-  final bool selected;
-  Row(this.request, this.benchmark, this.baseline, {this.selected = true});
-
-  /// Returns the response that should be displayed in this row.
-  pb.Response findResponse(pb.Report r) {
-    for (var candidate in r.responses) {
-      if (candidate.request == request) return candidate;
-    }
-    return null;
-  }
-}
-
-// Indicates that the given item was added or removed from a selection.
-class SelectEvent<T> {
-  final bool selected;
-  final T item;
-  SelectEvent(this.selected, [this.item]);
-  toString() => "SelectEvent($selected, $item)";
-}
diff --git a/benchmark/lib/dashboard_view.dart b/benchmark/lib/dashboard_view.dart
deleted file mode 100644
index 9b56e64..0000000
--- a/benchmark/lib/dashboard_view.dart
+++ /dev/null
@@ -1,344 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.html_view;
-
-import 'dart:async' show Stream, StreamController, EventSink;
-import 'dart:html';
-
-import 'generated/benchmark.pb.dart' as pb;
-import 'dashboard_model.dart';
-import 'report.dart' show encodeReport;
-
-/// A dashboard allowing the user to run a benchmark suite and compare the
-/// results to any saved report.
-class DashboardView {
-  static const noBaseline = "<none>";
-
-  static final _template = new DivElement()
-    ..innerHtml = '''
-<div>
-  <button class="dv-run"></button>
-  <button class="dv-select-all"></button>
-  <button class="dv-select-none"></button>
-  <span class="dv-status"></span>
-</div>
-<pre class="dv-env"></pre>
-Choose baseline: <select class="dv-menu"></select>
-<table class="dv-table">
-<tr>
-  <th></th>
-  <th>Benchmark</th>
-  <th colspan=5>Samples</th>
-</tr>
-<tr>
-  <th colspan=2></th>
-  <th>Baseline</th>
-  <th>Median</th>
-  <th>Max</th>
-  <th>Count</th>
-  <th>Units</th>
-<tr>
-</table>
-<div class="dv-json"></div>
-''';
-
-  final DivElement elt;
-
-  final _Button _runButton;
-  final _Button _selectAllButton;
-  final _Button _selectNoneButton;
-  final _Label _status;
-  final PreElement _envElt;
-  final _Menu _menu;
-  final TableElement _responseTable;
-  final _JsonView _jsonView;
-
-  String _renderedPlatform;
-  final rowViews = <_ResponseView>[];
-
-  final _selectionChanges =
-      new StreamController<SelectEvent<pb.Request>>.broadcast();
-
-  DashboardView._raw(
-      this.elt,
-      this._runButton,
-      this._selectAllButton,
-      this._selectNoneButton,
-      this._status,
-      this._envElt,
-      this._menu,
-      this._responseTable,
-      this._jsonView);
-
-  factory DashboardView() {
-    Element elt = _template.clone(true);
-    find(String q) => elt.querySelector(q);
-    _Button button(q) => new _Button(find(q));
-    label(q) => new _Label(find(q));
-    menu(q) => new _Menu(find(q));
-    json(q) => new _JsonView(find(q));
-    return new DashboardView._raw(
-        elt,
-        button('.dv-run')
-          ..elt.style.color = "#FFFFFF"
-          ..elt.style.backgroundColor = "rgb(209, 72, 64)",
-        button('.dv-select-all'),
-        button('.dv-select-none'),
-        label('.dv-status'),
-        find('.dv-env'),
-        menu('.dv-menu'),
-        find('.dv-table'),
-        json('.dv-json'));
-  }
-
-  Stream get onRunButtonClick => _runButton.onClick;
-  Stream get onSelectAllClick => _selectAllButton.onClick;
-  Stream get onSelectNoneClick => _selectNoneButton.onClick;
-  Stream<String> get onMenuChange =>
-      _menu.onChange.map((item) => item == noBaseline ? null : item);
-  Stream<SelectEvent<pb.Request>> get onSelectionChange =>
-      _selectionChanges.stream;
-
-  void render(DashboardModel model) {
-    _runButton.render("Run", model.canRun);
-    _selectAllButton.render("Select All", true);
-    _selectNoneButton.render("Select None", true);
-    if (!model.latest.hasStatus() || model.latest.status == pb.Status.DONE) {
-      _status.render("");
-    } else {
-      _status.render(model.latest.status.name);
-    }
-
-    _renderEnv(model.latest);
-
-    var items = [noBaseline]..addAll(model.savedReports.keys);
-    var selected = model.table.baseline;
-    if (selected == null) selected = noBaseline;
-    _menu.render(items, model.table.baseline);
-
-    _renderResponses(model.table, model.latest);
-    _jsonView.render(model.latest);
-  }
-
-  void _renderEnv(pb.Report r) {
-    String newPlatform = r.env.platform.toString();
-    if (newPlatform == _renderedPlatform) return;
-    _envElt.text = newPlatform;
-    _renderedPlatform = newPlatform;
-  }
-
-  /// Renders a table with one row for each benchmark.
-  void _renderResponses(Table table, pb.Report r) {
-    var rowIt = table.rows.iterator;
-
-    // Update existing rows (we assume the table never shrinks)
-    for (var view in rowViews) {
-      var hasNext = rowIt.moveNext();
-      assert(hasNext);
-      view.render(rowIt.current, r, _selectionChanges);
-    }
-
-    // Add any new rows
-    while (rowIt.moveNext()) {
-      var row = new _ResponseView()
-        ..render(rowIt.current, r, _selectionChanges);
-      _responseTable.append(row.elt);
-      rowViews.add(row);
-    }
-  }
-}
-
-/// A single row in the benchmark table.
-///
-/// Displays how many samples were collected and the median and max samples.
-/// Also displays a baseline sample for comparison.
-class _ResponseView {
-  final elt = new TableRowElement();
-  final _selected = new _Checkbox<pb.Request>();
-  final _summary = new _Label(new TableCellElement());
-  final _baseline = new _SampleView();
-  final _median = new _SampleView();
-  final _max = new _SampleView();
-  final _count = new _Label(new TableCellElement()..style.textAlign = "right");
-  final _units = new _Label(new TableCellElement());
-
-  _ResponseView() {
-    elt.children.addAll([
-      _selected.elt,
-      _summary.elt,
-      _baseline.elt,
-      _median.elt,
-      _max.elt,
-      _count.elt,
-      _units.elt
-    ]);
-  }
-
-  void render(
-      Row row, pb.Report r, EventSink<SelectEvent<pb.Request>> rowSelected) {
-    var b = row.benchmark;
-    var response = row.findResponse(r);
-    _selected.render(row.selected, item: row.request, sink: rowSelected);
-    _summary.render(b.summary);
-    _baseline.render(b.measureSample(row.baseline));
-    _median.render(b.measureSample(b.medianSample(response)));
-    _max.render(b.measureSample(b.maxSample(response)));
-    _count.render(response == null ? "0" : "${response.samples.length}");
-    _units.render(row.benchmark.measureSampleUnits);
-  }
-}
-
-/// A table cell holding the measurement for one sample.
-class _SampleView {
-  final elt = new TableCellElement()..style.textAlign = "right";
-  double _rendered;
-
-  void render(double value) {
-    if (_rendered == value) return;
-    elt.text = _render(value);
-    _rendered = value;
-  }
-
-  static String _render(double value) {
-    if (value == 0.0) return "*";
-    return value.toStringAsFixed(0);
-  }
-}
-
-/// Renders the benchmark report as JSON so it can be copied to a file.
-class _JsonView {
-  final DivElement elt;
-  String _rendered;
-  _JsonView(this.elt);
-
-  void render(pb.Report r) {
-    // Don't show JSON while benchmarks are in progress.
-    String json = "";
-    if (r.status == pb.Status.DONE) {
-      json = encodeReport(r);
-    }
-
-    if (json == _rendered) return;
-
-    elt.children.clear();
-    if (json == "") return;
-    elt.children.addAll([
-      new HeadingElement.h2()..text = "Report data as JSON:",
-      new PreElement()..text = json
-    ]);
-    _rendered = json;
-  }
-}
-
-/// A menu of selectable text items.
-class _Menu {
-  final SelectElement elt;
-  final _changes = new StreamController<String>.broadcast();
-  final _options = new List<_MenuOption>();
-
-  _Menu(this.elt) {
-    elt.onChange.listen((e) => _changes.add(elt.value));
-  }
-
-  Stream<String> get onChange => _changes.stream;
-
-  void render(List<String> items, String selected) {
-    var it = items.iterator;
-
-    // Update existing items
-    for (var opt in _options) {
-      var hasNext = it.moveNext();
-      assert(hasNext); // assume menu never shrinks
-      opt.render(it.current, it.current == selected);
-    }
-
-    // Add any new items
-    while (it.moveNext()) {
-      var opt = new _MenuOption();
-      opt.render(it.current, it.current == selected);
-      elt.append(opt.elt);
-      _options.add(opt);
-    }
-  }
-}
-
-class _MenuOption {
-  final elt = new OptionElement();
-  String _renderedItem;
-  bool _renderedSelected;
-
-  void render(String item, selected) {
-    if (_renderedItem != item) {
-      elt.text = item;
-      elt.value = item;
-      _renderedItem = item;
-    }
-    if (_renderedSelected != selected) {
-      elt.selected = selected;
-      _renderedSelected = selected;
-    }
-  }
-}
-
-class _Label {
-  final HtmlElement elt;
-  String _rendered;
-  _Label(this.elt);
-
-  void render(String text) {
-    if (_rendered == text) return;
-    elt.text = text;
-    _rendered = text;
-  }
-}
-
-class _Button {
-  final ButtonElement elt;
-  final _clicks = new StreamController.broadcast();
-  String _renderedLabel;
-  bool _renderedEnabled;
-
-  _Button(this.elt) {
-    elt.onClick.listen((e) => _clicks.add(true));
-  }
-
-  Stream get onClick => _clicks.stream;
-
-  void render(String label, bool enabled) {
-    if (label != _renderedLabel) {
-      elt.text = label;
-      _renderedLabel = label;
-    }
-    if (_renderedEnabled != enabled) {
-      elt.disabled = !enabled;
-      _renderedEnabled = enabled;
-    }
-  }
-}
-
-class _Checkbox<T> {
-  final elt = new CheckboxInputElement();
-
-  bool _renderedChecked;
-  EventSink<SelectEvent<T>> _sink;
-  T _item;
-
-  _Checkbox() {
-    elt.onChange.listen((e) {
-      if (_sink != null) {
-        _sink.add(new SelectEvent<T>(elt.checked, _item));
-      }
-    });
-  }
-
-  void render(bool checked, {EventSink<SelectEvent<T>> sink, T item}) {
-    if (_renderedChecked != checked) {
-      elt.checked = checked;
-      _renderedChecked = checked;
-    }
-    _item = item;
-    _sink = sink;
-  }
-}
diff --git a/benchmark/lib/report.dart b/benchmark/lib/report.dart
deleted file mode 100644
index bd6ecf2..0000000
--- a/benchmark/lib/report.dart
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.report;
-
-import 'dart:convert' show jsonEncode;
-
-import 'package:yaml/yaml.dart';
-
-import 'generated/benchmark.pb.dart' as pb;
-
-pb.Response findUpdatedResponse(pb.Report beforeRep, pb.Report afterRep) {
-  if (beforeRep == null) return afterRep.responses[0];
-  assert(afterRep != null);
-  assert(beforeRep.responses.length == afterRep.responses.length);
-  for (var i = 0; i < afterRep.responses.length; i++) {
-    var before = beforeRep.responses[i];
-    var after = afterRep.responses[i];
-    assert(before.request.id == after.request.id);
-    assert(before.request.params == after.request.params);
-    if (before.samples.length != after.samples.length) {
-      return after;
-    }
-  }
-  return null; // not found
-}
-
-/// Returns a partially filled in pb.Platform.
-///
-/// It only includes the values we can determine without dart:html or dart:io.
-pb.Platform createPlatform() {
-  return new pb.Platform()
-    ..dartVM = _isDartVM
-    ..checkedMode = _implicitChecksEnabled;
-}
-
-get _isDartVM => !identical(1, 1.0);
-
-/// Returns `false` if running via dart2js and `--omit-implicit-checks` is set
-final bool _implicitChecksEnabled = () {
-  // ignore: unused_local_variable
-  bool x = true;
-  try {
-    // Trigger an exception if we're in checked mode.
-    x = "" as dynamic;
-    return false;
-  } catch (e) {
-    return true;
-  }
-}();
-
-/// Given the contents of the pubspec.yaml and pubspec.lock files,
-/// create a pb.Packages object.
-pb.Packages createPackages(String pubspecYaml, String pubspecLock) {
-  var out = new pb.Packages();
-
-  for (var line in pubspecYaml.split("\n")) {
-    line = line.trim();
-    if (line.startsWith("version:")) {
-      out.version = line.substring("version:".length).trim();
-    }
-  }
-
-  out.packages.addAll(_parseLockFile(pubspecLock));
-
-  return out;
-}
-
-/// Quick and dirty lock file parser.
-/// - ignores indentation
-/// - assumes one top-level key "packages:"
-/// - assumes all other lines without a value except 'description'
-///   start a new package
-/// - only allows known keys within a package
-Iterable<pb.PackageVersion> _parseLockFile(String contents) sync* {
-  var yaml = loadYaml(contents) as YamlMap;
-  var packages = yaml['packages'] as YamlMap;
-
-  for (var entry in packages.entries) {
-    var map = entry.value as YamlMap;
-    var pkgVersion = new pb.PackageVersion()
-      ..name = entry.key as String
-      ..source = map['source']
-      ..version = map['version'];
-
-    var path = (map['description'] as YamlMap)['path'];
-    if (path != null) {
-      pkgVersion.path = path;
-    }
-    yield pkgVersion;
-  }
-}
-
-/// Encodes a report as nicely-formatted JSON.
-String encodeReport(pb.Report report) {
-  var json = report.writeToJsonMap();
-  var out = new StringBuffer();
-  _stringifyMap(out, json, "");
-  out.writeln();
-  return out.toString();
-}
-
-String _stringifyMap(StringBuffer out, Map json, String indent) {
-  var childIndent = indent + "  ";
-  out.writeln("{");
-  var first = true;
-  for (var key in json.keys) {
-    if (!first) out.writeln(",");
-    first = false;
-
-    var value = json[key];
-    out.write(childIndent);
-    out.write(jsonEncode(key));
-    out.write(": ");
-
-    if (value is List) {
-      _stringifyList(out, value, childIndent);
-    } else if (value is Map && indent.length < 4) {
-      _stringifyMap(out, value, childIndent);
-    } else {
-      out.write(jsonEncode(value));
-    }
-  }
-  out.write("\n$indent}");
-  return out.toString();
-}
-
-void _stringifyList(StringBuffer out, List json, String indent) {
-  var childIndent = indent + "  ";
-  out.write("[\n");
-  bool first = true;
-  for (var item in json) {
-    if (!first) out.write(",\n");
-    first = false;
-    out.write(childIndent);
-    out.write(jsonEncode(item));
-  }
-  out.write("\n$indent]");
-}
diff --git a/benchmark/lib/suite.dart b/benchmark/lib/suite.dart
deleted file mode 100644
index 76a80fb..0000000
--- a/benchmark/lib/suite.dart
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.suite;
-
-import 'benchmark.dart';
-import 'benchmarks/index.dart' show createBenchmark;
-import 'generated/benchmark.pb.dart' as pb;
-
-/// Runs a benchmark suite, returning progress until done.
-///
-/// [samplesPerBatch] is the number of times a benchmark will be run
-/// before going on to the next one. They will be executed round-robin
-/// until they're all done.
-/// [profiler] if supplied, each request will be profiled once.
-Iterable<pb.Report> runSuite(List<pb.Request> requests,
-    {samplesPerBatch = 1, Profiler profiler}) sync* {
-  // Create a blank report with one response per request.
-  var report = new pb.Report()..status = pb.Status.RUNNING;
-  for (var request in requests) {
-    var r = new pb.Response()..request = request;
-    report.responses.add(r);
-  }
-
-  // Set up progress reports.
-  int sampleCount = 0;
-  int totalSamples = 0;
-  for (var request in requests) {
-    totalSamples += request.samples;
-  }
-  pb.Report progress() {
-    report.message = "Running ($sampleCount/$totalSamples)";
-    return report.clone();
-  }
-
-  // Send first progress message before starting.
-  yield progress();
-
-  var benchmarks = <Benchmark>[];
-  for (var r in report.responses) {
-    benchmarks.add(createBenchmark(r.request));
-  }
-
-  // Collect the requested number of samples.
-  while (sampleCount < totalSamples) {
-    for (var i = 0; i < benchmarks.length; i++) {
-      var b = benchmarks[i];
-      var r = report.responses[i];
-      int batchSize = r.request.samples - r.samples.length;
-      if (batchSize == 0) continue;
-      if (batchSize > samplesPerBatch) batchSize = samplesPerBatch;
-      var p = r.samples.isEmpty ? profiler : null;
-      for (pb.Sample s in b.measure(r.request, batchSize, profiler: p)) {
-        r.samples.add(s);
-        sampleCount++;
-        yield progress();
-      }
-    }
-  }
-
-  // Send final report.
-  report.status = pb.Status.DONE;
-  report.message = "Done";
-  yield report;
-}
diff --git a/benchmark/lib/suites/json.dart b/benchmark/lib/suites/json.dart
deleted file mode 100644
index 690855c..0000000
--- a/benchmark/lib/suites/json.dart
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.suite.json;
-
-import '../benchmarks/int32_json.dart';
-import '../benchmarks/repeated_int32_json.dart';
-import '../benchmarks/int64_json.dart';
-import '../benchmarks/repeated_int64_json.dart';
-import '../benchmarks/string_json.dart';
-import '../benchmarks/repeated_string_json.dart';
-import '../generated/benchmark.pb.dart' show Suite;
-
-final Suite jsonSuite = () {
-  var suite = new Suite();
-  suite.requests.addAll([
-    _int32(1, 100),
-    _int32(2, 100),
-    _int32(10, 100),
-    _int32(10, 200),
-    _repeatedInt32(1, 100),
-    _repeatedInt32(2, 100),
-    _repeatedInt32(10, 100),
-    _repeatedInt32(10, 200),
-    _int64(1, 100),
-    _int64(2, 100),
-    _int64(10, 100),
-    _int64(10, 200),
-    _repeatedInt64(1, 100),
-    _repeatedInt64(2, 100),
-    _repeatedInt64(10, 100),
-    _repeatedInt64(10, 200),
-    _string(1, 100, 10),
-    _string(2, 100, 10),
-    _string(10, 100, 10),
-    _string(10, 200, 10),
-    _string(10, 100, 100),
-    _repeatedString(1, 100, 10),
-    _repeatedString(2, 100, 10),
-    _repeatedString(10, 100, 10),
-    _repeatedString(10, 200, 10),
-    _repeatedString(10, 100, 100),
-  ]);
-
-  return suite;
-}();
-
-_int32(int width, int height) =>
-    new Int32Benchmark(width, height).makeRequest();
-
-_repeatedInt32(int width, int height) =>
-    new RepeatedInt32Benchmark(width, height).makeRequest();
-
-_int64(int width, int height) =>
-    new Int64Benchmark(width, height).makeRequest();
-
-_repeatedInt64(int width, int height) =>
-    new RepeatedInt64Benchmark(width, height).makeRequest();
-
-_string(int width, int height, int size) =>
-    new StringBenchmark(width, height, size).makeRequest();
-
-_repeatedString(int width, int height, int size) =>
-    new RepeatedStringBenchmark(width, height, size).makeRequest();
diff --git a/benchmark/lib/suites/props.dart b/benchmark/lib/suites/props.dart
deleted file mode 100644
index 54914bf..0000000
--- a/benchmark/lib/suites/props.dart
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.suite.json;
-
-import '../benchmarks/get_strings.dart';
-import '../benchmarks/set_strings.dart';
-import '../benchmarks/has_strings.dart';
-import '../generated/benchmark.pb.dart' show Suite;
-
-final Suite propsSuite = () {
-  var suite = new Suite();
-  suite.requests.addAll([
-    _getStrings(10, null),
-    _getStrings(10, "x"),
-    _setStrings(10, null),
-    _setStrings(10, "x"),
-    _hasStrings(10, null),
-    _hasStrings(10, "x"),
-  ]);
-
-  return suite;
-}();
-
-_getStrings(int height, String fill) =>
-    new GetStringsBenchmark(height, fill).makeRequest();
-_setStrings(int height, String fill) =>
-    new SetStringsBenchmark(height, fill).makeRequest();
-_hasStrings(int height, String fill) =>
-    new HasStringsBenchmark(height, fill).makeRequest();
diff --git a/benchmark/lib/vm.dart b/benchmark/lib/vm.dart
deleted file mode 100644
index 19c6e6c..0000000
--- a/benchmark/lib/vm.dart
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.benchmark.vm;
-
-import 'dart:async' show Future;
-import 'dart:io' show File, Directory, Link, Platform, stdout;
-
-import '../data/index.dart'
-    show latestVMReportName, pubspecYamlName, pubspecLockName, hostfileName;
-import 'benchmarks/index.dart' show createBenchmark;
-import 'generated/benchmark.pb.dart' as pb;
-import 'report.dart'
-    show createPlatform, createPackages, encodeReport, findUpdatedResponse;
-import 'suite.dart' show runSuite;
-
-/// Runs a benchmark suite.
-/// Writes a report to latest_vm.pb.json after every change,
-/// to make progress available to the browser.
-runSuiteInVM(pb.Suite suite) async {
-  var env = await _loadEnv();
-
-  pb.Report lastReport;
-  pb.Response lastUpdate;
-  for (var report in runSuite(suite.requests, samplesPerBatch: 10)) {
-    report.env = env;
-
-    // show progress
-    var update = findUpdatedResponse(lastReport, report);
-    if (update != null) {
-      var summary = _summarize(update);
-      if (lastUpdate == null || update.request != lastUpdate.request) {
-        stdout.write("\n$summary");
-      } else {
-        _overwrite(summary);
-      }
-    }
-
-    lastReport = report;
-    lastUpdate = update;
-  }
-
-  // save the report to a file
-  var outFile = "${dataDir.path}/$latestVMReportName";
-  var tmpFile = new File("$outFile.tmp");
-  await tmpFile.writeAsString(encodeReport(lastReport));
-  await tmpFile.rename(outFile);
-  print("\nWrote result to benchmark/data/${latestVMReportName}");
-}
-
-String _summarize(pb.Response r) {
-  assert(r != null);
-  var b = createBenchmark(r.request);
-  return b.summarizeResponse(r);
-}
-
-final _escapeChar = new String.fromCharCode(27);
-final _clearLine = "\r$_escapeChar[2K";
-
-/// Overwrite the last line printed to the terminal.
-void _overwrite(String line) {
-  stdout.write("$_clearLine$line");
-}
-
-Future<pb.Env> _loadEnv() async {
-  await _ensureDataDir();
-
-  var platform = createPlatform()
-    ..hostname = _hostname
-    ..osType = _osType
-    ..dartVersion = Platform.version;
-
-  var pubspec = await (new File(pubspecYaml.path).readAsString());
-  var lock = await (new File(pubspecLock.path).readAsString());
-
-  return new pb.Env()
-    ..script = _script
-    ..platform = platform
-    ..packages = createPackages(pubspec, lock);
-}
-
-/// Create files and symlinks in the data directory.
-///
-/// This is so they can be accessed in browser benchmarks.
-_ensureDataDir() async {
-  await hostnameFile.writeAsString(_hostname);
-
-  if (!await pubspecYaml.exists()) {
-    await pubspecYaml.create("${pubspecDir.path}/pubspec.yaml");
-  }
-
-  if (!await pubspecLock.exists()) {
-    await pubspecLock.create("${pubspecDir.path}/pubspec.lock");
-  }
-}
-
-String get _script {
-  // Only including the last part of the script name.
-  return Platform.script.pathSegments.last;
-}
-
-String get _hostname {
-  // Only including the first part of the hostname.
-  var h = Platform.localHostname;
-  int firstDot = h.indexOf(".");
-  if (firstDot == -1) return h;
-  return h.substring(0, firstDot);
-}
-
-pb.OSType get _osType {
-  if (Platform.isLinux) return pb.OSType.LINUX;
-  if (Platform.isMacOS) return pb.OSType.MAC;
-  if (Platform.isWindows) return pb.OSType.WINDOWS;
-  if (Platform.isAndroid) return pb.OSType.ANDROID;
-
-  // What is this?
-  throw "unknown OS type";
-}
-
-final File hostnameFile = new File("${dataDir.path}/$hostfileName");
-final Link pubspecYaml = new Link("${dataDir.path}/$pubspecYamlName");
-final Link pubspecLock = new Link("${dataDir.path}/$pubspecLockName");
-
-final Directory dataDir = () {
-  var d = new Directory("${pubspecDir.path}/benchmark/data");
-  if (!d.existsSync()) {
-    throw "data dir doesn't exist at ${d.path}";
-  }
-  return d;
-}();
-
-/// Returns the drectory containing the pubspec.yaml file.
-final Directory pubspecDir = () {
-  for (var d = Directory.current; d.parent != d; d = d.parent) {
-    if (new File("${d.path}/pubspec.yaml").existsSync()) {
-      return d;
-    }
-  }
-  throw "can't find pubspec.yaml above ${Directory.current}";
-}();
diff --git a/benchmark/props.html b/benchmark/props.html
deleted file mode 100644
index 82020e4..0000000
--- a/benchmark/props.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-<head>
-    <title>Property Benchmark</title>
-</head>
-
-<body>
-<div id="dashboard">
-Loading...
-</div>
-
-<script defer src="props_browser.dart.js"></script>
-</body>
-</html>
diff --git a/benchmark/props_browser.dart b/benchmark/props_browser.dart
deleted file mode 100644
index 556e779..0000000
--- a/benchmark/props_browser.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:html" show querySelector;
-
-import 'lib/suites/props.dart' show propsSuite;
-import 'lib/dashboard.dart' show showDashboard;
-
-main() => showDashboard(propsSuite, querySelector("#dashboard"));
diff --git a/benchmark/props_vm.dart b/benchmark/props_vm.dart
deleted file mode 100644
index 7011cbd..0000000
--- a/benchmark/props_vm.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'lib/suites/props.dart' show propsSuite;
-import 'lib/vm.dart' show runSuiteInVM;
-
-main() => runSuiteInVM(propsSuite);
diff --git a/benchmark/protos/benchmark.proto b/benchmark/protos/benchmark.proto
deleted file mode 100644
index 9118f79..0000000
--- a/benchmark/protos/benchmark.proto
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package benchmark;
-
-// A Suite requests that some benchmarks should be run.
-message Suite {
-  repeated Request requests = 1;
-}
-
-// A Request asks for samples for one benchmark.
-message Request {
-  // The id of the benchmark to run.
-  optional BenchmarkID id = 1;
-
-  // The parameters to pass to the benchmark.
-  optional Params params = 2;
-
-  // The number of samples to collect.
-  optional int32 samples = 3;
-
-  // The duration of each sample in milliseconds.
-  optional int32 duration = 4;
-}
-
-enum BenchmarkID {
-  READ_INT32_FIELDS_JSON = 1;
-  READ_INT32_REPEATED_JSON = 2;
-  READ_INT64_FIELDS_JSON = 3;
-  READ_INT64_REPEATED_JSON = 4;
-  READ_STRING_FIELDS_JSON = 5;
-  READ_STRING_REPEATED_JSON = 6;
-
-  GET_STRINGS = 20;
-  SET_STRINGS = 21;
-  HAS_STRINGS = 22;
-}
-
-// Parameters to a particular benchmark.
-// (See the class for the ones it actually uses.)
-message Params {
-  // The number of (leaf) messages to use.
-  optional int32 message_count = 1;
-
-  // The number of int32 fields to set in each leaf.
-  optional int32 int32_field_count = 2;
-
-  // For repeated int32 fields, the number of values each should have.
-  optional int32 int32_repeat_count = 3;
-
-  // The number of int64 fields to set in each leaf.
-  optional int32 int64_field_count = 4;
-
-  // For repeated int64 fields, the number of values each should have.
-  optional int32 int64_repeat_count = 5;
-
-  // The number of string fields to set in each leaf.
-  optional int32 string_field_count = 6;
-
-  // For repeated string fields, the number of values each should have.
-  optional int32 string_repeat_count = 7;
-
-  // The size of the strings used in the benchmark.
-  optional int32 string_size = 8;
-
-  // An initial string value for filling the grid.
-  optional string string_value = 9;
-}
-
-// A Report records what is happening while a suite is being run.
-message Report {
-  // status code.
-  optional Status status = 1;
-  // Top-level summary of what is happening.
-  // (May provide an error if there are no responses).
-  optional string message = 2;
-  // Describes the experimental setup.
-  optional Env env = 3;
-  // The result of each request.
-  repeated Response responses = 4;
-}
-
-enum Status {
-  RUNNING = 1;
-  DONE = 2;
-  FAILED = 3;
-}
-
-// An Env describes the environment in which the benchmark ran.
-message Env {
-  // The script that was run, relative to "benchmarks" directory (VM only).
-  optional string script = 1;
-
-  // The path to the HTML page. (Browser tests only.)
-  optional string page = 2;
-
-  // The platform the benchmark was run on.
-  optional Platform platform = 10;
-  // The Dart package versions being exercised.
-  optional Packages packages = 11;
-}
-
-// A Platform describes the hardware, OS, and perhaps browser.
-message Platform {
-
-  // values we can get from dart:io Platform
-  optional string hostname = 1;
-  optional OSType os_type = 2;
-  optional string dart_version = 3;
-
-  // values we can get from dart:html Navigator
-  optional string user_agent = 10;
-
-  // values we can get on any platform
-  optional bool checked_mode = 20;
-  optional bool dart_VM = 21;
-}
-
-enum OSType {
-  LINUX = 1;
-  MAC = 2;
-  WINDOWS = 3;
-  ANDROID = 4;
-}
-
-// Packages contains the Dart packages used.
-message Packages {
-  // The dart-protoc-plugin version (from pubspec.yaml)
-  optional string version = 1;
-
-  // Package versions from pubspec.lock
-  repeated PackageVersion packages = 2;
-}
-
-// One entry in pubspec.lock, describing a Dart package.
-message PackageVersion {
-  optional string name = 1;
-  optional string source = 2;
-  optional string version = 3;
-  optional string path = 4; // if set, this is a path dependency
-}
-
-// The result of running one Request.
-message Response {
-  optional Request request = 1;
-  repeated Sample samples = 2;
-}
-
-// The output of running the benchmark in a loop.
-message Sample {
-
-  // The wall-clock duration of the entire loop in microseconds.
-  optional int32 duration = 1;
-  // The number of times the loop iterated.
-  optional int32 loop_count = 2;
-  // Various other counters.
-  optional Counts counts = 3;
-}
-
-// Various counts measured for one sample in a benchmark run.
-message Counts {
-  // The number of times an int32 was read during one sample.
-  optional int32 int32Reads = 1;
-
-  // The number of times an int64 was read during one sample.
-  optional int32 int64Reads = 2;
-
-  // The number of strings read during a sample.
-  optional int32 stringReads = 4;
-
-  // The number of strings written during a sample.
-  optional int32 stringWrites = 5;
-}
diff --git a/benchmark/protos/int32grid.proto b/benchmark/protos/int32grid.proto
deleted file mode 100644
index 2b4d300..0000000
--- a/benchmark/protos/int32grid.proto
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package int32_grid;
-
-// A grid of variable-length rows,
-// to test repeated fields.
-message Grid {
-  repeated Line lines = 1;
-}
-
-message Line {
-  repeated int32 cells = 1;
-}
-
-// A grid where each line contains 10 fields,
-// to test non-repeated fields.
-message Grid10 {
-  repeated Line10 lines = 1;
-}
-
-message Line10 {
-  optional int32 cell1 = 1;
-  optional int32 cell2 = 2;
-  optional int32 cell3 = 3;
-  optional int32 cell4 = 4;
-  optional int32 cell5 = 5;
-  optional int32 cell6 = 6;
-  optional int32 cell7 = 7;
-  optional int32 cell8 = 8;
-  optional int32 cell9 = 9;
-  optional int32 cell10 = 10;
-}
diff --git a/benchmark/protos/int64grid.proto b/benchmark/protos/int64grid.proto
deleted file mode 100644
index 6c594ae..0000000
--- a/benchmark/protos/int64grid.proto
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package int64_grid;
-
-// A grid of variable-length rows,
-// to test repeated fields.
-message Grid {
-  repeated Line lines = 1;
-}
-
-message Line {
-  repeated int64 cells = 1;
-}
-
-// A grid where each line contains 10 fields,
-// to test non-repeated fields.
-message Grid10 {
-  repeated Line10 lines = 1;
-}
-
-message Line10 {
-  optional int64 cell1 = 1;
-  optional int64 cell2 = 2;
-  optional int64 cell3 = 3;
-  optional int64 cell4 = 4;
-  optional int64 cell5 = 5;
-  optional int64 cell6 = 6;
-  optional int64 cell7 = 7;
-  optional int64 cell8 = 8;
-  optional int64 cell9 = 9;
-  optional int64 cell10 = 10;
-}
diff --git a/benchmark/protos/string_grid.proto b/benchmark/protos/string_grid.proto
deleted file mode 100644
index ef361b6..0000000
--- a/benchmark/protos/string_grid.proto
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package string_grid;
-
-// A grid of variable-length rows,
-// to test repeated fields.
-message Grid {
-  repeated Line lines = 1;
-}
-
-message Line {
-  repeated string cells = 1;
-}
-
-// A grid where each line contains 10 fields,
-// to test non-repeated fields.
-message Grid10 {
-  repeated Line10 lines = 1;
-}
-
-message Line10 {
-  optional string cell1 = 1;
-  optional string cell2 = 2;
-  optional string cell3 = 3;
-  optional string cell4 = 4;
-  optional string cell5 = 5;
-  optional string cell6 = 6;
-  optional string cell7 = 7;
-  optional string cell8 = 8;
-  optional string cell9 = 9;
-  optional string cell10 = 10;
-}
diff --git a/benchmark/readjson.html b/benchmark/readjson.html
deleted file mode 100644
index 67a9b16..0000000
--- a/benchmark/readjson.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-<head>
-    <title>JSON Benchmark</title>
-</head>
-
-<body>
-<div id="dashboard">
-Loading...
-</div>
-
-<script defer src="readjson_browser.dart.js"></script>
-</body>
-</html>
diff --git a/benchmark/readjson_browser.dart b/benchmark/readjson_browser.dart
deleted file mode 100644
index 04e244b..0000000
--- a/benchmark/readjson_browser.dart
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "dart:html" show querySelector;
-
-import 'lib/suites/json.dart' show jsonSuite;
-import 'lib/dashboard.dart' show showDashboard;
-
-main() => showDashboard(jsonSuite, querySelector("#dashboard"));
diff --git a/benchmark/readjson_vm.dart b/benchmark/readjson_vm.dart
deleted file mode 100644
index 3167289..0000000
--- a/benchmark/readjson_vm.dart
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'lib/suites/json.dart' show jsonSuite;
-import 'lib/vm.dart' show runSuiteInVM;
-
-main() => runSuiteInVM(jsonSuite);
diff --git a/bin/protoc-gen-dart b/bin/protoc-gen-dart
deleted file mode 100755
index b1f8169..0000000
--- a/bin/protoc-gen-dart
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-BINDIR=$(dirname "$0")
-dart "$BINDIR/protoc_plugin.dart" -c "$@"
diff --git a/bin/protoc_plugin.dart b/bin/protoc_plugin.dart
deleted file mode 100755
index 3e5990d..0000000
--- a/bin/protoc_plugin.dart
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-import 'package:protoc_plugin/protoc.dart';
-
-void main() {
-  new CodeGenerator(stdin, stdout).generate();
-}
diff --git a/bin/protoc_plugin_bazel.dart b/bin/protoc_plugin_bazel.dart
deleted file mode 100755
index 86d9987..0000000
--- a/bin/protoc_plugin_bazel.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-import 'package:protoc_plugin/bazel.dart';
-import 'package:protoc_plugin/protoc.dart';
-
-void main() {
-  var packages = <String, BazelPackage>{};
-  new CodeGenerator(stdin, stdout).generate(
-      optionParsers: {bazelOptionId: new BazelOptionParser(packages)},
-      config: new BazelOutputConfiguration(packages));
-}
diff --git a/build.yaml b/build.yaml
deleted file mode 100644
index 0221297..0000000
--- a/build.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-# Read about `build.yaml` at https://pub.dartlang.org/packages/build_config
-# Enables running benchmarks via browser: `pub run build_runner serve`
-targets:
-  $default:
-    builders:
-      build_web_compilers|entrypoint:
-        generate_for:
-        - benchmark/*_browser.dart
-        options:
-          dart2js_args:
-          - --minify
-          #- --trust-primitives
-          #- --omit-implicit-checks
-
-builders:
-  benchmarkBuilder:
-    import: "tool/builder.dart"
-    builder_factories: ["benchmarkBuilder"]
-    build_extensions: {"lib/$lib$": ["benchmark/data/data.json"]}
-    auto_apply: root_package
diff --git a/lib/base_type.dart b/lib/base_type.dart
deleted file mode 100644
index 028543c..0000000
--- a/lib/base_type.dart
+++ /dev/null
@@ -1,130 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-/// Represents the base type of a particular field in a proto definition.
-/// (Doesn't include List<> for repeated fields.)
-class BaseType {
-  final FieldDescriptorProto_Type descriptor;
-
-  /// The name of the Dart type when in the same package.
-  final String unprefixed;
-
-  /// The suffix of the constant for this type in PbFieldType.
-  /// (For example, 'B' for boolean or '3' for int32.)
-  final String typeConstantSuffix;
-
-  // Method name of the setter method for this type.
-  final String setter;
-
-  // The generator corresponding to this type.
-  // (Null for primitive types.)
-  final ProtobufContainer generator;
-
-  const BaseType._raw(this.descriptor, this.typeConstantSuffix, this.unprefixed,
-      this.setter, this.generator);
-
-  bool get isGroup => descriptor == FieldDescriptorProto_Type.TYPE_GROUP;
-  bool get isMessage => descriptor == FieldDescriptorProto_Type.TYPE_MESSAGE;
-  bool get isEnum => descriptor == FieldDescriptorProto_Type.TYPE_ENUM;
-  bool get isString => descriptor == FieldDescriptorProto_Type.TYPE_STRING;
-  bool get isBytes => descriptor == FieldDescriptorProto_Type.TYPE_BYTES;
-  bool get isPackable => (generator == null && !isString && !isBytes) || isEnum;
-
-  /// The package where this type is declared.
-  /// (Always the empty string for primitive types.)
-  String get package => generator == null ? "" : generator.package;
-
-  /// The Dart expression to use for this type when in a different file.
-  String get prefixed => generator == null
-      ? unprefixed
-      : generator.fileImportPrefix + "." + unprefixed;
-
-  /// Returns the name to use in generated code for this Dart type.
-  ///
-  /// Doesn't include the List type for repeated fields.
-  /// [protoFileUri] represents the current proto file where we are generating
-  /// code. The Dart class might be imported from a different proto file.
-  String getDartType(FileGenerator fileGen) =>
-      (fileGen.protoFileUri == generator?.fileGen?.protoFileUri)
-          ? unprefixed
-          : prefixed;
-
-  String getRepeatedDartType(FileGenerator fileGen) =>
-      "List<${getDartType(fileGen)}>";
-
-  factory BaseType(FieldDescriptorProto field, GenerationContext ctx) {
-    String constSuffix;
-
-    switch (field.type) {
-      case FieldDescriptorProto_Type.TYPE_BOOL:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_BOOL, "B",
-            "bool", r"$_setBool", null);
-      case FieldDescriptorProto_Type.TYPE_FLOAT:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_FLOAT, "F",
-            "double", r"$_setFloat", null);
-      case FieldDescriptorProto_Type.TYPE_DOUBLE:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_DOUBLE, "D",
-            "double", r"$_setDouble", null);
-      case FieldDescriptorProto_Type.TYPE_INT32:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_INT32, "3",
-            "int", r"$_setSignedInt32", null);
-      case FieldDescriptorProto_Type.TYPE_UINT32:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_UINT32, "U3",
-            "int", r"$_setUnsignedInt32", null);
-      case FieldDescriptorProto_Type.TYPE_SINT32:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_SINT32, "S3",
-            "int", r"$_setSignedInt32", null);
-      case FieldDescriptorProto_Type.TYPE_FIXED32:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_FIXED32, "F3",
-            "int", r"$_setUnsignedInt32", null);
-      case FieldDescriptorProto_Type.TYPE_SFIXED32:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_SFIXED32,
-            "SF3", "int", r"$_setSignedInt32", null);
-      case FieldDescriptorProto_Type.TYPE_INT64:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_INT64, "6",
-            "Int64", r"$_setInt64", null);
-      case FieldDescriptorProto_Type.TYPE_UINT64:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_UINT64, "U6",
-            "Int64", r"$_setInt64", null);
-      case FieldDescriptorProto_Type.TYPE_SINT64:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_SINT64, "S6",
-            "Int64", r"$_setInt64", null);
-      case FieldDescriptorProto_Type.TYPE_FIXED64:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_FIXED64, "F6",
-            "Int64", r"$_setInt64", null);
-      case FieldDescriptorProto_Type.TYPE_SFIXED64:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_SFIXED64,
-            "SF6", "Int64", r"$_setInt64", null);
-      case FieldDescriptorProto_Type.TYPE_STRING:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_STRING, "S",
-            "String", r"$_setString", null);
-      case FieldDescriptorProto_Type.TYPE_BYTES:
-        return const BaseType._raw(FieldDescriptorProto_Type.TYPE_BYTES, "Y",
-            "List<int>", r"$_setBytes", null);
-
-      case FieldDescriptorProto_Type.TYPE_GROUP:
-        constSuffix = "G";
-        break;
-      case FieldDescriptorProto_Type.TYPE_MESSAGE:
-        constSuffix = "M";
-        break;
-      case FieldDescriptorProto_Type.TYPE_ENUM:
-        constSuffix = "E";
-        break;
-
-      default:
-        throw new ArgumentError("unimplemented type: ${field.type.name}");
-    }
-
-    ProtobufContainer generator = ctx.getFieldType(field.typeName);
-    if (generator == null) {
-      throw 'FAILURE: Unknown type reference ${field.typeName}';
-    }
-
-    return new BaseType._raw(
-        field.type, constSuffix, generator.classname, null, generator);
-  }
-}
diff --git a/lib/bazel.dart b/lib/bazel.dart
deleted file mode 100644
index f66cb65..0000000
--- a/lib/bazel.dart
+++ /dev/null
@@ -1,147 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-/// Bazel support for protoc_plugin.
-library protoc_bazel;
-
-import 'package:path/path.dart' as p;
-import 'protoc.dart' show SingleOptionParser, DefaultOutputConfiguration;
-
-/// Dart protoc plugin option for Bazel packages.
-///
-/// This option takes a semicolon-separated list of Bazel package metadata in
-/// `package_name|input_root|output_root` form. `input_root` designates the
-/// directory relative to which input protos are located -- typically the root
-/// of the Bazel package, where the `BUILD` file is located. `output_root`
-/// designates the directory relative to which generated `.pb.dart` outputs are
-/// emitted -- typically the package's `lib/` directory under the genfiles
-/// directory specified by `genfiles_dir` in the Bazel configuration. Generated
-/// outputs are emitted at the same path relative to `output_root` as the input
-/// proto is found relative to `input_root`.
-///
-/// For example, using `foo.bar|foo/bar|foo/bar/lib`:
-///   * `foo/bar/baz.proto` will generate `foo/bar/lib/baz.pb.dart`
-///   * `foo/bar/a/b/baz.proto` will generate `foo/bar/lib/a/b/baz.pb.dart`
-const bazelOptionId = 'BazelPackages';
-
-class BazelPackage {
-  final String name;
-  final String input_root;
-  final String output_root;
-
-  BazelPackage(this.name, String input_root, String output_root)
-      : input_root = p.normalize(input_root),
-        output_root = p.normalize(output_root);
-}
-
-/// Parser for the `BazelPackages` option.
-class BazelOptionParser implements SingleOptionParser {
-  /// Output map of package input_root to package.
-  final Map<String, BazelPackage> output;
-
-  BazelOptionParser(this.output);
-
-  @override
-  void parse(String name, String value, onError(String message)) {
-    if (value == null) {
-      onError('Invalid $bazelOptionId option. Expected a non-empty value.');
-      return;
-    }
-
-    for (var entry in value.split(';')) {
-      var fields = entry.split('|');
-      if (fields.length != 3) {
-        onError(
-            'ERROR: expected package_name|input_root|output_root. Got: $entry');
-        continue;
-      }
-      var pkg = new BazelPackage(fields[0], fields[1], fields[2]);
-      if (!output.containsKey(pkg.input_root)) {
-        output[pkg.input_root] = pkg;
-      } else {
-        var prev = output[pkg.input_root];
-        if (pkg.name != prev.name) {
-          onError('ERROR: multiple packages with input_root ${pkg.input_root}: '
-              '${prev.name} and ${pkg.name}');
-          continue;
-        }
-        if (pkg.output_root != prev.output_root) {
-          onError('ERROR: conflicting output_roots for package ${pkg.name}: '
-              '${prev.output_root} and ${pkg.output_root}');
-          continue;
-        }
-      }
-    }
-  }
-}
-
-/// A Dart `package:` URI with package name and path components.
-class _PackageUri {
-  final String packageName;
-  final String path;
-  Uri get uri => Uri.parse('package:$packageName/$path');
-
-  _PackageUri(this.packageName, this.path);
-}
-
-/// [OutputConfiguration] that uses Bazel layout information to resolve output
-/// locations and imports.
-class BazelOutputConfiguration extends DefaultOutputConfiguration {
-  final Map<String, BazelPackage> packages;
-
-  BazelOutputConfiguration(this.packages);
-
-  /// Search for the most specific Bazel package above [searchPath].
-  BazelPackage _findPackage(String searchPath) {
-    var index = searchPath.lastIndexOf('/');
-    while (index > 0) {
-      searchPath = searchPath.substring(0, index);
-      var pkg = packages[searchPath];
-      if (pkg != null) return pkg;
-      index = searchPath.lastIndexOf('/');
-    }
-    return null;
-  }
-
-  @override
-  Uri outputPathFor(Uri input, String extension) {
-    var pkg = _findPackage(input.path);
-    if (pkg == null) {
-      throw new ArgumentError('Unable to locate package for input $input.');
-    }
-
-    // Bazel package-relative paths.
-    var relativeInput = input.path.substring('${pkg.input_root}/'.length);
-    var base = p.withoutExtension(relativeInput);
-    var outputPath = p.join(pkg.output_root, "$base$extension");
-    return new Uri.file(outputPath);
-  }
-
-  @override
-  Uri resolveImport(Uri target, Uri source, String extension) {
-    var targetBase = p.withoutExtension(target.path);
-    var targetUri = _packageUriFor("$targetBase$extension");
-    var sourceUri = _packageUriFor(source.path);
-
-    if (targetUri == null && sourceUri != null) {
-      // We can't reach outside of the lib/ directory of a package without
-      // using a package: import. Using a relative import for [target] could
-      // break anyone who uses a package: import to load [source].
-      throw 'ERROR: cannot generate import for $target from $source.';
-    }
-
-    if (targetUri != null && sourceUri?.packageName != targetUri.packageName) {
-      return targetUri.uri;
-    }
-
-    return super.resolveImport(target, source, extension);
-  }
-
-  _PackageUri _packageUriFor(String target) {
-    var pkg = _findPackage(target);
-    if (pkg == null) return null;
-    var relPath = target.substring(pkg.input_root.length + 1);
-    return new _PackageUri(pkg.name, relPath);
-  }
-}
diff --git a/lib/client_generator.dart b/lib/client_generator.dart
deleted file mode 100644
index 309b121..0000000
--- a/lib/client_generator.dart
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-class ClientApiGenerator {
-  // The service that this Client API connects to.
-  final ServiceGenerator service;
-  final String className;
-  final Set<String> usedMethodNames = new Set<String>()
-    ..addAll(reservedMemberNames);
-
-  ClientApiGenerator(this.service, Set<String> usedNames)
-      : className = disambiguateName(
-            avoidInitialUnderscore(service._descriptor.name),
-            usedNames,
-            defaultSuffixes());
-
-  // Subclasses can override this.
-  String get _clientType => '$_protobufImportPrefix.RpcClient';
-
-  void generate(IndentingWriter out) {
-    out.addBlock('class ${className}Api {', '}', () {
-      out.println('$_clientType _client;');
-      out.println('${className}Api(this._client);');
-      out.println();
-
-      for (MethodDescriptorProto m in service._descriptor.method) {
-        generateMethod(out, m);
-      }
-    });
-    out.println();
-  }
-
-  // Subclasses can override this.
-  void generateMethod(IndentingWriter out, MethodDescriptorProto m) {
-    var methodName = disambiguateName(
-        avoidInitialUnderscore(service._methodName(m.name)),
-        usedMethodNames,
-        defaultSuffixes());
-    var inputType = service._getDartClassName(m.inputType);
-    var outputType = service._getDartClassName(m.outputType);
-    out.addBlock(
-        '\$async.Future<$outputType> $methodName('
-        '$_protobufImportPrefix.ClientContext ctx, $inputType request) {',
-        '}', () {
-      out.println('var emptyResponse = new $outputType();');
-      out.println('return _client.invoke<$outputType>(ctx, \'${className}\', '
-          '\'${m.name}\', request, emptyResponse);');
-    });
-  }
-}
diff --git a/lib/code_generator.dart b/lib/code_generator.dart
deleted file mode 100644
index d5080c9..0000000
--- a/lib/code_generator.dart
+++ /dev/null
@@ -1,101 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-abstract class ProtobufContainer {
-  // Internal map of proto file URIs to prefix aliases to resolve name conflicts
-  static final importPrefixes = <String, String>{};
-  static var idx = 0;
-
-  String get package;
-  String get classname;
-  String get fullName;
-
-  /// The fully qualified name with a leading '.'.
-  ///
-  /// This exists because names from protoc come like this.
-  String get dottedName => '.$fullName';
-
-  String get fileImportPrefix => _getFileImportPrefix();
-
-  String _getFileImportPrefix() {
-    String path = fileGen.protoFileUri.toString();
-    if (importPrefixes.containsKey(path)) {
-      return importPrefixes[path];
-    }
-    final alias = '\$$idx';
-    importPrefixes[path] = alias;
-    idx++;
-    return alias;
-  }
-
-  /// The generator of the .pb.dart file defining this entity.
-  ///
-  /// (Represents the .pb.dart file that we need to import in order to use it.)
-  FileGenerator get fileGen;
-}
-
-class CodeGenerator extends ProtobufContainer {
-  final Stream<List<int>> _streamIn;
-  final IOSink _streamOut;
-
-  CodeGenerator(this._streamIn, this._streamOut);
-
-  /// Runs the code generator. The optional [optionParsers] can be used to
-  /// change how command line options are parsed (see [parseGenerationOptions]
-  /// for details), and [outputConfiguration] can be used to override where
-  /// generated files are created and how imports between generated files are
-  /// constructed (see [OutputConfiguration] for details).
-  void generate(
-      {Map<String, SingleOptionParser> optionParsers,
-      OutputConfiguration config}) {
-    if (config == null) {
-      config = new DefaultOutputConfiguration();
-    }
-
-    var extensions = new ExtensionRegistry();
-    Dart_options.registerAllExtensions(extensions);
-
-    _streamIn
-        .fold(new BytesBuilder(),
-            (BytesBuilder builder, data) => builder..add(data))
-        .then((builder) => builder.takeBytes())
-        .then((List<int> bytes) {
-      var request = new CodeGeneratorRequest.fromBuffer(bytes, extensions);
-      var response = new CodeGeneratorResponse();
-
-      // Parse the options in the request. Return the errors is any.
-      var options = parseGenerationOptions(request, response, optionParsers);
-      if (options == null) {
-        _streamOut.add(response.writeToBuffer());
-        return;
-      }
-
-      // Create a syntax tree for each .proto file given to us.
-      // (We may import it even if we don't generate the .pb.dart file.)
-      List<FileGenerator> generators = <FileGenerator>[];
-      for (FileDescriptorProto file in request.protoFile) {
-        generators.add(new FileGenerator(file, options));
-      }
-
-      // Collect field types and importable files.
-      link(options, generators);
-
-      // Generate the .pb.dart file if requested.
-      for (var gen in generators) {
-        var name = gen.descriptor.name;
-        if (request.fileToGenerate.contains(name)) {
-          response.file.addAll(gen.generateFiles(config));
-        }
-      }
-      _streamOut.add(response.writeToBuffer());
-    });
-  }
-
-  String get package => '';
-  String get classname => null;
-  String get fullName => '';
-  get fileGen => null;
-}
diff --git a/lib/const_generator.dart b/lib/const_generator.dart
deleted file mode 100644
index 62b831b..0000000
--- a/lib/const_generator.dart
+++ /dev/null
@@ -1,108 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.const_generator;
-
-import "indenting_writer.dart";
-
-/// Writes JSON data as a Dart constant expression.
-/// Accepts null, bool, num, String, and maps and lists.
-void writeJsonConst(IndentingWriter out, val) {
-  if (val is Map) {
-    if (val.values.any(_nonEmptyListOrMap)) {
-      out.addBlock(
-          "const {", "}", () => _writeMapItems(out, val, vertical: true),
-          endWithNewline: false);
-    } else {
-      out.print("const {");
-      _writeMapItems(out, val);
-      out.print("}");
-    }
-  } else if (val is List) {
-    if (val.any(_nonEmptyListOrMap)) {
-      out.addBlock(
-          "const [", "]", () => _writeListItems(out, val, vertical: true),
-          endWithNewline: false);
-    } else {
-      out.print("const [");
-      _writeListItems(out, val);
-      out.print("]");
-    }
-  } else if (val is String) {
-    _writeString(out, val);
-  } else if (val is num || val is bool) {
-    out.print(val.toString());
-  } else if (val == null) {
-    out.print("null");
-  } else {
-    throw "not JSON: $val";
-  }
-}
-
-bool _nonEmptyListOrMap(x) {
-  if (x is List && x.isNotEmpty) return true;
-  if (x is Map && x.isNotEmpty) return true;
-  return false;
-}
-
-void _writeString(IndentingWriter out, String val) {
-  if (_maybeWriteSingleLineString(out, val)) return;
-  // handle the general case
-  var quote = "'''";
-  out.addUnindentedBlock("r$quote", "$quote", () {
-    out.print(val.replaceAll(quote, '$quote "$quote" r$quote'));
-  }, endWithNewline: false);
-}
-
-bool _maybeWriteSingleLineString(IndentingWriter out, String val) {
-  if (val.contains("\n")) return false;
-  var prefix = '';
-  if (val.contains(r'$') || val.contains(r'\')) {
-    prefix = 'r';
-  }
-  if (!val.contains("'")) {
-    out.print("$prefix'$val'");
-    return true;
-  } else if (!val.contains('"')) {
-    out.print('$prefix"$val"');
-    return true;
-  } else if (!val.contains("'''")) {
-    out.print("$prefix'''$val'''");
-    return true;
-  } else if (!val.contains('"""')) {
-    out.print('$prefix"""$val"""');
-    return true;
-  } else {
-    return false;
-  }
-}
-
-void _writeListItems(IndentingWriter out, List val, {bool vertical = false}) {
-  bool first = true;
-  for (var item in val) {
-    if (!first && !vertical) {
-      out.print(", ");
-    }
-    writeJsonConst(out, item);
-    if (vertical) {
-      out.println(",");
-    }
-    first = false;
-  }
-}
-
-void _writeMapItems(IndentingWriter out, Map<dynamic, dynamic> val,
-    {bool vertical = false}) {
-  bool first = true;
-  for (var key in val.keys) {
-    if (!first && !vertical) out.print(", ");
-    _writeString(out, key);
-    out.print(": ");
-    writeJsonConst(out, val[key]);
-    if (vertical) {
-      out.println(",");
-    }
-    first = false;
-  }
-}
diff --git a/lib/enum_generator.dart b/lib/enum_generator.dart
deleted file mode 100644
index 2ff355c..0000000
--- a/lib/enum_generator.dart
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-class EnumAlias {
-  final EnumValueDescriptorProto value;
-  final EnumValueDescriptorProto canonicalValue;
-  EnumAlias(this.value, this.canonicalValue);
-}
-
-class EnumGenerator extends ProtobufContainer {
-  final ProtobufContainer _parent;
-  final String classname;
-  final String fullName;
-  final EnumDescriptorProto _descriptor;
-  final List<EnumValueDescriptorProto> _canonicalValues =
-      <EnumValueDescriptorProto>[];
-  final List<EnumAlias> _aliases = <EnumAlias>[];
-
-  /// Maps the name of an enum value to the Dart name we will use for it.
-  final Map<String, String> dartNames = <String, String>{};
-
-  EnumGenerator(EnumDescriptorProto descriptor, ProtobufContainer parent,
-      Set<String> usedClassNames)
-      : assert(parent != null),
-        _parent = parent,
-        classname = messageOrEnumClassName(descriptor.name, usedClassNames,
-            parent: parent?.classname ?? ''),
-        fullName = parent.fullName == ''
-            ? descriptor.name
-            : '${parent.fullName}.${descriptor.name}',
-        _descriptor = descriptor {
-    final usedNames = reservedEnumNames;
-    for (EnumValueDescriptorProto value in descriptor.value) {
-      EnumValueDescriptorProto canonicalValue =
-          descriptor.value.firstWhere((v) => v.number == value.number);
-      if (value == canonicalValue) {
-        _canonicalValues.add(value);
-      } else {
-        _aliases.add(new EnumAlias(value, canonicalValue));
-      }
-      dartNames[value.name] = disambiguateName(
-          avoidInitialUnderscore(value.name), usedNames, enumSuffixes());
-    }
-  }
-
-  String get package => _parent.package;
-  FileGenerator get fileGen => _parent.fileGen;
-
-  /// Make this enum available as a field type.
-  void register(GenerationContext ctx) {
-    ctx.registerFieldType(this);
-  }
-
-  /// Returns a const expression that evaluates to the JSON for this message.
-  /// [usage] represents the .pb.dart file where the expression will be used.
-  String getJsonConstant(FileGenerator usage) {
-    var name = "$classname\$json";
-    if (usage.protoFileUri == fileGen.protoFileUri) {
-      return name;
-    }
-    return "$fileImportPrefix.$name";
-  }
-
-  void generate(IndentingWriter out) {
-    out.addBlock(
-        'class ${classname} extends $_protobufImportPrefix.ProtobufEnum {',
-        '}\n', () {
-      // -----------------------------------------------------------------
-      // Define enum types.
-      for (EnumValueDescriptorProto val in _canonicalValues) {
-        final name = dartNames[val.name];
-        out.println('static const ${classname} $name = '
-            "const ${classname}._(${val.number}, ${singleQuote(name)});");
-      }
-      if (_aliases.isNotEmpty) {
-        out.println();
-        for (EnumAlias alias in _aliases) {
-          final name = dartNames[alias.value.name];
-          out.println('static const ${classname} $name ='
-              ' ${dartNames[alias.canonicalValue.name]};');
-        }
-      }
-      out.println();
-
-      out.println('static const List<${classname}> values ='
-          ' const <${classname}> [');
-      for (EnumValueDescriptorProto val in _canonicalValues) {
-        final name = dartNames[val.name];
-        out.println('  $name,');
-      }
-      out.println('];');
-      out.println();
-
-      out.println('static final Map<int, $classname> _byValue ='
-          ' $_protobufImportPrefix.ProtobufEnum.initByValue(values);');
-      out.println('static ${classname} valueOf(int value) =>'
-          ' _byValue[value];');
-      out.addBlock('static void $checkItem($classname v) {', '}', () {
-        out.println('if (v is! $classname)'
-            " $_protobufImportPrefix.checkItemFailed(v, ${singleQuote(classname)});");
-      });
-      out.println();
-
-      out.println('const ${classname}._(int v, String n) '
-          ': super(v, n);');
-    });
-  }
-
-  /// Writes a Dart constant containing the JSON for the EnumProtoDescriptor.
-  void generateConstants(IndentingWriter out) {
-    var name = getJsonConstant(fileGen);
-    var json = _descriptor.writeToJsonMap();
-
-    out.print("const $name = ");
-    writeJsonConst(out, json);
-    out.println(";");
-    out.println();
-  }
-}
diff --git a/lib/extension_generator.dart b/lib/extension_generator.dart
deleted file mode 100644
index aca8255..0000000
--- a/lib/extension_generator.dart
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-class ExtensionGenerator {
-  final FieldDescriptorProto _descriptor;
-  final ProtobufContainer _parent;
-
-  // populated by resolve()
-  ProtobufField _field;
-  final String _extensionName;
-  String _extendedFullName = "";
-
-  ExtensionGenerator(this._descriptor, this._parent, Set<String> usedNames)
-      : _extensionName = extensionName(_descriptor, usedNames);
-
-  void resolve(GenerationContext ctx) {
-    _field = new ProtobufField.extension(_descriptor, _parent, ctx);
-
-    ProtobufContainer extendedType = ctx.getFieldType(_descriptor.extendee);
-    // TODO(skybrian) When would this be null?
-    if (extendedType != null) {
-      _extendedFullName = extendedType.fullName;
-    }
-  }
-
-  String get package => _parent.package;
-
-  /// The generator of the .pb.dart file where this extension will be defined.
-  FileGenerator get fileGen => _parent.fileGen;
-
-  String get name {
-    if (_field == null) throw new StateError("resolve not called");
-    String name = _extensionName;
-    return _parent is MessageGenerator ? '${_parent.classname}.$name' : name;
-  }
-
-  bool get needsFixnumImport {
-    if (_field == null) throw new StateError("resolve not called");
-    return _field.needsFixnumImport;
-  }
-
-  /// Adds dependencies of [generate] to [imports].
-  ///
-  /// For each .pb.dart file that the generated code needs to import,
-  /// add its generator.
-  void addImportsTo(
-      Set<FileGenerator> imports, Set<FileGenerator> enumImports) {
-    if (_field == null) throw new StateError("resolve not called");
-    var typeGen = _field.baseType.generator;
-    if (typeGen != null) {
-      // The type of this extension is defined in a different file,
-      // so we need to import it.
-      if (typeGen is EnumGenerator) {
-        // Enums are always in a different file.
-        enumImports.add(typeGen.fileGen);
-      } else if (typeGen.fileGen != fileGen) {
-        imports.add(typeGen.fileGen);
-      }
-    }
-  }
-
-  /// Adds dependencies of [generateConstants] to [imports].
-  ///
-  /// For each .pb.dart file that the generated code needs to import,
-  /// add its generator.
-  void addConstantImportsTo(Set<FileGenerator> imports) {
-    if (_field == null) throw new StateError("resolve not called");
-    // No dependencies - nothing to do.
-  }
-
-  void generate(IndentingWriter out) {
-    if (_field == null) throw new StateError("resolve not called");
-
-    String name = _extensionName;
-    var type = _field.baseType;
-    var dartType = type.getDartType(fileGen);
-
-    if (_field.isRepeated) {
-      out.print('static final $_protobufImportPrefix.Extension $name = '
-          'new $_protobufImportPrefix.Extension<$dartType>.repeated(\'$_extendedFullName\','
-          ' \'$name\', ${_field.number}, ${_field.typeConstant}');
-      if (type.isMessage || type.isGroup) {
-        out.println(', $dartType.$checkItem, $dartType.create);');
-      } else if (type.isEnum) {
-        out.println(', $dartType.$checkItem, null, '
-            '$dartType.valueOf, $dartType.values);');
-      } else {
-        out.println(
-            ", $_protobufImportPrefix.getCheckFunction(${_field.typeConstant}));");
-      }
-      return;
-    }
-
-    out.print('static final $_protobufImportPrefix.Extension $name = '
-        'new $_protobufImportPrefix.Extension<$dartType>(\'$_extendedFullName\', \'$name\', '
-        '${_field.number}, ${_field.typeConstant}');
-
-    String initializer = _field.generateDefaultFunction(fileGen);
-
-    if (type.isMessage || type.isGroup) {
-      out.println(', $initializer, $dartType.create);');
-    } else if (type.isEnum) {
-      var dartEnum = type.getDartType(fileGen);
-      String enumParams = '(var v) => $dartEnum.valueOf(v), $dartEnum.values';
-      out.println(", $initializer, null, $enumParams);");
-    } else if (initializer != null) {
-      out.println(", $initializer);");
-    } else {
-      out.println(");");
-    }
-  }
-}
diff --git a/lib/file_generator.dart b/lib/file_generator.dart
deleted file mode 100644
index c9940c6..0000000
--- a/lib/file_generator.dart
+++ /dev/null
@@ -1,547 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-final _dartIdentifier = new RegExp(r'^\w+$');
-final _formatter = new DartFormatter();
-final String _protobufImportPrefix = r'$pb';
-
-/// Generates the Dart output files for one .proto input file.
-///
-/// Outputs include .pb.dart, pbenum.dart, and .pbjson.dart.
-class FileGenerator extends ProtobufContainer {
-  /// Reads and the declared mixins in the file, keyed by name.
-  ///
-  /// Performs some basic validation on declared mixins, e.g. whether names
-  /// are valid dart identifiers and whether there are cycles in the `parent`
-  /// hierarchy.
-  /// Does not check for existence of import files or classes.
-  static Map<String, PbMixin> _getDeclaredMixins(FileDescriptorProto desc) {
-    String mixinError(String error) =>
-        'Option "mixins" in ${desc.name}: $error';
-
-    if (!desc.hasOptions() ||
-        !desc.options.hasExtension(Dart_options.imports)) {
-      return <String, PbMixin>{};
-    }
-    var dartMixins = <String, DartMixin>{};
-    Imports importedMixins = desc.options.getExtension(Dart_options.imports);
-    for (DartMixin mixin in importedMixins.mixins) {
-      if (dartMixins.containsKey(mixin.name)) {
-        throw mixinError('Duplicate mixin name: "${mixin.name}"');
-      }
-      if (!mixin.name.startsWith(_dartIdentifier)) {
-        throw mixinError(
-            '"${mixin.name}" is not a valid dart class identifier');
-      }
-      if (mixin.hasParent() && !mixin.parent.startsWith(_dartIdentifier)) {
-        throw mixinError('Mixin parent "${mixin.parent}" of "${mixin.name}" is '
-            'not a valid dart class identifier');
-      }
-      dartMixins[mixin.name] = mixin;
-    }
-
-    // Detect cycles and unknown parents.
-    for (var mixin in dartMixins.values) {
-      if (!mixin.hasParent()) continue;
-      var currentMixin = mixin;
-      var parentChain = <String>[];
-      while (currentMixin.hasParent()) {
-        var parentName = currentMixin.parent;
-
-        bool declaredMixin = dartMixins.containsKey(parentName);
-        bool internalMixin = !declaredMixin && findMixin(parentName) != null;
-
-        if (internalMixin) break; // No further validation of parent chain.
-
-        if (!declaredMixin) {
-          throw mixinError('Unknown mixin parent "${mixin.parent}" of '
-              '"${currentMixin.name}"');
-        }
-
-        if (parentChain.contains(parentName)) {
-          var cycle = parentChain.join('->') + '->$parentName';
-          throw mixinError('Cycle in parent chain: $cycle');
-        }
-        parentChain.add(parentName);
-        currentMixin = dartMixins[parentName];
-      }
-    }
-
-    // Turn DartMixins into PbMixins.
-    final pbMixins = <String, PbMixin>{};
-    PbMixin resolveMixin(String name) {
-      if (pbMixins.containsKey(name)) return pbMixins[name];
-      if (dartMixins.containsKey(name)) {
-        var dartMixin = dartMixins[name];
-        var pbMixin = new PbMixin(dartMixin.name,
-            importFrom: dartMixin.importFrom,
-            parent: resolveMixin(dartMixin.parent));
-        pbMixins[name] = pbMixin;
-        return pbMixin;
-      }
-      return findMixin(name);
-    }
-
-    for (var mixin in dartMixins.values) {
-      resolveMixin(mixin.name);
-    }
-    return pbMixins;
-  }
-
-  final FileDescriptorProto descriptor;
-  final GenerationOptions options;
-
-  // The relative path used to import the .proto file, as a URI.
-  final Uri protoFileUri;
-
-  final enumGenerators = <EnumGenerator>[];
-  final messageGenerators = <MessageGenerator>[];
-  final extensionGenerators = <ExtensionGenerator>[];
-  final clientApiGenerators = <ClientApiGenerator>[];
-  final serviceGenerators = <ServiceGenerator>[];
-  final grpcGenerators = <GrpcServiceGenerator>[];
-
-  /// Used to avoid collisions after names have been mangled to match the Dart
-  /// style.
-  final Set<String> usedTopLevelNames = Set<String>()
-    ..addAll(toplevelReservedCapitalizedNames);
-
-  /// Used to avoid collisions in the service file after names have been mangled
-  /// to match the dart style.
-  final Set<String> usedTopLevelServiceNames = Set<String>()
-    ..addAll(toplevelReservedCapitalizedNames);
-
-  final Set<String> usedExtensionNames = Set<String>()
-    ..addAll(forbiddenExtensionNames);
-
-  /// True if cross-references have been resolved.
-  bool _linked = false;
-
-  FileGenerator(this.descriptor, this.options)
-      : protoFileUri = new Uri.file(descriptor.name) {
-    if (protoFileUri.isAbsolute) {
-      // protoc should never generate an import with an absolute path.
-      throw "FAILURE: Import with absolute path is not supported";
-    }
-
-    var declaredMixins = _getDeclaredMixins(descriptor);
-    var defaultMixinName =
-        descriptor.options?.getExtension(Dart_options.defaultMixin) ?? '';
-    var defaultMixin =
-        declaredMixins[defaultMixinName] ?? findMixin(defaultMixinName);
-    if (defaultMixin == null && defaultMixinName.isNotEmpty) {
-      throw ('Option default_mixin on file ${descriptor.name}: Unknown mixin '
-          '$defaultMixinName');
-    }
-
-    // Load and register all enum and message types.
-    for (EnumDescriptorProto enumType in descriptor.enumType) {
-      enumGenerators.add(new EnumGenerator(enumType, this, usedTopLevelNames));
-    }
-    for (DescriptorProto messageType in descriptor.messageType) {
-      messageGenerators.add(new MessageGenerator(
-          messageType, this, declaredMixins, defaultMixin, usedTopLevelNames));
-    }
-    for (FieldDescriptorProto extension in descriptor.extension) {
-      extensionGenerators
-          .add(new ExtensionGenerator(extension, this, usedExtensionNames));
-    }
-    for (ServiceDescriptorProto service in descriptor.service) {
-      if (options.useGrpc) {
-        grpcGenerators.add(new GrpcServiceGenerator(service, this));
-      } else {
-        var serviceGen =
-            new ServiceGenerator(service, this, usedTopLevelServiceNames);
-        serviceGenerators.add(serviceGen);
-        clientApiGenerators
-            .add(new ClientApiGenerator(serviceGen, usedTopLevelNames));
-      }
-    }
-  }
-
-  /// Creates the fields in each message.
-  /// Resolves field types and extension targets using the supplied context.
-  void resolve(GenerationContext ctx) {
-    if (_linked) throw new StateError("cross references already resolved");
-
-    for (var m in messageGenerators) {
-      m.resolve(ctx);
-    }
-    for (var x in extensionGenerators) {
-      x.resolve(ctx);
-    }
-
-    _linked = true;
-  }
-
-  String get package => descriptor.package;
-  String get classname => '';
-  String get fullName => descriptor.package;
-  FileGenerator get fileGen => this;
-
-  /// Generates all the Dart files for this .proto file.
-  List<CodeGeneratorResponse_File> generateFiles(OutputConfiguration config) {
-    if (!_linked) throw new StateError("not linked");
-
-    makeFile(String extension, String content) {
-      Uri protoUrl = new Uri.file(descriptor.name);
-      Uri dartUrl = config.outputPathFor(protoUrl, extension);
-      return new CodeGeneratorResponse_File()
-        ..name = dartUrl.path
-        ..content = content;
-    }
-
-    final files = [
-      makeFile(".pb.dart", generateMainFile(config)),
-      makeFile(".pbenum.dart", generateEnumFile(config)),
-      makeFile(".pbjson.dart", generateJsonFile(config)),
-    ];
-    if (options.useGrpc) {
-      if (grpcGenerators.isNotEmpty) {
-        files.add(makeFile(".pbgrpc.dart", generateGrpcFile(config)));
-      }
-    } else {
-      files.add(makeFile(".pbserver.dart", generateServerFile(config)));
-    }
-    return files;
-  }
-
-  /// Returns the contents of the .pb.dart file for this .proto file.
-  String generateMainFile(
-      [OutputConfiguration config = const DefaultOutputConfiguration()]) {
-    if (!_linked) throw new StateError("not linked");
-    IndentingWriter out = new IndentingWriter();
-
-    writeMainHeader(out, config);
-
-    // Generate code.
-    for (MessageGenerator m in messageGenerators) {
-      m.generate(out);
-    }
-
-    // Generate code for extensions defined at top-level using a class
-    // name derived from the file name.
-    if (extensionGenerators.isNotEmpty) {
-      // TODO(antonm): do not generate a class.
-      String className = extensionClassName(descriptor, usedTopLevelNames);
-      out.addBlock('class $className {', '}\n', () {
-        for (ExtensionGenerator x in extensionGenerators) {
-          x.generate(out);
-        }
-        out.println(
-            'static void registerAllExtensions($_protobufImportPrefix.ExtensionRegistry '
-            'registry) {');
-        for (ExtensionGenerator x in extensionGenerators) {
-          out.println('  registry.add(${x.name});');
-        }
-        out.println('}');
-      });
-    }
-
-    for (ClientApiGenerator c in clientApiGenerators) {
-      c.generate(out);
-    }
-    return out.toString();
-  }
-
-  /// Writes the header and imports for the .pb.dart file.
-  void writeMainHeader(IndentingWriter out,
-      [OutputConfiguration config = const DefaultOutputConfiguration()]) {
-    _writeHeading(out);
-
-    // We only add the dart:async import if there are generic client API
-    // generators for services in the FileDescriptorProto.
-    if (clientApiGenerators.isNotEmpty) {
-      out.println(r"import 'dart:async' as $async;");
-    }
-
-    // Make sure any other symbols in dart:core don't cause name conflicts with
-    // protobuf classes that have the same name.
-    out.println("// ignore: UNUSED_SHOWN_NAME\n"
-        "import 'dart:core' show int, bool, double, String, List, Map, override;\n");
-
-    if (_needsFixnumImport) {
-      out.println("import 'package:fixnum/fixnum.dart';");
-    }
-
-    if (_needsProtobufImport) {
-      out.println(
-          "import 'package:protobuf/protobuf.dart' as $_protobufImportPrefix;");
-      out.println();
-    }
-
-    var mixinImports = findMixinsToImport();
-    var importNames = mixinImports.keys.toList();
-    importNames.sort();
-    for (var imp in importNames) {
-      var symbols = mixinImports[imp];
-      out.println("import '${imp}' show ${symbols.join(', ')};");
-    }
-    if (mixinImports.isNotEmpty) out.println();
-
-    // Import the .pb.dart files we depend on.
-    var imports = new Set<FileGenerator>.identity();
-    var enumImports = new Set<FileGenerator>.identity();
-    _findProtosToImport(imports, enumImports);
-
-    for (var target in imports) {
-      _writeImport(out, config, target, ".pb.dart");
-    }
-    if (imports.isNotEmpty) out.println();
-
-    for (var target in enumImports) {
-      _writeImport(out, config, target, ".pbenum.dart");
-    }
-    if (enumImports.isNotEmpty) out.println();
-
-    // Export enums in main file for backward compatibility.
-    if (enumCount > 0) {
-      Uri resolvedImport =
-          config.resolveImport(protoFileUri, protoFileUri, ".pbenum.dart");
-      out.println("export '$resolvedImport';");
-      out.println();
-    }
-  }
-
-  bool get _needsFixnumImport {
-    for (var m in messageGenerators) {
-      if (m.needsFixnumImport) return true;
-    }
-    for (var x in extensionGenerators) {
-      if (x.needsFixnumImport) return true;
-    }
-    return false;
-  }
-
-  bool get _needsProtobufImport =>
-      messageGenerators.isNotEmpty ||
-      extensionGenerators.isNotEmpty ||
-      clientApiGenerators.isNotEmpty;
-
-  /// Returns the generator for each .pb.dart file we need to import.
-  void _findProtosToImport(
-      Set<FileGenerator> imports, Set<FileGenerator> enumImports) {
-    for (var m in messageGenerators) {
-      m.addImportsTo(imports, enumImports);
-    }
-    for (var x in extensionGenerators) {
-      x.addImportsTo(imports, enumImports);
-    }
-    // Add imports needed for client-side services.
-    for (var x in serviceGenerators) {
-      x.addImportsTo(imports);
-    }
-    // Don't need to import self. (But we may need to import the enums.)
-    imports.remove(this);
-  }
-
-  /// Returns a map from import names to the Dart symbols to be imported.
-  Map<String, List<String>> findMixinsToImport() {
-    var mixins = new Set<PbMixin>();
-    for (MessageGenerator m in messageGenerators) {
-      m.addMixinsTo(mixins);
-    }
-
-    var imports = <String, List<String>>{};
-    for (var m in mixins) {
-      var imp = m.importFrom;
-      List<String> symbols = imports[imp];
-      if (symbols == null) {
-        symbols = [];
-        imports[imp] = symbols;
-      }
-      symbols.add(m.name);
-    }
-
-    for (var imp in imports.keys) {
-      imports[imp].sort();
-    }
-
-    return imports;
-  }
-
-  /// Returns the contents of the .pbenum.dart file for this .proto file.
-  String generateEnumFile(
-      [OutputConfiguration config = const DefaultOutputConfiguration()]) {
-    if (!_linked) throw new StateError("not linked");
-
-    var out = new IndentingWriter();
-    _writeHeading(out);
-
-    if (enumCount > 0) {
-      // Make sure any other symbols in dart:core don't cause name conflicts
-      // with enums that have the same name.
-      out.println("// ignore_for_file: UNDEFINED_SHOWN_NAME,UNUSED_SHOWN_NAME\n"
-          "import 'dart:core' show int, dynamic, String, List, Map;");
-      out.println(
-          "import 'package:protobuf/protobuf.dart' as $_protobufImportPrefix;");
-      out.println();
-    }
-
-    for (EnumGenerator e in enumGenerators) {
-      e.generate(out);
-    }
-
-    for (MessageGenerator m in messageGenerators) {
-      m.generateEnums(out);
-    }
-
-    return out.toString();
-  }
-
-  /// Returns the number of enum types generated in the .pbenum.dart file.
-  int get enumCount {
-    var count = enumGenerators.length;
-    for (MessageGenerator m in messageGenerators) {
-      count += m.enumCount;
-    }
-    return count;
-  }
-
-  /// Returns the contents of the .pbserver.dart file for this .proto file.
-  String generateServerFile(
-      [OutputConfiguration config = const DefaultOutputConfiguration()]) {
-    if (!_linked) throw new StateError("not linked");
-    var out = new IndentingWriter();
-    _writeHeading(out);
-
-    if (serviceGenerators.isNotEmpty) {
-      out.println(r'''
-import 'dart:async' as $async;
-
-import 'package:protobuf/protobuf.dart';
-''');
-    }
-
-    // Import .pb.dart files needed for requests and responses.
-    var imports = new Set<FileGenerator>();
-    for (var x in serviceGenerators) {
-      x.addImportsTo(imports);
-    }
-    for (var target in imports) {
-      _writeImport(out, config, target, ".pb.dart");
-    }
-
-    // Import .pbjson.dart file needed for $json and $messageJson.
-    if (serviceGenerators.isNotEmpty) {
-      _writeImport(out, config, this, ".pbjson.dart");
-      out.println();
-    }
-
-    Uri resolvedImport =
-        config.resolveImport(protoFileUri, protoFileUri, ".pb.dart");
-    out.println("export '$resolvedImport';");
-    out.println();
-
-    for (ServiceGenerator s in serviceGenerators) {
-      s.generate(out);
-    }
-
-    return out.toString();
-  }
-
-  /// Returns the contents of the .pbgrpc.dart file for this .proto file.
-  String generateGrpcFile(
-      [OutputConfiguration config = const DefaultOutputConfiguration()]) {
-    if (!_linked) throw new StateError("not linked");
-    var out = new IndentingWriter();
-    _writeHeading(out);
-
-    out.println(r'''
-import 'dart:async' as $async;
-
-import 'package:grpc/grpc.dart';
-''');
-
-    // Import .pb.dart files needed for requests and responses.
-    var imports = new Set<FileGenerator>();
-    for (var generator in grpcGenerators) {
-      generator.addImportsTo(imports);
-    }
-    for (var target in imports) {
-      _writeImport(out, config, target, ".pb.dart");
-    }
-
-    var resolvedImport =
-        config.resolveImport(protoFileUri, protoFileUri, ".pb.dart");
-    out.println("export '$resolvedImport';");
-    out.println();
-
-    for (var generator in grpcGenerators) {
-      generator.generate(out);
-    }
-
-    return _formatter.format(out.toString());
-  }
-
-  /// Returns the contents of the .pbjson.dart file for this .proto file.
-  String generateJsonFile(
-      [OutputConfiguration config = const DefaultOutputConfiguration()]) {
-    if (!_linked) throw new StateError("not linked");
-    var out = new IndentingWriter();
-    _writeHeading(out);
-
-    // Import the .pbjson.dart files we depend on.
-    var imports = _findJsonProtosToImport();
-    for (var target in imports) {
-      _writeImport(out, config, target, ".pbjson.dart");
-    }
-    if (imports.isNotEmpty) out.println();
-
-    for (var e in enumGenerators) {
-      e.generateConstants(out);
-    }
-    for (MessageGenerator m in messageGenerators) {
-      m.generateConstants(out);
-    }
-    for (ServiceGenerator s in serviceGenerators) {
-      s.generateConstants(out);
-    }
-
-    return out.toString();
-  }
-
-  /// Returns the generator for each .pbjson.dart file the generated
-  /// .pbjson.dart needs to import.
-  Set<FileGenerator> _findJsonProtosToImport() {
-    var imports = new Set<FileGenerator>.identity();
-    for (var m in messageGenerators) {
-      m.addConstantImportsTo(imports);
-    }
-    for (var x in extensionGenerators) {
-      x.addConstantImportsTo(imports);
-    }
-    for (var x in serviceGenerators) {
-      x.addConstantImportsTo(imports);
-    }
-    imports.remove(this); // Don't need to import self.
-    return imports;
-  }
-
-  /// Writes the header at the top of the dart file.
-  void _writeHeading(IndentingWriter out) {
-    out.println('''
-///
-//  Generated code. Do not modify.
-//  source: ${descriptor.name}
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-''');
-  }
-
-  /// Writes an import of a .dart file corresponding to a .proto file.
-  /// (Possibly the same .proto file.)
-  void _writeImport(IndentingWriter out, OutputConfiguration config,
-      FileGenerator target, String extension) {
-    Uri resolvedImport =
-        config.resolveImport(target.protoFileUri, protoFileUri, extension);
-    out.print("import '$resolvedImport'");
-    if (protoFileUri != target.protoFileUri) {
-      out.print(' as ${target.fileImportPrefix}');
-    }
-    out.println(';');
-  }
-}
diff --git a/lib/grpc_generator.dart b/lib/grpc_generator.dart
deleted file mode 100644
index 79f3d78..0000000
--- a/lib/grpc_generator.dart
+++ /dev/null
@@ -1,271 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-class GrpcServiceGenerator {
-  final ServiceDescriptorProto _descriptor;
-
-  /// The generator of the .pb.dart file that will contain this service.
-  final FileGenerator fileGen;
-
-  /// The message types needed directly by this service.
-  ///
-  /// The key is the fully qualified name.
-  /// Populated by [resolve].
-  final _deps = <String, MessageGenerator>{};
-
-  /// Maps each undefined type to a string describing its location.
-  ///
-  /// Populated by [resolve].
-  final _undefinedDeps = <String, String>{};
-
-  /// Fully-qualified gRPC service name.
-  String _fullServiceName;
-
-  /// Dart class name for client stub.
-  String _clientClassname;
-
-  /// Dart class name for server stub.
-  String _serviceClassname;
-
-  /// List of gRPC methods.
-  final _methods = <_GrpcMethod>[];
-
-  GrpcServiceGenerator(this._descriptor, this.fileGen) {
-    final name = _descriptor.name;
-    final package = fileGen.package;
-
-    if (package != null && package.isNotEmpty) {
-      _fullServiceName = '$package.$name';
-    } else {
-      _fullServiceName = name;
-    }
-
-    // avoid: ClientClient
-    _clientClassname = name.endsWith('Client') ? name : name + 'Client';
-    // avoid: ServiceServiceBase
-    _serviceClassname =
-        name.endsWith('Service') ? name + 'Base' : name + 'ServiceBase';
-  }
-
-  /// Finds all message types used by this service.
-  ///
-  /// Puts the types found in [_deps]. If a type name can't be resolved, puts it
-  /// in [_undefinedDeps].
-  /// Precondition: messages have been registered and resolved.
-  void resolve(GenerationContext ctx) {
-    for (var method in _descriptor.method) {
-      _methods.add(new _GrpcMethod(this, ctx, method));
-    }
-  }
-
-  /// Adds a dependency on the given message type.
-  ///
-  /// If the type name can't be resolved, adds it to [_undefinedDeps].
-  void _addDependency(GenerationContext ctx, String fqname, String location) {
-    if (_deps.containsKey(fqname)) return; // Already added.
-
-    MessageGenerator mg = ctx.getFieldType(fqname);
-    if (mg == null) {
-      _undefinedDeps[fqname] = location;
-      return;
-    }
-    mg.checkResolved();
-    _deps[mg.dottedName] = mg;
-  }
-
-  /// Adds dependencies of [generate] to [imports].
-  ///
-  /// For each .pb.dart file that the generated code needs to import,
-  /// add its generator.
-  void addImportsTo(Set<FileGenerator> imports) {
-    for (var mg in _deps.values) {
-      imports.add(mg.fileGen);
-    }
-  }
-
-  /// Returns the Dart class name to use for a message type.
-  ///
-  /// Throws an exception if it can't be resolved.
-  String _getDartClassName(String fqname) {
-    var mg = _deps[fqname];
-    if (mg == null) {
-      var location = _undefinedDeps[fqname];
-      // TODO(jakobr): Throw more actionable error.
-      throw 'FAILURE: Unknown type reference (${fqname}) for ${location}';
-    }
-    if (fileGen.protoFileUri == mg.fileGen.protoFileUri) {
-      // If it's the same file, we import it without using "as".
-      return mg.classname;
-    }
-    return mg.fileImportPrefix + '.' + mg.classname;
-  }
-
-  void generate(IndentingWriter out) {
-    _generateClient(out);
-    out.println();
-    _generateService(out);
-  }
-
-  void _generateClient(IndentingWriter out) {
-    out.addBlock('class $_clientClassname extends Client {', '}', () {
-      for (final method in _methods) {
-        method.generateClientMethodDescriptor(out);
-      }
-      out.println();
-      out.println(
-          '$_clientClassname(ClientChannel channel, {CallOptions options})');
-      out.println('    : super(channel, options: options);');
-      for (final method in _methods) {
-        method.generateClientStub(out);
-      }
-    });
-  }
-
-  void _generateService(IndentingWriter out) {
-    out.addBlock('abstract class $_serviceClassname extends Service {', '}',
-        () {
-      out.println('String get \$name => \'$_fullServiceName\';');
-      out.println();
-      out.addBlock('$_serviceClassname() {', '}', () {
-        for (final method in _methods) {
-          method.generateServiceMethodRegistration(out);
-        }
-      });
-      out.println();
-      for (final method in _methods) {
-        method.generateServiceMethodPreamble(out);
-      }
-      for (final method in _methods) {
-        method.generateServiceMethodStub(out);
-      }
-    });
-  }
-}
-
-class _GrpcMethod {
-  final String _grpcName;
-  final String _dartName;
-  final String _serviceName;
-
-  final bool _clientStreaming;
-  final bool _serverStreaming;
-
-  final String _requestType;
-  final String _responseType;
-
-  final String _argumentType;
-  final String _clientReturnType;
-  final String _serverReturnType;
-
-  _GrpcMethod._(
-      this._grpcName,
-      this._dartName,
-      this._serviceName,
-      this._clientStreaming,
-      this._serverStreaming,
-      this._requestType,
-      this._responseType,
-      this._argumentType,
-      this._clientReturnType,
-      this._serverReturnType);
-
-  factory _GrpcMethod(GrpcServiceGenerator service, GenerationContext ctx,
-      MethodDescriptorProto method) {
-    final grpcName = method.name;
-    final dartName =
-        grpcName.substring(0, 1).toLowerCase() + grpcName.substring(1);
-
-    final clientStreaming = method.clientStreaming;
-    final serverStreaming = method.serverStreaming;
-
-    service._addDependency(ctx, method.inputType, 'input type of $grpcName');
-    service._addDependency(ctx, method.outputType, 'output type of $grpcName');
-
-    final requestType = service._getDartClassName(method.inputType);
-    final responseType = service._getDartClassName(method.outputType);
-
-    final argumentType =
-        clientStreaming ? '\$async.Stream<$requestType>' : requestType;
-    final clientReturnType = serverStreaming
-        ? 'ResponseStream<$responseType>'
-        : 'ResponseFuture<$responseType>';
-    final serverReturnType = serverStreaming
-        ? '\$async.Stream<$responseType>'
-        : '\$async.Future<$responseType>';
-
-    return new _GrpcMethod._(
-        grpcName,
-        dartName,
-        service._fullServiceName,
-        clientStreaming,
-        serverStreaming,
-        requestType,
-        responseType,
-        argumentType,
-        clientReturnType,
-        serverReturnType);
-  }
-
-  void generateClientMethodDescriptor(IndentingWriter out) {
-    out.println(
-        'static final _\$$_dartName = new ClientMethod<$_requestType, $_responseType>(');
-    out.println('    \'/$_serviceName/$_grpcName\',');
-    out.println('    ($_requestType value) => value.writeToBuffer(),');
-    out.println(
-        '    (List<int> value) => new $_responseType.fromBuffer(value));');
-  }
-
-  void generateClientStub(IndentingWriter out) {
-    out.println();
-    out.addBlock(
-        '$_clientReturnType $_dartName($_argumentType request, {CallOptions options}) {',
-        '}', () {
-      final requestStream = _clientStreaming
-          ? 'request'
-          : r'new $async.Stream.fromIterable([request])';
-      out.println(
-          'final call = \$createCall(_\$$_dartName, $requestStream, options: options);');
-      if (_serverStreaming) {
-        out.println('return new ResponseStream(call);');
-      } else {
-        out.println('return new ResponseFuture(call);');
-      }
-    });
-  }
-
-  void generateServiceMethodRegistration(IndentingWriter out) {
-    out.println(
-        '\$addMethod(new ServiceMethod<$_requestType, $_responseType>(');
-    out.println('    \'$_grpcName\',');
-    out.println('    $_dartName${_clientStreaming ? '' : '_Pre'},');
-    out.println('    $_clientStreaming,');
-    out.println('    $_serverStreaming,');
-    out.println(
-        '    (List<int> value) => new $_requestType.fromBuffer(value),');
-    out.println('    ($_responseType value) => value.writeToBuffer()));');
-  }
-
-  void generateServiceMethodPreamble(IndentingWriter out) {
-    if (_clientStreaming) return;
-
-    out.addBlock(
-        '$_serverReturnType ${_dartName}_Pre(ServiceCall call, \$async.Future request) async${_serverStreaming ? '*' : ''} {',
-        '}', () {
-      if (_serverStreaming) {
-        out.println(
-            'yield* $_dartName(call, (await request) as $_requestType);');
-      } else {
-        out.println('return $_dartName(call, await request);');
-      }
-    });
-    out.println();
-  }
-
-  void generateServiceMethodStub(IndentingWriter out) {
-    out.println(
-        '$_serverReturnType $_dartName(ServiceCall call, $_argumentType request);');
-  }
-}
diff --git a/lib/indenting_writer.dart b/lib/indenting_writer.dart
deleted file mode 100644
index c71889a..0000000
--- a/lib/indenting_writer.dart
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc.indenting_writer;
-
-/// A buffer for writing indented source code.
-class IndentingWriter {
-  final StringBuffer _buffer = new StringBuffer();
-  String _indent = "";
-  bool _needIndent = true;
-
-  /// Appends a string indented to the current level.
-  /// (Indentation will be added after newline characters where needed.)
-  void print(String text) {
-    var lastNewline = text.lastIndexOf('\n');
-    if (lastNewline == -1) {
-      _writeChunk(text);
-      return;
-    }
-
-    for (String line in text.substring(0, lastNewline).split('\n')) {
-      _writeChunk(line);
-      _newline();
-    }
-    _writeChunk(text.substring(lastNewline + 1));
-  }
-
-  /// Same as print, but with a newline at the end.
-  void println([String text = '']) {
-    print(text);
-    _newline();
-  }
-
-  /// Prints a block of text with the body indented one more level.
-  void addBlock(String start, String end, void body(),
-      {endWithNewline = true}) {
-    _addBlock(start, end, body, endWithNewline, _indent + '  ');
-  }
-
-  /// Prints a block of text with an unindented body.
-  /// (For example, for triple quotes.)
-  void addUnindentedBlock(String start, String end, void body(),
-      {endWithNewline = true}) {
-    _addBlock(start, end, body, endWithNewline, '');
-  }
-
-  void _addBlock(
-      String start, String end, void body(), endWithNewline, newIndent) {
-    println(start);
-    var oldIndent = _indent;
-    _indent = newIndent;
-    body();
-    _indent = oldIndent;
-    if (endWithNewline) {
-      println(end);
-    } else {
-      print(end);
-    }
-  }
-
-  String toString() => _buffer.toString();
-
-  /// Writes part of a line of text.
-  /// Adds indentation if we're at the start of a line.
-  void _writeChunk(String chunk) {
-    assert(!chunk.contains('\n'));
-
-    if (chunk.isEmpty) return;
-    if (_needIndent) {
-      _buffer.write(_indent);
-      _needIndent = false;
-    }
-    _buffer.write(chunk);
-  }
-
-  void _newline() {
-    _buffer.writeln();
-    _needIndent = true;
-  }
-}
diff --git a/lib/linker.dart b/lib/linker.dart
deleted file mode 100644
index 717c6bb..0000000
--- a/lib/linker.dart
+++ /dev/null
@@ -1,71 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-/// Resolves all cross-references in a set of proto files.
-void link(GenerationOptions options, Iterable<FileGenerator> files) {
-  GenerationContext ctx = new GenerationContext(options);
-
-  // Register the targets of cross-references.
-  for (var f in files) {
-    ctx.registerProtoFile(f);
-
-    for (var m in f.messageGenerators) {
-      m.register(ctx);
-    }
-    for (var e in f.enumGenerators) {
-      e.register(ctx);
-    }
-  }
-
-  for (var f in files) {
-    f.resolve(ctx);
-  }
-
-  // Resolve service generators last.
-  // (They depend on all messages being resolved.)
-  for (var f in files) {
-    for (var s in f.serviceGenerators) {
-      s.resolve(ctx);
-    }
-    for (var s in f.grpcGenerators) {
-      s.resolve(ctx);
-    }
-  }
-}
-
-class GenerationContext {
-  final GenerationOptions options;
-
-  /// The files available for import.
-  final Map<String, FileGenerator> _files = <String, FileGenerator>{};
-
-  /// The types available to proto fields.
-  final Map<String, ProtobufContainer> _typeRegistry =
-      <String, ProtobufContainer>{};
-
-  GenerationContext(this.options);
-
-  /// Makes info about a .pb.dart file available for reference,
-  /// using the filename given to us by protoc.
-  void registerProtoFile(FileGenerator f) {
-    _files[f.descriptor.name] = f;
-  }
-
-  /// Makes a message, group, or enum available for reference.
-  void registerFieldType(ProtobufContainer type) {
-    // Register the name with a leading '.' to be compatible with input from
-    // protoc.
-    _typeRegistry[type.dottedName] = type;
-  }
-
-  /// Returns info about a .pb.dart being imported,
-  /// based on the filename given to us by protoc.
-  FileGenerator getImportedProtoFile(String name) => _files[name];
-
-  /// Returns info about the type of a message, group, or enum field,
-  /// based on the fully qualified name given to us by protoc.
-  ProtobufContainer getFieldType(String name) => _typeRegistry[name];
-}
diff --git a/lib/message_generator.dart b/lib/message_generator.dart
deleted file mode 100644
index 5c9c072..0000000
--- a/lib/message_generator.dart
+++ /dev/null
@@ -1,506 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-class MessageGenerator extends ProtobufContainer {
-  /// Returns the mixin for this message, or null if none.
-  ///
-  /// First searches [declaredMixins], then internal mixins declared by
-  /// [findMixin].
-  static PbMixin _getMixin(DescriptorProto desc, FileDescriptorProto file,
-      Map<String, PbMixin> declaredMixins, PbMixin defaultMixin) {
-    if (!desc.hasOptions() || !desc.options.hasExtension(Dart_options.mixin)) {
-      return defaultMixin;
-    }
-
-    String name = desc.options.getExtension(Dart_options.mixin);
-    if (name.isEmpty) return null; // don't use any mixins (override default)
-    var mixin = declaredMixins[name] ?? findMixin(name);
-    if (mixin == null) {
-      throw '${desc.name} in ${file.name}: mixin "$name" not found';
-    }
-    return mixin;
-  }
-
-  /// The name of the Dart class to generate.
-  final String classname;
-
-  /// The fully-qualified name of the message (without any leading '.').
-  final String fullName;
-
-  /// The part of the fully qualified name that comes after the package prefix.
-  ///
-  /// For nested messages this will include the names of the parents.
-  ///
-  /// For example:
-  /// ```
-  /// package foo;
-  ///
-  /// message Container {
-  ///   message Nested {
-  ///     int32 int32_value = 1;
-  ///   }
-  /// }
-  /// ```
-  /// The nested message will have a `fullName` of 'foo.Container.Nested', and a
-  /// `messageName` of 'Container.Nested'.
-  String get messageName =>
-      fullName.substring(package.length == 0 ? 0 : package.length + 1);
-
-  final PbMixin mixin;
-
-  final ProtobufContainer _parent;
-  final DescriptorProto _descriptor;
-  final List<EnumGenerator> _enumGenerators = <EnumGenerator>[];
-  final List<MessageGenerator> _messageGenerators = <MessageGenerator>[];
-  final List<ExtensionGenerator> _extensionGenerators = <ExtensionGenerator>[];
-
-  // populated by resolve()
-  List<ProtobufField> _fieldList;
-
-  MessageGenerator(
-      DescriptorProto descriptor,
-      ProtobufContainer parent,
-      Map<String, PbMixin> declaredMixins,
-      PbMixin defaultMixin,
-      Set<String> usedNames)
-      : _descriptor = descriptor,
-        _parent = parent,
-        classname = messageOrEnumClassName(descriptor.name, usedNames,
-            parent: parent?.classname ?? ''),
-        assert(parent != null),
-        fullName = parent.fullName == ''
-            ? descriptor.name
-            : '${parent.fullName}.${descriptor.name}',
-        mixin = _getMixin(descriptor, parent.fileGen.descriptor, declaredMixins,
-            defaultMixin) {
-    for (EnumDescriptorProto e in _descriptor.enumType) {
-      _enumGenerators.add(new EnumGenerator(e, this, usedNames));
-    }
-
-    for (DescriptorProto n in _descriptor.nestedType) {
-      _messageGenerators.add(new MessageGenerator(
-          n, this, declaredMixins, defaultMixin, usedNames));
-    }
-
-    for (FieldDescriptorProto x in _descriptor.extension) {
-      _extensionGenerators.add(new ExtensionGenerator(x, this, usedNames));
-    }
-  }
-
-  String get package => _parent.package;
-
-  /// The generator of the .pb.dart file that will declare this type.
-  FileGenerator get fileGen => _parent.fileGen;
-
-  /// Throws an exception if [resolve] hasn't been called yet.
-  void checkResolved() {
-    if (_fieldList == null) {
-      throw new StateError("message not resolved: ${fullName}");
-    }
-  }
-
-  /// Returns a const expression that evaluates to the JSON for this message.
-  /// [usage] represents the .pb.dart file where the expression will be used.
-  String getJsonConstant(FileGenerator usage) {
-    var name = "$classname\$json";
-    if (usage.protoFileUri == fileGen.protoFileUri) {
-      return name;
-    }
-    return "$fileImportPrefix.$name";
-  }
-
-  /// Adds all mixins used in this message and any submessages.
-  void addMixinsTo(Set<PbMixin> output) {
-    if (mixin != null) {
-      output.addAll(mixin.findMixinsToApply());
-    }
-    for (var m in _messageGenerators) {
-      m.addMixinsTo(output);
-    }
-  }
-
-  // Registers message and enum types that can be used elsewhere.
-  void register(GenerationContext ctx) {
-    ctx.registerFieldType(this);
-    for (var m in _messageGenerators) {
-      m.register(ctx);
-    }
-    for (var e in _enumGenerators) {
-      e.register(ctx);
-    }
-  }
-
-  // Creates fields and resolves extension targets.
-  void resolve(GenerationContext ctx) {
-    if (_fieldList != null) throw new StateError("message already resolved");
-
-    var reserved = mixin?.findReservedNames() ?? const <String>[];
-    var fields = messageFieldNames(_descriptor, reserved: reserved);
-
-    _fieldList = <ProtobufField>[];
-    for (MemberNames names in fields.values) {
-      _fieldList.add(new ProtobufField.message(names, this, ctx));
-    }
-
-    for (var m in _messageGenerators) {
-      m.resolve(ctx);
-    }
-    for (var x in _extensionGenerators) {
-      x.resolve(ctx);
-    }
-  }
-
-  bool get needsFixnumImport {
-    if (_fieldList == null) throw new StateError("message not resolved");
-    for (var field in _fieldList) {
-      if (field.needsFixnumImport) return true;
-    }
-    for (var m in _messageGenerators) {
-      if (m.needsFixnumImport) return true;
-    }
-    for (var x in _extensionGenerators) {
-      if (x.needsFixnumImport) return true;
-    }
-    return false;
-  }
-
-  /// Adds dependencies of [generate] to [imports].
-  ///
-  /// For each .pb.dart file that the generated code needs to import,
-  /// add its generator.
-  void addImportsTo(
-      Set<FileGenerator> imports, Set<FileGenerator> enumImports) {
-    if (_fieldList == null) throw new StateError("message not resolved");
-    for (var field in _fieldList) {
-      var typeGen = field.baseType.generator;
-      if (typeGen is EnumGenerator) {
-        enumImports.add(typeGen.fileGen);
-      } else if (typeGen != null) {
-        imports.add(typeGen.fileGen);
-      }
-    }
-    for (var m in _messageGenerators) {
-      m.addImportsTo(imports, enumImports);
-    }
-    for (var x in _extensionGenerators) {
-      x.addImportsTo(imports, enumImports);
-    }
-  }
-
-  // Returns the number of enums in this message and all nested messages.
-  int get enumCount {
-    var count = _enumGenerators.length;
-    for (var m in _messageGenerators) {
-      count += m.enumCount;
-    }
-    return count;
-  }
-
-  /// Adds dependencies of [generateConstants] to [imports].
-  ///
-  /// For each .pbjson.dart file that the generated code needs to import,
-  /// add its generator.
-  void addConstantImportsTo(Set<FileGenerator> imports) {
-    if (_fieldList == null) throw new StateError("message not resolved");
-    for (var m in _messageGenerators) {
-      m.addConstantImportsTo(imports);
-    }
-    for (var x in _extensionGenerators) {
-      x.addConstantImportsTo(imports);
-    }
-  }
-
-  void generate(IndentingWriter out) {
-    checkResolved();
-
-    for (MessageGenerator m in _messageGenerators) {
-      // Don't output the generated map entry type. Instead, the `PbMap` type
-      // from the protobuf library is used to hold the keys and values.
-      if (m._descriptor.options.hasMapEntry()) continue;
-      m.generate(out);
-    }
-
-    var mixinClause = '';
-    if (mixin != null) {
-      var mixinNames = mixin.findMixinsToApply().map((m) => m.name);
-      mixinClause = ' with ${mixinNames.join(", ")}';
-    }
-
-    String packageClause = package == ''
-        ? ''
-        : ', package: const $_protobufImportPrefix.PackageName(\'$package\')';
-    out.addBlock(
-        'class ${classname} extends $_protobufImportPrefix.GeneratedMessage${mixinClause} {',
-        '}', () {
-      out.addBlock(
-          'static final $_protobufImportPrefix.BuilderInfo _i = '
-          'new $_protobufImportPrefix.BuilderInfo(\'${messageName}\'$packageClause)',
-          ';', () {
-        for (ProtobufField field in _fieldList) {
-          var dartFieldName = field.memberNames.fieldName;
-          out.println(field.generateBuilderInfoCall(fileGen, dartFieldName));
-        }
-
-        if (_descriptor.extensionRange.length > 0) {
-          out.println('..hasExtensions = true');
-        }
-        if (!_hasRequiredFields(this, new Set())) {
-          out.println('..hasRequiredFields = false');
-        }
-      });
-
-      for (ExtensionGenerator x in _extensionGenerators) {
-        x.generate(out);
-      }
-
-      out.println();
-
-      out.println('${classname}() : super();');
-      out.println('${classname}.fromBuffer(List<int> i,'
-          ' [$_protobufImportPrefix.ExtensionRegistry r = $_protobufImportPrefix.ExtensionRegistry.EMPTY])'
-          ' : super.fromBuffer(i, r);');
-      out.println('${classname}.fromJson(String i,'
-          ' [$_protobufImportPrefix.ExtensionRegistry r = $_protobufImportPrefix.ExtensionRegistry.EMPTY])'
-          ' : super.fromJson(i, r);');
-      out.println('${classname} clone() =>'
-          ' new ${classname}()..mergeFromMessage(this);');
-      out.println('$classname copyWith(void Function($classname) updates) =>'
-          ' super.copyWith((message) => updates(message as $classname));');
-
-      out.println('$_protobufImportPrefix.BuilderInfo get info_ => _i;');
-
-      // Factory functions which can be used as default value closures.
-      out.println('static ${classname} create() =>'
-          ' new ${classname}();');
-      out.println(
-          'static $_protobufImportPrefix.PbList<${classname}> createRepeated() =>'
-          ' new $_protobufImportPrefix.PbList<${classname}>();');
-      out.println(
-          'static ${classname} getDefault() => _defaultInstance ??= create()..freeze();');
-      out.println('static ${classname} _defaultInstance;');
-      out.addBlock('static void $checkItem($classname v) {', '}', () {
-        out.println('if (v is! $classname)'
-            " $_protobufImportPrefix.checkItemFailed(v, _i.qualifiedMessageName);");
-      });
-      generateFieldsAccessorsMutators(out);
-      if (fullName == 'google.protobuf.Any') {
-        generateAnyMethods(out);
-      }
-    });
-    out.println();
-  }
-
-  // Returns true if the message type has any required fields.  If it doesn't,
-  // we can optimize out calls to its isInitialized()/_findInvalidFields()
-  // methods.
-  //
-  // already_seen is used to avoid checking the same type multiple times
-  // (and also to protect against unbounded recursion).
-  bool _hasRequiredFields(MessageGenerator type, Set alreadySeen) {
-    if (type._fieldList == null) throw new StateError("message not resolved");
-
-    if (alreadySeen.contains(type.fullName)) {
-      // The type is already in cache.  This means that either:
-      // a. The type has no required fields.
-      // b. We are in the midst of checking if the type has required fields,
-      //    somewhere up the stack.  In this case, we know that if the type
-      //    has any required fields, they'll be found when we return to it,
-      //    and the whole call to HasRequiredFields() will return true.
-      //    Therefore, we don't have to check if this type has required fields
-      //    here.
-      return false;
-    }
-    alreadySeen.add(type.fullName);
-    // If the type has extensions, an extension with message type could contain
-    // required fields, so we have to be conservative and assume such an
-    // extension exists.
-    if (type._descriptor.extensionRange.length > 0) {
-      return true;
-    }
-
-    for (ProtobufField field in type._fieldList) {
-      if (field.isRequired) {
-        return true;
-      }
-      if (field.baseType.isMessage) {
-        MessageGenerator child = field.baseType.generator;
-        if (_hasRequiredFields(child, alreadySeen)) {
-          return true;
-        }
-      }
-    }
-    return false;
-  }
-
-  /// Generates methods for the Any message class for packing and unpacking
-  /// values.
-  void generateAnyMethods(IndentingWriter out) {
-    out.println('''
-  /// Unpacks the message in [value] into [instance].
-  ///
-  /// Throws a [InvalidProtocolBufferException] if [typeUrl] does not correspond
-  /// to the type of [instance].
-  ///
-  /// A typical usage would be `any.unpackInto(new Message())`.
-  ///
-  /// Returns [instance].
-  T unpackInto<T extends $_protobufImportPrefix.GeneratedMessage>(T instance,
-      {$_protobufImportPrefix.ExtensionRegistry extensionRegistry = $_protobufImportPrefix.ExtensionRegistry.EMPTY}) {
-    $_protobufImportPrefix.unpackIntoHelper(value, instance, typeUrl,
-        extensionRegistry: extensionRegistry);
-    return instance;
-  }
-
-  /// Returns `true` if the encoded message matches the type of [instance].
-  ///
-  /// Can be used with a default instance:
-  /// `any.canUnpackInto(Message.getDefault())`
-  bool canUnpackInto($_protobufImportPrefix.GeneratedMessage instance) {
-    return $_protobufImportPrefix.canUnpackIntoHelper(instance, typeUrl);
-  }
-
-  /// Creates a new [Any] encoding [message].
-  ///
-  /// The [typeUrl] will be [typeUrlPrefix]/`fullName` where `fullName` is
-  /// the fully qualified name of the type of [message].
-  static Any pack($_protobufImportPrefix.GeneratedMessage message,
-      {String typeUrlPrefix = 'type.googleapis.com'}) {
-    return new Any()
-      ..value = message.writeToBuffer()
-      ..typeUrl = '\${typeUrlPrefix}/\${message.info_.qualifiedMessageName}';
-  }''');
-  }
-
-  void generateFieldsAccessorsMutators(IndentingWriter out) {
-    for (ProtobufField field in _fieldList) {
-      out.println();
-      generateFieldAccessorsMutators(field, out);
-    }
-  }
-
-  void generateFieldAccessorsMutators(
-      ProtobufField field, IndentingWriter out) {
-    var fieldTypeString = field.getDartType(fileGen);
-    var defaultExpr = field.getDefaultExpr();
-    var names = field.memberNames;
-
-    _emitOverrideIf(field.overridesGetter, out);
-    final getterExpr = _getterExpression(fieldTypeString, field.index,
-        defaultExpr, field.isRepeated, field.isMapField);
-    out.println('${fieldTypeString} get ${names.fieldName} => ${getterExpr};');
-
-    if (field.isRepeated) {
-      if (field.overridesSetter) {
-        throw 'Field ${field.fullName} cannot override a setter for '
-            '${names.fieldName} because it is repeated.';
-      }
-      if (field.overridesHasMethod) {
-        throw 'Field ${field.fullName} cannot override '
-            '${names.hasMethodName}() because it is repeated.';
-      }
-      if (field.overridesClearMethod) {
-        throw 'Field ${field.fullName} cannot override '
-            '${names.clearMethodName}() because it is repeated.';
-      }
-    } else {
-      var fastSetter = field.baseType.setter;
-      _emitOverrideIf(field.overridesSetter, out);
-      if (fastSetter != null) {
-        out.println('set ${names.fieldName}'
-            '($fieldTypeString v) { '
-            '$fastSetter(${field.index}, v);'
-            ' }');
-      } else {
-        out.println('set ${names.fieldName}'
-            '($fieldTypeString v) { '
-            'setField(${field.number}, v);'
-            ' }');
-      }
-      _emitOverrideIf(field.overridesHasMethod, out);
-      out.println('bool ${names.hasMethodName}() =>'
-          ' \$_has(${field.index});');
-      _emitOverrideIf(field.overridesClearMethod, out);
-      out.println('void ${names.clearMethodName}() =>'
-          ' clearField(${field.number});');
-    }
-  }
-
-  String _getterExpression(String fieldType, int index, String defaultExpr,
-      bool isRepeated, bool isMapField) {
-    if (isMapField) {
-      return '\$_getMap($index)';
-    }
-    if (fieldType == 'String') {
-      return '\$_getS($index, $defaultExpr)';
-    }
-    if (fieldType == 'Int64' && defaultExpr == 'null') {
-      return '\$_getI64($index)';
-    }
-    if (defaultExpr == 'null') {
-      return isRepeated ? '\$_getList($index)' : '\$_getN($index)';
-    }
-    return '\$_get($index, $defaultExpr)';
-  }
-
-  void _emitOverrideIf(bool condition, IndentingWriter out) {
-    if (condition) {
-      out.println('@override');
-    }
-  }
-
-  void generateEnums(IndentingWriter out) {
-    for (EnumGenerator e in _enumGenerators) {
-      e.generate(out);
-    }
-
-    for (MessageGenerator m in _messageGenerators) {
-      m.generateEnums(out);
-    }
-  }
-
-  /// Writes a Dart constant containing the JSON for the ProtoDescriptor.
-  /// Also writes a separate constant for each nested message,
-  /// to avoid duplication.
-  void generateConstants(IndentingWriter out) {
-    const nestedTypeTag = 3;
-    const enumTypeTag = 4;
-    assert(_descriptor.info_.fieldInfo[nestedTypeTag].name == "nestedType");
-    assert(_descriptor.info_.fieldInfo[enumTypeTag].name == "enumType");
-
-    var name = getJsonConstant(fileGen);
-    var json = _descriptor.writeToJsonMap();
-    var nestedTypeNames =
-        _messageGenerators.map((m) => m.getJsonConstant(fileGen)).toList();
-    var nestedEnumNames =
-        _enumGenerators.map((e) => e.getJsonConstant(fileGen)).toList();
-
-    out.addBlock("const $name = const {", "};", () {
-      for (var key in json.keys) {
-        out.print("'$key': ");
-        if (key == "$nestedTypeTag") {
-          // refer to message constants by name instead of repeating each value
-          out.println("const [${nestedTypeNames.join(", ")}],");
-          continue;
-        } else if (key == "$enumTypeTag") {
-          // refer to enum constants by name
-          out.println("const [${nestedEnumNames.join(", ")}],");
-          continue;
-        }
-        writeJsonConst(out, json[key]);
-        out.println(",");
-      }
-    });
-    out.println();
-
-    for (var m in _messageGenerators) {
-      m.generateConstants(out);
-    }
-
-    for (var e in _enumGenerators) {
-      e.generateConstants(out);
-    }
-  }
-}
diff --git a/lib/names.dart b/lib/names.dart
deleted file mode 100644
index a974bec..0000000
--- a/lib/names.dart
+++ /dev/null
@@ -1,441 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:protobuf/meta.dart';
-import 'package:protoc_plugin/src/dart_options.pb.dart';
-import 'package:protoc_plugin/src/descriptor.pb.dart';
-
-/// A Dart function called on each item added to a repeated list
-/// to check its type and range.
-const checkItem = '\$checkItem';
-
-/// The Dart member names in a GeneratedMessage subclass for one protobuf field.
-class MemberNames {
-  /// The descriptor of the field these member names apply to.
-  final FieldDescriptorProto descriptor;
-
-  /// The index of this field in MessageGenerator.fieldList.
-  /// The same index will be stored in FieldInfo.index.
-  final int index;
-
-  /// Identifier for generated getters/setters.
-  final String fieldName;
-
-  /// Identifier for the generated hasX() method, without braces.
-  ///
-  /// `null` for repeated fields.
-  final String hasMethodName;
-
-  /// Identifier for the generated clearX() method, without braces.
-  ///
-  /// `null` for repeated fields.
-  final String clearMethodName;
-
-  MemberNames(this.descriptor, this.index, this.fieldName,
-      {this.hasMethodName, this.clearMethodName});
-}
-
-/// Move any initial underscores in [input] to the end.
-///
-/// According to the spec identifiers cannot start with _, but it seems to be
-/// accepted by protoc.
-///
-/// These identifiers are private in Dart, so they have to be transformed.
-String avoidInitialUnderscore(String input) {
-  while (input.startsWith('_')) {
-    input = '${input.substring(1)}_';
-  }
-  return input;
-}
-
-/// Returns [input] surrounded by single quotes and with all '$'s escaped.
-String singleQuote(String input) {
-  return "'${input.replaceAll(r'$', r'\$')}'";
-}
-
-/// Chooses the Dart name of an extension.
-String extensionName(FieldDescriptorProto descriptor, Set<String> usedNames) {
-  return _unusedMemberNames(descriptor, null, usedNames).fieldName;
-}
-
-Iterable<String> extensionSuffixes() sync* {
-  yield "Ext";
-  int i = 2;
-  while (true) {
-    yield '$i';
-    i++;
-  }
-}
-
-/// Replaces all characters in [imput] that are not valid in a dart identifier
-/// with _.
-///
-/// This function does not take care of leading underscores.
-String legalDartIdentifier(String imput) {
-  return imput.replaceAll(new RegExp(r'[^a-zA-Z0-9$_]'), '_');
-}
-
-/// Chooses the name of the Dart class holding top-level extensions.
-String extensionClassName(
-    FileDescriptorProto descriptor, Set<String> usedNames) {
-  String s = avoidInitialUnderscore(
-      legalDartIdentifier(_fileNameWithoutExtension(descriptor)));
-  String candidate = '${s[0].toUpperCase()}${s.substring(1)}';
-  return disambiguateName(candidate, usedNames, extensionSuffixes());
-}
-
-String _fileNameWithoutExtension(FileDescriptorProto descriptor) {
-  Uri path = new Uri.file(descriptor.name);
-  String fileName = path.pathSegments.last;
-  int dot = fileName.lastIndexOf(".");
-  return dot == -1 ? fileName : fileName.substring(0, dot);
-}
-
-// Exception thrown when a field has an invalid 'dart_name' option.
-class DartNameOptionException implements Exception {
-  final String message;
-  DartNameOptionException(this.message);
-  String toString() => "$message";
-}
-
-/// Returns a [name] that is not contained in [usedNames] by suffixing it with
-/// the first possible suffix from [suffixes].
-///
-/// The chosen name is added to [usedNames].
-///
-/// If [variants] is given, all the variants of a name must be available before
-/// that name is chosen, and all the chosen variants will be added to
-/// [usedNames].
-/// The returned name is that, which will generate the accepted variants.
-String disambiguateName(
-    String name, Set<String> usedNames, Iterable<String> suffixes,
-    {List<String> Function(String candidate) generateVariants}) {
-  generateVariants ??= (String name) => <String>[name];
-
-  bool allVariantsAvailable(List<String> variants) {
-    return variants.every((String variant) => !usedNames.contains(variant));
-  }
-
-  String usedSuffix = '';
-  List<String> candidateVariants = generateVariants(name);
-
-  if (!allVariantsAvailable(candidateVariants)) {
-    for (String suffix in suffixes) {
-      candidateVariants = generateVariants('$name$suffix');
-      if (allVariantsAvailable(candidateVariants)) {
-        usedSuffix = suffix;
-        break;
-      }
-    }
-  }
-
-  usedNames.addAll(candidateVariants);
-  return '$name$usedSuffix';
-}
-
-Iterable<String> defaultSuffixes() sync* {
-  yield '_';
-  int i = 0;
-  while (true) {
-    yield ('_$i');
-    i++;
-  }
-}
-
-/// Chooses the name of the Dart class to generate for a proto message or enum.
-///
-/// For a nested message or enum, [parent] should be provided
-/// with the name of the Dart class for the immediate parent.
-String messageOrEnumClassName(String descriptorName, Set<String> usedNames,
-    {String parent = ''}) {
-  if (parent != '') {
-    descriptorName = '${parent}_${descriptorName}';
-  }
-  return disambiguateName(
-      avoidInitialUnderscore(descriptorName), usedNames, defaultSuffixes());
-}
-
-/// Returns the set of names reserved by the ProtobufEnum class and its
-/// generated subclasses.
-Set<String> get reservedEnumNames => new Set<String>()
-  ..addAll(ProtobufEnum_reservedNames)
-  ..addAll(_protobufEnumNames);
-
-Iterable<String> enumSuffixes() sync* {
-  String s = '_';
-  while (true) {
-    yield s;
-    s += '_';
-  }
-}
-
-/// Chooses the GeneratedMessage member names for each field.
-///
-/// Additional names to avoid can be supplied using [reserved].
-/// (This should only be used for mixins.)
-///
-/// Returns a map from the field name in the .proto file to its
-/// corresponding MemberNames.
-///
-/// Throws [DartNameOptionException] if a field has this option and
-/// it's set to an invalid name.
-Map<String, MemberNames> messageFieldNames(DescriptorProto descriptor,
-    {Iterable<String> reserved = const []}) {
-  var sorted = new List<FieldDescriptorProto>.from(descriptor.field)
-    ..sort((FieldDescriptorProto a, FieldDescriptorProto b) {
-      if (a.number < b.number) return -1;
-      if (a.number > b.number) return 1;
-      throw "multiple fields defined for tag ${a.number} in ${descriptor.name}";
-    });
-
-  // Choose indexes first, based on their position in the sorted list.
-  var indexes = <String, int>{};
-  for (var field in sorted) {
-    var index = indexes.length;
-    indexes[field.name] = index;
-  }
-
-  var existingNames = new Set<String>()
-    ..addAll(reservedMemberNames)
-    ..addAll(reserved);
-
-  var memberNames = <String, MemberNames>{};
-
-  void takeNames(MemberNames chosen) {
-    memberNames[chosen.descriptor.name] = chosen;
-
-    existingNames.add(chosen.fieldName);
-    if (chosen.hasMethodName != null) {
-      existingNames.add(chosen.hasMethodName);
-    }
-    if (chosen.clearMethodName != null) {
-      existingNames.add(chosen.clearMethodName);
-    }
-  }
-
-  // Handle fields with a dart_name option.
-  // They have higher priority than automatically chosen names.
-  // Explicitly setting a name that's already taken is a build error.
-  for (var field in sorted) {
-    if (_nameOption(field).isNotEmpty) {
-      takeNames(_memberNamesFromOption(
-          descriptor, field, indexes[field.name], existingNames));
-    }
-  }
-
-  // Then do other fields.
-  // They are automatically renamed until we find something unused.
-  for (var field in sorted) {
-    if (_nameOption(field).isEmpty) {
-      var index = indexes[field.name];
-      takeNames(_unusedMemberNames(field, index, existingNames));
-    }
-  }
-
-  // Return a map with entries in sorted order.
-  var result = <String, MemberNames>{};
-  for (var field in sorted) {
-    result[field.name] = memberNames[field.name];
-  }
-  return result;
-}
-
-/// Chooses the member names for a field that has the 'dart_name' option.
-///
-/// If the explicitly-set Dart name is already taken, throw an exception.
-/// (Fails the build.)
-MemberNames _memberNamesFromOption(DescriptorProto message,
-    FieldDescriptorProto field, int index, Set<String> existingNames) {
-  // TODO(skybrian): provide more context in errors (filename).
-  var where = "${message.name}.${field.name}";
-
-  void checkAvailable(String name) {
-    if (existingNames.contains(name)) {
-      throw new DartNameOptionException(
-          "$where: dart_name option is invalid: '$name' is already used");
-    }
-  }
-
-  var name = _nameOption(field);
-  if (name.isEmpty) {
-    throw new ArgumentError("field doesn't have dart_name option");
-  }
-  if (!_isDartFieldName(name)) {
-    throw new DartNameOptionException("$where: dart_name option is invalid: "
-        "'$name' is not a valid Dart field name");
-  }
-  checkAvailable(name);
-
-  if (_isRepeated(field)) {
-    return new MemberNames(field, index, name);
-  }
-
-  String hasMethod = "has${_capitalize(name)}";
-  checkAvailable(hasMethod);
-
-  String clearMethod = "clear${_capitalize(name)}";
-  checkAvailable(clearMethod);
-
-  return new MemberNames(field, index, name,
-      hasMethodName: hasMethod, clearMethodName: clearMethod);
-}
-
-Iterable<String> _memberNamesSuffix(int number) sync* {
-  String suffix = '_$number';
-  while (true) {
-    yield suffix;
-    suffix = '${suffix}_$number';
-  }
-}
-
-MemberNames _unusedMemberNames(
-    FieldDescriptorProto field, int index, Set<String> existingNames) {
-  if (_isRepeated(field)) {
-    return new MemberNames(
-        field,
-        index,
-        disambiguateName(_defaultFieldName(_fieldMethodSuffix(field)),
-            existingNames, _memberNamesSuffix(field.number)));
-  }
-
-  List<String> generateNameVariants(String name) {
-    return [
-      _defaultFieldName(name),
-      _defaultHasMethodName(name),
-      _defaultClearMethodName(name)
-    ];
-  }
-
-  String name = disambiguateName(_fieldMethodSuffix(field), existingNames,
-      _memberNamesSuffix(field.number),
-      generateVariants: generateNameVariants);
-  return new MemberNames(field, index, _defaultFieldName(name),
-      hasMethodName: _defaultHasMethodName(name),
-      clearMethodName: _defaultClearMethodName(name));
-}
-
-/// The name to use by default for the Dart getter and setter.
-/// (A suffix will be added if there is a conflict.)
-String _defaultFieldName(String fieldMethodSuffix) {
-  return '${fieldMethodSuffix[0].toLowerCase()}${fieldMethodSuffix.substring(1)}';
-}
-
-String _defaultHasMethodName(String fieldMethodSuffix) =>
-    'has$fieldMethodSuffix';
-
-String _defaultClearMethodName(String fieldMethodSuffix) =>
-    'clear$fieldMethodSuffix';
-
-/// The suffix to use for this field in Dart method names.
-/// (It should be camelcase and begin with an uppercase letter.)
-String _fieldMethodSuffix(FieldDescriptorProto field) {
-  var name = _nameOption(field);
-  if (name.isNotEmpty) return _capitalize(name);
-
-  if (field.type != FieldDescriptorProto_Type.TYPE_GROUP) {
-    return _underscoresToCamelCase(field.name);
-  }
-
-  // For groups, use capitalization of 'typeName' rather than 'name'.
-  name = field.typeName;
-  int index = name.lastIndexOf('.');
-  if (index != -1) {
-    name = name.substring(index + 1);
-  }
-  return _underscoresToCamelCase(name);
-}
-
-String _underscoresToCamelCase(s) => s.split('_').map(_capitalize).join('');
-
-String _capitalize(s) =>
-    s.isEmpty ? s : '${s[0].toUpperCase()}${s.substring(1)}';
-
-bool _isRepeated(FieldDescriptorProto field) =>
-    field.label == FieldDescriptorProto_Label.LABEL_REPEATED;
-
-String _nameOption(FieldDescriptorProto field) =>
-    field.options.getExtension(Dart_options.dartName);
-
-bool _isDartFieldName(name) => name.startsWith(_dartFieldNameExpr);
-
-final _dartFieldNameExpr = new RegExp(r'^[a-z]\w+$');
-
-/// Names that would collide with capitalized core Dart names as top-level
-/// identifiers.
-final List<String> toplevelReservedCapitalizedNames = const <String>[
-  'List',
-  'Function',
-  'Map',
-];
-
-final List<String> reservedMemberNames = <String>[]
-  ..addAll(_dartReservedWords)
-  ..addAll(GeneratedMessage_reservedNames)
-  ..addAll(_generatedMessageNames);
-
-final List<String> forbiddenExtensionNames = <String>[]
-  ..addAll(_dartReservedWords)
-  ..addAll(GeneratedMessage_reservedNames)
-  ..addAll(_generatedMessageNames);
-
-// List of Dart language reserved words in names which cannot be used in a
-// subclass of GeneratedMessage.
-const List<String> _dartReservedWords = const [
-  'assert',
-  'break',
-  'case',
-  'catch',
-  'class',
-  'const',
-  'continue',
-  'default',
-  'do',
-  'else',
-  'enum',
-  'extends',
-  'false',
-  'final',
-  'finally',
-  'for',
-  'if',
-  'in',
-  'is',
-  'new',
-  'null',
-  'rethrow',
-  'return',
-  'super',
-  'switch',
-  'this',
-  'throw',
-  'true',
-  'try',
-  'var',
-  'void',
-  'while',
-  'with'
-];
-
-// List of names used in the generated message classes.
-//
-// This is in addition to GeneratedMessage_reservedNames, which are names from
-// the base GeneratedMessage class determined by reflection.
-const _generatedMessageNames = const <String>[
-  'create',
-  'createRepeated',
-  'getDefault',
-  'List',
-  checkItem
-];
-
-// List of names used in the generated enum classes.
-//
-// This is in addition to ProtobufEnum_reservedNames, which are names from the
-// base ProtobufEnum class determined by reflection.
-const _protobufEnumNames = const <String>[
-  'List',
-  'valueOf',
-  'values',
-  checkItem
-];
diff --git a/lib/options.dart b/lib/options.dart
deleted file mode 100644
index c8fc4a6..0000000
--- a/lib/options.dart
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-/// Helper function implementing a generic option parser that reads
-/// `request.parameters` and treats each token as either a flag ("name") or a
-/// key-value pair ("name=value"). For each option "name", it looks up whether a
-/// [SingleOptionParser] exists in [parsers] and delegates the actual parsing of
-/// the option to it. Returns `true` if no errors were reported.
-bool genericOptionsParser(CodeGeneratorRequest request,
-    CodeGeneratorResponse response, Map<String, SingleOptionParser> parsers) {
-  var parameter = request.parameter != null ? request.parameter : '';
-  var options = parameter.trim().split(',');
-  var errors = [];
-
-  for (var option in options) {
-    option = option.trim();
-    if (option.isEmpty) continue;
-    void reportError(String details) {
-      errors.add('Error found trying to parse the option: $option.\n$details');
-    }
-
-    var nameValue = option.split('=');
-    if (nameValue.length != 1 && nameValue.length != 2) {
-      reportError('Options should be a single token, or a name=value pair');
-      continue;
-    }
-    var name = nameValue[0].trim();
-    var parser = parsers[name];
-    if (parser == null) {
-      reportError('Unknown option ($name).');
-      continue;
-    }
-
-    var value = nameValue.length > 1 ? nameValue[1].trim() : null;
-    parser.parse(name, value, reportError);
-  }
-
-  if (errors.length == 0) return true;
-
-  response.error = errors.join('\n');
-  return false;
-}
-
-/// Options expected by the protoc code generation compiler.
-class GenerationOptions {
-  final bool useGrpc;
-
-  GenerationOptions({this.useGrpc = false});
-}
-
-/// A parser for a name-value pair option. Options parsed in
-/// [genericOptionsParser] delegate to instances of this class to
-/// parse the value of a specific option.
-abstract class SingleOptionParser {
-  /// Parse the [name]=[value] value pair and report any errors to [onError]. If
-  /// the option is a flag, [value] will be null. Note, [name] is commonly
-  /// unused. It is provided because [SingleOptionParser] can be registered for
-  /// multiple option names in [genericOptionsParser].
-  void parse(String name, String value, onError(String details));
-}
-
-class GrpcOptionParser implements SingleOptionParser {
-  bool grpcEnabled = false;
-
-  @override
-  void parse(String name, String value, onError(String details)) {
-    if (value != null) {
-      onError('Invalid grpc option. No value expected.');
-      return;
-    }
-    grpcEnabled = true;
-  }
-}
-
-/// Parser used by the compiler, which supports the `rpc` option (see
-/// [RpcOptionParser]) and any additional option added in [parsers]. If
-/// [parsers] has a key for `rpc`, it will be ignored.
-GenerationOptions parseGenerationOptions(
-    CodeGeneratorRequest request, CodeGeneratorResponse response,
-    [Map<String, SingleOptionParser> parsers]) {
-  final newParsers = <String, SingleOptionParser>{};
-  if (parsers != null) newParsers.addAll(parsers);
-
-  final grpcOptionParser = new GrpcOptionParser();
-  newParsers['grpc'] = grpcOptionParser;
-
-  if (genericOptionsParser(request, response, newParsers)) {
-    return new GenerationOptions(useGrpc: grpcOptionParser.grpcEnabled);
-  }
-  return null;
-}
diff --git a/lib/output_config.dart b/lib/output_config.dart
deleted file mode 100644
index 534f24e..0000000
--- a/lib/output_config.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-/// Configures where output of the protoc compiler should be placed and how to
-/// import one generated file from another.
-abstract class OutputConfiguration {
-  const OutputConfiguration();
-
-  /// Resolves an import of a generated Dart file.
-  ///
-  /// Both [source] and [target] are .proto files, where [source] imports
-  /// [target].
-  ///
-  /// The returned URI can be used within one of the source's dart files to
-  /// import the target's generated file with the given extension.
-  Uri resolveImport(Uri target, Uri source, String extension);
-
-  /// Returns the path where the .pb.dart file will be placed.
-  ///
-  /// The input is a .proto file and the output is a path under the output
-  /// folder.
-  Uri outputPathFor(Uri inputPath, String extension);
-}
-
-/// Default [OutputConfiguration] that uses the same path as the input
-/// file for the output file (just replaces the extension), and that uses
-/// relative paths to resolve imports.
-class DefaultOutputConfiguration extends OutputConfiguration {
-  const DefaultOutputConfiguration();
-
-  @override
-  Uri outputPathFor(Uri input, String extension) {
-    var base = path.withoutExtension(path.url.fromUri(input));
-    return path.url.toUri('$base$extension');
-  }
-
-  @override
-  Uri resolveImport(Uri target, Uri source, String extension) {
-    var targetPath = path.url.fromUri(target);
-    var sourceDir = path.url.dirname(path.url.fromUri(source));
-    var base =
-        path.withoutExtension(path.url.relative(targetPath, from: sourceDir));
-    return path.url.toUri('$base$extension');
-  }
-}
diff --git a/lib/protobuf_field.dart b/lib/protobuf_field.dart
deleted file mode 100644
index 83eca16..0000000
--- a/lib/protobuf_field.dart
+++ /dev/null
@@ -1,335 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-class ProtobufField {
-  static final RegExp HEX_LITERAL_REGEX =
-      new RegExp(r'^0x[0-9a-f]+$', multiLine: false, caseSensitive: false);
-  static final RegExp INTEGER_LITERAL_REGEX = new RegExp(r'^[+-]?[0-9]+$');
-  static final RegExp DECIMAL_LITERAL_REGEX_A = new RegExp(
-      r'^[+-]?([0-9]*)\.[0-9]+(e[+-]?[0-9]+)?$',
-      multiLine: false,
-      caseSensitive: false);
-  static final RegExp DECIMAL_LITERAL_REGEX_B = new RegExp(
-      r'^[+-]?[0-9]+e[+-]?[0-9]+$',
-      multiLine: false,
-      caseSensitive: false);
-
-  final FieldDescriptorProto descriptor;
-
-  /// Dart names within a GeneratedMessage or `null` for an extension.
-  final MemberNames memberNames;
-
-  final String fullName;
-  final BaseType baseType;
-
-  ProtobufField.message(
-      MemberNames names, ProtobufContainer parent, GenerationContext ctx)
-      : this._(names.descriptor, names, parent, ctx);
-
-  ProtobufField.extension(FieldDescriptorProto descriptor,
-      ProtobufContainer parent, GenerationContext ctx)
-      : this._(descriptor, null, parent, ctx);
-
-  ProtobufField._(FieldDescriptorProto descriptor, MemberNames dartNames,
-      ProtobufContainer parent, GenerationContext ctx)
-      : this.descriptor = descriptor,
-        this.memberNames = dartNames,
-        fullName = '${parent.fullName}.${descriptor.name}',
-        baseType = new BaseType(descriptor, ctx);
-
-  /// The index of this field in MessageGenerator.fieldList.
-  ///
-  /// `null` for an extension.
-  int get index => memberNames?.index;
-
-  bool get isRequired =>
-      descriptor.label == FieldDescriptorProto_Label.LABEL_REQUIRED;
-
-  bool get isRepeated =>
-      descriptor.label == FieldDescriptorProto_Label.LABEL_REPEATED;
-
-  /// True if the field is to be encoded with [packed=true] encoding.
-  bool get isPacked =>
-      isRepeated && descriptor.options != null && descriptor.options.packed;
-
-  /// Whether the field has the `overrideGetter` annotation set to true.
-  bool get overridesGetter => _hasBooleanOption(Dart_options.overrideGetter);
-
-  /// Whether the field has the `overrideSetter` annotation set to true.
-  bool get overridesSetter => _hasBooleanOption(Dart_options.overrideSetter);
-
-  /// Whether the field has the `overrideHasMethod` annotation set to true.
-  bool get overridesHasMethod =>
-      _hasBooleanOption(Dart_options.overrideHasMethod);
-
-  /// Whether the field has the `overrideClearMethod` annotation set to true.
-  bool get overridesClearMethod =>
-      _hasBooleanOption(Dart_options.overrideClearMethod);
-
-  /// True if this field uses the Int64 from the fixnum package.
-  bool get needsFixnumImport => baseType.unprefixed == "Int64";
-
-  /// True if this field is a map field definition: `map<key_type, value_type> map_field = N`.
-  bool get isMapField {
-    if (!isRepeated || !baseType.isMessage) return false;
-    MessageGenerator generator = baseType.generator;
-    return generator._descriptor.options.hasMapEntry();
-  }
-
-  /// Returns the expression to use for the Dart type.
-  ///
-  /// This will be a List for repeated types.
-  /// [fileGen] represents the .proto file where we are generating code.
-  String getDartType(FileGenerator fileGen) {
-    if (isMapField) {
-      MessageGenerator d = baseType.generator;
-      String keyType = d._fieldList[0].baseType.getDartType(fileGen);
-      String valueType = d._fieldList[1].baseType.getDartType(fileGen);
-      return 'Map<$keyType, $valueType>';
-    }
-    if (isRepeated) return baseType.getRepeatedDartType(fileGen);
-    return baseType.getDartType(fileGen);
-  }
-
-  /// Returns the tag number of the underlying proto field.
-  int get number => descriptor.number;
-
-  /// Returns the constant in PbFieldType corresponding to this type.
-  String get typeConstant {
-    String prefix = 'O';
-    if (isRequired) {
-      prefix = 'Q';
-    } else if (isPacked) {
-      prefix = 'K';
-    } else if (isRepeated) {
-      prefix = 'P';
-    }
-    return "$_protobufImportPrefix.PbFieldType." +
-        prefix +
-        baseType.typeConstantSuffix;
-  }
-
-  /// Returns Dart code adding this field to a BuilderInfo object.
-  /// The call will start with ".." and a method name.
-  /// [fileGen] represents the .proto file where the code will be evaluated.
-  String generateBuilderInfoCall(FileGenerator fileGen, String dartFieldName) {
-    String quotedName = "'$dartFieldName'";
-    String type = baseType.getDartType(fileGen);
-
-    if (isMapField) {
-      MessageGenerator generator = baseType.generator;
-      ProtobufField key = generator._fieldList[0];
-      ProtobufField value = generator._fieldList[1];
-      String keyType = key.baseType.getDartType(fileGen);
-      String valueType = value.baseType.getDartType(fileGen);
-      String keyTypeConstant = key.typeConstant;
-      String valTypeConstant = value.typeConstant;
-
-      if (value.baseType.isMessage || value.baseType.isGroup) {
-        return '..m<$keyType, $valueType>($number, $quotedName, '
-            '$keyTypeConstant, $valTypeConstant, $valueType.create)';
-      }
-      if (value.baseType.isEnum) {
-        return '..m<$keyType, $valueType>($number, $quotedName, '
-            '$keyTypeConstant, $valTypeConstant, null, $valueType.valueOf, '
-            '$valueType.values)';
-      }
-      return '..m<$keyType, $valueType>($number, $quotedName, '
-          '$keyTypeConstant, $valTypeConstant)';
-    }
-
-    if (isRepeated) {
-      if (baseType.isMessage || baseType.isGroup) {
-        return '..pp<$type>($number, $quotedName, $typeConstant,'
-            ' $type.$checkItem, $type.create)';
-      }
-      if (baseType.isEnum) {
-        return '..pp<$type>($number, $quotedName, $typeConstant,'
-            ' $type.$checkItem, null, $type.valueOf, $type.values)';
-      }
-      if (typeConstant == '$_protobufImportPrefix.PbFieldType.PS') {
-        return '..pPS($number, $quotedName)';
-      }
-      return '..p<$type>($number, $quotedName, $typeConstant)';
-    }
-
-    String makeDefault = generateDefaultFunction(fileGen);
-    if (baseType.isEnum) {
-      String enumParams = '$type.valueOf, $type.values';
-      return '..e<$type>('
-          '$number, $quotedName, $typeConstant, $makeDefault, $enumParams)';
-    }
-
-    String prefix = '..a<$type>($number, $quotedName, $typeConstant';
-    if (makeDefault == null) {
-      switch (type) {
-        case 'String':
-          if (typeConstant == '$_protobufImportPrefix.PbFieldType.OS') {
-            return '..aOS($number, $quotedName)';
-          } else if (typeConstant == '$_protobufImportPrefix.PbFieldType.QS') {
-            return '..aQS($number, $quotedName)';
-          }
-          break;
-        case 'bool':
-          if (typeConstant == '$_protobufImportPrefix.PbFieldType.OB') {
-            return '..aOB($number, $quotedName)';
-          }
-          break;
-        default:
-          break;
-      }
-      return prefix + ')';
-    }
-
-    if (makeDefault == 'Int64.ZERO' &&
-        type == 'Int64' &&
-        typeConstant == '$_protobufImportPrefix.PbFieldType.O6') {
-      return '..aInt64($number, $quotedName)';
-    }
-
-    if (baseType.isMessage || baseType.isGroup) {
-      return prefix + ', $makeDefault, $type.create)';
-    }
-
-    return prefix + ', $makeDefault)';
-  }
-
-  /// Returns a Dart expression that evaluates to this field's default value.
-  ///
-  /// Returns "null" if unavailable, in which case FieldSet._getDefault()
-  /// should be called instead.
-  String getDefaultExpr() {
-    if (isRepeated) return "null";
-    switch (descriptor.type) {
-      case FieldDescriptorProto_Type.TYPE_BOOL:
-        return _getDefaultAsBoolExpr("false");
-      case FieldDescriptorProto_Type.TYPE_INT32:
-      case FieldDescriptorProto_Type.TYPE_UINT32:
-      case FieldDescriptorProto_Type.TYPE_SINT32:
-      case FieldDescriptorProto_Type.TYPE_FIXED32:
-      case FieldDescriptorProto_Type.TYPE_SFIXED32:
-        return _getDefaultAsInt32Expr("0");
-      case FieldDescriptorProto_Type.TYPE_STRING:
-        return _getDefaultAsStringExpr("''");
-      default:
-        return "null";
-    }
-  }
-
-  /// Returns a function expression that returns the field's default value.
-  ///
-  /// [fileGen] represents the .proto file where the expression will be
-  /// evaluated.
-  String generateDefaultFunction(FileGenerator fileGen) {
-    if (isRepeated) {
-      return '() => new $_protobufImportPrefix.PbList()';
-    }
-    bool sameProtoFile =
-        fileGen.protoFileUri == baseType.generator?.fileGen?.protoFileUri;
-
-    switch (descriptor.type) {
-      case FieldDescriptorProto_Type.TYPE_BOOL:
-        return _getDefaultAsBoolExpr(null);
-      case FieldDescriptorProto_Type.TYPE_FLOAT:
-      case FieldDescriptorProto_Type.TYPE_DOUBLE:
-        if (!descriptor.hasDefaultValue()) {
-          return null;
-        } else if ('0.0' == descriptor.defaultValue ||
-            '0' == descriptor.defaultValue) {
-          return null;
-        } else if (descriptor.defaultValue == 'inf') {
-          return 'double.infinity';
-        } else if (descriptor.defaultValue == '-inf') {
-          return 'double.negativeInfinity';
-        } else if (descriptor.defaultValue == 'nan') {
-          return 'double.nan';
-        } else if (HEX_LITERAL_REGEX.hasMatch(descriptor.defaultValue)) {
-          return '(${descriptor.defaultValue}).toDouble()';
-        } else if (INTEGER_LITERAL_REGEX.hasMatch(descriptor.defaultValue)) {
-          return '${descriptor.defaultValue}.0';
-        } else if (DECIMAL_LITERAL_REGEX_A.hasMatch(descriptor.defaultValue) ||
-            DECIMAL_LITERAL_REGEX_B.hasMatch(descriptor.defaultValue)) {
-          return '${descriptor.defaultValue}';
-        }
-        throw _invalidDefaultValue;
-      case FieldDescriptorProto_Type.TYPE_INT32:
-      case FieldDescriptorProto_Type.TYPE_UINT32:
-      case FieldDescriptorProto_Type.TYPE_SINT32:
-      case FieldDescriptorProto_Type.TYPE_FIXED32:
-      case FieldDescriptorProto_Type.TYPE_SFIXED32:
-        return _getDefaultAsInt32Expr(null);
-      case FieldDescriptorProto_Type.TYPE_INT64:
-      case FieldDescriptorProto_Type.TYPE_UINT64:
-      case FieldDescriptorProto_Type.TYPE_SINT64:
-      case FieldDescriptorProto_Type.TYPE_FIXED64:
-      case FieldDescriptorProto_Type.TYPE_SFIXED64:
-        var value = '0';
-        if (descriptor.hasDefaultValue()) value = descriptor.defaultValue;
-        if (value == '0') return 'Int64.ZERO';
-        return "$_protobufImportPrefix.parseLongInt('$value')";
-      case FieldDescriptorProto_Type.TYPE_STRING:
-        return _getDefaultAsStringExpr(null);
-      case FieldDescriptorProto_Type.TYPE_BYTES:
-        if (!descriptor.hasDefaultValue() || descriptor.defaultValue.isEmpty) {
-          return null;
-        }
-        String byteList = descriptor.defaultValue.codeUnits
-            .map((b) => '0x${b.toRadixString(16)}')
-            .join(',');
-        return '() => <int>[$byteList]';
-      case FieldDescriptorProto_Type.TYPE_GROUP:
-      case FieldDescriptorProto_Type.TYPE_MESSAGE:
-        if (sameProtoFile) return '${baseType.unprefixed}.getDefault';
-        return "${baseType.prefixed}.getDefault";
-      case FieldDescriptorProto_Type.TYPE_ENUM:
-        var className = sameProtoFile ? baseType.unprefixed : baseType.prefixed;
-        EnumGenerator gen = baseType.generator;
-        if (descriptor.hasDefaultValue() &&
-            descriptor.defaultValue.isNotEmpty) {
-          return '$className.${descriptor.defaultValue}';
-        } else if (gen._canonicalValues.isNotEmpty) {
-          return '$className.${gen.dartNames[gen._canonicalValues[0].name]}';
-        }
-        return null;
-      default:
-        throw _typeNotImplemented("generatedDefaultFunction");
-    }
-  }
-
-  String _getDefaultAsBoolExpr(String noDefault) {
-    if (descriptor.hasDefaultValue() && 'false' != descriptor.defaultValue) {
-      return '${descriptor.defaultValue}';
-    }
-    return noDefault;
-  }
-
-  String _getDefaultAsStringExpr(String noDefault) {
-    if (!descriptor.hasDefaultValue() || descriptor.defaultValue.isEmpty) {
-      return noDefault;
-    }
-    // TODO(skybrian): fix dubious escaping.
-    String value = descriptor.defaultValue.replaceAll(r'$', r'\$');
-    return '\'$value\'';
-  }
-
-  String _getDefaultAsInt32Expr(String noDefault) {
-    if (descriptor.hasDefaultValue() && '0' != descriptor.defaultValue) {
-      return '${descriptor.defaultValue}';
-    }
-    return noDefault;
-  }
-
-  bool _hasBooleanOption(Extension extension) =>
-      descriptor?.options?.getExtension(extension) ?? false;
-
-  get _invalidDefaultValue => "dart-protoc-plugin:"
-      " invalid default value (${descriptor.defaultValue})"
-      " found in field $fullName";
-
-  _typeNotImplemented(String methodName) => "dart-protoc-plugin:"
-      " $methodName not implemented for type (${descriptor.type})"
-      " found in field $fullName";
-}
diff --git a/lib/protoc.dart b/lib/protoc.dart
deleted file mode 100644
index 6a1b390..0000000
--- a/lib/protoc.dart
+++ /dev/null
@@ -1,31 +0,0 @@
-library protoc;
-
-import 'dart:async';
-import 'dart:io';
-
-import 'package:dart_style/dart_style.dart';
-import 'package:protobuf/mixins_meta.dart';
-import 'package:protobuf/protobuf.dart';
-import 'package:path/path.dart' as path;
-
-import 'src/dart_options.pb.dart';
-import 'src/descriptor.pb.dart';
-import 'src/plugin.pb.dart';
-
-import 'const_generator.dart' show writeJsonConst;
-import 'indenting_writer.dart' show IndentingWriter;
-import 'names.dart';
-
-part 'base_type.dart';
-part 'client_generator.dart';
-part 'code_generator.dart';
-part 'enum_generator.dart';
-part 'extension_generator.dart';
-part 'file_generator.dart';
-part 'grpc_generator.dart';
-part 'linker.dart';
-part 'message_generator.dart';
-part 'options.dart';
-part 'output_config.dart';
-part 'protobuf_field.dart';
-part 'service_generator.dart';
diff --git a/lib/service_generator.dart b/lib/service_generator.dart
deleted file mode 100644
index e06d5fc..0000000
--- a/lib/service_generator.dart
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of protoc;
-
-class ServiceGenerator {
-  final ServiceDescriptorProto _descriptor;
-
-  /// The generator of the .pb.dart file that will contain this service.
-  final FileGenerator fileGen;
-
-  /// The message types needed directly by this service.
-  ///
-  /// The key is the fully qualified name with a leading '.'.
-  /// Populated by [resolve].
-  final _deps = <String, MessageGenerator>{};
-
-  /// The message types needed transitively by this service.
-  ///
-  /// The key is the fully qualified name with a leading '.'.
-  /// Populated by [resolve].
-  final _transitiveDeps = <String, MessageGenerator>{};
-
-  /// Maps each undefined type to a string describing its location.
-  ///
-  /// Populated by [resolve].
-  final _undefinedDeps = <String, String>{};
-
-  final String classname;
-
-  static String serviceBaseName(String originalName) {
-    if (originalName.endsWith("Service")) {
-      return originalName + "Base"; // avoid: ServiceServiceBase
-    } else {
-      return originalName + "ServiceBase";
-    }
-  }
-
-  ServiceGenerator(this._descriptor, this.fileGen, Set<String> usedNames)
-      : classname = disambiguateName(
-            serviceBaseName(avoidInitialUnderscore(_descriptor.name)),
-            usedNames,
-            defaultSuffixes());
-
-  /// Finds all message types used by this service.
-  ///
-  /// Puts the types found in [_deps] and [_transitiveDeps].
-  /// If a type name can't be resolved, puts it in [_undefinedDeps].
-  /// Precondition: messages have been registered and resolved.
-  void resolve(GenerationContext ctx) {
-    for (var m in _methodDescriptors) {
-      _addDependency(ctx, m.inputType, "input type of ${m.name}");
-      _addDependency(ctx, m.outputType, "output type of ${m.name}");
-    }
-    _resolveMoreTypes(ctx);
-  }
-
-  /// Hook for a subclass to register any additional types it uses.
-  void _resolveMoreTypes(GenerationContext ctx) {}
-
-  /// Adds a dependency on the given message type.
-  ///
-  /// If the type name can't be resolved, adds it to [_undefinedDeps].
-  /// If it can, recursively adds the types of its fields as well.
-  void _addDependency(GenerationContext ctx, String fqname, String location) {
-    if (_deps.containsKey(fqname)) return; // Already added.
-
-    MessageGenerator mg = ctx.getFieldType(fqname);
-    if (mg == null) {
-      _undefinedDeps[fqname] = location;
-      return;
-    }
-    _addDepsRecursively(mg, 0);
-  }
-
-  void _addDepsRecursively(MessageGenerator mg, int depth) {
-    if (_transitiveDeps.containsKey(mg.dottedName)) {
-      // Already added, but perhaps at a different depth.
-      if (depth == 0) _deps[mg.dottedName] = mg;
-      return;
-    }
-    mg.checkResolved();
-    if (depth == 0) _deps[mg.dottedName] = mg;
-    _transitiveDeps[mg.dottedName] = mg;
-    for (var field in mg._fieldList) {
-      if (field.baseType.isGroup || field.baseType.isMessage) {
-        _addDepsRecursively(field.baseType.generator, depth + 1);
-      }
-    }
-  }
-
-  /// Adds dependencies of [generate] to [imports].
-  ///
-  /// For each .pb.dart file that the generated code needs to import,
-  /// add its generator.
-  void addImportsTo(Set<FileGenerator> imports) {
-    for (var mg in _deps.values) {
-      imports.add(mg.fileGen);
-    }
-  }
-
-  /// Adds dependencies of [generateConstants] to [imports].
-  ///
-  /// For each .pbjson.dart file that the generated code needs to import,
-  /// add its generator.
-  void addConstantImportsTo(Set<FileGenerator> imports) {
-    for (var mg in _transitiveDeps.values) {
-      imports.add(mg.fileGen);
-    }
-  }
-
-  /// Returns the Dart class name to use for a message type.
-  ///
-  /// Throws an exception if it can't be resolved.
-  String _getDartClassName(String fqname) {
-    var mg = _deps[fqname];
-    if (mg == null) {
-      var location = _undefinedDeps[fqname];
-      throw 'FAILURE: Unknown type reference (${fqname}) for ${location}';
-    }
-    if (fileGen.protoFileUri == mg.fileGen.protoFileUri) {
-      // If it's the same file, we import it without using "as".
-      return mg.classname;
-    }
-    return mg.fileImportPrefix + "." + mg.classname;
-  }
-
-  List<MethodDescriptorProto> get _methodDescriptors => _descriptor.method;
-
-  String _methodName(String name) =>
-      name.substring(0, 1).toLowerCase() + name.substring(1);
-
-  String get _parentClass => 'GeneratedService';
-
-  void _generateStub(IndentingWriter out, MethodDescriptorProto m) {
-    var methodName = _methodName(m.name);
-    var inputClass = _getDartClassName(m.inputType);
-    var outputClass = _getDartClassName(m.outputType);
-
-    out.println('\$async.Future<$outputClass> $methodName('
-        'ServerContext ctx, $inputClass request);');
-  }
-
-  void _generateStubs(IndentingWriter out) {
-    for (MethodDescriptorProto m in _methodDescriptors) {
-      _generateStub(out, m);
-    }
-    out.println();
-  }
-
-  void _generateRequestMethod(IndentingWriter out) {
-    out.addBlock('GeneratedMessage createRequest(String method) {', '}', () {
-      out.addBlock("switch (method) {", "}", () {
-        for (MethodDescriptorProto m in _methodDescriptors) {
-          var inputClass = _getDartClassName(m.inputType);
-          out.println("case '${m.name}': return new $inputClass();");
-        }
-        out.println("default: "
-            "throw new ArgumentError('Unknown method: \$method');");
-      });
-    });
-    out.println();
-  }
-
-  void _generateDispatchMethod(out) {
-    out.addBlock(
-        r'$async.Future<GeneratedMessage> handleCall(ServerContext ctx, '
-        'String method, GeneratedMessage request) {',
-        '}', () {
-      out.addBlock("switch (method) {", "}", () {
-        for (MethodDescriptorProto m in _methodDescriptors) {
-          var methodName = _methodName(m.name);
-          out.println(
-              "case '${m.name}': return this.$methodName(ctx, request);");
-        }
-        out.println("default: "
-            "throw new ArgumentError('Unknown method: \$method');");
-      });
-    });
-    out.println();
-  }
-
-  /// Hook for generating members added in subclasses.
-  void _generateMoreClassMembers(IndentingWriter out) {}
-
-  void generate(IndentingWriter out) {
-    out.addBlock(
-        'abstract class $classname extends '
-        '$_parentClass {',
-        '}', () {
-      _generateStubs(out);
-      _generateRequestMethod(out);
-      _generateDispatchMethod(out);
-      _generateMoreClassMembers(out);
-      out.println("Map<String, dynamic> get \$json => $jsonConstant;");
-      out.println("Map<String, Map<String, dynamic>> get \$messageJson =>"
-          " $messageJsonConstant;");
-    });
-    out.println();
-  }
-
-  String get jsonConstant => "$classname\$json";
-  String get messageJsonConstant => "$classname\$messageJson";
-
-  /// Writes Dart constants for the service and message descriptors.
-  ///
-  /// The map includes an entry for every message type that might need
-  /// to be read or written (assuming the type name resolved).
-  void generateConstants(IndentingWriter out) {
-    out.print("const $jsonConstant = ");
-    writeJsonConst(out, _descriptor.writeToJsonMap());
-    out.println(";");
-    out.println();
-
-    var typeConstants = <String, String>{};
-    for (var key in _transitiveDeps.keys) {
-      typeConstants[key] = _transitiveDeps[key].getJsonConstant(fileGen);
-    }
-    out.addBlock("const $messageJsonConstant = const {", "};", () {
-      for (var key in typeConstants.keys) {
-        var typeConst = typeConstants[key];
-        out.println("'$key': $typeConst,");
-      }
-    });
-    out.println();
-
-    if (_undefinedDeps.isNotEmpty) {
-      for (var name in _undefinedDeps.keys) {
-        var location = _undefinedDeps[name];
-        out.println("// can't resolve ($name) used by $location");
-      }
-      out.println();
-    }
-  }
-}
diff --git a/lib/src/dart_options.pb.dart b/lib/src/dart_options.pb.dart
deleted file mode 100644
index 058f220..0000000
--- a/lib/src/dart_options.pb.dart
+++ /dev/null
@@ -1,140 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: dart_options.proto
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:protobuf/protobuf.dart' as $pb;
-
-class DartMixin extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('DartMixin',
-      package: const $pb.PackageName('dart_options'))
-    ..aOS(1, 'name')
-    ..aOS(2, 'importFrom')
-    ..aOS(3, 'parent')
-    ..hasRequiredFields = false;
-
-  DartMixin() : super();
-  DartMixin.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  DartMixin.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  DartMixin clone() => new DartMixin()..mergeFromMessage(this);
-  DartMixin copyWith(void Function(DartMixin) updates) =>
-      super.copyWith((message) => updates(message as DartMixin));
-  $pb.BuilderInfo get info_ => _i;
-  static DartMixin create() => new DartMixin();
-  static $pb.PbList<DartMixin> createRepeated() => new $pb.PbList<DartMixin>();
-  static DartMixin getDefault() => _defaultInstance ??= create()..freeze();
-  static DartMixin _defaultInstance;
-  static void $checkItem(DartMixin v) {
-    if (v is! DartMixin) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  String get importFrom => $_getS(1, '');
-  set importFrom(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasImportFrom() => $_has(1);
-  void clearImportFrom() => clearField(2);
-
-  String get parent => $_getS(2, '');
-  set parent(String v) {
-    $_setString(2, v);
-  }
-
-  bool hasParent() => $_has(2);
-  void clearParent() => clearField(3);
-}
-
-class Imports extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('Imports',
-      package: const $pb.PackageName('dart_options'))
-    ..pp<DartMixin>(
-        1, 'mixins', $pb.PbFieldType.PM, DartMixin.$checkItem, DartMixin.create)
-    ..hasRequiredFields = false;
-
-  Imports() : super();
-  Imports.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  Imports.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  Imports clone() => new Imports()..mergeFromMessage(this);
-  Imports copyWith(void Function(Imports) updates) =>
-      super.copyWith((message) => updates(message as Imports));
-  $pb.BuilderInfo get info_ => _i;
-  static Imports create() => new Imports();
-  static $pb.PbList<Imports> createRepeated() => new $pb.PbList<Imports>();
-  static Imports getDefault() => _defaultInstance ??= create()..freeze();
-  static Imports _defaultInstance;
-  static void $checkItem(Imports v) {
-    if (v is! Imports) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<DartMixin> get mixins => $_getList(0);
-}
-
-class Dart_options {
-  static final $pb.Extension imports = new $pb.Extension<Imports>(
-      'google.protobuf.FileOptions',
-      'imports',
-      28125061,
-      $pb.PbFieldType.OM,
-      Imports.getDefault,
-      Imports.create);
-  static final $pb.Extension defaultMixin = new $pb.Extension<String>(
-      'google.protobuf.FileOptions',
-      'defaultMixin',
-      96128839,
-      $pb.PbFieldType.OS);
-  static final $pb.Extension mixin = new $pb.Extension<String>(
-      'google.protobuf.MessageOptions', 'mixin', 96128839, $pb.PbFieldType.OS);
-  static final $pb.Extension overrideGetter = new $pb.Extension<bool>(
-      'google.protobuf.FieldOptions',
-      'overrideGetter',
-      28205290,
-      $pb.PbFieldType.OB);
-  static final $pb.Extension overrideSetter = new $pb.Extension<bool>(
-      'google.protobuf.FieldOptions',
-      'overrideSetter',
-      28937366,
-      $pb.PbFieldType.OB);
-  static final $pb.Extension overrideHasMethod = new $pb.Extension<bool>(
-      'google.protobuf.FieldOptions',
-      'overrideHasMethod',
-      28937461,
-      $pb.PbFieldType.OB);
-  static final $pb.Extension overrideClearMethod = new $pb.Extension<bool>(
-      'google.protobuf.FieldOptions',
-      'overrideClearMethod',
-      28907907,
-      $pb.PbFieldType.OB);
-  static final $pb.Extension dartName = new $pb.Extension<String>(
-      'google.protobuf.FieldOptions', 'dartName', 28700919, $pb.PbFieldType.OS);
-  static void registerAllExtensions($pb.ExtensionRegistry registry) {
-    registry.add(imports);
-    registry.add(defaultMixin);
-    registry.add(mixin);
-    registry.add(overrideGetter);
-    registry.add(overrideSetter);
-    registry.add(overrideHasMethod);
-    registry.add(overrideClearMethod);
-    registry.add(dartName);
-  }
-}
diff --git a/lib/src/descriptor.pb.dart b/lib/src/descriptor.pb.dart
deleted file mode 100644
index 09c44e0..0000000
--- a/lib/src/descriptor.pb.dart
+++ /dev/null
@@ -1,1645 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: descriptor.proto
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:fixnum/fixnum.dart';
-import 'package:protobuf/protobuf.dart' as $pb;
-
-import 'descriptor.pbenum.dart';
-
-export 'descriptor.pbenum.dart';
-
-class FileDescriptorSet extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('FileDescriptorSet',
-      package: const $pb.PackageName('google.protobuf'))
-    ..pp<FileDescriptorProto>(1, 'file', $pb.PbFieldType.PM,
-        FileDescriptorProto.$checkItem, FileDescriptorProto.create);
-
-  FileDescriptorSet() : super();
-  FileDescriptorSet.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  FileDescriptorSet.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  FileDescriptorSet clone() => new FileDescriptorSet()..mergeFromMessage(this);
-  FileDescriptorSet copyWith(void Function(FileDescriptorSet) updates) =>
-      super.copyWith((message) => updates(message as FileDescriptorSet));
-  $pb.BuilderInfo get info_ => _i;
-  static FileDescriptorSet create() => new FileDescriptorSet();
-  static $pb.PbList<FileDescriptorSet> createRepeated() =>
-      new $pb.PbList<FileDescriptorSet>();
-  static FileDescriptorSet getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static FileDescriptorSet _defaultInstance;
-  static void $checkItem(FileDescriptorSet v) {
-    if (v is! FileDescriptorSet)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<FileDescriptorProto> get file => $_getList(0);
-}
-
-class FileDescriptorProto extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('FileDescriptorProto',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'name')
-    ..aOS(2, 'package')
-    ..pPS(3, 'dependency')
-    ..pp<DescriptorProto>(4, 'messageType', $pb.PbFieldType.PM,
-        DescriptorProto.$checkItem, DescriptorProto.create)
-    ..pp<EnumDescriptorProto>(5, 'enumType', $pb.PbFieldType.PM,
-        EnumDescriptorProto.$checkItem, EnumDescriptorProto.create)
-    ..pp<ServiceDescriptorProto>(6, 'service', $pb.PbFieldType.PM,
-        ServiceDescriptorProto.$checkItem, ServiceDescriptorProto.create)
-    ..pp<FieldDescriptorProto>(7, 'extension', $pb.PbFieldType.PM,
-        FieldDescriptorProto.$checkItem, FieldDescriptorProto.create)
-    ..a<FileOptions>(8, 'options', $pb.PbFieldType.OM, FileOptions.getDefault,
-        FileOptions.create)
-    ..a<SourceCodeInfo>(9, 'sourceCodeInfo', $pb.PbFieldType.OM,
-        SourceCodeInfo.getDefault, SourceCodeInfo.create)
-    ..p<int>(10, 'publicDependency', $pb.PbFieldType.P3)
-    ..p<int>(11, 'weakDependency', $pb.PbFieldType.P3)
-    ..aOS(12, 'syntax');
-
-  FileDescriptorProto() : super();
-  FileDescriptorProto.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  FileDescriptorProto.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  FileDescriptorProto clone() =>
-      new FileDescriptorProto()..mergeFromMessage(this);
-  FileDescriptorProto copyWith(void Function(FileDescriptorProto) updates) =>
-      super.copyWith((message) => updates(message as FileDescriptorProto));
-  $pb.BuilderInfo get info_ => _i;
-  static FileDescriptorProto create() => new FileDescriptorProto();
-  static $pb.PbList<FileDescriptorProto> createRepeated() =>
-      new $pb.PbList<FileDescriptorProto>();
-  static FileDescriptorProto getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static FileDescriptorProto _defaultInstance;
-  static void $checkItem(FileDescriptorProto v) {
-    if (v is! FileDescriptorProto)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  String get package => $_getS(1, '');
-  set package(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasPackage() => $_has(1);
-  void clearPackage() => clearField(2);
-
-  List<String> get dependency => $_getList(2);
-
-  List<DescriptorProto> get messageType => $_getList(3);
-
-  List<EnumDescriptorProto> get enumType => $_getList(4);
-
-  List<ServiceDescriptorProto> get service => $_getList(5);
-
-  List<FieldDescriptorProto> get extension => $_getList(6);
-
-  FileOptions get options => $_getN(7);
-  set options(FileOptions v) {
-    setField(8, v);
-  }
-
-  bool hasOptions() => $_has(7);
-  void clearOptions() => clearField(8);
-
-  SourceCodeInfo get sourceCodeInfo => $_getN(8);
-  set sourceCodeInfo(SourceCodeInfo v) {
-    setField(9, v);
-  }
-
-  bool hasSourceCodeInfo() => $_has(8);
-  void clearSourceCodeInfo() => clearField(9);
-
-  List<int> get publicDependency => $_getList(9);
-
-  List<int> get weakDependency => $_getList(10);
-
-  String get syntax => $_getS(11, '');
-  set syntax(String v) {
-    $_setString(11, v);
-  }
-
-  bool hasSyntax() => $_has(11);
-  void clearSyntax() => clearField(12);
-}
-
-class DescriptorProto_ExtensionRange extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo(
-      'DescriptorProto.ExtensionRange',
-      package: const $pb.PackageName('google.protobuf'))
-    ..a<int>(1, 'start', $pb.PbFieldType.O3)
-    ..a<int>(2, 'end', $pb.PbFieldType.O3)
-    ..hasRequiredFields = false;
-
-  DescriptorProto_ExtensionRange() : super();
-  DescriptorProto_ExtensionRange.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  DescriptorProto_ExtensionRange.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  DescriptorProto_ExtensionRange clone() =>
-      new DescriptorProto_ExtensionRange()..mergeFromMessage(this);
-  DescriptorProto_ExtensionRange copyWith(
-          void Function(DescriptorProto_ExtensionRange) updates) =>
-      super.copyWith(
-          (message) => updates(message as DescriptorProto_ExtensionRange));
-  $pb.BuilderInfo get info_ => _i;
-  static DescriptorProto_ExtensionRange create() =>
-      new DescriptorProto_ExtensionRange();
-  static $pb.PbList<DescriptorProto_ExtensionRange> createRepeated() =>
-      new $pb.PbList<DescriptorProto_ExtensionRange>();
-  static DescriptorProto_ExtensionRange getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static DescriptorProto_ExtensionRange _defaultInstance;
-  static void $checkItem(DescriptorProto_ExtensionRange v) {
-    if (v is! DescriptorProto_ExtensionRange)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  int get start => $_get(0, 0);
-  set start(int v) {
-    $_setSignedInt32(0, v);
-  }
-
-  bool hasStart() => $_has(0);
-  void clearStart() => clearField(1);
-
-  int get end => $_get(1, 0);
-  set end(int v) {
-    $_setSignedInt32(1, v);
-  }
-
-  bool hasEnd() => $_has(1);
-  void clearEnd() => clearField(2);
-}
-
-class DescriptorProto_ReservedRange extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo(
-      'DescriptorProto.ReservedRange',
-      package: const $pb.PackageName('google.protobuf'))
-    ..a<int>(1, 'start', $pb.PbFieldType.O3)
-    ..a<int>(2, 'end', $pb.PbFieldType.O3)
-    ..hasRequiredFields = false;
-
-  DescriptorProto_ReservedRange() : super();
-  DescriptorProto_ReservedRange.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  DescriptorProto_ReservedRange.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  DescriptorProto_ReservedRange clone() =>
-      new DescriptorProto_ReservedRange()..mergeFromMessage(this);
-  DescriptorProto_ReservedRange copyWith(
-          void Function(DescriptorProto_ReservedRange) updates) =>
-      super.copyWith(
-          (message) => updates(message as DescriptorProto_ReservedRange));
-  $pb.BuilderInfo get info_ => _i;
-  static DescriptorProto_ReservedRange create() =>
-      new DescriptorProto_ReservedRange();
-  static $pb.PbList<DescriptorProto_ReservedRange> createRepeated() =>
-      new $pb.PbList<DescriptorProto_ReservedRange>();
-  static DescriptorProto_ReservedRange getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static DescriptorProto_ReservedRange _defaultInstance;
-  static void $checkItem(DescriptorProto_ReservedRange v) {
-    if (v is! DescriptorProto_ReservedRange)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  int get start => $_get(0, 0);
-  set start(int v) {
-    $_setSignedInt32(0, v);
-  }
-
-  bool hasStart() => $_has(0);
-  void clearStart() => clearField(1);
-
-  int get end => $_get(1, 0);
-  set end(int v) {
-    $_setSignedInt32(1, v);
-  }
-
-  bool hasEnd() => $_has(1);
-  void clearEnd() => clearField(2);
-}
-
-class DescriptorProto extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('DescriptorProto',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'name')
-    ..pp<FieldDescriptorProto>(2, 'field', $pb.PbFieldType.PM,
-        FieldDescriptorProto.$checkItem, FieldDescriptorProto.create)
-    ..pp<DescriptorProto>(3, 'nestedType', $pb.PbFieldType.PM,
-        DescriptorProto.$checkItem, DescriptorProto.create)
-    ..pp<EnumDescriptorProto>(4, 'enumType', $pb.PbFieldType.PM,
-        EnumDescriptorProto.$checkItem, EnumDescriptorProto.create)
-    ..pp<DescriptorProto_ExtensionRange>(
-        5,
-        'extensionRange',
-        $pb.PbFieldType.PM,
-        DescriptorProto_ExtensionRange.$checkItem,
-        DescriptorProto_ExtensionRange.create)
-    ..pp<FieldDescriptorProto>(6, 'extension', $pb.PbFieldType.PM,
-        FieldDescriptorProto.$checkItem, FieldDescriptorProto.create)
-    ..a<MessageOptions>(7, 'options', $pb.PbFieldType.OM,
-        MessageOptions.getDefault, MessageOptions.create)
-    ..pp<OneofDescriptorProto>(8, 'oneofDecl', $pb.PbFieldType.PM,
-        OneofDescriptorProto.$checkItem, OneofDescriptorProto.create)
-    ..pp<DescriptorProto_ReservedRange>(
-        9,
-        'reservedRange',
-        $pb.PbFieldType.PM,
-        DescriptorProto_ReservedRange.$checkItem,
-        DescriptorProto_ReservedRange.create)
-    ..pPS(10, 'reservedName');
-
-  DescriptorProto() : super();
-  DescriptorProto.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  DescriptorProto.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  DescriptorProto clone() => new DescriptorProto()..mergeFromMessage(this);
-  DescriptorProto copyWith(void Function(DescriptorProto) updates) =>
-      super.copyWith((message) => updates(message as DescriptorProto));
-  $pb.BuilderInfo get info_ => _i;
-  static DescriptorProto create() => new DescriptorProto();
-  static $pb.PbList<DescriptorProto> createRepeated() =>
-      new $pb.PbList<DescriptorProto>();
-  static DescriptorProto getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static DescriptorProto _defaultInstance;
-  static void $checkItem(DescriptorProto v) {
-    if (v is! DescriptorProto) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  List<FieldDescriptorProto> get field => $_getList(1);
-
-  List<DescriptorProto> get nestedType => $_getList(2);
-
-  List<EnumDescriptorProto> get enumType => $_getList(3);
-
-  List<DescriptorProto_ExtensionRange> get extensionRange => $_getList(4);
-
-  List<FieldDescriptorProto> get extension => $_getList(5);
-
-  MessageOptions get options => $_getN(6);
-  set options(MessageOptions v) {
-    setField(7, v);
-  }
-
-  bool hasOptions() => $_has(6);
-  void clearOptions() => clearField(7);
-
-  List<OneofDescriptorProto> get oneofDecl => $_getList(7);
-
-  List<DescriptorProto_ReservedRange> get reservedRange => $_getList(8);
-
-  List<String> get reservedName => $_getList(9);
-}
-
-class FieldDescriptorProto extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('FieldDescriptorProto',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'name')
-    ..aOS(2, 'extendee')
-    ..a<int>(3, 'number', $pb.PbFieldType.O3)
-    ..e<FieldDescriptorProto_Label>(
-        4,
-        'label',
-        $pb.PbFieldType.OE,
-        FieldDescriptorProto_Label.LABEL_OPTIONAL,
-        FieldDescriptorProto_Label.valueOf,
-        FieldDescriptorProto_Label.values)
-    ..e<FieldDescriptorProto_Type>(
-        5,
-        'type',
-        $pb.PbFieldType.OE,
-        FieldDescriptorProto_Type.TYPE_DOUBLE,
-        FieldDescriptorProto_Type.valueOf,
-        FieldDescriptorProto_Type.values)
-    ..aOS(6, 'typeName')
-    ..aOS(7, 'defaultValue')
-    ..a<FieldOptions>(8, 'options', $pb.PbFieldType.OM, FieldOptions.getDefault,
-        FieldOptions.create)
-    ..a<int>(9, 'oneofIndex', $pb.PbFieldType.O3)
-    ..aOS(10, 'jsonName');
-
-  FieldDescriptorProto() : super();
-  FieldDescriptorProto.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  FieldDescriptorProto.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  FieldDescriptorProto clone() =>
-      new FieldDescriptorProto()..mergeFromMessage(this);
-  FieldDescriptorProto copyWith(void Function(FieldDescriptorProto) updates) =>
-      super.copyWith((message) => updates(message as FieldDescriptorProto));
-  $pb.BuilderInfo get info_ => _i;
-  static FieldDescriptorProto create() => new FieldDescriptorProto();
-  static $pb.PbList<FieldDescriptorProto> createRepeated() =>
-      new $pb.PbList<FieldDescriptorProto>();
-  static FieldDescriptorProto getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static FieldDescriptorProto _defaultInstance;
-  static void $checkItem(FieldDescriptorProto v) {
-    if (v is! FieldDescriptorProto)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  String get extendee => $_getS(1, '');
-  set extendee(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasExtendee() => $_has(1);
-  void clearExtendee() => clearField(2);
-
-  int get number => $_get(2, 0);
-  set number(int v) {
-    $_setSignedInt32(2, v);
-  }
-
-  bool hasNumber() => $_has(2);
-  void clearNumber() => clearField(3);
-
-  FieldDescriptorProto_Label get label => $_getN(3);
-  set label(FieldDescriptorProto_Label v) {
-    setField(4, v);
-  }
-
-  bool hasLabel() => $_has(3);
-  void clearLabel() => clearField(4);
-
-  FieldDescriptorProto_Type get type => $_getN(4);
-  set type(FieldDescriptorProto_Type v) {
-    setField(5, v);
-  }
-
-  bool hasType() => $_has(4);
-  void clearType() => clearField(5);
-
-  String get typeName => $_getS(5, '');
-  set typeName(String v) {
-    $_setString(5, v);
-  }
-
-  bool hasTypeName() => $_has(5);
-  void clearTypeName() => clearField(6);
-
-  String get defaultValue => $_getS(6, '');
-  set defaultValue(String v) {
-    $_setString(6, v);
-  }
-
-  bool hasDefaultValue() => $_has(6);
-  void clearDefaultValue() => clearField(7);
-
-  FieldOptions get options => $_getN(7);
-  set options(FieldOptions v) {
-    setField(8, v);
-  }
-
-  bool hasOptions() => $_has(7);
-  void clearOptions() => clearField(8);
-
-  int get oneofIndex => $_get(8, 0);
-  set oneofIndex(int v) {
-    $_setSignedInt32(8, v);
-  }
-
-  bool hasOneofIndex() => $_has(8);
-  void clearOneofIndex() => clearField(9);
-
-  String get jsonName => $_getS(9, '');
-  set jsonName(String v) {
-    $_setString(9, v);
-  }
-
-  bool hasJsonName() => $_has(9);
-  void clearJsonName() => clearField(10);
-}
-
-class OneofDescriptorProto extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('OneofDescriptorProto',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'name')
-    ..a<OneofOptions>(2, 'options', $pb.PbFieldType.OM, OneofOptions.getDefault,
-        OneofOptions.create);
-
-  OneofDescriptorProto() : super();
-  OneofDescriptorProto.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  OneofDescriptorProto.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  OneofDescriptorProto clone() =>
-      new OneofDescriptorProto()..mergeFromMessage(this);
-  OneofDescriptorProto copyWith(void Function(OneofDescriptorProto) updates) =>
-      super.copyWith((message) => updates(message as OneofDescriptorProto));
-  $pb.BuilderInfo get info_ => _i;
-  static OneofDescriptorProto create() => new OneofDescriptorProto();
-  static $pb.PbList<OneofDescriptorProto> createRepeated() =>
-      new $pb.PbList<OneofDescriptorProto>();
-  static OneofDescriptorProto getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static OneofDescriptorProto _defaultInstance;
-  static void $checkItem(OneofDescriptorProto v) {
-    if (v is! OneofDescriptorProto)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  OneofOptions get options => $_getN(1);
-  set options(OneofOptions v) {
-    setField(2, v);
-  }
-
-  bool hasOptions() => $_has(1);
-  void clearOptions() => clearField(2);
-}
-
-class EnumDescriptorProto extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('EnumDescriptorProto',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'name')
-    ..pp<EnumValueDescriptorProto>(2, 'value', $pb.PbFieldType.PM,
-        EnumValueDescriptorProto.$checkItem, EnumValueDescriptorProto.create)
-    ..a<EnumOptions>(3, 'options', $pb.PbFieldType.OM, EnumOptions.getDefault,
-        EnumOptions.create);
-
-  EnumDescriptorProto() : super();
-  EnumDescriptorProto.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  EnumDescriptorProto.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  EnumDescriptorProto clone() =>
-      new EnumDescriptorProto()..mergeFromMessage(this);
-  EnumDescriptorProto copyWith(void Function(EnumDescriptorProto) updates) =>
-      super.copyWith((message) => updates(message as EnumDescriptorProto));
-  $pb.BuilderInfo get info_ => _i;
-  static EnumDescriptorProto create() => new EnumDescriptorProto();
-  static $pb.PbList<EnumDescriptorProto> createRepeated() =>
-      new $pb.PbList<EnumDescriptorProto>();
-  static EnumDescriptorProto getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static EnumDescriptorProto _defaultInstance;
-  static void $checkItem(EnumDescriptorProto v) {
-    if (v is! EnumDescriptorProto)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  List<EnumValueDescriptorProto> get value => $_getList(1);
-
-  EnumOptions get options => $_getN(2);
-  set options(EnumOptions v) {
-    setField(3, v);
-  }
-
-  bool hasOptions() => $_has(2);
-  void clearOptions() => clearField(3);
-}
-
-class EnumValueDescriptorProto extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo(
-      'EnumValueDescriptorProto',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'name')
-    ..a<int>(2, 'number', $pb.PbFieldType.O3)
-    ..a<EnumValueOptions>(3, 'options', $pb.PbFieldType.OM,
-        EnumValueOptions.getDefault, EnumValueOptions.create);
-
-  EnumValueDescriptorProto() : super();
-  EnumValueDescriptorProto.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  EnumValueDescriptorProto.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  EnumValueDescriptorProto clone() =>
-      new EnumValueDescriptorProto()..mergeFromMessage(this);
-  EnumValueDescriptorProto copyWith(
-          void Function(EnumValueDescriptorProto) updates) =>
-      super.copyWith((message) => updates(message as EnumValueDescriptorProto));
-  $pb.BuilderInfo get info_ => _i;
-  static EnumValueDescriptorProto create() => new EnumValueDescriptorProto();
-  static $pb.PbList<EnumValueDescriptorProto> createRepeated() =>
-      new $pb.PbList<EnumValueDescriptorProto>();
-  static EnumValueDescriptorProto getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static EnumValueDescriptorProto _defaultInstance;
-  static void $checkItem(EnumValueDescriptorProto v) {
-    if (v is! EnumValueDescriptorProto)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  int get number => $_get(1, 0);
-  set number(int v) {
-    $_setSignedInt32(1, v);
-  }
-
-  bool hasNumber() => $_has(1);
-  void clearNumber() => clearField(2);
-
-  EnumValueOptions get options => $_getN(2);
-  set options(EnumValueOptions v) {
-    setField(3, v);
-  }
-
-  bool hasOptions() => $_has(2);
-  void clearOptions() => clearField(3);
-}
-
-class ServiceDescriptorProto extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo(
-      'ServiceDescriptorProto',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'name')
-    ..pp<MethodDescriptorProto>(2, 'method', $pb.PbFieldType.PM,
-        MethodDescriptorProto.$checkItem, MethodDescriptorProto.create)
-    ..a<ServiceOptions>(3, 'options', $pb.PbFieldType.OM,
-        ServiceOptions.getDefault, ServiceOptions.create);
-
-  ServiceDescriptorProto() : super();
-  ServiceDescriptorProto.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  ServiceDescriptorProto.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  ServiceDescriptorProto clone() =>
-      new ServiceDescriptorProto()..mergeFromMessage(this);
-  ServiceDescriptorProto copyWith(
-          void Function(ServiceDescriptorProto) updates) =>
-      super.copyWith((message) => updates(message as ServiceDescriptorProto));
-  $pb.BuilderInfo get info_ => _i;
-  static ServiceDescriptorProto create() => new ServiceDescriptorProto();
-  static $pb.PbList<ServiceDescriptorProto> createRepeated() =>
-      new $pb.PbList<ServiceDescriptorProto>();
-  static ServiceDescriptorProto getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static ServiceDescriptorProto _defaultInstance;
-  static void $checkItem(ServiceDescriptorProto v) {
-    if (v is! ServiceDescriptorProto)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  List<MethodDescriptorProto> get method => $_getList(1);
-
-  ServiceOptions get options => $_getN(2);
-  set options(ServiceOptions v) {
-    setField(3, v);
-  }
-
-  bool hasOptions() => $_has(2);
-  void clearOptions() => clearField(3);
-}
-
-class MethodDescriptorProto extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('MethodDescriptorProto',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'name')
-    ..aOS(2, 'inputType')
-    ..aOS(3, 'outputType')
-    ..a<MethodOptions>(4, 'options', $pb.PbFieldType.OM,
-        MethodOptions.getDefault, MethodOptions.create)
-    ..aOB(5, 'clientStreaming')
-    ..aOB(6, 'serverStreaming');
-
-  MethodDescriptorProto() : super();
-  MethodDescriptorProto.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  MethodDescriptorProto.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  MethodDescriptorProto clone() =>
-      new MethodDescriptorProto()..mergeFromMessage(this);
-  MethodDescriptorProto copyWith(
-          void Function(MethodDescriptorProto) updates) =>
-      super.copyWith((message) => updates(message as MethodDescriptorProto));
-  $pb.BuilderInfo get info_ => _i;
-  static MethodDescriptorProto create() => new MethodDescriptorProto();
-  static $pb.PbList<MethodDescriptorProto> createRepeated() =>
-      new $pb.PbList<MethodDescriptorProto>();
-  static MethodDescriptorProto getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static MethodDescriptorProto _defaultInstance;
-  static void $checkItem(MethodDescriptorProto v) {
-    if (v is! MethodDescriptorProto)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  String get inputType => $_getS(1, '');
-  set inputType(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasInputType() => $_has(1);
-  void clearInputType() => clearField(2);
-
-  String get outputType => $_getS(2, '');
-  set outputType(String v) {
-    $_setString(2, v);
-  }
-
-  bool hasOutputType() => $_has(2);
-  void clearOutputType() => clearField(3);
-
-  MethodOptions get options => $_getN(3);
-  set options(MethodOptions v) {
-    setField(4, v);
-  }
-
-  bool hasOptions() => $_has(3);
-  void clearOptions() => clearField(4);
-
-  bool get clientStreaming => $_get(4, false);
-  set clientStreaming(bool v) {
-    $_setBool(4, v);
-  }
-
-  bool hasClientStreaming() => $_has(4);
-  void clearClientStreaming() => clearField(5);
-
-  bool get serverStreaming => $_get(5, false);
-  set serverStreaming(bool v) {
-    $_setBool(5, v);
-  }
-
-  bool hasServerStreaming() => $_has(5);
-  void clearServerStreaming() => clearField(6);
-}
-
-class FileOptions extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('FileOptions',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOS(1, 'javaPackage')
-    ..aOS(8, 'javaOuterClassname')
-    ..e<FileOptions_OptimizeMode>(
-        9,
-        'optimizeFor',
-        $pb.PbFieldType.OE,
-        FileOptions_OptimizeMode.SPEED,
-        FileOptions_OptimizeMode.valueOf,
-        FileOptions_OptimizeMode.values)
-    ..aOB(10, 'javaMultipleFiles')
-    ..aOS(11, 'goPackage')
-    ..aOB(16, 'ccGenericServices')
-    ..aOB(17, 'javaGenericServices')
-    ..aOB(18, 'pyGenericServices')
-    ..aOB(20, 'javaGenerateEqualsAndHash')
-    ..aOB(23, 'deprecated')
-    ..aOB(27, 'javaStringCheckUtf8')
-    ..aOB(31, 'ccEnableArenas')
-    ..aOS(36, 'objcClassPrefix')
-    ..aOS(37, 'csharpNamespace')
-    ..aOS(39, 'swiftPrefix')
-    ..aOS(40, 'phpClassPrefix')
-    ..aOS(41, 'phpNamespace')
-    ..pp<UninterpretedOption>(999, 'uninterpretedOption', $pb.PbFieldType.PM,
-        UninterpretedOption.$checkItem, UninterpretedOption.create)
-    ..hasExtensions = true;
-
-  FileOptions() : super();
-  FileOptions.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  FileOptions.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  FileOptions clone() => new FileOptions()..mergeFromMessage(this);
-  FileOptions copyWith(void Function(FileOptions) updates) =>
-      super.copyWith((message) => updates(message as FileOptions));
-  $pb.BuilderInfo get info_ => _i;
-  static FileOptions create() => new FileOptions();
-  static $pb.PbList<FileOptions> createRepeated() =>
-      new $pb.PbList<FileOptions>();
-  static FileOptions getDefault() => _defaultInstance ??= create()..freeze();
-  static FileOptions _defaultInstance;
-  static void $checkItem(FileOptions v) {
-    if (v is! FileOptions) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get javaPackage => $_getS(0, '');
-  set javaPackage(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasJavaPackage() => $_has(0);
-  void clearJavaPackage() => clearField(1);
-
-  String get javaOuterClassname => $_getS(1, '');
-  set javaOuterClassname(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasJavaOuterClassname() => $_has(1);
-  void clearJavaOuterClassname() => clearField(8);
-
-  FileOptions_OptimizeMode get optimizeFor => $_getN(2);
-  set optimizeFor(FileOptions_OptimizeMode v) {
-    setField(9, v);
-  }
-
-  bool hasOptimizeFor() => $_has(2);
-  void clearOptimizeFor() => clearField(9);
-
-  bool get javaMultipleFiles => $_get(3, false);
-  set javaMultipleFiles(bool v) {
-    $_setBool(3, v);
-  }
-
-  bool hasJavaMultipleFiles() => $_has(3);
-  void clearJavaMultipleFiles() => clearField(10);
-
-  String get goPackage => $_getS(4, '');
-  set goPackage(String v) {
-    $_setString(4, v);
-  }
-
-  bool hasGoPackage() => $_has(4);
-  void clearGoPackage() => clearField(11);
-
-  bool get ccGenericServices => $_get(5, false);
-  set ccGenericServices(bool v) {
-    $_setBool(5, v);
-  }
-
-  bool hasCcGenericServices() => $_has(5);
-  void clearCcGenericServices() => clearField(16);
-
-  bool get javaGenericServices => $_get(6, false);
-  set javaGenericServices(bool v) {
-    $_setBool(6, v);
-  }
-
-  bool hasJavaGenericServices() => $_has(6);
-  void clearJavaGenericServices() => clearField(17);
-
-  bool get pyGenericServices => $_get(7, false);
-  set pyGenericServices(bool v) {
-    $_setBool(7, v);
-  }
-
-  bool hasPyGenericServices() => $_has(7);
-  void clearPyGenericServices() => clearField(18);
-
-  bool get javaGenerateEqualsAndHash => $_get(8, false);
-  set javaGenerateEqualsAndHash(bool v) {
-    $_setBool(8, v);
-  }
-
-  bool hasJavaGenerateEqualsAndHash() => $_has(8);
-  void clearJavaGenerateEqualsAndHash() => clearField(20);
-
-  bool get deprecated => $_get(9, false);
-  set deprecated(bool v) {
-    $_setBool(9, v);
-  }
-
-  bool hasDeprecated() => $_has(9);
-  void clearDeprecated() => clearField(23);
-
-  bool get javaStringCheckUtf8 => $_get(10, false);
-  set javaStringCheckUtf8(bool v) {
-    $_setBool(10, v);
-  }
-
-  bool hasJavaStringCheckUtf8() => $_has(10);
-  void clearJavaStringCheckUtf8() => clearField(27);
-
-  bool get ccEnableArenas => $_get(11, false);
-  set ccEnableArenas(bool v) {
-    $_setBool(11, v);
-  }
-
-  bool hasCcEnableArenas() => $_has(11);
-  void clearCcEnableArenas() => clearField(31);
-
-  String get objcClassPrefix => $_getS(12, '');
-  set objcClassPrefix(String v) {
-    $_setString(12, v);
-  }
-
-  bool hasObjcClassPrefix() => $_has(12);
-  void clearObjcClassPrefix() => clearField(36);
-
-  String get csharpNamespace => $_getS(13, '');
-  set csharpNamespace(String v) {
-    $_setString(13, v);
-  }
-
-  bool hasCsharpNamespace() => $_has(13);
-  void clearCsharpNamespace() => clearField(37);
-
-  String get swiftPrefix => $_getS(14, '');
-  set swiftPrefix(String v) {
-    $_setString(14, v);
-  }
-
-  bool hasSwiftPrefix() => $_has(14);
-  void clearSwiftPrefix() => clearField(39);
-
-  String get phpClassPrefix => $_getS(15, '');
-  set phpClassPrefix(String v) {
-    $_setString(15, v);
-  }
-
-  bool hasPhpClassPrefix() => $_has(15);
-  void clearPhpClassPrefix() => clearField(40);
-
-  String get phpNamespace => $_getS(16, '');
-  set phpNamespace(String v) {
-    $_setString(16, v);
-  }
-
-  bool hasPhpNamespace() => $_has(16);
-  void clearPhpNamespace() => clearField(41);
-
-  List<UninterpretedOption> get uninterpretedOption => $_getList(17);
-}
-
-class MessageOptions extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('MessageOptions',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOB(1, 'messageSetWireFormat')
-    ..aOB(2, 'noStandardDescriptorAccessor')
-    ..aOB(3, 'deprecated')
-    ..aOB(7, 'mapEntry')
-    ..pp<UninterpretedOption>(999, 'uninterpretedOption', $pb.PbFieldType.PM,
-        UninterpretedOption.$checkItem, UninterpretedOption.create)
-    ..hasExtensions = true;
-
-  MessageOptions() : super();
-  MessageOptions.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  MessageOptions.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  MessageOptions clone() => new MessageOptions()..mergeFromMessage(this);
-  MessageOptions copyWith(void Function(MessageOptions) updates) =>
-      super.copyWith((message) => updates(message as MessageOptions));
-  $pb.BuilderInfo get info_ => _i;
-  static MessageOptions create() => new MessageOptions();
-  static $pb.PbList<MessageOptions> createRepeated() =>
-      new $pb.PbList<MessageOptions>();
-  static MessageOptions getDefault() => _defaultInstance ??= create()..freeze();
-  static MessageOptions _defaultInstance;
-  static void $checkItem(MessageOptions v) {
-    if (v is! MessageOptions) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  bool get messageSetWireFormat => $_get(0, false);
-  set messageSetWireFormat(bool v) {
-    $_setBool(0, v);
-  }
-
-  bool hasMessageSetWireFormat() => $_has(0);
-  void clearMessageSetWireFormat() => clearField(1);
-
-  bool get noStandardDescriptorAccessor => $_get(1, false);
-  set noStandardDescriptorAccessor(bool v) {
-    $_setBool(1, v);
-  }
-
-  bool hasNoStandardDescriptorAccessor() => $_has(1);
-  void clearNoStandardDescriptorAccessor() => clearField(2);
-
-  bool get deprecated => $_get(2, false);
-  set deprecated(bool v) {
-    $_setBool(2, v);
-  }
-
-  bool hasDeprecated() => $_has(2);
-  void clearDeprecated() => clearField(3);
-
-  bool get mapEntry => $_get(3, false);
-  set mapEntry(bool v) {
-    $_setBool(3, v);
-  }
-
-  bool hasMapEntry() => $_has(3);
-  void clearMapEntry() => clearField(7);
-
-  List<UninterpretedOption> get uninterpretedOption => $_getList(4);
-}
-
-class FieldOptions extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('FieldOptions',
-      package: const $pb.PackageName('google.protobuf'))
-    ..e<FieldOptions_CType>(
-        1,
-        'ctype',
-        $pb.PbFieldType.OE,
-        FieldOptions_CType.STRING,
-        FieldOptions_CType.valueOf,
-        FieldOptions_CType.values)
-    ..aOB(2, 'packed')
-    ..aOB(3, 'deprecated')
-    ..aOB(5, 'lazy')
-    ..e<FieldOptions_JSType>(
-        6,
-        'jstype',
-        $pb.PbFieldType.OE,
-        FieldOptions_JSType.JS_NORMAL,
-        FieldOptions_JSType.valueOf,
-        FieldOptions_JSType.values)
-    ..aOB(10, 'weak')
-    ..pp<UninterpretedOption>(999, 'uninterpretedOption', $pb.PbFieldType.PM,
-        UninterpretedOption.$checkItem, UninterpretedOption.create)
-    ..hasExtensions = true;
-
-  FieldOptions() : super();
-  FieldOptions.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  FieldOptions.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  FieldOptions clone() => new FieldOptions()..mergeFromMessage(this);
-  FieldOptions copyWith(void Function(FieldOptions) updates) =>
-      super.copyWith((message) => updates(message as FieldOptions));
-  $pb.BuilderInfo get info_ => _i;
-  static FieldOptions create() => new FieldOptions();
-  static $pb.PbList<FieldOptions> createRepeated() =>
-      new $pb.PbList<FieldOptions>();
-  static FieldOptions getDefault() => _defaultInstance ??= create()..freeze();
-  static FieldOptions _defaultInstance;
-  static void $checkItem(FieldOptions v) {
-    if (v is! FieldOptions) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  FieldOptions_CType get ctype => $_getN(0);
-  set ctype(FieldOptions_CType v) {
-    setField(1, v);
-  }
-
-  bool hasCtype() => $_has(0);
-  void clearCtype() => clearField(1);
-
-  bool get packed => $_get(1, false);
-  set packed(bool v) {
-    $_setBool(1, v);
-  }
-
-  bool hasPacked() => $_has(1);
-  void clearPacked() => clearField(2);
-
-  bool get deprecated => $_get(2, false);
-  set deprecated(bool v) {
-    $_setBool(2, v);
-  }
-
-  bool hasDeprecated() => $_has(2);
-  void clearDeprecated() => clearField(3);
-
-  bool get lazy => $_get(3, false);
-  set lazy(bool v) {
-    $_setBool(3, v);
-  }
-
-  bool hasLazy() => $_has(3);
-  void clearLazy() => clearField(5);
-
-  FieldOptions_JSType get jstype => $_getN(4);
-  set jstype(FieldOptions_JSType v) {
-    setField(6, v);
-  }
-
-  bool hasJstype() => $_has(4);
-  void clearJstype() => clearField(6);
-
-  bool get weak => $_get(5, false);
-  set weak(bool v) {
-    $_setBool(5, v);
-  }
-
-  bool hasWeak() => $_has(5);
-  void clearWeak() => clearField(10);
-
-  List<UninterpretedOption> get uninterpretedOption => $_getList(6);
-}
-
-class OneofOptions extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('OneofOptions',
-      package: const $pb.PackageName('google.protobuf'))
-    ..pp<UninterpretedOption>(999, 'uninterpretedOption', $pb.PbFieldType.PM,
-        UninterpretedOption.$checkItem, UninterpretedOption.create)
-    ..hasExtensions = true;
-
-  OneofOptions() : super();
-  OneofOptions.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  OneofOptions.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  OneofOptions clone() => new OneofOptions()..mergeFromMessage(this);
-  OneofOptions copyWith(void Function(OneofOptions) updates) =>
-      super.copyWith((message) => updates(message as OneofOptions));
-  $pb.BuilderInfo get info_ => _i;
-  static OneofOptions create() => new OneofOptions();
-  static $pb.PbList<OneofOptions> createRepeated() =>
-      new $pb.PbList<OneofOptions>();
-  static OneofOptions getDefault() => _defaultInstance ??= create()..freeze();
-  static OneofOptions _defaultInstance;
-  static void $checkItem(OneofOptions v) {
-    if (v is! OneofOptions) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<UninterpretedOption> get uninterpretedOption => $_getList(0);
-}
-
-class EnumOptions extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('EnumOptions',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOB(2, 'allowAlias')
-    ..aOB(3, 'deprecated')
-    ..pp<UninterpretedOption>(999, 'uninterpretedOption', $pb.PbFieldType.PM,
-        UninterpretedOption.$checkItem, UninterpretedOption.create)
-    ..hasExtensions = true;
-
-  EnumOptions() : super();
-  EnumOptions.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  EnumOptions.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  EnumOptions clone() => new EnumOptions()..mergeFromMessage(this);
-  EnumOptions copyWith(void Function(EnumOptions) updates) =>
-      super.copyWith((message) => updates(message as EnumOptions));
-  $pb.BuilderInfo get info_ => _i;
-  static EnumOptions create() => new EnumOptions();
-  static $pb.PbList<EnumOptions> createRepeated() =>
-      new $pb.PbList<EnumOptions>();
-  static EnumOptions getDefault() => _defaultInstance ??= create()..freeze();
-  static EnumOptions _defaultInstance;
-  static void $checkItem(EnumOptions v) {
-    if (v is! EnumOptions) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  bool get allowAlias => $_get(0, false);
-  set allowAlias(bool v) {
-    $_setBool(0, v);
-  }
-
-  bool hasAllowAlias() => $_has(0);
-  void clearAllowAlias() => clearField(2);
-
-  bool get deprecated => $_get(1, false);
-  set deprecated(bool v) {
-    $_setBool(1, v);
-  }
-
-  bool hasDeprecated() => $_has(1);
-  void clearDeprecated() => clearField(3);
-
-  List<UninterpretedOption> get uninterpretedOption => $_getList(2);
-}
-
-class EnumValueOptions extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('EnumValueOptions',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOB(1, 'deprecated')
-    ..pp<UninterpretedOption>(999, 'uninterpretedOption', $pb.PbFieldType.PM,
-        UninterpretedOption.$checkItem, UninterpretedOption.create)
-    ..hasExtensions = true;
-
-  EnumValueOptions() : super();
-  EnumValueOptions.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  EnumValueOptions.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  EnumValueOptions clone() => new EnumValueOptions()..mergeFromMessage(this);
-  EnumValueOptions copyWith(void Function(EnumValueOptions) updates) =>
-      super.copyWith((message) => updates(message as EnumValueOptions));
-  $pb.BuilderInfo get info_ => _i;
-  static EnumValueOptions create() => new EnumValueOptions();
-  static $pb.PbList<EnumValueOptions> createRepeated() =>
-      new $pb.PbList<EnumValueOptions>();
-  static EnumValueOptions getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static EnumValueOptions _defaultInstance;
-  static void $checkItem(EnumValueOptions v) {
-    if (v is! EnumValueOptions) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  bool get deprecated => $_get(0, false);
-  set deprecated(bool v) {
-    $_setBool(0, v);
-  }
-
-  bool hasDeprecated() => $_has(0);
-  void clearDeprecated() => clearField(1);
-
-  List<UninterpretedOption> get uninterpretedOption => $_getList(1);
-}
-
-class ServiceOptions extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('ServiceOptions',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOB(33, 'deprecated')
-    ..pp<UninterpretedOption>(999, 'uninterpretedOption', $pb.PbFieldType.PM,
-        UninterpretedOption.$checkItem, UninterpretedOption.create)
-    ..hasExtensions = true;
-
-  ServiceOptions() : super();
-  ServiceOptions.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  ServiceOptions.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  ServiceOptions clone() => new ServiceOptions()..mergeFromMessage(this);
-  ServiceOptions copyWith(void Function(ServiceOptions) updates) =>
-      super.copyWith((message) => updates(message as ServiceOptions));
-  $pb.BuilderInfo get info_ => _i;
-  static ServiceOptions create() => new ServiceOptions();
-  static $pb.PbList<ServiceOptions> createRepeated() =>
-      new $pb.PbList<ServiceOptions>();
-  static ServiceOptions getDefault() => _defaultInstance ??= create()..freeze();
-  static ServiceOptions _defaultInstance;
-  static void $checkItem(ServiceOptions v) {
-    if (v is! ServiceOptions) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  bool get deprecated => $_get(0, false);
-  set deprecated(bool v) {
-    $_setBool(0, v);
-  }
-
-  bool hasDeprecated() => $_has(0);
-  void clearDeprecated() => clearField(33);
-
-  List<UninterpretedOption> get uninterpretedOption => $_getList(1);
-}
-
-class MethodOptions extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('MethodOptions',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aOB(33, 'deprecated')
-    ..e<MethodOptions_IdempotencyLevel>(
-        34,
-        'idempotencyLevel',
-        $pb.PbFieldType.OE,
-        MethodOptions_IdempotencyLevel.IDEMPOTENCY_UNKNOWN,
-        MethodOptions_IdempotencyLevel.valueOf,
-        MethodOptions_IdempotencyLevel.values)
-    ..pp<UninterpretedOption>(999, 'uninterpretedOption', $pb.PbFieldType.PM,
-        UninterpretedOption.$checkItem, UninterpretedOption.create)
-    ..hasExtensions = true;
-
-  MethodOptions() : super();
-  MethodOptions.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  MethodOptions.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  MethodOptions clone() => new MethodOptions()..mergeFromMessage(this);
-  MethodOptions copyWith(void Function(MethodOptions) updates) =>
-      super.copyWith((message) => updates(message as MethodOptions));
-  $pb.BuilderInfo get info_ => _i;
-  static MethodOptions create() => new MethodOptions();
-  static $pb.PbList<MethodOptions> createRepeated() =>
-      new $pb.PbList<MethodOptions>();
-  static MethodOptions getDefault() => _defaultInstance ??= create()..freeze();
-  static MethodOptions _defaultInstance;
-  static void $checkItem(MethodOptions v) {
-    if (v is! MethodOptions) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  bool get deprecated => $_get(0, false);
-  set deprecated(bool v) {
-    $_setBool(0, v);
-  }
-
-  bool hasDeprecated() => $_has(0);
-  void clearDeprecated() => clearField(33);
-
-  MethodOptions_IdempotencyLevel get idempotencyLevel => $_getN(1);
-  set idempotencyLevel(MethodOptions_IdempotencyLevel v) {
-    setField(34, v);
-  }
-
-  bool hasIdempotencyLevel() => $_has(1);
-  void clearIdempotencyLevel() => clearField(34);
-
-  List<UninterpretedOption> get uninterpretedOption => $_getList(2);
-}
-
-class UninterpretedOption_NamePart extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo(
-      'UninterpretedOption.NamePart',
-      package: const $pb.PackageName('google.protobuf'))
-    ..aQS(1, 'namePart')
-    ..a<bool>(2, 'isExtension', $pb.PbFieldType.QB);
-
-  UninterpretedOption_NamePart() : super();
-  UninterpretedOption_NamePart.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  UninterpretedOption_NamePart.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  UninterpretedOption_NamePart clone() =>
-      new UninterpretedOption_NamePart()..mergeFromMessage(this);
-  UninterpretedOption_NamePart copyWith(
-          void Function(UninterpretedOption_NamePart) updates) =>
-      super.copyWith(
-          (message) => updates(message as UninterpretedOption_NamePart));
-  $pb.BuilderInfo get info_ => _i;
-  static UninterpretedOption_NamePart create() =>
-      new UninterpretedOption_NamePart();
-  static $pb.PbList<UninterpretedOption_NamePart> createRepeated() =>
-      new $pb.PbList<UninterpretedOption_NamePart>();
-  static UninterpretedOption_NamePart getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static UninterpretedOption_NamePart _defaultInstance;
-  static void $checkItem(UninterpretedOption_NamePart v) {
-    if (v is! UninterpretedOption_NamePart)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get namePart => $_getS(0, '');
-  set namePart(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasNamePart() => $_has(0);
-  void clearNamePart() => clearField(1);
-
-  bool get isExtension => $_get(1, false);
-  set isExtension(bool v) {
-    $_setBool(1, v);
-  }
-
-  bool hasIsExtension() => $_has(1);
-  void clearIsExtension() => clearField(2);
-}
-
-class UninterpretedOption extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('UninterpretedOption',
-      package: const $pb.PackageName('google.protobuf'))
-    ..pp<UninterpretedOption_NamePart>(
-        2,
-        'name',
-        $pb.PbFieldType.PM,
-        UninterpretedOption_NamePart.$checkItem,
-        UninterpretedOption_NamePart.create)
-    ..aOS(3, 'identifierValue')
-    ..a<Int64>(4, 'positiveIntValue', $pb.PbFieldType.OU6, Int64.ZERO)
-    ..aInt64(5, 'negativeIntValue')
-    ..a<double>(6, 'doubleValue', $pb.PbFieldType.OD)
-    ..a<List<int>>(7, 'stringValue', $pb.PbFieldType.OY)
-    ..aOS(8, 'aggregateValue');
-
-  UninterpretedOption() : super();
-  UninterpretedOption.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  UninterpretedOption.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  UninterpretedOption clone() =>
-      new UninterpretedOption()..mergeFromMessage(this);
-  UninterpretedOption copyWith(void Function(UninterpretedOption) updates) =>
-      super.copyWith((message) => updates(message as UninterpretedOption));
-  $pb.BuilderInfo get info_ => _i;
-  static UninterpretedOption create() => new UninterpretedOption();
-  static $pb.PbList<UninterpretedOption> createRepeated() =>
-      new $pb.PbList<UninterpretedOption>();
-  static UninterpretedOption getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static UninterpretedOption _defaultInstance;
-  static void $checkItem(UninterpretedOption v) {
-    if (v is! UninterpretedOption)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<UninterpretedOption_NamePart> get name => $_getList(0);
-
-  String get identifierValue => $_getS(1, '');
-  set identifierValue(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasIdentifierValue() => $_has(1);
-  void clearIdentifierValue() => clearField(3);
-
-  Int64 get positiveIntValue => $_getI64(2);
-  set positiveIntValue(Int64 v) {
-    $_setInt64(2, v);
-  }
-
-  bool hasPositiveIntValue() => $_has(2);
-  void clearPositiveIntValue() => clearField(4);
-
-  Int64 get negativeIntValue => $_getI64(3);
-  set negativeIntValue(Int64 v) {
-    $_setInt64(3, v);
-  }
-
-  bool hasNegativeIntValue() => $_has(3);
-  void clearNegativeIntValue() => clearField(5);
-
-  double get doubleValue => $_getN(4);
-  set doubleValue(double v) {
-    $_setDouble(4, v);
-  }
-
-  bool hasDoubleValue() => $_has(4);
-  void clearDoubleValue() => clearField(6);
-
-  List<int> get stringValue => $_getN(5);
-  set stringValue(List<int> v) {
-    $_setBytes(5, v);
-  }
-
-  bool hasStringValue() => $_has(5);
-  void clearStringValue() => clearField(7);
-
-  String get aggregateValue => $_getS(6, '');
-  set aggregateValue(String v) {
-    $_setString(6, v);
-  }
-
-  bool hasAggregateValue() => $_has(6);
-  void clearAggregateValue() => clearField(8);
-}
-
-class SourceCodeInfo_Location extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo(
-      'SourceCodeInfo.Location',
-      package: const $pb.PackageName('google.protobuf'))
-    ..p<int>(1, 'path', $pb.PbFieldType.K3)
-    ..p<int>(2, 'span', $pb.PbFieldType.K3)
-    ..aOS(3, 'leadingComments')
-    ..aOS(4, 'trailingComments')
-    ..pPS(6, 'leadingDetachedComments')
-    ..hasRequiredFields = false;
-
-  SourceCodeInfo_Location() : super();
-  SourceCodeInfo_Location.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  SourceCodeInfo_Location.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  SourceCodeInfo_Location clone() =>
-      new SourceCodeInfo_Location()..mergeFromMessage(this);
-  SourceCodeInfo_Location copyWith(
-          void Function(SourceCodeInfo_Location) updates) =>
-      super.copyWith((message) => updates(message as SourceCodeInfo_Location));
-  $pb.BuilderInfo get info_ => _i;
-  static SourceCodeInfo_Location create() => new SourceCodeInfo_Location();
-  static $pb.PbList<SourceCodeInfo_Location> createRepeated() =>
-      new $pb.PbList<SourceCodeInfo_Location>();
-  static SourceCodeInfo_Location getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static SourceCodeInfo_Location _defaultInstance;
-  static void $checkItem(SourceCodeInfo_Location v) {
-    if (v is! SourceCodeInfo_Location)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<int> get path => $_getList(0);
-
-  List<int> get span => $_getList(1);
-
-  String get leadingComments => $_getS(2, '');
-  set leadingComments(String v) {
-    $_setString(2, v);
-  }
-
-  bool hasLeadingComments() => $_has(2);
-  void clearLeadingComments() => clearField(3);
-
-  String get trailingComments => $_getS(3, '');
-  set trailingComments(String v) {
-    $_setString(3, v);
-  }
-
-  bool hasTrailingComments() => $_has(3);
-  void clearTrailingComments() => clearField(4);
-
-  List<String> get leadingDetachedComments => $_getList(4);
-}
-
-class SourceCodeInfo extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('SourceCodeInfo',
-      package: const $pb.PackageName('google.protobuf'))
-    ..pp<SourceCodeInfo_Location>(1, 'location', $pb.PbFieldType.PM,
-        SourceCodeInfo_Location.$checkItem, SourceCodeInfo_Location.create)
-    ..hasRequiredFields = false;
-
-  SourceCodeInfo() : super();
-  SourceCodeInfo.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  SourceCodeInfo.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  SourceCodeInfo clone() => new SourceCodeInfo()..mergeFromMessage(this);
-  SourceCodeInfo copyWith(void Function(SourceCodeInfo) updates) =>
-      super.copyWith((message) => updates(message as SourceCodeInfo));
-  $pb.BuilderInfo get info_ => _i;
-  static SourceCodeInfo create() => new SourceCodeInfo();
-  static $pb.PbList<SourceCodeInfo> createRepeated() =>
-      new $pb.PbList<SourceCodeInfo>();
-  static SourceCodeInfo getDefault() => _defaultInstance ??= create()..freeze();
-  static SourceCodeInfo _defaultInstance;
-  static void $checkItem(SourceCodeInfo v) {
-    if (v is! SourceCodeInfo) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<SourceCodeInfo_Location> get location => $_getList(0);
-}
-
-class GeneratedCodeInfo_Annotation extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo(
-      'GeneratedCodeInfo.Annotation',
-      package: const $pb.PackageName('google.protobuf'))
-    ..p<int>(1, 'path', $pb.PbFieldType.K3)
-    ..aOS(2, 'sourceFile')
-    ..a<int>(3, 'begin', $pb.PbFieldType.O3)
-    ..a<int>(4, 'end', $pb.PbFieldType.O3)
-    ..hasRequiredFields = false;
-
-  GeneratedCodeInfo_Annotation() : super();
-  GeneratedCodeInfo_Annotation.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  GeneratedCodeInfo_Annotation.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  GeneratedCodeInfo_Annotation clone() =>
-      new GeneratedCodeInfo_Annotation()..mergeFromMessage(this);
-  GeneratedCodeInfo_Annotation copyWith(
-          void Function(GeneratedCodeInfo_Annotation) updates) =>
-      super.copyWith(
-          (message) => updates(message as GeneratedCodeInfo_Annotation));
-  $pb.BuilderInfo get info_ => _i;
-  static GeneratedCodeInfo_Annotation create() =>
-      new GeneratedCodeInfo_Annotation();
-  static $pb.PbList<GeneratedCodeInfo_Annotation> createRepeated() =>
-      new $pb.PbList<GeneratedCodeInfo_Annotation>();
-  static GeneratedCodeInfo_Annotation getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static GeneratedCodeInfo_Annotation _defaultInstance;
-  static void $checkItem(GeneratedCodeInfo_Annotation v) {
-    if (v is! GeneratedCodeInfo_Annotation)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<int> get path => $_getList(0);
-
-  String get sourceFile => $_getS(1, '');
-  set sourceFile(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasSourceFile() => $_has(1);
-  void clearSourceFile() => clearField(2);
-
-  int get begin => $_get(2, 0);
-  set begin(int v) {
-    $_setSignedInt32(2, v);
-  }
-
-  bool hasBegin() => $_has(2);
-  void clearBegin() => clearField(3);
-
-  int get end => $_get(3, 0);
-  set end(int v) {
-    $_setSignedInt32(3, v);
-  }
-
-  bool hasEnd() => $_has(3);
-  void clearEnd() => clearField(4);
-}
-
-class GeneratedCodeInfo extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('GeneratedCodeInfo',
-      package: const $pb.PackageName('google.protobuf'))
-    ..pp<GeneratedCodeInfo_Annotation>(
-        1,
-        'annotation',
-        $pb.PbFieldType.PM,
-        GeneratedCodeInfo_Annotation.$checkItem,
-        GeneratedCodeInfo_Annotation.create)
-    ..hasRequiredFields = false;
-
-  GeneratedCodeInfo() : super();
-  GeneratedCodeInfo.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  GeneratedCodeInfo.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  GeneratedCodeInfo clone() => new GeneratedCodeInfo()..mergeFromMessage(this);
-  GeneratedCodeInfo copyWith(void Function(GeneratedCodeInfo) updates) =>
-      super.copyWith((message) => updates(message as GeneratedCodeInfo));
-  $pb.BuilderInfo get info_ => _i;
-  static GeneratedCodeInfo create() => new GeneratedCodeInfo();
-  static $pb.PbList<GeneratedCodeInfo> createRepeated() =>
-      new $pb.PbList<GeneratedCodeInfo>();
-  static GeneratedCodeInfo getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static GeneratedCodeInfo _defaultInstance;
-  static void $checkItem(GeneratedCodeInfo v) {
-    if (v is! GeneratedCodeInfo)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<GeneratedCodeInfo_Annotation> get annotation => $_getList(0);
-}
diff --git a/lib/src/descriptor.pbenum.dart b/lib/src/descriptor.pbenum.dart
deleted file mode 100644
index a25cda6..0000000
--- a/lib/src/descriptor.pbenum.dart
+++ /dev/null
@@ -1,206 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: descriptor.proto
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore_for_file: UNDEFINED_SHOWN_NAME,UNUSED_SHOWN_NAME
-import 'dart:core' show int, dynamic, String, List, Map;
-import 'package:protobuf/protobuf.dart' as $pb;
-
-class FieldDescriptorProto_Type extends $pb.ProtobufEnum {
-  static const FieldDescriptorProto_Type TYPE_DOUBLE =
-      const FieldDescriptorProto_Type._(1, 'TYPE_DOUBLE');
-  static const FieldDescriptorProto_Type TYPE_FLOAT =
-      const FieldDescriptorProto_Type._(2, 'TYPE_FLOAT');
-  static const FieldDescriptorProto_Type TYPE_INT64 =
-      const FieldDescriptorProto_Type._(3, 'TYPE_INT64');
-  static const FieldDescriptorProto_Type TYPE_UINT64 =
-      const FieldDescriptorProto_Type._(4, 'TYPE_UINT64');
-  static const FieldDescriptorProto_Type TYPE_INT32 =
-      const FieldDescriptorProto_Type._(5, 'TYPE_INT32');
-  static const FieldDescriptorProto_Type TYPE_FIXED64 =
-      const FieldDescriptorProto_Type._(6, 'TYPE_FIXED64');
-  static const FieldDescriptorProto_Type TYPE_FIXED32 =
-      const FieldDescriptorProto_Type._(7, 'TYPE_FIXED32');
-  static const FieldDescriptorProto_Type TYPE_BOOL =
-      const FieldDescriptorProto_Type._(8, 'TYPE_BOOL');
-  static const FieldDescriptorProto_Type TYPE_STRING =
-      const FieldDescriptorProto_Type._(9, 'TYPE_STRING');
-  static const FieldDescriptorProto_Type TYPE_GROUP =
-      const FieldDescriptorProto_Type._(10, 'TYPE_GROUP');
-  static const FieldDescriptorProto_Type TYPE_MESSAGE =
-      const FieldDescriptorProto_Type._(11, 'TYPE_MESSAGE');
-  static const FieldDescriptorProto_Type TYPE_BYTES =
-      const FieldDescriptorProto_Type._(12, 'TYPE_BYTES');
-  static const FieldDescriptorProto_Type TYPE_UINT32 =
-      const FieldDescriptorProto_Type._(13, 'TYPE_UINT32');
-  static const FieldDescriptorProto_Type TYPE_ENUM =
-      const FieldDescriptorProto_Type._(14, 'TYPE_ENUM');
-  static const FieldDescriptorProto_Type TYPE_SFIXED32 =
-      const FieldDescriptorProto_Type._(15, 'TYPE_SFIXED32');
-  static const FieldDescriptorProto_Type TYPE_SFIXED64 =
-      const FieldDescriptorProto_Type._(16, 'TYPE_SFIXED64');
-  static const FieldDescriptorProto_Type TYPE_SINT32 =
-      const FieldDescriptorProto_Type._(17, 'TYPE_SINT32');
-  static const FieldDescriptorProto_Type TYPE_SINT64 =
-      const FieldDescriptorProto_Type._(18, 'TYPE_SINT64');
-
-  static const List<FieldDescriptorProto_Type> values =
-      const <FieldDescriptorProto_Type>[
-    TYPE_DOUBLE,
-    TYPE_FLOAT,
-    TYPE_INT64,
-    TYPE_UINT64,
-    TYPE_INT32,
-    TYPE_FIXED64,
-    TYPE_FIXED32,
-    TYPE_BOOL,
-    TYPE_STRING,
-    TYPE_GROUP,
-    TYPE_MESSAGE,
-    TYPE_BYTES,
-    TYPE_UINT32,
-    TYPE_ENUM,
-    TYPE_SFIXED32,
-    TYPE_SFIXED64,
-    TYPE_SINT32,
-    TYPE_SINT64,
-  ];
-
-  static final Map<int, FieldDescriptorProto_Type> _byValue =
-      $pb.ProtobufEnum.initByValue(values);
-  static FieldDescriptorProto_Type valueOf(int value) => _byValue[value];
-  static void $checkItem(FieldDescriptorProto_Type v) {
-    if (v is! FieldDescriptorProto_Type)
-      $pb.checkItemFailed(v, 'FieldDescriptorProto_Type');
-  }
-
-  const FieldDescriptorProto_Type._(int v, String n) : super(v, n);
-}
-
-class FieldDescriptorProto_Label extends $pb.ProtobufEnum {
-  static const FieldDescriptorProto_Label LABEL_OPTIONAL =
-      const FieldDescriptorProto_Label._(1, 'LABEL_OPTIONAL');
-  static const FieldDescriptorProto_Label LABEL_REQUIRED =
-      const FieldDescriptorProto_Label._(2, 'LABEL_REQUIRED');
-  static const FieldDescriptorProto_Label LABEL_REPEATED =
-      const FieldDescriptorProto_Label._(3, 'LABEL_REPEATED');
-
-  static const List<FieldDescriptorProto_Label> values =
-      const <FieldDescriptorProto_Label>[
-    LABEL_OPTIONAL,
-    LABEL_REQUIRED,
-    LABEL_REPEATED,
-  ];
-
-  static final Map<int, FieldDescriptorProto_Label> _byValue =
-      $pb.ProtobufEnum.initByValue(values);
-  static FieldDescriptorProto_Label valueOf(int value) => _byValue[value];
-  static void $checkItem(FieldDescriptorProto_Label v) {
-    if (v is! FieldDescriptorProto_Label)
-      $pb.checkItemFailed(v, 'FieldDescriptorProto_Label');
-  }
-
-  const FieldDescriptorProto_Label._(int v, String n) : super(v, n);
-}
-
-class FileOptions_OptimizeMode extends $pb.ProtobufEnum {
-  static const FileOptions_OptimizeMode SPEED =
-      const FileOptions_OptimizeMode._(1, 'SPEED');
-  static const FileOptions_OptimizeMode CODE_SIZE =
-      const FileOptions_OptimizeMode._(2, 'CODE_SIZE');
-  static const FileOptions_OptimizeMode LITE_RUNTIME =
-      const FileOptions_OptimizeMode._(3, 'LITE_RUNTIME');
-
-  static const List<FileOptions_OptimizeMode> values =
-      const <FileOptions_OptimizeMode>[
-    SPEED,
-    CODE_SIZE,
-    LITE_RUNTIME,
-  ];
-
-  static final Map<int, FileOptions_OptimizeMode> _byValue =
-      $pb.ProtobufEnum.initByValue(values);
-  static FileOptions_OptimizeMode valueOf(int value) => _byValue[value];
-  static void $checkItem(FileOptions_OptimizeMode v) {
-    if (v is! FileOptions_OptimizeMode)
-      $pb.checkItemFailed(v, 'FileOptions_OptimizeMode');
-  }
-
-  const FileOptions_OptimizeMode._(int v, String n) : super(v, n);
-}
-
-class FieldOptions_CType extends $pb.ProtobufEnum {
-  static const FieldOptions_CType STRING =
-      const FieldOptions_CType._(0, 'STRING');
-  static const FieldOptions_CType CORD = const FieldOptions_CType._(1, 'CORD');
-  static const FieldOptions_CType STRING_PIECE =
-      const FieldOptions_CType._(2, 'STRING_PIECE');
-
-  static const List<FieldOptions_CType> values = const <FieldOptions_CType>[
-    STRING,
-    CORD,
-    STRING_PIECE,
-  ];
-
-  static final Map<int, FieldOptions_CType> _byValue =
-      $pb.ProtobufEnum.initByValue(values);
-  static FieldOptions_CType valueOf(int value) => _byValue[value];
-  static void $checkItem(FieldOptions_CType v) {
-    if (v is! FieldOptions_CType) $pb.checkItemFailed(v, 'FieldOptions_CType');
-  }
-
-  const FieldOptions_CType._(int v, String n) : super(v, n);
-}
-
-class FieldOptions_JSType extends $pb.ProtobufEnum {
-  static const FieldOptions_JSType JS_NORMAL =
-      const FieldOptions_JSType._(0, 'JS_NORMAL');
-  static const FieldOptions_JSType JS_STRING =
-      const FieldOptions_JSType._(1, 'JS_STRING');
-  static const FieldOptions_JSType JS_NUMBER =
-      const FieldOptions_JSType._(2, 'JS_NUMBER');
-
-  static const List<FieldOptions_JSType> values = const <FieldOptions_JSType>[
-    JS_NORMAL,
-    JS_STRING,
-    JS_NUMBER,
-  ];
-
-  static final Map<int, FieldOptions_JSType> _byValue =
-      $pb.ProtobufEnum.initByValue(values);
-  static FieldOptions_JSType valueOf(int value) => _byValue[value];
-  static void $checkItem(FieldOptions_JSType v) {
-    if (v is! FieldOptions_JSType)
-      $pb.checkItemFailed(v, 'FieldOptions_JSType');
-  }
-
-  const FieldOptions_JSType._(int v, String n) : super(v, n);
-}
-
-class MethodOptions_IdempotencyLevel extends $pb.ProtobufEnum {
-  static const MethodOptions_IdempotencyLevel IDEMPOTENCY_UNKNOWN =
-      const MethodOptions_IdempotencyLevel._(0, 'IDEMPOTENCY_UNKNOWN');
-  static const MethodOptions_IdempotencyLevel NO_SIDE_EFFECTS =
-      const MethodOptions_IdempotencyLevel._(1, 'NO_SIDE_EFFECTS');
-  static const MethodOptions_IdempotencyLevel IDEMPOTENT =
-      const MethodOptions_IdempotencyLevel._(2, 'IDEMPOTENT');
-
-  static const List<MethodOptions_IdempotencyLevel> values =
-      const <MethodOptions_IdempotencyLevel>[
-    IDEMPOTENCY_UNKNOWN,
-    NO_SIDE_EFFECTS,
-    IDEMPOTENT,
-  ];
-
-  static final Map<int, MethodOptions_IdempotencyLevel> _byValue =
-      $pb.ProtobufEnum.initByValue(values);
-  static MethodOptions_IdempotencyLevel valueOf(int value) => _byValue[value];
-  static void $checkItem(MethodOptions_IdempotencyLevel v) {
-    if (v is! MethodOptions_IdempotencyLevel)
-      $pb.checkItemFailed(v, 'MethodOptions_IdempotencyLevel');
-  }
-
-  const MethodOptions_IdempotencyLevel._(int v, String n) : super(v, n);
-}
diff --git a/lib/src/plugin.pb.dart b/lib/src/plugin.pb.dart
deleted file mode 100644
index f8a6ba2..0000000
--- a/lib/src/plugin.pb.dart
+++ /dev/null
@@ -1,234 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: plugin.proto
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:protobuf/protobuf.dart' as $pb;
-
-import 'descriptor.pb.dart' as $0;
-
-class Version extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('Version',
-      package: const $pb.PackageName('google.protobuf.compiler'))
-    ..a<int>(1, 'major', $pb.PbFieldType.O3)
-    ..a<int>(2, 'minor', $pb.PbFieldType.O3)
-    ..a<int>(3, 'patch', $pb.PbFieldType.O3)
-    ..aOS(4, 'suffix')
-    ..hasRequiredFields = false;
-
-  Version() : super();
-  Version.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  Version.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  Version clone() => new Version()..mergeFromMessage(this);
-  Version copyWith(void Function(Version) updates) =>
-      super.copyWith((message) => updates(message as Version));
-  $pb.BuilderInfo get info_ => _i;
-  static Version create() => new Version();
-  static $pb.PbList<Version> createRepeated() => new $pb.PbList<Version>();
-  static Version getDefault() => _defaultInstance ??= create()..freeze();
-  static Version _defaultInstance;
-  static void $checkItem(Version v) {
-    if (v is! Version) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  int get major => $_get(0, 0);
-  set major(int v) {
-    $_setSignedInt32(0, v);
-  }
-
-  bool hasMajor() => $_has(0);
-  void clearMajor() => clearField(1);
-
-  int get minor => $_get(1, 0);
-  set minor(int v) {
-    $_setSignedInt32(1, v);
-  }
-
-  bool hasMinor() => $_has(1);
-  void clearMinor() => clearField(2);
-
-  int get patch => $_get(2, 0);
-  set patch(int v) {
-    $_setSignedInt32(2, v);
-  }
-
-  bool hasPatch() => $_has(2);
-  void clearPatch() => clearField(3);
-
-  String get suffix => $_getS(3, '');
-  set suffix(String v) {
-    $_setString(3, v);
-  }
-
-  bool hasSuffix() => $_has(3);
-  void clearSuffix() => clearField(4);
-}
-
-class CodeGeneratorRequest extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('CodeGeneratorRequest',
-      package: const $pb.PackageName('google.protobuf.compiler'))
-    ..pPS(1, 'fileToGenerate')
-    ..aOS(2, 'parameter')
-    ..a<Version>(3, 'compilerVersion', $pb.PbFieldType.OM, Version.getDefault,
-        Version.create)
-    ..pp<$0.FileDescriptorProto>(15, 'protoFile', $pb.PbFieldType.PM,
-        $0.FileDescriptorProto.$checkItem, $0.FileDescriptorProto.create);
-
-  CodeGeneratorRequest() : super();
-  CodeGeneratorRequest.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  CodeGeneratorRequest.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  CodeGeneratorRequest clone() =>
-      new CodeGeneratorRequest()..mergeFromMessage(this);
-  CodeGeneratorRequest copyWith(void Function(CodeGeneratorRequest) updates) =>
-      super.copyWith((message) => updates(message as CodeGeneratorRequest));
-  $pb.BuilderInfo get info_ => _i;
-  static CodeGeneratorRequest create() => new CodeGeneratorRequest();
-  static $pb.PbList<CodeGeneratorRequest> createRepeated() =>
-      new $pb.PbList<CodeGeneratorRequest>();
-  static CodeGeneratorRequest getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static CodeGeneratorRequest _defaultInstance;
-  static void $checkItem(CodeGeneratorRequest v) {
-    if (v is! CodeGeneratorRequest)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  List<String> get fileToGenerate => $_getList(0);
-
-  String get parameter => $_getS(1, '');
-  set parameter(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasParameter() => $_has(1);
-  void clearParameter() => clearField(2);
-
-  Version get compilerVersion => $_getN(2);
-  set compilerVersion(Version v) {
-    setField(3, v);
-  }
-
-  bool hasCompilerVersion() => $_has(2);
-  void clearCompilerVersion() => clearField(3);
-
-  List<$0.FileDescriptorProto> get protoFile => $_getList(3);
-}
-
-class CodeGeneratorResponse_File extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo(
-      'CodeGeneratorResponse.File',
-      package: const $pb.PackageName('google.protobuf.compiler'))
-    ..aOS(1, 'name')
-    ..aOS(2, 'insertionPoint')
-    ..aOS(15, 'content')
-    ..hasRequiredFields = false;
-
-  CodeGeneratorResponse_File() : super();
-  CodeGeneratorResponse_File.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  CodeGeneratorResponse_File.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  CodeGeneratorResponse_File clone() =>
-      new CodeGeneratorResponse_File()..mergeFromMessage(this);
-  CodeGeneratorResponse_File copyWith(
-          void Function(CodeGeneratorResponse_File) updates) =>
-      super.copyWith(
-          (message) => updates(message as CodeGeneratorResponse_File));
-  $pb.BuilderInfo get info_ => _i;
-  static CodeGeneratorResponse_File create() =>
-      new CodeGeneratorResponse_File();
-  static $pb.PbList<CodeGeneratorResponse_File> createRepeated() =>
-      new $pb.PbList<CodeGeneratorResponse_File>();
-  static CodeGeneratorResponse_File getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static CodeGeneratorResponse_File _defaultInstance;
-  static void $checkItem(CodeGeneratorResponse_File v) {
-    if (v is! CodeGeneratorResponse_File)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get name => $_getS(0, '');
-  set name(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasName() => $_has(0);
-  void clearName() => clearField(1);
-
-  String get insertionPoint => $_getS(1, '');
-  set insertionPoint(String v) {
-    $_setString(1, v);
-  }
-
-  bool hasInsertionPoint() => $_has(1);
-  void clearInsertionPoint() => clearField(2);
-
-  String get content => $_getS(2, '');
-  set content(String v) {
-    $_setString(2, v);
-  }
-
-  bool hasContent() => $_has(2);
-  void clearContent() => clearField(15);
-}
-
-class CodeGeneratorResponse extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('CodeGeneratorResponse',
-      package: const $pb.PackageName('google.protobuf.compiler'))
-    ..aOS(1, 'error')
-    ..pp<CodeGeneratorResponse_File>(
-        15,
-        'file',
-        $pb.PbFieldType.PM,
-        CodeGeneratorResponse_File.$checkItem,
-        CodeGeneratorResponse_File.create)
-    ..hasRequiredFields = false;
-
-  CodeGeneratorResponse() : super();
-  CodeGeneratorResponse.fromBuffer(List<int> i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromBuffer(i, r);
-  CodeGeneratorResponse.fromJson(String i,
-      [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY])
-      : super.fromJson(i, r);
-  CodeGeneratorResponse clone() =>
-      new CodeGeneratorResponse()..mergeFromMessage(this);
-  CodeGeneratorResponse copyWith(
-          void Function(CodeGeneratorResponse) updates) =>
-      super.copyWith((message) => updates(message as CodeGeneratorResponse));
-  $pb.BuilderInfo get info_ => _i;
-  static CodeGeneratorResponse create() => new CodeGeneratorResponse();
-  static $pb.PbList<CodeGeneratorResponse> createRepeated() =>
-      new $pb.PbList<CodeGeneratorResponse>();
-  static CodeGeneratorResponse getDefault() =>
-      _defaultInstance ??= create()..freeze();
-  static CodeGeneratorResponse _defaultInstance;
-  static void $checkItem(CodeGeneratorResponse v) {
-    if (v is! CodeGeneratorResponse)
-      $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get error => $_getS(0, '');
-  set error(String v) {
-    $_setString(0, v);
-  }
-
-  bool hasError() => $_has(0);
-  void clearError() => clearField(1);
-
-  List<CodeGeneratorResponse_File> get file => $_getList(1);
-}
diff --git a/lib/testing/mixins.dart b/lib/testing/mixins.dart
deleted file mode 100644
index 694840c..0000000
--- a/lib/testing/mixins.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-abstract class Mixin1 {
-  String get overriddenString => "mixin1";
-
-  String get interfaceString;
-  set interfaceString(String string);
-  bool hasInterfaceString();
-}
-
-abstract class Mixin2 {
-  String get overriddenString => "mixin2";
-
-  bool hasOverriddenHasMethod() => false;
-}
-
-abstract class Mixin3 {}
diff --git a/protos/dart_options.proto b/protos/dart_options.proto
deleted file mode 100644
index 507c7f3..0000000
--- a/protos/dart_options.proto
+++ /dev/null
@@ -1,79 +0,0 @@
-// Experimental options controlling Dart code generation.
-syntax = "proto2";
-
-package dart_options;
-
-// This file must be modified for Google internal use,
-// because custom options only work when the package name
-// agrees with the version of protoc we are using.
-// (The import statement and "google.protobuf." prefix need to be changed.)
-
-import "descriptor.proto";
-
-// A mixin that can be used in the 'with' clause of the generated Dart class
-// for a proto message.
-message DartMixin {
-  // The name of the mixin class.
-  optional string name = 1;
-
-  // A URI pointing to the Dart library that defines the mixin.
-  // The generated Dart code will use this in an import statement.
-  optional string import_from = 2;
-
-  // The name of another mixin to be applied ahead of this one.
-  // The generated class for the message will inherit from all mixins
-  // in the parent chain.
-  optional string parent = 3;
-}
-
-// Defines additional Dart imports to be used with messages in this file.
-message Imports {
-
-  // Mixins to be used on messages in this file.
-  // These mixins are in addition to internally defined mixins (e.g PbMapMixin)
-  // and may override them.
-  //
-  // Warning: mixins are experimental. The protoc Dart plugin doesn't check
-  // for name conflicts between mixin class members and generated class members,
-  // so the generated code may contain errors. Therefore, running dartanalyzer
-  // on the generated file is a good idea.
-  repeated DartMixin mixins = 1;
-}
-
-extend google.protobuf.FileOptions {
-
-  optional Imports imports = 28125061;
-
-  // Applies the named mixin to all messages in this file.
-  // (May be overridden by the "mixin" option on a message.)
-  // For now, "PbMapMixin" is the only available mixin.
-  optional string default_mixin = 96128839;
-}
-
-extend google.protobuf.MessageOptions {
-
-  // Applies the named mixin.
-  // For now, "PbMapMixin" is the only available mixin.
-  // The empty string can be used to turn off mixins for this message.
-  optional string mixin = 96128839;
-}
-
-extend google.protobuf.FieldOptions {
-  // Adds @override annotation to the field's getter (for use with mixins).
-  optional bool override_getter = 28205290;
-
-  // Adds @override annotation to the field's setter (for use with mixins).
-  optional bool override_setter = 28937366;
-
-  // Adds @override annotation to the field's hasX() method (for use with
-  // mixins).
-  optional bool override_has_method = 28937461;
-
-  // Adds @override annotation to the field's clearX() method (for use with
-  // mixins).
-  optional bool override_clear_method = 28907907;
-
-  // Uses the given name for getters, setters and as suffixes for has/clear
-  // methods in the generated Dart file. Should be lowerCamelCase.
-  optional string dart_name = 28700919;
-}
diff --git a/protos/descriptor.proto b/protos/descriptor.proto
deleted file mode 100644
index c7fbaaf..0000000
--- a/protos/descriptor.proto
+++ /dev/null
@@ -1,836 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
-// The messages in this file describe the definitions found in .proto files.
-// A valid .proto file can be translated directly to a FileDescriptorProto
-// without any other information (e.g. without reading its imports).
-
-
-syntax = "proto2";
-
-package google.protobuf;
-option go_package = "github.com/golang/protobuf/protoc-gen-go/descriptor;descriptor";
-option java_package = "com.google.protobuf";
-option java_outer_classname = "DescriptorProtos";
-option csharp_namespace = "Google.Protobuf.Reflection";
-option objc_class_prefix = "GPB";
-
-// descriptor.proto must be optimized for speed because reflection-based
-// algorithms don't work during bootstrapping.
-option optimize_for = SPEED;
-
-// The protocol compiler can output a FileDescriptorSet containing the .proto
-// files it parses.
-message FileDescriptorSet {
-  repeated FileDescriptorProto file = 1;
-}
-
-// Describes a complete .proto file.
-message FileDescriptorProto {
-  optional string name = 1;       // file name, relative to root of source tree
-  optional string package = 2;    // e.g. "foo", "foo.bar", etc.
-
-  // Names of files imported by this file.
-  repeated string dependency = 3;
-  // Indexes of the public imported files in the dependency list above.
-  repeated int32 public_dependency = 10;
-  // Indexes of the weak imported files in the dependency list.
-  // For Google-internal migration only. Do not use.
-  repeated int32 weak_dependency = 11;
-
-  // All top-level definitions in this file.
-  repeated DescriptorProto message_type = 4;
-  repeated EnumDescriptorProto enum_type = 5;
-  repeated ServiceDescriptorProto service = 6;
-  repeated FieldDescriptorProto extension = 7;
-
-  optional FileOptions options = 8;
-
-  // This field contains optional information about the original source code.
-  // You may safely remove this entire field without harming runtime
-  // functionality of the descriptors -- the information is needed only by
-  // development tools.
-  optional SourceCodeInfo source_code_info = 9;
-
-  // The syntax of the proto file.
-  // The supported values are "proto2" and "proto3".
-  optional string syntax = 12;
-}
-
-// Describes a message type.
-message DescriptorProto {
-  optional string name = 1;
-
-  repeated FieldDescriptorProto field = 2;
-  repeated FieldDescriptorProto extension = 6;
-
-  repeated DescriptorProto nested_type = 3;
-  repeated EnumDescriptorProto enum_type = 4;
-
-  message ExtensionRange {
-    optional int32 start = 1;
-    optional int32 end = 2;
-  }
-  repeated ExtensionRange extension_range = 5;
-
-  repeated OneofDescriptorProto oneof_decl = 8;
-
-  optional MessageOptions options = 7;
-
-  // Range of reserved tag numbers. Reserved tag numbers may not be used by
-  // fields or extension ranges in the same message. Reserved ranges may
-  // not overlap.
-  message ReservedRange {
-    optional int32 start = 1; // Inclusive.
-    optional int32 end = 2;   // Exclusive.
-  }
-  repeated ReservedRange reserved_range = 9;
-  // Reserved field names, which may not be used by fields in the same message.
-  // A given name may only be reserved once.
-  repeated string reserved_name = 10;
-}
-
-// Describes a field within a message.
-message FieldDescriptorProto {
-  enum Type {
-    // 0 is reserved for errors.
-    // Order is weird for historical reasons.
-    TYPE_DOUBLE         = 1;
-    TYPE_FLOAT          = 2;
-    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if
-    // negative values are likely.
-    TYPE_INT64          = 3;
-    TYPE_UINT64         = 4;
-    // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if
-    // negative values are likely.
-    TYPE_INT32          = 5;
-    TYPE_FIXED64        = 6;
-    TYPE_FIXED32        = 7;
-    TYPE_BOOL           = 8;
-    TYPE_STRING         = 9;
-    // Tag-delimited aggregate.
-    // Group type is deprecated and not supported in proto3. However, Proto3
-    // implementations should still be able to parse the group wire format and
-    // treat group fields as unknown fields.
-    TYPE_GROUP          = 10;
-    TYPE_MESSAGE        = 11;  // Length-delimited aggregate.
-
-    // New in version 2.
-    TYPE_BYTES          = 12;
-    TYPE_UINT32         = 13;
-    TYPE_ENUM           = 14;
-    TYPE_SFIXED32       = 15;
-    TYPE_SFIXED64       = 16;
-    TYPE_SINT32         = 17;  // Uses ZigZag encoding.
-    TYPE_SINT64         = 18;  // Uses ZigZag encoding.
-  };
-
-  enum Label {
-    // 0 is reserved for errors
-    LABEL_OPTIONAL      = 1;
-    LABEL_REQUIRED      = 2;
-    LABEL_REPEATED      = 3;
-  };
-
-  optional string name = 1;
-  optional int32 number = 3;
-  optional Label label = 4;
-
-  // If type_name is set, this need not be set.  If both this and type_name
-  // are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
-  optional Type type = 5;
-
-  // For message and enum types, this is the name of the type.  If the name
-  // starts with a '.', it is fully-qualified.  Otherwise, C++-like scoping
-  // rules are used to find the type (i.e. first the nested types within this
-  // message are searched, then within the parent, on up to the root
-  // namespace).
-  optional string type_name = 6;
-
-  // For extensions, this is the name of the type being extended.  It is
-  // resolved in the same manner as type_name.
-  optional string extendee = 2;
-
-  // For numeric types, contains the original text representation of the value.
-  // For booleans, "true" or "false".
-  // For strings, contains the default text contents (not escaped in any way).
-  // For bytes, contains the C escaped value.  All bytes >= 128 are escaped.
-  // TODO(kenton):  Base-64 encode?
-  optional string default_value = 7;
-
-  // If set, gives the index of a oneof in the containing type's oneof_decl
-  // list.  This field is a member of that oneof.
-  optional int32 oneof_index = 9;
-
-  // JSON name of this field. The value is set by protocol compiler. If the
-  // user has set a "json_name" option on this field, that option's value
-  // will be used. Otherwise, it's deduced from the field's name by converting
-  // it to camelCase.
-  optional string json_name = 10;
-
-  optional FieldOptions options = 8;
-}
-
-// Describes a oneof.
-message OneofDescriptorProto {
-  optional string name = 1;
-  optional OneofOptions options = 2;
-}
-
-// Describes an enum type.
-message EnumDescriptorProto {
-  optional string name = 1;
-
-  repeated EnumValueDescriptorProto value = 2;
-
-  optional EnumOptions options = 3;
-}
-
-// Describes a value within an enum.
-message EnumValueDescriptorProto {
-  optional string name = 1;
-  optional int32 number = 2;
-
-  optional EnumValueOptions options = 3;
-}
-
-// Describes a service.
-message ServiceDescriptorProto {
-  optional string name = 1;
-  repeated MethodDescriptorProto method = 2;
-
-  optional ServiceOptions options = 3;
-}
-
-// Describes a method of a service.
-message MethodDescriptorProto {
-  optional string name = 1;
-
-  // Input and output type names.  These are resolved in the same way as
-  // FieldDescriptorProto.type_name, but must refer to a message type.
-  optional string input_type = 2;
-  optional string output_type = 3;
-
-  optional MethodOptions options = 4;
-
-  // Identifies if client streams multiple client messages
-  optional bool client_streaming = 5 [default=false];
-  // Identifies if server streams multiple server messages
-  optional bool server_streaming = 6 [default=false];
-}
-
-
-// ===================================================================
-// Options
-
-// Each of the definitions above may have "options" attached.  These are
-// just annotations which may cause code to be generated slightly differently
-// or may contain hints for code that manipulates protocol messages.
-//
-// Clients may define custom options as extensions of the *Options messages.
-// These extensions may not yet be known at parsing time, so the parser cannot
-// store the values in them.  Instead it stores them in a field in the *Options
-// message called uninterpreted_option. This field must have the same name
-// across all *Options messages. We then use this field to populate the
-// extensions when we build a descriptor, at which point all protos have been
-// parsed and so all extensions are known.
-//
-// Extension numbers for custom options may be chosen as follows:
-// * For options which will only be used within a single application or
-//   organization, or for experimental options, use field numbers 50000
-//   through 99999.  It is up to you to ensure that you do not use the
-//   same number for multiple options.
-// * For options which will be published and used publicly by multiple
-//   independent entities, e-mail protobuf-global-extension-registry@google.com
-//   to reserve extension numbers. Simply provide your project name (e.g.
-//   Objective-C plugin) and your project website (if available) -- there's no
-//   need to explain how you intend to use them. Usually you only need one
-//   extension number. You can declare multiple options with only one extension
-//   number by putting them in a sub-message. See the Custom Options section of
-//   the docs for examples:
-//   https://developers.google.com/protocol-buffers/docs/proto#options
-//   If this turns out to be popular, a web service will be set up
-//   to automatically assign option numbers.
-
-
-message FileOptions {
-
-  // Sets the Java package where classes generated from this .proto will be
-  // placed.  By default, the proto package is used, but this is often
-  // inappropriate because proto packages do not normally start with backwards
-  // domain names.
-  optional string java_package = 1;
-
-
-  // If set, all the classes from the .proto file are wrapped in a single
-  // outer class with the given name.  This applies to both Proto1
-  // (equivalent to the old "--one_java_file" option) and Proto2 (where
-  // a .proto always translates to a single class, but you may want to
-  // explicitly choose the class name).
-  optional string java_outer_classname = 8;
-
-  // If set true, then the Java code generator will generate a separate .java
-  // file for each top-level message, enum, and service defined in the .proto
-  // file.  Thus, these types will *not* be nested inside the outer class
-  // named by java_outer_classname.  However, the outer class will still be
-  // generated to contain the file's getDescriptor() method as well as any
-  // top-level extensions defined in the file.
-  optional bool java_multiple_files = 10 [default=false];
-
-  // This option does nothing.
-  optional bool java_generate_equals_and_hash = 20 [deprecated=true];
-
-  // If set true, then the Java2 code generator will generate code that
-  // throws an exception whenever an attempt is made to assign a non-UTF-8
-  // byte sequence to a string field.
-  // Message reflection will do the same.
-  // However, an extension field still accepts non-UTF-8 byte sequences.
-  // This option has no effect on when used with the lite runtime.
-  optional bool java_string_check_utf8 = 27 [default=false];
-
-
-  // Generated classes can be optimized for speed or code size.
-  enum OptimizeMode {
-    SPEED = 1;        // Generate complete code for parsing, serialization,
-                      // etc.
-    CODE_SIZE = 2;    // Use ReflectionOps to implement these methods.
-    LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
-  }
-  optional OptimizeMode optimize_for = 9 [default=SPEED];
-
-  // Sets the Go package where structs generated from this .proto will be
-  // placed. If omitted, the Go package will be derived from the following:
-  //   - The basename of the package import path, if provided.
-  //   - Otherwise, the package statement in the .proto file, if present.
-  //   - Otherwise, the basename of the .proto file, without extension.
-  optional string go_package = 11;
-
-
-
-  // Should generic services be generated in each language?  "Generic" services
-  // are not specific to any particular RPC system.  They are generated by the
-  // main code generators in each language (without additional plugins).
-  // Generic services were the only kind of service generation supported by
-  // early versions of google.protobuf.
-  //
-  // Generic services are now considered deprecated in favor of using plugins
-  // that generate code specific to your particular RPC system.  Therefore,
-  // these default to false.  Old code which depends on generic services should
-  // explicitly set them to true.
-  optional bool cc_generic_services = 16 [default=false];
-  optional bool java_generic_services = 17 [default=false];
-  optional bool py_generic_services = 18 [default=false];
-
-  // Is this file deprecated?
-  // Depending on the target platform, this can emit Deprecated annotations
-  // for everything in the file, or it will be completely ignored; in the very
-  // least, this is a formalization for deprecating files.
-  optional bool deprecated = 23 [default=false];
-
-  // Enables the use of arenas for the proto messages in this file. This applies
-  // only to generated classes for C++.
-  optional bool cc_enable_arenas = 31 [default=false];
-
-
-  // Sets the objective c class prefix which is prepended to all objective c
-  // generated classes from this .proto. There is no default.
-  optional string objc_class_prefix = 36;
-
-  // Namespace for generated classes; defaults to the package.
-  optional string csharp_namespace = 37;
-
-  // By default Swift generators will take the proto package and CamelCase it
-  // replacing '.' with underscore and use that to prefix the types/symbols
-  // defined. When this options is provided, they will use this value instead
-  // to prefix the types/symbols defined.
-  optional string swift_prefix = 39;
-
-  // Sets the php class prefix which is prepended to all php generated classes
-  // from this .proto. Default is empty.
-  optional string php_class_prefix = 40;
-
-  // Use this option to change the namespace of php generated classes. Default
-  // is empty. When this option is empty, the package name will be used for
-  // determining the namespace.
-  optional string php_namespace = 41;
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-
-  reserved 38;
-}
-
-message MessageOptions {
-  // Set true to use the old proto1 MessageSet wire format for extensions.
-  // This is provided for backwards-compatibility with the MessageSet wire
-  // format.  You should not use this for any other reason:  It's less
-  // efficient, has fewer features, and is more complicated.
-  //
-  // The message must be defined exactly as follows:
-  //   message Foo {
-  //     option message_set_wire_format = true;
-  //     extensions 4 to max;
-  //   }
-  // Note that the message cannot have any defined fields; MessageSets only
-  // have extensions.
-  //
-  // All extensions of your type must be singular messages; e.g. they cannot
-  // be int32s, enums, or repeated messages.
-  //
-  // Because this is an option, the above two restrictions are not enforced by
-  // the protocol compiler.
-  optional bool message_set_wire_format = 1 [default=false];
-
-  // Disables the generation of the standard "descriptor()" accessor, which can
-  // conflict with a field of the same name.  This is meant to make migration
-  // from proto1 easier; new code should avoid fields named "descriptor".
-  optional bool no_standard_descriptor_accessor = 2 [default=false];
-
-  // Is this message deprecated?
-  // Depending on the target platform, this can emit Deprecated annotations
-  // for the message, or it will be completely ignored; in the very least,
-  // this is a formalization for deprecating messages.
-  optional bool deprecated = 3 [default=false];
-
-  // Whether the message is an automatically generated map entry type for the
-  // maps field.
-  //
-  // For maps fields:
-  //     map<KeyType, ValueType> map_field = 1;
-  // The parsed descriptor looks like:
-  //     message MapFieldEntry {
-  //         option map_entry = true;
-  //         optional KeyType key = 1;
-  //         optional ValueType value = 2;
-  //     }
-  //     repeated MapFieldEntry map_field = 1;
-  //
-  // Implementations may choose not to generate the map_entry=true message, but
-  // use a native map in the target language to hold the keys and values.
-  // The reflection APIs in such implementions still need to work as
-  // if the field is a repeated message field.
-  //
-  // NOTE: Do not set the option in .proto files. Always use the maps syntax
-  // instead. The option should only be implicitly set by the proto compiler
-  // parser.
-  optional bool map_entry = 7;
-
-  reserved 8;  // javalite_serializable
-  reserved 9;  // javanano_as_lite
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message FieldOptions {
-  // The ctype option instructs the C++ code generator to use a different
-  // representation of the field than it normally would.  See the specific
-  // options below.  This option is not yet implemented in the open source
-  // release -- sorry, we'll try to include it in a future version!
-  optional CType ctype = 1 [default = STRING];
-  enum CType {
-    // Default mode.
-    STRING = 0;
-
-    CORD = 1;
-
-    STRING_PIECE = 2;
-  }
-  // The packed option can be enabled for repeated primitive fields to enable
-  // a more efficient representation on the wire. Rather than repeatedly
-  // writing the tag and type for each element, the entire array is encoded as
-  // a single length-delimited blob. In proto3, only explicit setting it to
-  // false will avoid using packed encoding.
-  optional bool packed = 2;
-
-  // The jstype option determines the JavaScript type used for values of the
-  // field.  The option is permitted only for 64 bit integral and fixed types
-  // (int64, uint64, sint64, fixed64, sfixed64).  By default these types are
-  // represented as JavaScript strings.  This avoids loss of precision that can
-  // happen when a large value is converted to a floating point JavaScript
-  // numbers.  Specifying JS_NUMBER for the jstype causes the generated
-  // JavaScript code to use the JavaScript "number" type instead of strings.
-  // This option is an enum to permit additional types to be added,
-  // e.g. goog.math.Integer.
-  optional JSType jstype = 6 [default = JS_NORMAL];
-  enum JSType {
-    // Use the default type.
-    JS_NORMAL = 0;
-
-    // Use JavaScript strings.
-    JS_STRING = 1;
-
-    // Use JavaScript numbers.
-    JS_NUMBER = 2;
-  }
-
-  // Should this field be parsed lazily?  Lazy applies only to message-type
-  // fields.  It means that when the outer message is initially parsed, the
-  // inner message's contents will not be parsed but instead stored in encoded
-  // form.  The inner message will actually be parsed when it is first accessed.
-  //
-  // This is only a hint.  Implementations are free to choose whether to use
-  // eager or lazy parsing regardless of the value of this option.  However,
-  // setting this option true suggests that the protocol author believes that
-  // using lazy parsing on this field is worth the additional bookkeeping
-  // overhead typically needed to implement it.
-  //
-  // This option does not affect the public interface of any generated code;
-  // all method signatures remain the same.  Furthermore, thread-safety of the
-  // interface is not affected by this option; const methods remain safe to
-  // call from multiple threads concurrently, while non-const methods continue
-  // to require exclusive access.
-  //
-  //
-  // Note that implementations may choose not to check required fields within
-  // a lazy sub-message.  That is, calling IsInitialized() on the outer message
-  // may return true even if the inner message has missing required fields.
-  // This is necessary because otherwise the inner message would have to be
-  // parsed in order to perform the check, defeating the purpose of lazy
-  // parsing.  An implementation which chooses not to check required fields
-  // must be consistent about it.  That is, for any particular sub-message, the
-  // implementation must either *always* check its required fields, or *never*
-  // check its required fields, regardless of whether or not the message has
-  // been parsed.
-  optional bool lazy = 5 [default=false];
-
-  // Is this field deprecated?
-  // Depending on the target platform, this can emit Deprecated annotations
-  // for accessors, or it will be completely ignored; in the very least, this
-  // is a formalization for deprecating fields.
-  optional bool deprecated = 3 [default=false];
-
-  // For Google-internal migration only. Do not use.
-  optional bool weak = 10 [default=false];
-
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-
-  reserved 4;  // removed jtype
-}
-
-message OneofOptions {
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message EnumOptions {
-
-  // Set this option to true to allow mapping different tag names to the same
-  // value.
-  optional bool allow_alias = 2;
-
-  // Is this enum deprecated?
-  // Depending on the target platform, this can emit Deprecated annotations
-  // for the enum, or it will be completely ignored; in the very least, this
-  // is a formalization for deprecating enums.
-  optional bool deprecated = 3 [default=false];
-
-  reserved 5;  // javanano_as_lite
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message EnumValueOptions {
-  // Is this enum value deprecated?
-  // Depending on the target platform, this can emit Deprecated annotations
-  // for the enum value, or it will be completely ignored; in the very least,
-  // this is a formalization for deprecating enum values.
-  optional bool deprecated = 1 [default=false];
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message ServiceOptions {
-
-  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
-  //   framework.  We apologize for hoarding these numbers to ourselves, but
-  //   we were already using them long before we decided to release Protocol
-  //   Buffers.
-
-  // Is this service deprecated?
-  // Depending on the target platform, this can emit Deprecated annotations
-  // for the service, or it will be completely ignored; in the very least,
-  // this is a formalization for deprecating services.
-  optional bool deprecated = 33 [default=false];
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-message MethodOptions {
-
-  // Note:  Field numbers 1 through 32 are reserved for Google's internal RPC
-  //   framework.  We apologize for hoarding these numbers to ourselves, but
-  //   we were already using them long before we decided to release Protocol
-  //   Buffers.
-
-  // Is this method deprecated?
-  // Depending on the target platform, this can emit Deprecated annotations
-  // for the method, or it will be completely ignored; in the very least,
-  // this is a formalization for deprecating methods.
-  optional bool deprecated = 33 [default=false];
-
-  // Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
-  // or neither? HTTP based RPC implementation may choose GET verb for safe
-  // methods, and PUT verb for idempotent methods instead of the default POST.
-  enum IdempotencyLevel {
-    IDEMPOTENCY_UNKNOWN = 0;
-    NO_SIDE_EFFECTS     = 1; // implies idempotent
-    IDEMPOTENT          = 2; // idempotent, but may have side effects
-  }
-  optional IdempotencyLevel idempotency_level =
-      34 [default=IDEMPOTENCY_UNKNOWN];
-
-  // The parser stores options it doesn't recognize here. See above.
-  repeated UninterpretedOption uninterpreted_option = 999;
-
-  // Clients can define custom options in extensions of this message. See above.
-  extensions 1000 to max;
-}
-
-
-// A message representing a option the parser does not recognize. This only
-// appears in options protos created by the compiler::Parser class.
-// DescriptorPool resolves these when building Descriptor objects. Therefore,
-// options protos in descriptor objects (e.g. returned by Descriptor::options(),
-// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
-// in them.
-message UninterpretedOption {
-  // The name of the uninterpreted option.  Each string represents a segment in
-  // a dot-separated name.  is_extension is true iff a segment represents an
-  // extension (denoted with parentheses in options specs in .proto files).
-  // E.g.,{ ["foo", false], ["bar.baz", true], ["qux", false] } represents
-  // "foo.(bar.baz).qux".
-  message NamePart {
-    required string name_part = 1;
-    required bool is_extension = 2;
-  }
-  repeated NamePart name = 2;
-
-  // The value of the uninterpreted option, in whatever type the tokenizer
-  // identified it as during parsing. Exactly one of these should be set.
-  optional string identifier_value = 3;
-  optional uint64 positive_int_value = 4;
-  optional int64 negative_int_value = 5;
-  optional double double_value = 6;
-  optional bytes string_value = 7;
-  optional string aggregate_value = 8;
-}
-
-// ===================================================================
-// Optional source code info
-
-// Encapsulates information about the original source file from which a
-// FileDescriptorProto was generated.
-message SourceCodeInfo {
-  // A Location identifies a piece of source code in a .proto file which
-  // corresponds to a particular definition.  This information is intended
-  // to be useful to IDEs, code indexers, documentation generators, and similar
-  // tools.
-  //
-  // For example, say we have a file like:
-  //   message Foo {
-  //     optional string foo = 1;
-  //   }
-  // Let's look at just the field definition:
-  //   optional string foo = 1;
-  //   ^       ^^     ^^  ^  ^^^
-  //   a       bc     de  f  ghi
-  // We have the following locations:
-  //   span   path               represents
-  //   [a,i)  [ 4, 0, 2, 0 ]     The whole field definition.
-  //   [a,b)  [ 4, 0, 2, 0, 4 ]  The label (optional).
-  //   [c,d)  [ 4, 0, 2, 0, 5 ]  The type (string).
-  //   [e,f)  [ 4, 0, 2, 0, 1 ]  The name (foo).
-  //   [g,h)  [ 4, 0, 2, 0, 3 ]  The number (1).
-  //
-  // Notes:
-  // - A location may refer to a repeated field itself (i.e. not to any
-  //   particular index within it).  This is used whenever a set of elements are
-  //   logically enclosed in a single code segment.  For example, an entire
-  //   extend block (possibly containing multiple extension definitions) will
-  //   have an outer location whose path refers to the "extensions" repeated
-  //   field without an index.
-  // - Multiple locations may have the same path.  This happens when a single
-  //   logical declaration is spread out across multiple places.  The most
-  //   obvious example is the "extend" block again -- there may be multiple
-  //   extend blocks in the same scope, each of which will have the same path.
-  // - A location's span is not always a subset of its parent's span.  For
-  //   example, the "extendee" of an extension declaration appears at the
-  //   beginning of the "extend" block and is shared by all extensions within
-  //   the block.
-  // - Just because a location's span is a subset of some other location's span
-  //   does not mean that it is a descendent.  For example, a "group" defines
-  //   both a type and a field in a single declaration.  Thus, the locations
-  //   corresponding to the type and field and their components will overlap.
-  // - Code which tries to interpret locations should probably be designed to
-  //   ignore those that it doesn't understand, as more types of locations could
-  //   be recorded in the future.
-  repeated Location location = 1;
-  message Location {
-    // Identifies which part of the FileDescriptorProto was defined at this
-    // location.
-    //
-    // Each element is a field number or an index.  They form a path from
-    // the root FileDescriptorProto to the place where the definition.  For
-    // example, this path:
-    //   [ 4, 3, 2, 7, 1 ]
-    // refers to:
-    //   file.message_type(3)  // 4, 3
-    //       .field(7)         // 2, 7
-    //       .name()           // 1
-    // This is because FileDescriptorProto.message_type has field number 4:
-    //   repeated DescriptorProto message_type = 4;
-    // and DescriptorProto.field has field number 2:
-    //   repeated FieldDescriptorProto field = 2;
-    // and FieldDescriptorProto.name has field number 1:
-    //   optional string name = 1;
-    //
-    // Thus, the above path gives the location of a field name.  If we removed
-    // the last element:
-    //   [ 4, 3, 2, 7 ]
-    // this path refers to the whole field declaration (from the beginning
-    // of the label to the terminating semicolon).
-    repeated int32 path = 1 [packed=true];
-
-    // Always has exactly three or four elements: start line, start column,
-    // end line (optional, otherwise assumed same as start line), end column.
-    // These are packed into a single field for efficiency.  Note that line
-    // and column numbers are zero-based -- typically you will want to add
-    // 1 to each before displaying to a user.
-    repeated int32 span = 2 [packed=true];
-
-    // If this SourceCodeInfo represents a complete declaration, these are any
-    // comments appearing before and after the declaration which appear to be
-    // attached to the declaration.
-    //
-    // A series of line comments appearing on consecutive lines, with no other
-    // tokens appearing on those lines, will be treated as a single comment.
-    //
-    // leading_detached_comments will keep paragraphs of comments that appear
-    // before (but not connected to) the current element. Each paragraph,
-    // separated by empty lines, will be one comment element in the repeated
-    // field.
-    //
-    // Only the comment content is provided; comment markers (e.g. //) are
-    // stripped out.  For block comments, leading whitespace and an asterisk
-    // will be stripped from the beginning of each line other than the first.
-    // Newlines are included in the output.
-    //
-    // Examples:
-    //
-    //   optional int32 foo = 1;  // Comment attached to foo.
-    //   // Comment attached to bar.
-    //   optional int32 bar = 2;
-    //
-    //   optional string baz = 3;
-    //   // Comment attached to baz.
-    //   // Another line attached to baz.
-    //
-    //   // Comment attached to qux.
-    //   //
-    //   // Another line attached to qux.
-    //   optional double qux = 4;
-    //
-    //   // Detached comment for corge. This is not leading or trailing comments
-    //   // to qux or corge because there are blank lines separating it from
-    //   // both.
-    //
-    //   // Detached comment for corge paragraph 2.
-    //
-    //   optional string corge = 5;
-    //   /* Block comment attached
-    //    * to corge.  Leading asterisks
-    //    * will be removed. */
-    //   /* Block comment attached to
-    //    * grault. */
-    //   optional int32 grault = 6;
-    //
-    //   // ignored detached comments.
-    optional string leading_comments = 3;
-    optional string trailing_comments = 4;
-    repeated string leading_detached_comments = 6;
-  }
-}
-
-// Describes the relationship between generated code and its original source
-// file. A GeneratedCodeInfo message is associated with only one generated
-// source file, but may contain references to different source .proto files.
-message GeneratedCodeInfo {
-  // An Annotation connects some span of text in generated code to an element
-  // of its generating .proto file.
-  repeated Annotation annotation = 1;
-  message Annotation {
-    // Identifies the element in the original source .proto file. This field
-    // is formatted the same as SourceCodeInfo.Location.path.
-    repeated int32 path = 1 [packed=true];
-
-    // Identifies the filesystem path to the original source .proto.
-    optional string source_file = 2;
-
-    // Identifies the starting offset in bytes in the generated code
-    // that relates to the identified object.
-    optional int32 begin = 3;
-
-    // Identifies the ending offset in bytes in the generated code that
-    // relates to the identified offset. The end offset should be one past
-    // the last relevant byte (so the length of the text = end - begin).
-    optional int32 end = 4;
-  }
-}
diff --git a/protos/plugin.proto b/protos/plugin.proto
deleted file mode 100644
index 2df53dd..0000000
--- a/protos/plugin.proto
+++ /dev/null
@@ -1,166 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: kenton@google.com (Kenton Varda)
-//
-// WARNING:  The plugin interface is currently EXPERIMENTAL and is subject to
-//   change.
-//
-// protoc (aka the Protocol Compiler) can be extended via plugins.  A plugin is
-// just a program that reads a CodeGeneratorRequest from stdin and writes a
-// CodeGeneratorResponse to stdout.
-//
-// Plugins written using C++ can use google/protobuf/compiler/plugin.h instead
-// of dealing with the raw protocol defined here.
-//
-// A plugin executable needs only to be placed somewhere in the path.  The
-// plugin should be named "protoc-gen-$NAME", and will then be used when the
-// flag "--${NAME}_out" is passed to protoc.
-
-syntax = "proto2";
-package google.protobuf.compiler;
-option java_package = "com.google.protobuf.compiler";
-option java_outer_classname = "PluginProtos";
-
-option go_package = "github.com/golang/protobuf/protoc-gen-go/plugin;plugin_go";
-
-import "descriptor.proto";
-
-// The version number of protocol compiler.
-message Version {
-  optional int32 major = 1;
-  optional int32 minor = 2;
-  optional int32 patch = 3;
-  // A suffix for alpha, beta or rc release, e.g., "alpha-1", "rc2". It should
-  // be empty for mainline stable releases.
-  optional string suffix = 4;
-}
-
-// An encoded CodeGeneratorRequest is written to the plugin's stdin.
-message CodeGeneratorRequest {
-  // The .proto files that were explicitly listed on the command-line.  The
-  // code generator should generate code only for these files.  Each file's
-  // descriptor will be included in proto_file, below.
-  repeated string file_to_generate = 1;
-
-  // The generator parameter passed on the command-line.
-  optional string parameter = 2;
-
-  // FileDescriptorProtos for all files in files_to_generate and everything
-  // they import.  The files will appear in topological order, so each file
-  // appears before any file that imports it.
-  //
-  // protoc guarantees that all proto_files will be written after
-  // the fields above, even though this is not technically guaranteed by the
-  // protobuf wire format.  This theoretically could allow a plugin to stream
-  // in the FileDescriptorProtos and handle them one by one rather than read
-  // the entire set into memory at once.  However, as of this writing, this
-  // is not similarly optimized on protoc's end -- it will store all fields in
-  // memory at once before sending them to the plugin.
-  //
-  // Type names of fields and extensions in the FileDescriptorProto are always
-  // fully qualified.
-  repeated FileDescriptorProto proto_file = 15;
-
-  // The version number of protocol compiler.
-  optional Version compiler_version = 3;
-}
-
-// The plugin writes an encoded CodeGeneratorResponse to stdout.
-message CodeGeneratorResponse {
-  // Error message.  If non-empty, code generation failed.  The plugin process
-  // should exit with status code zero even if it reports an error in this way.
-  //
-  // This should be used to indicate errors in .proto files which prevent the
-  // code generator from generating correct code.  Errors which indicate a
-  // problem in protoc itself -- such as the input CodeGeneratorRequest being
-  // unparseable -- should be reported by writing a message to stderr and
-  // exiting with a non-zero status code.
-  optional string error = 1;
-
-  // Represents a single generated file.
-  message File {
-    // The file name, relative to the output directory.  The name must not
-    // contain "." or ".." components and must be relative, not be absolute (so,
-    // the file cannot lie outside the output directory).  "/" must be used as
-    // the path separator, not "\".
-    //
-    // If the name is omitted, the content will be appended to the previous
-    // file.  This allows the generator to break large files into small chunks,
-    // and allows the generated text to be streamed back to protoc so that large
-    // files need not reside completely in memory at one time.  Note that as of
-    // this writing protoc does not optimize for this -- it will read the entire
-    // CodeGeneratorResponse before writing files to disk.
-    optional string name = 1;
-
-    // If non-empty, indicates that the named file should already exist, and the
-    // content here is to be inserted into that file at a defined insertion
-    // point.  This feature allows a code generator to extend the output
-    // produced by another code generator.  The original generator may provide
-    // insertion points by placing special annotations in the file that look
-    // like:
-    //   @@protoc_insertion_point(NAME)
-    // The annotation can have arbitrary text before and after it on the line,
-    // which allows it to be placed in a comment.  NAME should be replaced with
-    // an identifier naming the point -- this is what other generators will use
-    // as the insertion_point.  Code inserted at this point will be placed
-    // immediately above the line containing the insertion point (thus multiple
-    // insertions to the same point will come out in the order they were added).
-    // The double-@ is intended to make it unlikely that the generated code
-    // could contain things that look like insertion points by accident.
-    //
-    // For example, the C++ code generator places the following line in the
-    // .pb.h files that it generates:
-    //   // @@protoc_insertion_point(namespace_scope)
-    // This line appears within the scope of the file's package namespace, but
-    // outside of any particular class.  Another plugin can then specify the
-    // insertion_point "namespace_scope" to generate additional classes or
-    // other declarations that should be placed in this scope.
-    //
-    // Note that if the line containing the insertion point begins with
-    // whitespace, the same whitespace will be added to every line of the
-    // inserted text.  This is useful for languages like Python, where
-    // indentation matters.  In these languages, the insertion point comment
-    // should be indented the same amount as any inserted code will need to be
-    // in order to work correctly in that context.
-    //
-    // The code generator that generates the initial file and the one which
-    // inserts into it must both run as part of a single invocation of protoc.
-    // Code generators are executed in the order in which they appear on the
-    // command line.
-    //
-    // If |insertion_point| is present, |name| must also be present.
-    optional string insertion_point = 2;
-
-    // The file contents.
-    optional string content = 15;
-  }
-  repeated File file = 15;
-}
diff --git a/pubspec.yaml b/pubspec.yaml
deleted file mode 100644
index 7d7f545..0000000
--- a/pubspec.yaml
+++ /dev/null
@@ -1,25 +0,0 @@
-name: protoc_plugin
-version: 12.0.0
-author: Dart Team <misc@dartlang.org>
-description: Protoc compiler plugin to generate Dart code
-homepage: https://github.com/dart-lang/dart-protoc-plugin
-
-environment:
-  sdk: '>=2.0.0 <3.0.0'
-
-dependencies:
-  fixnum: ^0.10.5
-  path: ^1.0.0
-  protobuf: ^0.10.5
-  dart_style: ^1.0.6
-
-dev_dependencies:
-  build: ^1.0.0
-  build_runner: ^1.0.0
-  build_web_compilers: ^0.4.0
-  glob: ^1.1.7
-  test: ^1.3.0
-  yaml: ^2.1.15
-
-executables:
-  protoc-gen-dart: protoc_plugin
diff --git a/test/all_tests.dart b/test/all_tests.dart
deleted file mode 100755
index fec7447..0000000
--- a/test/all_tests.dart
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc_plugin_all_tests;
-
-import 'bazel_test.dart' as bazel;
-import 'any_test.dart' as any;
-import 'client_generator_test.dart' as client_generator;
-import 'const_generator_test.dart' as const_generator;
-import 'enum_generator_test.dart' as enum_generator;
-import 'extension_test.dart' as extension;
-import 'file_generator_test.dart' as file_generator;
-import 'generated_message_test.dart' as generated_message;
-import 'hash_code_test.dart' as hash_code;
-import 'indenting_writer_test.dart' as indenting_writer;
-import 'import_test.dart' as import_prefix;
-import 'json_test.dart' as json;
-import 'leading_underscores_test.dart' as leading_underscores;
-import 'map_test.dart' as map;
-import 'message_generator_test.dart' as message_generator;
-import 'message_test.dart' as message;
-import 'mixin_test.dart' as mixin_test;
-import 'names_test.dart' as names;
-import 'protoc_options_test.dart' as protoc_options;
-import 'repeated_field_test.dart' as repeated_field;
-import 'service_test.dart' as service;
-import 'service_generator_test.dart' as service_generator;
-import 'unknown_field_set_test.dart' as unknown_field_set;
-import 'validate_fail_test.dart' as validate_fail;
-import 'wire_format_test.dart' as wire_format;
-
-void main() {
-  any.main();
-  bazel.main();
-  client_generator.main();
-  const_generator.main();
-  enum_generator.main();
-  extension.main();
-  file_generator.main();
-  generated_message.main();
-  hash_code.main();
-  indenting_writer.main();
-  import_prefix.main();
-  json.main();
-  leading_underscores.main();
-  map.main();
-  message_generator.main();
-  message.main();
-  mixin_test.main();
-  names.main();
-  protoc_options.main();
-  repeated_field.main();
-  service.main();
-  service_generator.main();
-  unknown_field_set.main();
-  validate_fail.main();
-  wire_format.main();
-}
diff --git a/test/any_test.dart b/test/any_test.dart
deleted file mode 100644
index e755a27..0000000
--- a/test/any_test.dart
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:protobuf/protobuf.dart';
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/any.pb.dart';
-import '../out/protos/service.pb.dart';
-import '../out/protos/toplevel.pb.dart' as toplevel;
-import '../out/protos/using_any.pb.dart';
-
-void main() {
-  test('pack -> unpack', () {
-    Any any = Any.pack(new SearchRequest()..query = 'hest');
-    expect(any.typeUrl, 'type.googleapis.com/SearchRequest');
-    Any any1 = Any.pack(new SearchRequest()..query = 'hest1',
-        typeUrlPrefix: 'example.com');
-    expect(any1.typeUrl, 'example.com/SearchRequest');
-    expect(any1.canUnpackInto(SearchRequest.getDefault()), true);
-    expect(any1.canUnpackInto(SearchResponse.getDefault()), false);
-    SearchRequest searchRequest = any.unpackInto(new SearchRequest());
-    expect(searchRequest.query, 'hest');
-    SearchRequest searchRequest1 = any1.unpackInto(new SearchRequest());
-    expect(searchRequest1.query, 'hest1');
-    expect(() {
-      any.unpackInto(new SearchResponse());
-    }, throwsA(const TypeMatcher<InvalidProtocolBufferException>()));
-  });
-
-  test('any inside any', () {
-    Any any = Any.pack(Any.pack(new SearchRequest()..query = 'hest'));
-    expect(any.typeUrl, 'type.googleapis.com/google.protobuf.Any');
-    expect(any.canUnpackInto(Any.getDefault()), true);
-    expect(any.canUnpackInto(SearchRequest.getDefault()), false);
-    expect(any.unpackInto(new Any()).canUnpackInto(SearchRequest.getDefault()),
-        true);
-    expect(any.unpackInto(new Any()).unpackInto(new SearchRequest()).query,
-        'hest');
-  });
-
-  test('toplevel', () {
-    Any any = Any.pack(new toplevel.T()
-      ..a = 127
-      ..b = 'hest');
-    expect(any.typeUrl, 'type.googleapis.com/T');
-    var t2 = any.unpackInto(new toplevel.T());
-    expect(t2.a, 127);
-    expect(t2.b, 'hest');
-  });
-
-  test('nested message', () {
-    Any any = Any.pack(new Container_Nested()..int32Value = 127);
-    expect(
-        any.typeUrl, 'type.googleapis.com/protobuf_unittest.Container.Nested');
-    var t2 = any.unpackInto(new Container_Nested());
-    expect(t2.int32Value, 127);
-  });
-
-  test('using any', () {
-    Any any = Any.pack(new SearchRequest()..query = 'hest');
-    Any any1 = Any.pack(new SearchRequest()..query = 'hest1');
-    Any any2 = Any.pack(new SearchRequest()..query = 'hest2');
-    TestAny testAny = TestAny()
-      ..anyValue = any
-      ..repeatedAnyValue.addAll(<Any>[any1, any2]);
-    TestAny testAnyFromBuffer = TestAny.fromBuffer(testAny.writeToBuffer());
-    expect(testAnyFromBuffer.anyValue.unpackInto(new SearchRequest()).query,
-        'hest');
-    expect(
-        testAnyFromBuffer.repeatedAnyValue[0]
-            .unpackInto(new SearchRequest())
-            .query,
-        'hest1');
-    expect(
-        testAnyFromBuffer.repeatedAnyValue[1]
-            .unpackInto(new SearchRequest())
-            .query,
-        'hest2');
-  });
-}
diff --git a/test/bazel_test.dart b/test/bazel_test.dart
deleted file mode 100644
index 28239c9..0000000
--- a/test/bazel_test.dart
+++ /dev/null
@@ -1,206 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library bazel_test;
-
-import 'package:protoc_plugin/bazel.dart';
-import 'package:test/test.dart';
-
-void main() {
-  group('BazelOptionParser', () {
-    var optionParser;
-    Map<String, BazelPackage> packages;
-    var errors;
-
-    setUp(() {
-      packages = {};
-      optionParser = new BazelOptionParser(packages);
-      errors = [];
-    });
-
-    _onError(String message) {
-      errors.add(message);
-    }
-
-    test('should call onError for null values', () {
-      optionParser.parse(null, null, _onError);
-      expect(errors, isNotEmpty);
-    });
-
-    test('should call onError for empty values', () {
-      optionParser.parse(null, '', _onError);
-      expect(errors, isNotEmpty);
-    });
-
-    test('should call onError for malformed entries', () {
-      optionParser.parse(null, 'foo', _onError);
-      optionParser.parse(null, 'foo|bar', _onError);
-      optionParser.parse(null, 'foo|bar|baz|quux', _onError);
-      expect(errors.length, 3);
-      expect(packages, isEmpty);
-    });
-
-    test('should handle a single package|path entry', () {
-      optionParser.parse(null, 'foo|bar/baz|wibble/wobble', _onError);
-      expect(errors, isEmpty);
-      expect(packages.length, 1);
-      expect(packages['bar/baz'].name, 'foo');
-      expect(packages['bar/baz'].input_root, 'bar/baz');
-      expect(packages['bar/baz'].output_root, 'wibble/wobble');
-    });
-
-    test('should handle multiple package|path entries', () {
-      optionParser.parse(
-          null,
-          'foo|bar/baz|wibble/wobble;a|b/c/d|e/f;one.two|three|four/five',
-          _onError);
-      expect(errors, isEmpty);
-      expect(packages.length, 3);
-      expect(packages['bar/baz'].name, 'foo');
-      expect(packages['bar/baz'].input_root, 'bar/baz');
-      expect(packages['bar/baz'].output_root, 'wibble/wobble');
-      expect(packages['b/c/d'].name, 'a');
-      expect(packages['b/c/d'].input_root, 'b/c/d');
-      expect(packages['b/c/d'].output_root, 'e/f');
-      expect(packages['three'].name, 'one.two');
-      expect(packages['three'].input_root, 'three');
-      expect(packages['three'].output_root, 'four/five');
-    });
-
-    test('should skip and continue past malformed entries', () {
-      optionParser.parse(null,
-          'foo|bar/baz|wibble/wobble;fizz;a.b|c/d|e/f;x|y|zz|y', _onError);
-      expect(errors.length, 2);
-      expect(packages.length, 2);
-      expect(packages['bar/baz'].name, 'foo');
-      expect(packages['c/d'].name, 'a.b');
-    });
-
-    test('should emit error for conflicting package names', () {
-      optionParser.parse(null,
-          'foo|bar/baz|wibble/wobble;flob|bar/baz|wibble/wobble', _onError);
-      expect(errors.length, 1);
-      expect(packages.length, 1);
-      expect(packages['bar/baz'].name, 'foo');
-    });
-
-    test('should emit error for conflicting output_roots', () {
-      optionParser.parse(null,
-          'foo|bar/baz|wibble/wobble;foo|bar/baz|womble/wumble', _onError);
-      expect(errors.length, 1);
-      expect(packages.length, 1);
-      expect(packages['bar/baz'].output_root, 'wibble/wobble');
-    });
-
-    test('should normalize paths', () {
-      optionParser.parse(
-          null, 'foo|bar//baz/|quux/;a|b/|c;c|d//e/f///|g//h//', _onError);
-      expect(errors, isEmpty);
-      expect(packages.length, 3);
-      expect(packages['bar/baz'].name, 'foo');
-      expect(packages['bar/baz'].input_root, 'bar/baz');
-      expect(packages['bar/baz'].output_root, 'quux');
-      expect(packages['b'].name, 'a');
-      expect(packages['b'].input_root, 'b');
-      expect(packages['b'].output_root, 'c');
-      expect(packages['d/e/f'].name, 'c');
-      expect(packages['d/e/f'].input_root, 'd/e/f');
-      expect(packages['d/e/f'].output_root, 'g/h');
-    });
-  });
-
-  group('BazelOutputConfiguration', () {
-    Map<String, BazelPackage> packages;
-    BazelOutputConfiguration config;
-
-    setUp(() {
-      packages = {
-        'foo/bar': new BazelPackage('a.b.c', 'foo/bar', 'baz/flob'),
-        'foo/bar/baz': new BazelPackage('d.e.f', 'foo/bar/baz', 'baz/flob/foo'),
-        'wibble/wobble':
-            new BazelPackage('wibble.wobble', 'wibble/wobble', 'womble/wumble'),
-      };
-      config = new BazelOutputConfiguration(packages);
-    });
-
-    group('outputPathForUri', () {
-      test('should handle files at package root', () {
-        var p =
-            config.outputPathFor(Uri.parse('foo/bar/quux.proto'), '.pb.dart');
-        expect(p.path, 'baz/flob/quux.pb.dart');
-      });
-
-      test('should handle files below package root', () {
-        var p = config.outputPathFor(
-            Uri.parse('foo/bar/a/b/quux.proto'), '.pb.dart');
-        expect(p.path, 'baz/flob/a/b/quux.pb.dart');
-      });
-
-      test('should handle files in a nested package root', () {
-        var p = config.outputPathFor(
-            Uri.parse('foo/bar/baz/quux.proto'), '.pb.dart');
-        expect(p.path, 'baz/flob/foo/quux.pb.dart');
-      });
-
-      test('should handle files below a nested package root', () {
-        var p = config.outputPathFor(
-            Uri.parse('foo/bar/baz/a/b/quux.proto'), '.pb.dart');
-        expect(p.path, 'baz/flob/foo/a/b/quux.pb.dart');
-      });
-
-      test('should throw if unable to locate the package for an input', () {
-        expect(
-            () =>
-                config.outputPathFor(Uri.parse('a/b/c/quux.proto'), '.pb.dart'),
-            throwsArgumentError);
-      });
-    });
-
-    group('resolveImport', () {
-      test('should emit relative import if in same package', () {
-        var target = Uri.parse('foo/bar/quux.proto');
-        var source = Uri.parse('foo/bar/baz.proto');
-        var uri = config.resolveImport(target, source, '.pb.dart');
-        expect(uri.path, 'quux.pb.dart');
-      });
-
-      test('should emit relative import if in subdir of same package', () {
-        var target = Uri.parse('foo/bar/a/b/quux.proto');
-        var source = Uri.parse('foo/bar/baz.proto');
-        var uri = config.resolveImport(target, source, '.pb.dart');
-        expect(uri.path, 'a/b/quux.pb.dart');
-      });
-
-      test('should emit relative import if in parent dir in same package', () {
-        var target = Uri.parse('foo/bar/quux.proto');
-        var source = Uri.parse('foo/bar/a/b/baz.proto');
-        var uri = config.resolveImport(target, source, '.pb.dart');
-        expect(uri.path, '../../quux.pb.dart');
-      });
-
-      test('should emit package: import if in different package', () {
-        var target = Uri.parse('wibble/wobble/quux.proto');
-        var source = Uri.parse('foo/bar/baz.proto');
-        var uri = config.resolveImport(target, source, '.pb.dart');
-        expect(uri.scheme, 'package');
-        expect(uri.path, 'wibble.wobble/quux.pb.dart');
-      });
-
-      test('should emit package: import if in subdir of different package', () {
-        var target = Uri.parse('wibble/wobble/foo/bar/quux.proto');
-        var source = Uri.parse('foo/bar/baz.proto');
-        var uri = config.resolveImport(target, source, '.pb.dart');
-        expect(uri.scheme, 'package');
-        expect(uri.path, 'wibble.wobble/foo/bar/quux.pb.dart');
-      });
-
-      test('should throw if target is in unknown package', () {
-        var target = Uri.parse('flob/flub/quux.proto');
-        var source = Uri.parse('foo/bar/baz.proto');
-        expect(() => config.resolveImport(target, source, '.pb.dart'),
-            throwsA(startsWith('ERROR: cannot generate import for')));
-      });
-    });
-  });
-}
diff --git a/test/client_generator_test.dart b/test/client_generator_test.dart
deleted file mode 100644
index e0adfa4..0000000
--- a/test/client_generator_test.dart
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library client_generator_test;
-
-import 'package:protoc_plugin/indenting_writer.dart';
-import 'package:protoc_plugin/protoc.dart';
-import 'package:test/test.dart';
-
-import 'golden_file.dart';
-import 'service_util.dart';
-
-void main() {
-  test('testClientGenerator', () {
-    var options = new GenerationOptions();
-    var fd = buildFileDescriptor(
-        "testpkg", "testpkg.proto", ["SomeRequest", "SomeReply"]);
-    fd.service.add(buildServiceDescriptor());
-    var fg = new FileGenerator(fd, options);
-
-    var fd2 = buildFileDescriptor(
-        "foo.bar", "foobar.proto", ["EmptyMessage", "AnotherReply"]);
-    var fg2 = new FileGenerator(fd2, options);
-
-    link(new GenerationOptions(), [fg, fg2]);
-
-    ClientApiGenerator cag = fg.clientApiGenerators[0];
-
-    IndentingWriter writer = new IndentingWriter();
-    cag.generate(writer);
-    expectMatchesGoldenFile(writer.toString(), 'test/goldens/client');
-  });
-}
diff --git a/test/const_generator_test.dart b/test/const_generator_test.dart
deleted file mode 100644
index 0b1b987..0000000
--- a/test/const_generator_test.dart
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library const_generator_test;
-
-import 'package:protoc_plugin/const_generator.dart';
-import 'package:protoc_plugin/indenting_writer.dart';
-import 'package:test/test.dart';
-
-String toConst(val) {
-  var out = new IndentingWriter();
-  writeJsonConst(out, val);
-  return out.toString();
-}
-
-void main() {
-  test('writeJsonConst examples', () {
-    expect(toConst(null), "null");
-    expect(toConst(true), "true");
-    expect(toConst(false), "false");
-    expect(toConst(123), "123");
-    expect(toConst(123.456), "123.456");
-  });
-
-  test('writeJsonConst string examples', () {
-    expect(toConst(""), "''");
-    expect(toConst("hello"), "'hello'");
-    expect(toConst(r"backslash: \"), r"r'backslash: \'");
-    expect(toConst(r"hello $world"), r"r'hello $world'");
-    expect(toConst("She said, 'hello.'"), '''"She said, 'hello.'"''');
-    expect(toConst('''single: ' double: "'''), """'''single: ' double: "'''""");
-    var triple = '"""';
-    expect(toConst("""single: ' double: " triple: '''"""),
-        """${triple}single: ' double: " triple: '''$triple""");
-    expect(
-        toConst("""single: ' double: " triples: ''' and $triple!"""),
-        "r'''\n"
-        "single: ' double: \" triples: ''' \"'''\" r''' and $triple!'''");
-  });
-
-  test('writeJsonConst list examples', () {
-    expect(toConst([]), "const []");
-    expect(toConst([1, 2, 3]), "const [1, 2, 3]");
-    expect(
-        toConst([
-          [1, 2],
-          [3, 4]
-        ]),
-        'const [\n'
-        '  const [1, 2],\n'
-        '  const [3, 4],\n'
-        ']');
-  });
-
-  test('writeJsonConst map examples', () {
-    expect(toConst({}), "const {}");
-    expect(toConst({"a": 1, "b": 2}), "const {'a': 1, 'b': 2}");
-    expect(
-        toConst({
-          "a": {"x": 1},
-          "b": {"x": 2}
-        }),
-        "const {\n"
-        "  'a': const {'x': 1},\n"
-        "  'b': const {'x': 2},\n"
-        "}");
-  });
-}
diff --git a/test/enum_generator_test.dart b/test/enum_generator_test.dart
deleted file mode 100755
index d1cd2f1..0000000
--- a/test/enum_generator_test.dart
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library enum_generator_test;
-
-import 'package:protoc_plugin/indenting_writer.dart';
-import 'package:protoc_plugin/protoc.dart';
-import 'package:protoc_plugin/src/descriptor.pb.dart';
-import 'package:test/test.dart';
-
-import 'golden_file.dart';
-
-void main() {
-  test('testEnumGenerator', () {
-    EnumDescriptorProto ed = new EnumDescriptorProto()
-      ..name = 'PhoneType'
-      ..value.addAll([
-        new EnumValueDescriptorProto()
-          ..name = 'MOBILE'
-          ..number = 0,
-        new EnumValueDescriptorProto()
-          ..name = 'HOME'
-          ..number = 1,
-        new EnumValueDescriptorProto()
-          ..name = 'WORK'
-          ..number = 2,
-        new EnumValueDescriptorProto()
-          ..name = 'BUSINESS'
-          ..number = 2
-      ]);
-    IndentingWriter writer = new IndentingWriter();
-    FileGenerator fg =
-        new FileGenerator(new FileDescriptorProto(), new GenerationOptions());
-    EnumGenerator eg = new EnumGenerator(ed, fg, new Set<String>());
-    eg.generate(writer);
-    expectMatchesGoldenFile(writer.toString(), 'test/goldens/enum');
-  });
-}
diff --git a/test/extension_test.dart b/test/extension_test.dart
deleted file mode 100644
index 9a015b6..0000000
--- a/test/extension_test.dart
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library extension_test;
-
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-import '../out/protos/enum_extension.pb.dart';
-import '../out/protos/nested_extension.pb.dart';
-import '../out/protos/non_nested_extension.pb.dart';
-import '../out/protos/ExtensionNameConflict.pb.dart';
-import '../out/protos/ExtensionEnumNameConflict.pb.dart';
-
-import 'test_util.dart';
-
-throwsArgError(String expectedMessage) => throwsA(predicate((x) {
-      expect(x, isArgumentError);
-      expect(x.message, expectedMessage);
-      return true;
-    }));
-
-void main() {
-  test('can set all extension types', () {
-    TestAllExtensions message = new TestAllExtensions();
-    setAllExtensions(message);
-    assertAllExtensionsSet(message);
-  });
-
-  test('can modify all repeated extension types', () {
-    TestAllExtensions message = new TestAllExtensions();
-    setAllExtensions(message);
-    modifyRepeatedExtensions(message);
-    assertRepeatedExtensionsModified(message);
-  });
-
-  test('unset extensions return default values', () {
-    assertExtensionsClear(new TestAllExtensions());
-  });
-
-  // void testExtensionReflectionGetters() {} // UNSUPPORTED -- reflection
-  // void testExtensionReflectionSetters() {} // UNSUPPORTED -- reflection
-  // void testExtensionReflectionSettersRejectNull() {} // UNSUPPORTED
-  // void testExtensionReflectionRepeatedSetters() {} // UNSUPPORTED
-  // void testExtensionReflectionRepeatedSettersRejectNull() // UNSUPPORTED
-  // void testExtensionReflectionDefaults() // UNSUPPORTED
-
-  test('can clear an optional extension', () {
-    // clearExtension() is not actually used in test_util, so try it manually.
-    var message = new TestAllExtensions();
-    message.setExtension(Unittest.optionalInt32Extension, 1);
-    message.clearExtension(Unittest.optionalInt32Extension);
-    expect(message.hasExtension(Unittest.optionalInt32Extension), isFalse);
-  });
-
-  test('can clear a repeated extension', () {
-    var message = new TestAllExtensions();
-    message.addExtension(Unittest.repeatedInt32Extension, 1);
-    message.clearExtension(Unittest.repeatedInt32Extension);
-    expect(message.getExtension(Unittest.repeatedInt32Extension).length, 0);
-  });
-
-  test('can clone an extension field', () {
-    TestAllExtensions original = new TestAllExtensions();
-    original.setExtension(Unittest.optionalInt32Extension, 1);
-    TestAllExtensions clone = original.clone();
-    expect(clone.hasExtension(Unittest.optionalInt32Extension), isTrue);
-    expect(clone.getExtension(Unittest.optionalInt32Extension), 1);
-  });
-
-  test('can clone all types of extension fields', () {
-    assertAllExtensionsSet(getAllExtensionsSet().clone());
-  });
-
-  test("throws if field number isn't allowed for extension", () {
-    var message = new TestAllTypes(); // does not allow extensions
-    expect(() {
-      message.setExtension(Unittest.optionalInt32Extension, 0);
-    },
-        throwsArgError(
-            "Extension optionalInt32Extension not legal for message protobuf_unittest.TestAllTypes"));
-
-    expect(() {
-      message.getExtension(Unittest.optionalInt32Extension);
-    },
-        throwsArgError(
-            "Extension optionalInt32Extension not legal for message protobuf_unittest.TestAllTypes"));
-  });
-
-  test("throws if an int32 extension is set to a bad value", () {
-    var message = new TestAllExtensions();
-    expect(() {
-      message.setExtension(Unittest.optionalInt32Extension, "hello");
-    },
-        throwsArgError(
-            "Illegal to set field optionalInt32Extension (1) of protobuf_unittest.TestAllExtensions"
-            " to value (hello): not type int"));
-  });
-
-  test('throws if an int64 extension is set to a bad value', () {
-    var message = new TestAllExtensions();
-    expect(() {
-      message.setExtension(Unittest.optionalInt64Extension, 123);
-    },
-        throwsArgError(
-            "Illegal to set field optionalInt64Extension (2) of protobuf_unittest.TestAllExtensions"
-            " to value (123): not Int64"));
-  });
-
-  test('throws if a message extension is set to a bad value', () {
-    var message = new TestAllExtensions();
-
-    // For a non-repeated message, we only check for a GeneratedMessage.
-    expect(() {
-      message.setExtension(Unittest.optionalNestedMessageExtension, 123);
-    },
-        throwsArgError(
-            "Illegal to set field optionalNestedMessageExtension (18)"
-            " of protobuf_unittest.TestAllExtensions to value (123): not a GeneratedMessage"));
-
-    // For a repeated message, the type check is exact.
-    expect(() {
-      message.addExtension(
-          Unittest.repeatedNestedMessageExtension, new TestAllTypes());
-    }, throwsATypeError);
-  });
-
-  test('throws if an enum extension is set to a bad value', () {
-    var message = new TestAllExtensions();
-
-    // For a non-repeated enum, we only check for a ProtobufEnum.
-    expect(() {
-      message.setExtension(Unittest.optionalNestedEnumExtension, 123);
-    },
-        throwsArgError("Illegal to set field optionalNestedEnumExtension (21)"
-            " of protobuf_unittest.TestAllExtensions to value (123): not type ProtobufEnum"));
-
-    // For a repeated enum, the type check is exact.
-    expect(() {
-      message.addExtension(
-          Unittest.repeatedForeignEnumExtension, TestAllTypes_NestedEnum.FOO);
-    }, throwsATypeError);
-  });
-
-  test('can extend a message with a message field with a different type', () {
-    expect(Non_nested_extension.nonNestedExtension.makeDefault(),
-        new TypeMatcher<MyNonNestedExtension>());
-    expect(Non_nested_extension.nonNestedExtension.name, 'nonNestedExtension');
-  });
-
-  test('can extend a message with a message field of the same type', () {
-    expect(
-        MyNestedExtension.recursiveExtension.makeDefault()
-            is MessageToBeExtended,
-        isTrue);
-    expect(MyNestedExtension.recursiveExtension.name, 'recursiveExtension');
-  });
-
-  test('can extend message with enum', () {
-    var msg = new Extendable();
-    msg.setExtension(Enum_extension.animal, Animal.CAT);
-  });
-
-  test('extension class was renamed to avoid conflict with message', () {
-    expect(ExtensionNameConflictExt.someExtension.tagNumber, 1);
-  });
-
-  test('extension class was renamed to avoid conflict with enum', () {
-    expect(ExtensionEnumNameConflictExt.enumConflictExtension.tagNumber, 1);
-  });
-}
diff --git a/test/file_generator_test.dart b/test/file_generator_test.dart
deleted file mode 100644
index f26d828..0000000
--- a/test/file_generator_test.dart
+++ /dev/null
@@ -1,369 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library file_generator_test;
-
-import 'package:protoc_plugin/indenting_writer.dart';
-import 'package:protoc_plugin/src/descriptor.pb.dart';
-import 'package:protoc_plugin/src/plugin.pb.dart';
-import 'package:protoc_plugin/protoc.dart';
-import 'package:test/test.dart';
-
-import 'golden_file.dart';
-
-FileDescriptorProto buildFileDescriptor(
-    {phoneNumber = true, topLevelEnum = false}) {
-  FileDescriptorProto fd = new FileDescriptorProto()..name = 'test';
-
-  if (topLevelEnum) {
-    fd.enumType.add(new EnumDescriptorProto()
-      ..name = 'PhoneType'
-      ..value.addAll([
-        new EnumValueDescriptorProto()
-          ..name = 'MOBILE'
-          ..number = 0,
-        new EnumValueDescriptorProto()
-          ..name = 'HOME'
-          ..number = 1,
-        new EnumValueDescriptorProto()
-          ..name = 'WORK'
-          ..number = 2,
-        new EnumValueDescriptorProto()
-          ..name = 'BUSINESS'
-          ..number = 2
-      ]));
-  }
-
-  if (phoneNumber) {
-    fd.messageType.add(new DescriptorProto()
-      ..name = 'PhoneNumber'
-      ..field.addAll([
-        // required string number = 1;
-        new FieldDescriptorProto()
-          ..name = 'number'
-          ..number = 1
-          ..label = FieldDescriptorProto_Label.LABEL_REQUIRED
-          ..type = FieldDescriptorProto_Type.TYPE_STRING,
-        // optional int32 type = 2;
-        // OR
-        // optional PhoneType type = 2;
-        new FieldDescriptorProto()
-          ..name = 'type'
-          ..number = 2
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = topLevelEnum
-              ? FieldDescriptorProto_Type.TYPE_ENUM
-              : FieldDescriptorProto_Type.TYPE_INT32
-          ..typeName = topLevelEnum ? '.PhoneType' : '',
-        // optional string name = 3 [default = "$"];
-        new FieldDescriptorProto()
-          ..name = 'name'
-          ..number = 3
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = FieldDescriptorProto_Type.TYPE_STRING
-          ..defaultValue = r'$'
-      ]));
-  }
-
-  return fd;
-}
-
-void main() {
-  test('FileGenerator outputs a .pb.dart file for a proto with one message',
-      () {
-    FileDescriptorProto fd = buildFileDescriptor();
-    var options = parseGenerationOptions(
-        new CodeGeneratorRequest(), new CodeGeneratorResponse());
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-    expectMatchesGoldenFile(
-        fg.generateMainFile(), 'test/goldens/oneMessage.pb');
-  });
-
-  test('FileGenerator outputs a pbjson.dart file for a proto with one message',
-      () {
-    FileDescriptorProto fd = buildFileDescriptor();
-    var options = parseGenerationOptions(
-        new CodeGeneratorRequest(), new CodeGeneratorResponse());
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-    expectMatchesGoldenFile(
-        fg.generateJsonFile(), 'test/goldens/oneMessage.pbjson');
-  });
-
-  test('FileGenerator generates files for a top-level enum', () {
-    FileDescriptorProto fd =
-        buildFileDescriptor(phoneNumber: false, topLevelEnum: true);
-    var options = parseGenerationOptions(
-        new CodeGeneratorRequest(), new CodeGeneratorResponse());
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-    expectMatchesGoldenFile(
-        fg.generateMainFile(), 'test/goldens/topLevelEnum.pb');
-    expectMatchesGoldenFile(
-        fg.generateEnumFile(), 'test/goldens/topLevelEnum.pbenum');
-  });
-
-  test('FileGenerator generates a .pbjson.dart file for a top-level enum', () {
-    FileDescriptorProto fd =
-        buildFileDescriptor(phoneNumber: false, topLevelEnum: true);
-    var options = parseGenerationOptions(
-        new CodeGeneratorRequest(), new CodeGeneratorResponse());
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-    expectMatchesGoldenFile(
-        fg.generateJsonFile(), 'test/goldens/topLevelEnum.pbjson');
-  });
-
-  test('FileGenerator outputs library for a .proto in a package', () {
-    FileDescriptorProto fd = buildFileDescriptor();
-    fd.package = "pb_library";
-    var options = parseGenerationOptions(
-        new CodeGeneratorRequest(), new CodeGeneratorResponse());
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-
-    var writer = new IndentingWriter();
-    fg.writeMainHeader(writer);
-    expectMatchesGoldenFile(
-        writer.toString(), 'test/goldens/header_in_package.pb');
-  });
-
-  test('FileGenerator outputs a fixnum import when needed', () {
-    FileDescriptorProto fd = new FileDescriptorProto()
-      ..name = 'test'
-      ..messageType.add(new DescriptorProto()
-        ..name = 'Count'
-        ..field.addAll([
-          new FieldDescriptorProto()
-            ..name = 'count'
-            ..number = 1
-            ..type = FieldDescriptorProto_Type.TYPE_INT64
-        ]));
-
-    var options = parseGenerationOptions(
-        new CodeGeneratorRequest(), new CodeGeneratorResponse());
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-
-    var writer = new IndentingWriter();
-    fg.writeMainHeader(writer);
-    expectMatchesGoldenFile(
-        writer.toString(), 'test/goldens/header_with_fixnum.pb');
-  });
-
-  test('FileGenerator outputs files for a service', () {
-    DescriptorProto empty = new DescriptorProto()..name = "Empty";
-
-    ServiceDescriptorProto sd = new ServiceDescriptorProto()
-      ..name = 'Test'
-      ..method.add(new MethodDescriptorProto()
-        ..name = 'Ping'
-        ..inputType = '.Empty'
-        ..outputType = '.Empty');
-
-    FileDescriptorProto fd = new FileDescriptorProto()
-      ..name = 'test'
-      ..messageType.add(empty)
-      ..service.add(sd);
-
-    var options = parseGenerationOptions(
-        new CodeGeneratorRequest(), new CodeGeneratorResponse());
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-
-    var writer = new IndentingWriter();
-    fg.writeMainHeader(writer);
-    expectMatchesGoldenFile(fg.generateMainFile(), 'test/goldens/service.pb');
-    expectMatchesGoldenFile(
-        fg.generateServerFile(), 'test/goldens/service.pbserver');
-  });
-
-  test('FileGenerator does not output legacy service stubs if gRPC is selected',
-      () {
-    DescriptorProto empty = new DescriptorProto()..name = "Empty";
-
-    ServiceDescriptorProto sd = new ServiceDescriptorProto()
-      ..name = 'Test'
-      ..method.add(new MethodDescriptorProto()
-        ..name = 'Ping'
-        ..inputType = '.Empty'
-        ..outputType = '.Empty');
-
-    FileDescriptorProto fd = new FileDescriptorProto()
-      ..name = 'test'
-      ..messageType.add(empty)
-      ..service.add(sd);
-
-    var options = new GenerationOptions(useGrpc: true);
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-
-    var writer = new IndentingWriter();
-    fg.writeMainHeader(writer);
-    expectMatchesGoldenFile(
-        fg.generateMainFile(), 'test/goldens/grpc_service.pb');
-  });
-
-  test('FileGenerator outputs gRPC stubs if gRPC is selected', () {
-    final input = new DescriptorProto()..name = 'Input';
-    final output = new DescriptorProto()..name = 'Output';
-
-    final unary = new MethodDescriptorProto()
-      ..name = 'Unary'
-      ..inputType = '.Input'
-      ..outputType = '.Output'
-      ..clientStreaming = false
-      ..serverStreaming = false;
-    final clientStreaming = new MethodDescriptorProto()
-      ..name = 'ClientStreaming'
-      ..inputType = '.Input'
-      ..outputType = '.Output'
-      ..clientStreaming = true
-      ..serverStreaming = false;
-    final serverStreaming = new MethodDescriptorProto()
-      ..name = 'ServerStreaming'
-      ..inputType = '.Input'
-      ..outputType = '.Output'
-      ..clientStreaming = false
-      ..serverStreaming = true;
-    final bidirectional = new MethodDescriptorProto()
-      ..name = 'Bidirectional'
-      ..inputType = '.Input'
-      ..outputType = '.Output'
-      ..clientStreaming = true
-      ..serverStreaming = true;
-
-    ServiceDescriptorProto sd = new ServiceDescriptorProto()
-      ..name = 'Test'
-      ..method.addAll([unary, clientStreaming, serverStreaming, bidirectional]);
-
-    FileDescriptorProto fd = new FileDescriptorProto()
-      ..name = 'test'
-      ..messageType.addAll([input, output])
-      ..service.add(sd);
-
-    var options = new GenerationOptions(useGrpc: true);
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options, [fg]);
-
-    var writer = new IndentingWriter();
-    fg.writeMainHeader(writer);
-    expectMatchesGoldenFile(
-        fg.generateGrpcFile(), 'test/goldens/grpc_service.pbgrpc');
-  });
-
-  test('FileGenerator generates imports for .pb.dart files', () {
-    // This defines three .proto files package1.proto, package2.proto and
-    // test.proto with the following content:
-    //
-    // package1.proto:
-    // ---------------
-    // package p1;
-    // message M {
-    //   optional M m = 2;
-    // }
-    //
-    // package2.proto:
-    // ---------------
-    // package p2;
-    // message M {
-    //   optional M m = 2;
-    // }
-    //
-    // test.proto:
-    // ---------------
-    // package test;
-    // import "package1.proto";
-    // import "package2.proto";
-    // message M {
-    //   optional M m = 1;
-    //   optional p1.M m1 = 2;
-    //   optional p2.M m2 = 3;
-    // }
-
-    // Description of package1.proto.
-    DescriptorProto md1 = new DescriptorProto()
-      ..name = 'M'
-      ..field.addAll([
-        // optional M m = 1;
-        new FieldDescriptorProto()
-          ..name = 'm'
-          ..number = 1
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
-          ..typeName = ".p1.M",
-      ]);
-    FileDescriptorProto fd1 = new FileDescriptorProto()
-      ..package = 'p1'
-      ..name = 'package1.proto'
-      ..messageType.add(md1);
-
-    // Description of package1.proto.
-    DescriptorProto md2 = new DescriptorProto()
-      ..name = 'M'
-      ..field.addAll([
-        // optional M m = 1;
-        new FieldDescriptorProto()
-          ..name = 'x'
-          ..number = 1
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
-          ..typeName = ".p2.M",
-      ]);
-    FileDescriptorProto fd2 = new FileDescriptorProto()
-      ..package = 'p2'
-      ..name = 'package2.proto'
-      ..messageType.add(md2);
-
-    // Description of test.proto.
-    DescriptorProto md = new DescriptorProto()
-      ..name = 'M'
-      ..field.addAll([
-        // optional M m = 1;
-        new FieldDescriptorProto()
-          ..name = 'm'
-          ..number = 1
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
-          ..typeName = ".M",
-        // optional p1.M m1 = 2;
-        new FieldDescriptorProto()
-          ..name = 'm1'
-          ..number = 2
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
-          ..typeName = ".p1.M",
-        // optional p2.M m2 = 3;
-        new FieldDescriptorProto()
-          ..name = 'm2'
-          ..number = 3
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = FieldDescriptorProto_Type.TYPE_MESSAGE
-          ..typeName = ".p2.M",
-      ]);
-    FileDescriptorProto fd = new FileDescriptorProto()
-      ..name = 'test.proto'
-      ..messageType.add(md);
-    fd.dependency.addAll(['package1.proto', 'package2.proto']);
-    var request = new CodeGeneratorRequest();
-    var response = new CodeGeneratorResponse();
-    var options = parseGenerationOptions(request, response);
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    link(options,
-        [fg, new FileGenerator(fd1, options), new FileGenerator(fd2, options)]);
-    expectMatchesGoldenFile(fg.generateMainFile(), 'test/goldens/imports.pb');
-    expectMatchesGoldenFile(
-        fg.generateEnumFile(), 'test/goldens/imports.pbjson');
-  });
-}
diff --git a/test/generated_message_test.dart b/test/generated_message_test.dart
deleted file mode 100755
index 809797c..0000000
--- a/test/generated_message_test.dart
+++ /dev/null
@@ -1,721 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library generated_message_test;
-
-import 'package:protobuf/protobuf.dart';
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-import '../out/protos/google/protobuf/unittest_import.pb.dart';
-import '../out/protos/google/protobuf/unittest_optimize_for.pb.dart';
-import '../out/protos/multiple_files_test.pb.dart';
-import '../out/protos/reserved_names.pb.dart';
-import '../out/protos/duplicate_names_import.pb.dart';
-import '../out/protos/package1.pb.dart' as p1;
-import '../out/protos/package2.pb.dart' as p2;
-import '../out/protos/package3.pb.dart' as p3;
-import '../out/protos/toplevel_import.pb.dart' as t;
-import '../out/protos/toplevel.pb.dart';
-
-import 'test_util.dart';
-
-void main() {
-  final throwsInvalidProtocolBufferException =
-      throwsA(new TypeMatcher<InvalidProtocolBufferException>());
-  test('testProtosShareRepeatedArraysIfDidntChange', () {
-    TestAllTypes value1 = new TestAllTypes()
-      ..repeatedInt32.add(100)
-      ..repeatedImportEnum.add(ImportEnum.IMPORT_BAR)
-      ..repeatedForeignMessage.add(new ForeignMessage());
-
-    TestAllTypes value2 = value1.clone();
-
-    expect(value2.repeatedInt32, value1.repeatedInt32);
-    expect(value2.repeatedImportEnum, value1.repeatedImportEnum);
-    expect(value2.repeatedForeignMessage, value1.repeatedForeignMessage);
-  });
-
-  test('testSettersRejectNull', () {
-    TestAllTypes message = new TestAllTypes();
-    expect(() {
-      message.optionalString = null;
-    }, throwsArgumentError);
-    expect(() {
-      message.optionalBytes = null;
-    }, throwsArgumentError);
-    expect(() {
-      message.optionalNestedMessage = null;
-    }, throwsArgumentError);
-    expect(() {
-      message.optionalNestedMessage = null;
-    }, throwsArgumentError);
-    expect(() {
-      message.optionalNestedEnum = null;
-    }, throwsArgumentError);
-    expect(() {
-      message.repeatedString.add(null);
-    }, throwsArgumentError);
-    expect(() {
-      message.repeatedBytes.add(null);
-    }, throwsArgumentError);
-    expect(() {
-      message.repeatedNestedMessage.add(null);
-    }, throwsArgumentError);
-    expect(() {
-      message.repeatedNestedMessage.add(null);
-    }, throwsArgumentError);
-    expect(() {
-      message.repeatedNestedEnum.add(null);
-    }, throwsArgumentError);
-  });
-
-  test('testDefaultMessageIsReadOnly', () {
-    var message = new TestAllTypes();
-    expect(message.optionalNestedMessage,
-        same(TestAllTypes_NestedMessage.getDefault()));
-    expect(() {
-      message.optionalNestedMessage.bb = 123;
-    }, throwsUnsupportedError);
-
-    message = TestAllTypes.getDefault();
-    expect(() {
-      message.clear();
-    }, throwsUnsupportedError);
-    expect(() {
-      message.optionalString = "123";
-    }, throwsUnsupportedError);
-    expect(() {
-      message.clearOptionalString();
-    }, throwsUnsupportedError);
-    expect(() {
-      message.repeatedString.add("123");
-    }, throwsUnsupportedError);
-    expect(() {
-      message.repeatedString.clear();
-    }, throwsUnsupportedError);
-    expect(() {
-      message.unknownFields.clear();
-    }, throwsUnsupportedError);
-  });
-
-  test('testRepeatedSetters', () {
-    TestAllTypes message = getAllSet();
-    modifyRepeatedFields(message);
-    assertRepeatedFieldsModified(message);
-  });
-
-  test('testRepeatedSettersRejectNull', () {
-    TestAllTypes message = new TestAllTypes();
-
-    message.repeatedString.addAll(['one', 'two']);
-    expect(() {
-      message.repeatedString[1] = null;
-    }, throwsArgumentError);
-
-    message.repeatedBytes.addAll(['one'.codeUnits, 'two'.codeUnits]);
-    expect(() {
-      message.repeatedBytes[1] = null;
-    }, throwsArgumentError);
-
-    message.repeatedNestedMessage.addAll([
-      new TestAllTypes_NestedMessage()..bb = 318,
-      new TestAllTypes_NestedMessage()..bb = 456
-    ]);
-    expect(() {
-      message.repeatedNestedMessage[1] = null;
-    }, throwsArgumentError);
-
-    message.repeatedNestedEnum
-        .addAll([TestAllTypes_NestedEnum.FOO, TestAllTypes_NestedEnum.BAR]);
-    expect(() {
-      message.repeatedNestedEnum[1] = null;
-    }, throwsArgumentError);
-  });
-
-  test('testRepeatedAppend', () {
-    TestAllTypes message = new TestAllTypes()
-      ..repeatedInt32.addAll([1, 2, 3, 4])
-      ..repeatedForeignEnum.addAll([ForeignEnum.FOREIGN_BAZ])
-      ..repeatedForeignMessage.addAll([new ForeignMessage()..c = 12]);
-
-    expect(message.repeatedInt32, [1, 2, 3, 4]);
-    expect(message.repeatedForeignEnum, [ForeignEnum.FOREIGN_BAZ]);
-    expect(message.repeatedForeignMessage.length, 1);
-    expect(message.repeatedForeignMessage[0].c, 12);
-  });
-
-  test('testRepeatedAppendRejectsNull', () {
-    TestAllTypes message = new TestAllTypes();
-
-    expect(() {
-      message.repeatedForeignMessage
-          .addAll([new ForeignMessage()..c = 12, null]);
-    }, throwsArgumentError);
-
-    expect(() {
-      message.repeatedForeignEnum.addAll([ForeignEnum.FOREIGN_BAZ, null]);
-    }, throwsArgumentError);
-
-    expect(() {
-      message.repeatedString.addAll(['one', null]);
-    }, throwsArgumentError);
-
-    expect(() {
-      message.repeatedBytes.addAll(['one'.codeUnits, null]);
-    }, throwsArgumentError);
-  });
-
-  test('testSettingForeignMessage', () {
-    TestAllTypes message = new TestAllTypes()
-      ..optionalForeignMessage = (new ForeignMessage()..c = 123);
-
-    TestAllTypes expectedMessage = new TestAllTypes()
-      ..optionalForeignMessage = (new ForeignMessage()..c = 123);
-
-    expect(message, expectedMessage);
-  });
-
-  test('testSettingRepeatedForeignMessage', () {
-    TestAllTypes message = new TestAllTypes()
-      ..repeatedForeignMessage.add(new ForeignMessage()..c = 456);
-
-    TestAllTypes expectedMessage = new TestAllTypes()
-      ..repeatedForeignMessage.add(new ForeignMessage()..c = 456);
-
-    expect(message, expectedMessage);
-  });
-
-  test('testDefaults', () {
-    assertClear(new TestAllTypes());
-
-    TestExtremeDefaultValues message = new TestExtremeDefaultValues();
-
-    expect(message.utf8String, '\u1234');
-    expect(message.infDouble, same(double.infinity));
-    expect(message.negInfDouble, same(double.negativeInfinity));
-    expect(message.nanDouble, same(double.nan));
-    expect(message.infFloat, same(double.infinity));
-    expect(message.negInfFloat, same(double.negativeInfinity));
-    expect(message.nanFloat, same(double.nan));
-    expect(message.cppTrigraph, '? ? ?? ?? ??? ??/ ??-');
-    expect(message.smallInt64.toRadixString(16).toUpperCase(),
-        '-7FFFFFFFFFFFFFFF');
-  });
-
-  test('testClear', () {
-    TestAllTypes message = new TestAllTypes();
-
-    assertClear(message);
-    setAllFields(message);
-    message.clear();
-    assertClear(message);
-  });
-
-  // void testReflectionGetters() {} // UNSUPPORTED -- until reflection
-  // void testReflectionSetters() {} // UNSUPPORTED -- until reflection
-  // void testReflectionSettersRejectNull() {} // UNSUPPORTED - reflection
-  // void testReflectionRepeatedSetters() {} // UNSUPPORTED -- reflection
-  // void testReflectionRepeatedSettersRejectNull() {} // UNSUPPORTED
-  // void testReflectionDefaults() {} // UNSUPPORTED -- until reflection
-
-  test('testEnumInterface', () {
-    expect(
-        new TestAllTypes().defaultNestedEnum, new TypeMatcher<ProtobufEnum>());
-  });
-
-  test('testEnumMap', () {
-    for (ForeignEnum value in ForeignEnum.values) {
-      expect(ForeignEnum.valueOf(value.value), value);
-    }
-    expect(ForeignEnum.valueOf(12345), isNull);
-  });
-
-  test('testParsePackedToUnpacked', () {
-    TestUnpackedTypes message =
-        new TestUnpackedTypes.fromBuffer(getPackedSet().writeToBuffer());
-    assertUnpackedFieldsSet(message);
-  });
-
-  test('testParseUnpackedToPacked', () {
-    TestPackedTypes message =
-        new TestPackedTypes.fromBuffer(getUnpackedSet().writeToBuffer());
-    assertPackedFieldsSet(message);
-  });
-
-  test('testIgnoreJavaMultipleFilesOption', () {
-    // UNSUPPORTED getFile
-    // We mostly just want to check that things compile.
-    MessageWithNoOuter message = new MessageWithNoOuter()
-      ..nested = (new MessageWithNoOuter_NestedMessage()..i = 1)
-      ..foreign.add(new TestAllTypes()..optionalInt32 = 1)
-      ..nestedEnum = MessageWithNoOuter_NestedEnum.BAZ
-      ..foreignEnum = EnumWithNoOuter.BAR;
-
-    expect(new MessageWithNoOuter.fromBuffer(message.writeToBuffer()), message);
-
-    // Not currently supported in Dart protobuf.
-    // expect(MessageWithNoOuter.getDescriptor().getFile(),
-    //        MultipleFilesTestProto.getDescriptor());
-
-    int tagNumber = message.getTagNumber('foreignEnum');
-    expect(tagNumber, isNotNull);
-    expect(message.getField(tagNumber), EnumWithNoOuter.BAR);
-
-    // Not currently supported in Dart protobuf.
-    // expect(ServiceWithNoOuter.getDescriptor().getFile()
-    //        MultipleFilesTestProto.getDescriptor());
-
-    expect(
-        new TestAllExtensions()
-            .hasExtension(Multiple_files_test.extensionWithOuter),
-        isFalse);
-  });
-
-  test('testOptionalFieldWithRequiredSubfieldsOptimizedForSize', () {
-    expect(new TestOptionalOptimizedForSize().isInitialized(), isTrue);
-
-    expect(
-        (new TestOptionalOptimizedForSize()
-              ..o = new TestRequiredOptimizedForSize())
-            .isInitialized(),
-        isFalse);
-
-    expect(
-        (new TestOptionalOptimizedForSize()
-              ..o = (new TestRequiredOptimizedForSize()..x = 5))
-            .isInitialized(),
-        isTrue);
-  });
-
-  test('testSetAllFieldsAndClone', () {
-    TestAllTypes message = getAllSet();
-    assertAllFieldsSet(message);
-    assertAllFieldsSet(message.clone());
-  });
-
-  test('testReadWholeMessage', () {
-    TestAllTypes message = getAllSet();
-    List<int> rawBytes = message.writeToBuffer();
-    assertAllFieldsSet(new TestAllTypes.fromBuffer(rawBytes));
-  });
-
-  test('testReadHugeBlob', () {
-    // Allocate and initialize a 1MB blob.
-    List<int> blob = new List<int>(1 << 20);
-    for (int i = 0; i < blob.length; i++) {
-      blob[i] = i % 256;
-    }
-
-    // Make a message containing it.
-    TestAllTypes message = getAllSet();
-    message.optionalBytes = blob;
-
-    TestAllTypes message2 =
-        new TestAllTypes.fromBuffer(message.writeToBuffer());
-    expect(message2.optionalBytes, message.optionalBytes);
-  });
-
-  test('testRecursiveMessageDefaultInstance', () {
-    TestRecursiveMessage message = new TestRecursiveMessage();
-    expect(message.a, isNotNull);
-    expect(message, message.a);
-  });
-
-  test('testMaliciousRecursion', () {
-    GeneratedMessage _makeRecursiveMessage(int depth) {
-      return depth == 0
-          ? (new TestRecursiveMessage()..i = 5)
-          : (new TestRecursiveMessage()..a = _makeRecursiveMessage(depth - 1));
-    }
-
-    _assertMessageDepth(TestRecursiveMessage message, int depth) {
-      if (depth == 0) {
-        expect(message.hasA(), isFalse);
-        expect(message.i, 5);
-      } else {
-        expect(message.hasA(), isTrue);
-        _assertMessageDepth(message.a, depth - 1);
-      }
-    }
-
-    List<int> data64 = _makeRecursiveMessage(64).writeToBuffer();
-    List<int> data65 = _makeRecursiveMessage(65).writeToBuffer();
-
-    _assertMessageDepth(new TestRecursiveMessage.fromBuffer(data64), 64);
-
-    expect(() {
-      new TestRecursiveMessage.fromBuffer(data65);
-    }, throwsInvalidProtocolBufferException);
-
-    CodedBufferReader input = new CodedBufferReader(data64, recursionLimit: 8);
-    expect(() {
-      // Uncomfortable alternative to below...
-      new TestRecursiveMessage().mergeFromCodedBufferReader(input);
-    }, throwsInvalidProtocolBufferException);
-  });
-
-  test('testSizeLimit', () {
-    CodedBufferReader input =
-        new CodedBufferReader(getAllSet().writeToBuffer(), sizeLimit: 16);
-
-    expect(() {
-      // Uncomfortable alternative to below...
-      new TestAllTypes().mergeFromCodedBufferReader(input);
-    }, throwsInvalidProtocolBufferException);
-  });
-  test('testSerialize', () {
-    TestAllTypes expected = getAllSet();
-    List<int> out = expected.writeToBuffer();
-    TestAllTypes actual = new TestAllTypes.fromBuffer(out);
-    expect(actual, expected);
-  });
-
-  test('testEnumValues', () {
-    expect(TestAllTypes_NestedEnum.values, [
-      TestAllTypes_NestedEnum.FOO,
-      TestAllTypes_NestedEnum.BAR,
-      TestAllTypes_NestedEnum.BAZ
-    ]);
-    expect(TestAllTypes_NestedEnum.FOO.value, 1);
-    expect(TestAllTypes_NestedEnum.BAR.value, 2);
-    expect(TestAllTypes_NestedEnum.BAZ.value, 3);
-  });
-
-  test('testWriteWholeMessage', () {
-    List<int> goldenMessage = const <int>[
-      // no dartfmt
-      0x08, 0x65, 0x10, 0x66, 0x18, 0x67, 0x20, 0x68, 0x28, 0xd2, 0x01, 0x30,
-      0xd4, 0x01, 0x3d, 0x6b, 0x00, 0x00, 0x00, 0x41, 0x6c, 0x00, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x00, 0x51, 0x6e, 0x00,
-      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0xde, 0x42, 0x61,
-      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x40, 0x68, 0x01, 0x72, 0x03,
-      0x31, 0x31, 0x35, 0x7a, 0x03, 0x31, 0x31, 0x36, 0x83, 0x01, 0x88, 0x01,
-      0x75, 0x84, 0x01, 0x92, 0x01, 0x02, 0x08, 0x76, 0x9a, 0x01, 0x02, 0x08,
-      0x77, 0xa2, 0x01, 0x02, 0x08, 0x78, 0xa8, 0x01, 0x03, 0xb0, 0x01, 0x06,
-      0xb8, 0x01, 0x09, 0xc2, 0x01, 0x03, 0x31, 0x32, 0x34, 0xca, 0x01, 0x03,
-      0x31, 0x32, 0x35, 0xf8, 0x01, 0xc9, 0x01, 0xf8, 0x01, 0xad, 0x02, 0x80,
-      0x02, 0xca, 0x01, 0x80, 0x02, 0xae, 0x02, 0x88, 0x02, 0xcb, 0x01, 0x88,
-      0x02, 0xaf, 0x02, 0x90, 0x02, 0xcc, 0x01, 0x90, 0x02, 0xb0, 0x02, 0x98,
-      0x02, 0x9a, 0x03, 0x98, 0x02, 0xe2, 0x04, 0xa0, 0x02, 0x9c, 0x03, 0xa0,
-      0x02, 0xe4, 0x04, 0xad, 0x02, 0xcf, 0x00, 0x00, 0x00, 0xad, 0x02, 0x33,
-      0x01, 0x00, 0x00, 0xb1, 0x02, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-      0x00, 0xb1, 0x02, 0x34, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd,
-      0x02, 0xd1, 0x00, 0x00, 0x00, 0xbd, 0x02, 0x35, 0x01, 0x00, 0x00, 0xc1,
-      0x02, 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x02, 0x36,
-      0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x02, 0x00, 0x00, 0x53,
-      0x43, 0xcd, 0x02, 0x00, 0x80, 0x9b, 0x43, 0xd1, 0x02, 0x00, 0x00, 0x00,
-      0x00, 0x00, 0x80, 0x6a, 0x40, 0xd1, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
-      0x80, 0x73, 0x40, 0xd8, 0x02, 0x01, 0xd8, 0x02, 0x00, 0xe2, 0x02, 0x03,
-      0x32, 0x31, 0x35, 0xe2, 0x02, 0x03, 0x33, 0x31, 0x35, 0xea, 0x02, 0x03,
-      0x32, 0x31, 0x36, 0xea, 0x02, 0x03, 0x33, 0x31, 0x36, 0xf3, 0x02, 0xf8,
-      0x02, 0xd9, 0x01, 0xf4, 0x02, 0xf3, 0x02, 0xf8, 0x02, 0xbd, 0x02, 0xf4,
-      0x02, 0x82, 0x03, 0x03, 0x08, 0xda, 0x01, 0x82, 0x03, 0x03, 0x08, 0xbe,
-      0x02, 0x8a, 0x03, 0x03, 0x08, 0xdb, 0x01, 0x8a, 0x03, 0x03, 0x08, 0xbf,
-      0x02, 0x92, 0x03, 0x03, 0x08, 0xdc, 0x01, 0x92, 0x03, 0x03, 0x08, 0xc0,
-      0x02, 0x98, 0x03, 0x02, 0x98, 0x03, 0x03, 0xa0, 0x03, 0x05, 0xa0, 0x03,
-      0x06, 0xa8, 0x03, 0x08, 0xa8, 0x03, 0x09, 0xb2, 0x03, 0x03, 0x32, 0x32,
-      0x34, 0xb2, 0x03, 0x03, 0x33, 0x32, 0x34, 0xba, 0x03, 0x03, 0x32, 0x32,
-      0x35, 0xba, 0x03, 0x03, 0x33, 0x32, 0x35, 0xe8, 0x03, 0x91, 0x03, 0xf0,
-      0x03, 0x92, 0x03, 0xf8, 0x03, 0x93, 0x03, 0x80, 0x04, 0x94, 0x03, 0x88,
-      0x04, 0xaa, 0x06, 0x90, 0x04, 0xac, 0x06, 0x9d, 0x04, 0x97, 0x01, 0x00,
-      0x00, 0xa1, 0x04, 0x98, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad,
-      0x04, 0x99, 0x01, 0x00, 0x00, 0xb1, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0xbd, 0x04, 0x00, 0x80, 0xcd, 0x43, 0xc1, 0x04, 0x00,
-      0x00, 0x00, 0x00, 0x00, 0xc0, 0x79, 0x40, 0xc8, 0x04, 0x00, 0xd2, 0x04,
-      0x03, 0x34, 0x31, 0x35, 0xda, 0x04, 0x03, 0x34, 0x31, 0x36, 0x88, 0x05,
-      0x01, 0x90, 0x05, 0x04, 0x98, 0x05, 0x07, 0xa2, 0x05, 0x03, 0x34, 0x32,
-      0x34, 0xaa, 0x05, 0x03, 0x34, 0x32, 0x35
-    ];
-    expect(getAllSet().writeToBuffer(), goldenMessage);
-  });
-
-  test('testWriteWholePackedFieldsMessage', () {
-    List<int> goldenPackedMessage = const <int>[
-      // no dartfmt
-      0xd2, 0x05, 0x04, 0xd9, 0x04, 0xbd, 0x05, 0xda, 0x05, 0x04, 0xda, 0x04,
-      0xbe, 0x05, 0xe2, 0x05, 0x04, 0xdb, 0x04, 0xbf, 0x05, 0xea, 0x05, 0x04,
-      0xdc, 0x04, 0xc0, 0x05, 0xf2, 0x05, 0x04, 0xba, 0x09, 0x82, 0x0b, 0xfa,
-      0x05, 0x04, 0xbc, 0x09, 0x84, 0x0b, 0x82, 0x06, 0x08, 0x5f, 0x02, 0x00,
-      0x00, 0xc3, 0x02, 0x00, 0x00, 0x8a, 0x06, 0x10, 0x60, 0x02, 0x00, 0x00,
-      0x00, 0x00, 0x00, 0x00, 0xc4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-      0x92, 0x06, 0x08, 0x61, 0x02, 0x00, 0x00, 0xc5, 0x02, 0x00, 0x00, 0x9a,
-      0x06, 0x10, 0x62, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x02,
-      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x06, 0x08, 0x00, 0xc0, 0x18,
-      0x44, 0x00, 0xc0, 0x31, 0x44, 0xaa, 0x06, 0x10, 0x00, 0x00, 0x00, 0x00,
-      0x00, 0x20, 0x83, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x86, 0x40,
-      0xb2, 0x06, 0x02, 0x01, 0x00, 0xba, 0x06, 0x02, 0x05, 0x06
-    ];
-    expect(getPackedSet().writeToBuffer(), goldenPackedMessage);
-  });
-
-  test('testWriteMessageWithNegativeEnumValue', () {
-    SparseEnumMessage message = new SparseEnumMessage()
-      ..sparseEnum = TestSparseEnum.SPARSE_E;
-    expect(message.sparseEnum.value < 0, isTrue,
-        reason: 'enum.value should be -53452');
-    SparseEnumMessage message2 =
-        new SparseEnumMessage.fromBuffer(message.writeToBuffer());
-    expect(message2.sparseEnum, TestSparseEnum.SPARSE_E,
-        reason: 'should resolve back to SPARSE_E');
-  });
-
-  test('testReservedNamesOptional', () {
-    ReservedNamesOptional message = new ReservedNamesOptional();
-    message.hashCode_1 = 1;
-    expect(message.hashCode_1, 1);
-    expect(message.hasHashCode_1(), isTrue);
-    message.clearHashCode_1();
-
-    message.noSuchMethod_2 = 1;
-    message.runtimeType_3 = 1;
-    message.toString_4 = 1;
-    message.fromBuffer_10 = 1;
-    message.fromJson_11 = 1;
-    message.hasRequiredFields_12 = 1;
-    message.isInitialized_13 = 1;
-    message.clear_14 = 1;
-    message.getTagNumber_15 = 1;
-    message.check_16 = 1;
-    message.writeToBuffer_17 = 1;
-    message.writeToCodedBufferWriter_18 = 1;
-    message.mergeFromCodedBufferReader_19 = 1;
-    message.mergeFromBuffer_20 = 1;
-    message.writeToJson_21 = 1;
-    message.mergeFromJson_22 = 1;
-    message.addExtension_23 = 1;
-    message.getExtension_24 = 1;
-    message.setExtension_25 = 1;
-    message.hasExtension_26 = 1;
-    message.clearExtension_27 = 1;
-    message.getField_28 = 1;
-    message.setField_29 = 1;
-    message.hasField_30 = 1;
-    message.clearField_31 = 1;
-    message.extensionsAreInitialized_32 = 1;
-    message.mergeFromMessage_33 = 1;
-    message.mergeUnknownFields_34 = 1;
-    message.hashCode1 = 1;
-    message.x = 1;
-    message.hasX_51 = 1;
-    message.clearX_53 = 1;
-    message.hasX51 = 1;
-    message.clearX53 = 1;
-  });
-
-  test('testReservedNamesRepeated', () {
-    ReservedNamesRepeated message = new ReservedNamesRepeated();
-    message.hashCode_1.clear();
-    message.noSuchMethod_2.clear();
-    message.runtimeType_3.clear();
-    message.toString_4.clear();
-    message.fromBuffer_10.clear();
-    message.fromJson_11.clear();
-    message.hasRequiredFields_12.clear();
-    message.isInitialized_13.clear();
-    message.clear_14.clear();
-    message.getTagNumber_15.clear();
-    message.check_16.clear();
-    message.writeToBuffer_17.clear();
-    message.writeToCodedBufferWriter_18.clear();
-    message.mergeFromCodedBufferReader_19.clear();
-    message.mergeFromBuffer_20.clear();
-    message.writeToJson_21.clear();
-    message.mergeFromJson_22.clear();
-    message.addExtension_23.clear();
-    message.getExtension_24.clear();
-    message.setExtension_25.clear();
-    message.hasExtension_26.clear();
-    message.clearExtension_27.clear();
-    message.getField_28.clear();
-    message.setField_29.clear();
-    message.hasField_30.clear();
-    message.clearField_31.clear();
-    message.extensionsAreInitialized_32.clear();
-    message.mergeFromMessage_33.clear();
-    message.mergeUnknownFields_34.clear();
-    message.hashCode1.clear();
-    message.x.clear();
-    message.hasX.clear();
-    message.clearX.clear();
-    message.hasX51.clear();
-    message.clearX53.clear();
-  });
-
-  test('testReservedNamesRequired', () {
-    ReservedNamesRequired message = new ReservedNamesRequired();
-    message.hashCode_1 = 1;
-    expect(message.hashCode_1, 1);
-    expect(message.hasHashCode_1(), isTrue);
-    message.clearHashCode_1();
-
-    message.noSuchMethod_2 = 1;
-    message.runtimeType_3 = 1;
-    message.toString_4 = 1;
-    message.fromBuffer_10 = 1;
-    message.fromJson_11 = 1;
-    message.hasRequiredFields_12 = 1;
-    message.isInitialized_13 = 1;
-    message.clear_14 = 1;
-    message.getTagNumber_15 = 1;
-    message.check_16 = 1;
-    message.writeToBuffer_17 = 1;
-    message.writeToCodedBufferWriter_18 = 1;
-    message.mergeFromCodedBufferReader_19 = 1;
-    message.mergeFromBuffer_20 = 1;
-    message.writeToJson_21 = 1;
-    message.mergeFromJson_22 = 1;
-    message.addExtension_23 = 1;
-    message.getExtension_24 = 1;
-    message.setExtension_25 = 1;
-    message.hasExtension_26 = 1;
-    message.clearExtension_27 = 1;
-    message.getField_28 = 1;
-    message.setField_29 = 1;
-    message.hasField_30 = 1;
-    message.clearField_31 = 1;
-    message.extensionsAreInitialized_32 = 1;
-    message.mergeFromMessage_33 = 1;
-    message.mergeUnknownFields_34 = 1;
-    message.hashCode1 = 1;
-    message.x = 1;
-    message.hasX_51 = 1;
-    message.clearX_53 = 1;
-    message.hasX51 = 1;
-    message.clearX53 = 1;
-  });
-
-  test('testReservedWordsOptional', () {
-    ReservedWordsOptional message = new ReservedWordsOptional();
-    message.assert_1 = 1;
-    message.break_2 = 1;
-    message.case_3 = 1;
-    message.catch_4 = 1;
-    message.class_5 = 1;
-    message.const_6 = 1;
-    message.continue_7 = 1;
-    message.default_8 = 1;
-    message.do_9 = 1;
-    message.else_10 = 1;
-    message.enum_11 = 1;
-    message.extends_12 = 1;
-    message.false_13 = 1;
-    message.final_14 = 1;
-    message.finally_15 = 1;
-    message.for_16 = 1;
-    message.if_17 = 1;
-    message.in_18 = 1;
-    message.is_19 = 1;
-    message.new_20 = 1;
-    message.null_21 = 1;
-    message.rethrow_22 = 1;
-    message.return_23 = 1;
-    message.super_24 = 1;
-    message.switch_25 = 1;
-    message.this_26 = 1;
-    message.throw_27 = 1;
-    message.true_28 = 1;
-    message.try_29 = 1;
-    message.var_30 = 1;
-    message.void_31 = 1;
-    message.while_32 = 1;
-    message.with_33 = 1;
-  });
-
-  test('testReservedWordsRepeated', () {
-    ReservedWordsRepeated message = new ReservedWordsRepeated();
-    message.assert_1.clear();
-    message.break_2.clear();
-    message.case_3.clear();
-    message.catch_4.clear();
-    message.class_5.clear();
-    message.const_6.clear();
-    message.continue_7.clear();
-    message.default_8.clear();
-    message.do_9.clear();
-    message.else_10.clear();
-    message.enum_11.clear();
-    message.extends_12.clear();
-    message.false_13.clear();
-    message.final_14.clear();
-    message.finally_15.clear();
-    message.for_16.clear();
-    message.if_17.clear();
-    message.in_18.clear();
-    message.is_19.clear();
-    message.new_20.clear();
-    message.null_21.clear();
-    message.rethrow_22.clear();
-    message.return_23.clear();
-    message.super_24.clear();
-    message.switch_25.clear();
-    message.this_26.clear();
-    message.throw_27.clear();
-    message.true_28.clear();
-    message.try_29.clear();
-    message.var_30.clear();
-    message.void_31.clear();
-    message.while_32.clear();
-    message.with_33.clear();
-  });
-
-  test('testReservedWordsRequired', () {
-    ReservedWordsRequired message = new ReservedWordsRequired();
-    message.assert_1 = 1;
-    message.break_2 = 1;
-    message.case_3 = 1;
-    message.catch_4 = 1;
-    message.class_5 = 1;
-    message.const_6 = 1;
-    message.continue_7 = 1;
-    message.default_8 = 1;
-    message.do_9 = 1;
-    message.else_10 = 1;
-    message.enum_11 = 1;
-    message.extends_12 = 1;
-    message.false_13 = 1;
-    message.final_14 = 1;
-    message.finally_15 = 1;
-    message.for_16 = 1;
-    message.if_17 = 1;
-    message.in_18 = 1;
-    message.is_19 = 1;
-    message.new_20 = 1;
-    message.null_21 = 1;
-    message.rethrow_22 = 1;
-    message.return_23 = 1;
-    message.super_24 = 1;
-    message.switch_25 = 1;
-    message.this_26 = 1;
-    message.throw_27 = 1;
-    message.true_28 = 1;
-    message.try_29 = 1;
-    message.var_30 = 1;
-    message.void_31 = 1;
-    message.while_32 = 1;
-    message.with_33 = 1;
-  });
-
-  test('testImportDuplicatenames', () {
-    M message = new M();
-    message.m1 = new p1.M();
-    message.m1M = new p1.M_M();
-    message.m2 = new p2.M();
-    message.m2M = new p2.M_M();
-    message.m3 = new p3.M();
-    message.m3M = new p3.M_M();
-  });
-
-  test('testToplevel', () {
-    t.M message = new t.M();
-    message.t = new T();
-    new t.SApi(null);
-  });
-
-  test('to toDebugString', () {
-    TestAllTypes value1 = new TestAllTypes()..optionalString = "test 123";
-    expect(value1.toString(), 'optionalString: test 123\n');
-  });
-}
diff --git a/test/golden_file.dart b/test/golden_file.dart
deleted file mode 100644
index 0d936fa..0000000
--- a/test/golden_file.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:io';
-import 'package:test/test.dart';
-
-/// Will test [actual] against the contests of the file at [goldenFilePath].
-///
-/// If the file doesn't exist, the file is instead created containing [actual].
-void expectMatchesGoldenFile(String actual, String goldenFilePath) {
-  File goldenFile = File(goldenFilePath);
-  if (goldenFile.existsSync()) {
-    expect(actual, equals(goldenFile.readAsStringSync()));
-  } else {
-    goldenFile
-      ..createSync(recursive: true)
-      ..writeAsStringSync(actual);
-  }
-}
diff --git a/test/goldens/client b/test/goldens/client
deleted file mode 100644
index 45281fe..0000000
--- a/test/goldens/client
+++ /dev/null
@@ -1,14 +0,0 @@
-class TestApi {
-  $pb.RpcClient _client;
-  TestApi(this._client);
-
-  $async.Future<SomeReply> aMethod($pb.ClientContext ctx, SomeRequest request) {
-    var emptyResponse = new SomeReply();
-    return _client.invoke<SomeReply>(ctx, 'Test', 'AMethod', request, emptyResponse);
-  }
-  $async.Future<$0.AnotherReply> anotherMethod($pb.ClientContext ctx, $0.EmptyMessage request) {
-    var emptyResponse = new $0.AnotherReply();
-    return _client.invoke<$0.AnotherReply>(ctx, 'Test', 'AnotherMethod', request, emptyResponse);
-  }
-}
-
diff --git a/test/goldens/enum b/test/goldens/enum
deleted file mode 100644
index 40de719..0000000
--- a/test/goldens/enum
+++ /dev/null
@@ -1,22 +0,0 @@
-class PhoneType extends $pb.ProtobufEnum {
-  static const PhoneType MOBILE = const PhoneType._(0, 'MOBILE');
-  static const PhoneType HOME = const PhoneType._(1, 'HOME');
-  static const PhoneType WORK = const PhoneType._(2, 'WORK');
-
-  static const PhoneType BUSINESS = WORK;
-
-  static const List<PhoneType> values = const <PhoneType> [
-    MOBILE,
-    HOME,
-    WORK,
-  ];
-
-  static final Map<int, PhoneType> _byValue = $pb.ProtobufEnum.initByValue(values);
-  static PhoneType valueOf(int value) => _byValue[value];
-  static void $checkItem(PhoneType v) {
-    if (v is! PhoneType) $pb.checkItemFailed(v, 'PhoneType');
-  }
-
-  const PhoneType._(int v, String n) : super(v, n);
-}
-
diff --git a/test/goldens/grpc_service.pb b/test/goldens/grpc_service.pb
deleted file mode 100644
index 2515d87..0000000
--- a/test/goldens/grpc_service.pb
+++ /dev/null
@@ -1,31 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:protobuf/protobuf.dart' as $pb;
-
-class Empty extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('Empty')
-    ..hasRequiredFields = false
-  ;
-
-  Empty() : super();
-  Empty.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
-  Empty.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
-  Empty clone() => new Empty()..mergeFromMessage(this);
-  Empty copyWith(void Function(Empty) updates) => super.copyWith((message) => updates(message as Empty));
-  $pb.BuilderInfo get info_ => _i;
-  static Empty create() => new Empty();
-  static $pb.PbList<Empty> createRepeated() => new $pb.PbList<Empty>();
-  static Empty getDefault() => _defaultInstance ??= create()..freeze();
-  static Empty _defaultInstance;
-  static void $checkItem(Empty v) {
-    if (v is! Empty) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-}
-
diff --git a/test/goldens/grpc_service.pbgrpc b/test/goldens/grpc_service.pbgrpc
deleted file mode 100644
index b167366..0000000
--- a/test/goldens/grpc_service.pbgrpc
+++ /dev/null
@@ -1,111 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-import 'dart:async' as $async;
-
-import 'package:grpc/grpc.dart';
-
-import 'test.pb.dart';
-export 'test.pb.dart';
-
-class TestClient extends Client {
-  static final _$unary = new ClientMethod<Input, Output>(
-      '/Test/Unary',
-      (Input value) => value.writeToBuffer(),
-      (List<int> value) => new Output.fromBuffer(value));
-  static final _$clientStreaming = new ClientMethod<Input, Output>(
-      '/Test/ClientStreaming',
-      (Input value) => value.writeToBuffer(),
-      (List<int> value) => new Output.fromBuffer(value));
-  static final _$serverStreaming = new ClientMethod<Input, Output>(
-      '/Test/ServerStreaming',
-      (Input value) => value.writeToBuffer(),
-      (List<int> value) => new Output.fromBuffer(value));
-  static final _$bidirectional = new ClientMethod<Input, Output>(
-      '/Test/Bidirectional',
-      (Input value) => value.writeToBuffer(),
-      (List<int> value) => new Output.fromBuffer(value));
-
-  TestClient(ClientChannel channel, {CallOptions options})
-      : super(channel, options: options);
-
-  ResponseFuture<Output> unary(Input request, {CallOptions options}) {
-    final call = $createCall(_$unary, new $async.Stream.fromIterable([request]),
-        options: options);
-    return new ResponseFuture(call);
-  }
-
-  ResponseFuture<Output> clientStreaming($async.Stream<Input> request,
-      {CallOptions options}) {
-    final call = $createCall(_$clientStreaming, request, options: options);
-    return new ResponseFuture(call);
-  }
-
-  ResponseStream<Output> serverStreaming(Input request, {CallOptions options}) {
-    final call = $createCall(
-        _$serverStreaming, new $async.Stream.fromIterable([request]),
-        options: options);
-    return new ResponseStream(call);
-  }
-
-  ResponseStream<Output> bidirectional($async.Stream<Input> request,
-      {CallOptions options}) {
-    final call = $createCall(_$bidirectional, request, options: options);
-    return new ResponseStream(call);
-  }
-}
-
-abstract class TestServiceBase extends Service {
-  String get $name => 'Test';
-
-  TestServiceBase() {
-    $addMethod(new ServiceMethod<Input, Output>(
-        'Unary',
-        unary_Pre,
-        false,
-        false,
-        (List<int> value) => new Input.fromBuffer(value),
-        (Output value) => value.writeToBuffer()));
-    $addMethod(new ServiceMethod<Input, Output>(
-        'ClientStreaming',
-        clientStreaming,
-        true,
-        false,
-        (List<int> value) => new Input.fromBuffer(value),
-        (Output value) => value.writeToBuffer()));
-    $addMethod(new ServiceMethod<Input, Output>(
-        'ServerStreaming',
-        serverStreaming_Pre,
-        false,
-        true,
-        (List<int> value) => new Input.fromBuffer(value),
-        (Output value) => value.writeToBuffer()));
-    $addMethod(new ServiceMethod<Input, Output>(
-        'Bidirectional',
-        bidirectional,
-        true,
-        true,
-        (List<int> value) => new Input.fromBuffer(value),
-        (Output value) => value.writeToBuffer()));
-  }
-
-  $async.Future<Output> unary_Pre(
-      ServiceCall call, $async.Future request) async {
-    return unary(call, await request);
-  }
-
-  $async.Stream<Output> serverStreaming_Pre(
-      ServiceCall call, $async.Future request) async* {
-    yield* serverStreaming(call, (await request) as Input);
-  }
-
-  $async.Future<Output> unary(ServiceCall call, Input request);
-  $async.Future<Output> clientStreaming(
-      ServiceCall call, $async.Stream<Input> request);
-  $async.Stream<Output> serverStreaming(ServiceCall call, Input request);
-  $async.Stream<Output> bidirectional(
-      ServiceCall call, $async.Stream<Input> request);
-}
diff --git a/test/goldens/header_in_package.pb b/test/goldens/header_in_package.pb
deleted file mode 100644
index 0399a53..0000000
--- a/test/goldens/header_in_package.pb
+++ /dev/null
@@ -1,11 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:protobuf/protobuf.dart' as $pb;
-
diff --git a/test/goldens/header_with_fixnum.pb b/test/goldens/header_with_fixnum.pb
deleted file mode 100644
index 9df6c14..0000000
--- a/test/goldens/header_with_fixnum.pb
+++ /dev/null
@@ -1,12 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:fixnum/fixnum.dart';
-import 'package:protobuf/protobuf.dart' as $pb;
-
diff --git a/test/goldens/imports.pb b/test/goldens/imports.pb
deleted file mode 100644
index 2c384a9..0000000
--- a/test/goldens/imports.pb
+++ /dev/null
@@ -1,52 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test.proto
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:protobuf/protobuf.dart' as $pb;
-
-import 'package1.pb.dart' as $0;
-import 'package2.pb.dart' as $1;
-
-class M extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('M')
-    ..a<M>(1, 'm', $pb.PbFieldType.OM, M.getDefault, M.create)
-    ..a<$0.M>(2, 'm1', $pb.PbFieldType.OM, $0.M.getDefault, $0.M.create)
-    ..a<$1.M>(3, 'm2', $pb.PbFieldType.OM, $1.M.getDefault, $1.M.create)
-    ..hasRequiredFields = false
-  ;
-
-  M() : super();
-  M.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
-  M.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
-  M clone() => new M()..mergeFromMessage(this);
-  M copyWith(void Function(M) updates) => super.copyWith((message) => updates(message as M));
-  $pb.BuilderInfo get info_ => _i;
-  static M create() => new M();
-  static $pb.PbList<M> createRepeated() => new $pb.PbList<M>();
-  static M getDefault() => _defaultInstance ??= create()..freeze();
-  static M _defaultInstance;
-  static void $checkItem(M v) {
-    if (v is! M) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  M get m => $_getN(0);
-  set m(M v) { setField(1, v); }
-  bool hasM() => $_has(0);
-  void clearM() => clearField(1);
-
-  $0.M get m1 => $_getN(1);
-  set m1($0.M v) { setField(2, v); }
-  bool hasM1() => $_has(1);
-  void clearM1() => clearField(2);
-
-  $1.M get m2 => $_getN(2);
-  set m2($1.M v) { setField(3, v); }
-  bool hasM2() => $_has(2);
-  void clearM2() => clearField(3);
-}
-
diff --git a/test/goldens/imports.pbjson b/test/goldens/imports.pbjson
deleted file mode 100644
index 02eb3e2..0000000
--- a/test/goldens/imports.pbjson
+++ /dev/null
@@ -1,6 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test.proto
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
diff --git a/test/goldens/messageGenerator b/test/goldens/messageGenerator
deleted file mode 100644
index 1c4f0bc..0000000
--- a/test/goldens/messageGenerator
+++ /dev/null
@@ -1,37 +0,0 @@
-class PhoneNumber extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('PhoneNumber')
-    ..aQS(1, 'number')
-    ..e<PhoneNumber_PhoneType>(2, 'type', $pb.PbFieldType.OE, PhoneNumber_PhoneType.MOBILE, PhoneNumber_PhoneType.valueOf, PhoneNumber_PhoneType.values)
-    ..a<String>(3, 'name', $pb.PbFieldType.OS, '\$')
-  ;
-
-  PhoneNumber() : super();
-  PhoneNumber.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
-  PhoneNumber.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
-  PhoneNumber clone() => new PhoneNumber()..mergeFromMessage(this);
-  PhoneNumber copyWith(void Function(PhoneNumber) updates) => super.copyWith((message) => updates(message as PhoneNumber));
-  $pb.BuilderInfo get info_ => _i;
-  static PhoneNumber create() => new PhoneNumber();
-  static $pb.PbList<PhoneNumber> createRepeated() => new $pb.PbList<PhoneNumber>();
-  static PhoneNumber getDefault() => _defaultInstance ??= create()..freeze();
-  static PhoneNumber _defaultInstance;
-  static void $checkItem(PhoneNumber v) {
-    if (v is! PhoneNumber) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get number => $_getS(0, '');
-  set number(String v) { $_setString(0, v); }
-  bool hasNumber() => $_has(0);
-  void clearNumber() => clearField(1);
-
-  PhoneNumber_PhoneType get type => $_getN(1);
-  set type(PhoneNumber_PhoneType v) { setField(2, v); }
-  bool hasType() => $_has(1);
-  void clearType() => clearField(2);
-
-  String get name => $_getS(2, '\$');
-  set name(String v) { $_setString(2, v); }
-  bool hasName() => $_has(2);
-  void clearName() => clearField(3);
-}
-
diff --git a/test/goldens/messageGeneratorEnums b/test/goldens/messageGeneratorEnums
deleted file mode 100644
index 157bfe1..0000000
--- a/test/goldens/messageGeneratorEnums
+++ /dev/null
@@ -1,22 +0,0 @@
-class PhoneNumber_PhoneType extends $pb.ProtobufEnum {
-  static const PhoneNumber_PhoneType MOBILE = const PhoneNumber_PhoneType._(0, 'MOBILE');
-  static const PhoneNumber_PhoneType HOME = const PhoneNumber_PhoneType._(1, 'HOME');
-  static const PhoneNumber_PhoneType WORK = const PhoneNumber_PhoneType._(2, 'WORK');
-
-  static const PhoneNumber_PhoneType BUSINESS = WORK;
-
-  static const List<PhoneNumber_PhoneType> values = const <PhoneNumber_PhoneType> [
-    MOBILE,
-    HOME,
-    WORK,
-  ];
-
-  static final Map<int, PhoneNumber_PhoneType> _byValue = $pb.ProtobufEnum.initByValue(values);
-  static PhoneNumber_PhoneType valueOf(int value) => _byValue[value];
-  static void $checkItem(PhoneNumber_PhoneType v) {
-    if (v is! PhoneNumber_PhoneType) $pb.checkItemFailed(v, 'PhoneNumber_PhoneType');
-  }
-
-  const PhoneNumber_PhoneType._(int v, String n) : super(v, n);
-}
-
diff --git a/test/goldens/oneMessage.pb b/test/goldens/oneMessage.pb
deleted file mode 100644
index 7ca3006..0000000
--- a/test/goldens/oneMessage.pb
+++ /dev/null
@@ -1,48 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:protobuf/protobuf.dart' as $pb;
-
-class PhoneNumber extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('PhoneNumber')
-    ..aQS(1, 'number')
-    ..a<int>(2, 'type', $pb.PbFieldType.O3)
-    ..a<String>(3, 'name', $pb.PbFieldType.OS, '\$')
-  ;
-
-  PhoneNumber() : super();
-  PhoneNumber.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
-  PhoneNumber.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
-  PhoneNumber clone() => new PhoneNumber()..mergeFromMessage(this);
-  PhoneNumber copyWith(void Function(PhoneNumber) updates) => super.copyWith((message) => updates(message as PhoneNumber));
-  $pb.BuilderInfo get info_ => _i;
-  static PhoneNumber create() => new PhoneNumber();
-  static $pb.PbList<PhoneNumber> createRepeated() => new $pb.PbList<PhoneNumber>();
-  static PhoneNumber getDefault() => _defaultInstance ??= create()..freeze();
-  static PhoneNumber _defaultInstance;
-  static void $checkItem(PhoneNumber v) {
-    if (v is! PhoneNumber) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-
-  String get number => $_getS(0, '');
-  set number(String v) { $_setString(0, v); }
-  bool hasNumber() => $_has(0);
-  void clearNumber() => clearField(1);
-
-  int get type => $_get(1, 0);
-  set type(int v) { $_setSignedInt32(1, v); }
-  bool hasType() => $_has(1);
-  void clearType() => clearField(2);
-
-  String get name => $_getS(2, '\$');
-  set name(String v) { $_setString(2, v); }
-  bool hasName() => $_has(2);
-  void clearName() => clearField(3);
-}
-
diff --git a/test/goldens/oneMessage.pbjson b/test/goldens/oneMessage.pbjson
deleted file mode 100644
index 15f916b..0000000
--- a/test/goldens/oneMessage.pbjson
+++ /dev/null
@@ -1,15 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-const PhoneNumber$json = const {
-  '1': 'PhoneNumber',
-  '2': const [
-    const {'1': 'number', '3': 1, '4': 2, '5': 9},
-    const {'1': 'type', '3': 2, '4': 1, '5': 5, '6': ''},
-    const {'1': 'name', '3': 3, '4': 1, '5': 9, '7': r'$'},
-  ],
-};
-
diff --git a/test/goldens/service.pb b/test/goldens/service.pb
deleted file mode 100644
index 507b6bf..0000000
--- a/test/goldens/service.pb
+++ /dev/null
@@ -1,42 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-import 'dart:async' as $async;
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-import 'package:protobuf/protobuf.dart' as $pb;
-
-class Empty extends $pb.GeneratedMessage {
-  static final $pb.BuilderInfo _i = new $pb.BuilderInfo('Empty')
-    ..hasRequiredFields = false
-  ;
-
-  Empty() : super();
-  Empty.fromBuffer(List<int> i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromBuffer(i, r);
-  Empty.fromJson(String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) : super.fromJson(i, r);
-  Empty clone() => new Empty()..mergeFromMessage(this);
-  Empty copyWith(void Function(Empty) updates) => super.copyWith((message) => updates(message as Empty));
-  $pb.BuilderInfo get info_ => _i;
-  static Empty create() => new Empty();
-  static $pb.PbList<Empty> createRepeated() => new $pb.PbList<Empty>();
-  static Empty getDefault() => _defaultInstance ??= create()..freeze();
-  static Empty _defaultInstance;
-  static void $checkItem(Empty v) {
-    if (v is! Empty) $pb.checkItemFailed(v, _i.qualifiedMessageName);
-  }
-}
-
-class TestApi {
-  $pb.RpcClient _client;
-  TestApi(this._client);
-
-  $async.Future<Empty> ping($pb.ClientContext ctx, Empty request) {
-    var emptyResponse = new Empty();
-    return _client.invoke<Empty>(ctx, 'Test', 'Ping', request, emptyResponse);
-  }
-}
-
diff --git a/test/goldens/service.pbserver b/test/goldens/service.pbserver
deleted file mode 100644
index cf1be0c..0000000
--- a/test/goldens/service.pbserver
+++ /dev/null
@@ -1,36 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-import 'dart:async' as $async;
-
-import 'package:protobuf/protobuf.dart';
-
-import 'test.pb.dart';
-import 'test.pbjson.dart';
-
-export 'test.pb.dart';
-
-abstract class TestServiceBase extends GeneratedService {
-  $async.Future<Empty> ping(ServerContext ctx, Empty request);
-
-  GeneratedMessage createRequest(String method) {
-    switch (method) {
-      case 'Ping': return new Empty();
-      default: throw new ArgumentError('Unknown method: $method');
-    }
-  }
-
-  $async.Future<GeneratedMessage> handleCall(ServerContext ctx, String method, GeneratedMessage request) {
-    switch (method) {
-      case 'Ping': return this.ping(ctx, request);
-      default: throw new ArgumentError('Unknown method: $method');
-    }
-  }
-
-  Map<String, dynamic> get $json => TestServiceBase$json;
-  Map<String, Map<String, dynamic>> get $messageJson => TestServiceBase$messageJson;
-}
-
diff --git a/test/goldens/serviceGenerator b/test/goldens/serviceGenerator
deleted file mode 100644
index f5eb2e9..0000000
--- a/test/goldens/serviceGenerator
+++ /dev/null
@@ -1,24 +0,0 @@
-abstract class TestServiceBase extends GeneratedService {
-  $async.Future<SomeReply> aMethod(ServerContext ctx, SomeRequest request);
-  $async.Future<$0.AnotherReply> anotherMethod(ServerContext ctx, $0.EmptyMessage request);
-
-  GeneratedMessage createRequest(String method) {
-    switch (method) {
-      case 'AMethod': return new SomeRequest();
-      case 'AnotherMethod': return new $0.EmptyMessage();
-      default: throw new ArgumentError('Unknown method: $method');
-    }
-  }
-
-  $async.Future<GeneratedMessage> handleCall(ServerContext ctx, String method, GeneratedMessage request) {
-    switch (method) {
-      case 'AMethod': return this.aMethod(ctx, request);
-      case 'AnotherMethod': return this.anotherMethod(ctx, request);
-      default: throw new ArgumentError('Unknown method: $method');
-    }
-  }
-
-  Map<String, dynamic> get $json => TestServiceBase$json;
-  Map<String, Map<String, dynamic>> get $messageJson => TestServiceBase$messageJson;
-}
-
diff --git a/test/goldens/serviceGenerator.pb.json b/test/goldens/serviceGenerator.pb.json
deleted file mode 100644
index 96cdc7a..0000000
--- a/test/goldens/serviceGenerator.pb.json
+++ /dev/null
@@ -1,31 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: testpkg.proto
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-import 'foobar.pbjson.dart' as $0;
-
-const SomeRequest$json = const {
-  '1': 'SomeRequest',
-};
-
-const SomeReply$json = const {
-  '1': 'SomeReply',
-};
-
-const TestServiceBase$json = const {
-  '1': 'Test',
-  '2': const [
-    const {'1': 'AMethod', '2': '.testpkg.SomeRequest', '3': '.testpkg.SomeReply'},
-    const {'1': 'AnotherMethod', '2': '.foo.bar.EmptyMessage', '3': '.foo.bar.AnotherReply'},
-  ],
-};
-
-const TestServiceBase$messageJson = const {
-  '.testpkg.SomeRequest': SomeRequest$json,
-  '.testpkg.SomeReply': SomeReply$json,
-  '.foo.bar.EmptyMessage': $0.EmptyMessage$json,
-  '.foo.bar.AnotherReply': $0.AnotherReply$json,
-};
-
diff --git a/test/goldens/topLevelEnum.pb b/test/goldens/topLevelEnum.pb
deleted file mode 100644
index bb968a8..0000000
--- a/test/goldens/topLevelEnum.pb
+++ /dev/null
@@ -1,11 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore: UNUSED_SHOWN_NAME
-import 'dart:core' show int, bool, double, String, List, Map, override;
-
-export 'test.pbenum.dart';
-
diff --git a/test/goldens/topLevelEnum.pbenum b/test/goldens/topLevelEnum.pbenum
deleted file mode 100644
index bb618eb..0000000
--- a/test/goldens/topLevelEnum.pbenum
+++ /dev/null
@@ -1,32 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-// ignore_for_file: UNDEFINED_SHOWN_NAME,UNUSED_SHOWN_NAME
-import 'dart:core' show int, dynamic, String, List, Map;
-import 'package:protobuf/protobuf.dart' as $pb;
-
-class PhoneType extends $pb.ProtobufEnum {
-  static const PhoneType MOBILE = const PhoneType._(0, 'MOBILE');
-  static const PhoneType HOME = const PhoneType._(1, 'HOME');
-  static const PhoneType WORK = const PhoneType._(2, 'WORK');
-
-  static const PhoneType BUSINESS = WORK;
-
-  static const List<PhoneType> values = const <PhoneType> [
-    MOBILE,
-    HOME,
-    WORK,
-  ];
-
-  static final Map<int, PhoneType> _byValue = $pb.ProtobufEnum.initByValue(values);
-  static PhoneType valueOf(int value) => _byValue[value];
-  static void $checkItem(PhoneType v) {
-    if (v is! PhoneType) $pb.checkItemFailed(v, 'PhoneType');
-  }
-
-  const PhoneType._(int v, String n) : super(v, n);
-}
-
diff --git a/test/goldens/topLevelEnum.pbjson b/test/goldens/topLevelEnum.pbjson
deleted file mode 100644
index 56520fd..0000000
--- a/test/goldens/topLevelEnum.pbjson
+++ /dev/null
@@ -1,16 +0,0 @@
-///
-//  Generated code. Do not modify.
-//  source: test
-///
-// ignore_for_file: non_constant_identifier_names,library_prefixes,unused_import
-
-const PhoneType$json = const {
-  '1': 'PhoneType',
-  '2': const [
-    const {'1': 'MOBILE', '2': 0},
-    const {'1': 'HOME', '2': 1},
-    const {'1': 'WORK', '2': 2},
-    const {'1': 'BUSINESS', '2': 2},
-  ],
-};
-
diff --git a/test/hash_code_test.dart b/test/hash_code_test.dart
deleted file mode 100644
index 36c2712..0000000
--- a/test/hash_code_test.dart
+++ /dev/null
@@ -1,172 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library hash_code_tests;
-
-import 'package:fixnum/fixnum.dart';
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-
-void main() {
-  test('testHashCodeEmptyMessage', () {
-    var m1 = new TestAllTypes();
-    var m2 = new TestAllTypes();
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeOptionalInt32', () {
-    var m1 = new TestAllTypes()..optionalInt32 = 42;
-    var m2 = new TestAllTypes()..optionalInt32 = 42;
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.optionalInt32 = 43;
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.optionalInt32 = 43;
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeOptionalInt64', () {
-    var m1 = new TestAllTypes()..optionalInt64 = new Int64(42);
-    var m2 = new TestAllTypes()..optionalInt64 = new Int64(42);
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.optionalInt64 = new Int64(43);
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.optionalInt64 = new Int64(43);
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeOptionalString', () {
-    var m1 = new TestAllTypes()..optionalString = "Dart";
-    var m2 = new TestAllTypes()..optionalString = "Dart";
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.optionalString = "JavaScript";
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.optionalString = "JavaScript";
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeOptionalEnum', () {
-    var m1 = new TestAllTypes()
-      ..optionalNestedEnum = TestAllTypes_NestedEnum.BAR;
-    var m2 = new TestAllTypes()
-      ..optionalNestedEnum = TestAllTypes_NestedEnum.BAR;
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.optionalNestedEnum = TestAllTypes_NestedEnum.BAZ;
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.optionalNestedEnum = TestAllTypes_NestedEnum.BAZ;
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeRepeatedInt32', () {
-    var m1 = new TestAllTypes();
-    var m2 = new TestAllTypes();
-    m1.repeatedInt32.add(42);
-    m2.repeatedInt32.add(42);
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeRepeatedInt64', () {
-    var m1 = new TestAllTypes();
-    var m2 = new TestAllTypes();
-    m1.repeatedInt32.add(42);
-    m2.repeatedInt32.add(42);
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.repeatedInt32.add(43);
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.repeatedInt32.add(43);
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.repeatedInt32.clear();
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.repeatedInt32.clear();
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeRepeatedString', () {
-    var m1 = new TestAllTypes();
-    var m2 = new TestAllTypes();
-    m1.repeatedString.add("Dart");
-    m2.repeatedString.add("Dart");
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.repeatedString.add("JavaScript");
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.repeatedString.add("JavaScript");
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.repeatedString.clear();
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.repeatedString.clear();
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeRepeatedEnum', () {
-    var m1 = new TestAllTypes();
-    var m2 = new TestAllTypes();
-    m1.repeatedNestedEnum.add(TestAllTypes_NestedEnum.BAR);
-    m2.repeatedNestedEnum.add(TestAllTypes_NestedEnum.BAR);
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.repeatedNestedEnum.add(TestAllTypes_NestedEnum.BAZ);
-    expect(m1.hashCode, isNot(m2.hashCode));
-
-    m2.repeatedNestedEnum.add(TestAllTypes_NestedEnum.BAZ);
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeUnknownFields', () {
-    var m1 = new TestAllTypes();
-    var m2 = new TestAllTypes();
-    m1.unknownFields.mergeVarintField(12345, new Int64(123));
-    m2.unknownFields.mergeVarintField(12345, new Int64(123));
-    expect(m1.hashCode, m2.hashCode);
-  });
-
-  test('testHashCodeCombined', () {
-    var m1 = new TestAllTypes()
-      ..optionalInt32 = 42
-      ..optionalInt64 = new Int64(42)
-      ..optionalString = "Dart"
-      ..optionalNestedEnum = TestAllTypes_NestedEnum.BAR;
-    var m2 = new TestAllTypes()
-      ..optionalInt32 = 42
-      ..optionalInt64 = new Int64(42)
-      ..optionalString = "Dart"
-      ..optionalNestedEnum = TestAllTypes_NestedEnum.BAR;
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.repeatedInt32..add(42)..add(43);
-    m2.repeatedInt32..add(42)..add(43);
-    m1.repeatedInt64..add(new Int64(42))..add(new Int64(43));
-    m2.repeatedInt64..add(new Int64(42))..add(new Int64(43));
-    m1.repeatedString..add("Dart")..add("JavaScript");
-    m2.repeatedString..add("Dart")..add("JavaScript");
-    m1.repeatedNestedEnum
-      ..add(TestAllTypes_NestedEnum.BAR)
-      ..add(TestAllTypes_NestedEnum.BAZ);
-    m2.repeatedNestedEnum
-      ..add(TestAllTypes_NestedEnum.BAR)
-      ..add(TestAllTypes_NestedEnum.BAZ);
-    expect(m1.hashCode, m2.hashCode);
-
-    m1.unknownFields.mergeVarintField(12345, new Int64(123));
-    m2.unknownFields.mergeVarintField(12345, new Int64(123));
-    expect(m1.hashCode, m2.hashCode);
-    expect(m1.hashCode, m2.hashCode);
-  });
-}
diff --git a/test/import_test.dart b/test/import_test.dart
deleted file mode 100644
index 02b57c8..0000000
--- a/test/import_test.dart
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library import_test;
-
-import 'package:test/test.dart';
-
-import '../out/protos/import_clash.pb.dart' as pb;
-import '../out/protos/foo.pb.dart' as foo;
-
-void main() {
-  test('Import prefixes in generated files do not clash with fields', () {
-    new pb.Clasher()..foo = new foo.Foo();
-  });
-}
diff --git a/test/indenting_writer_test.dart b/test/indenting_writer_test.dart
deleted file mode 100755
index 61f0427..0000000
--- a/test/indenting_writer_test.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library indenting_writer_test;
-
-import 'package:protoc_plugin/indenting_writer.dart';
-import 'package:test/test.dart';
-
-void main() {
-  test('IndentingWriter can indent a block', () {
-    var out = new IndentingWriter();
-    out.addBlock('class test {', '}', () {
-      out.println('first;');
-      out.println();
-      out.println('second;');
-    });
-
-    expect(out.toString(), '''
-class test {
-  first;
-
-  second;
-}
-''');
-  });
-}
diff --git a/test/json_test.dart b/test/json_test.dart
deleted file mode 100755
index e088614..0000000
--- a/test/json_test.dart
+++ /dev/null
@@ -1,146 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library json_test;
-
-import 'package:protobuf/protobuf.dart';
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-
-import 'test_util.dart';
-
-void main() {
-  final String TEST_ALL_TYPES_JSON = '{"1":101,"2":"102","3":103,"4":"104",'
-      '"5":105,"6":"106","7":107,"8":"108","9":109,"10":"110","11":111.0,'
-      '"12":112.0,"13":true,"14":"115","15":"MTE2","16":{"17":117},'
-      '"18":{"1":118},"19":{"1":119},"20":{"1":120},"21":3,"22":6,"23":9,'
-      '"24":"124","25":"125","31":[201,301],"32":["202","302"],'
-      '"33":[203,303],"34":["204","304"],"35":[205,305],"36":["206","306"],'
-      '"37":[207,307],"38":["208","308"],"39":[209,309],"40":["210","310"],'
-      '"41":[211.0,311.0],"42":[212.0,312.0],"43":[true,false],'
-      '"44":["215","315"],"45":["MjE2","MzE2"],"46":[{"47":217},{"47":317}],'
-      '"48":[{"1":218},{"1":318}],"49":[{"1":219},{"1":319}],'
-      '"50":[{"1":220},{"1":320}],"51":[2,3],"52":[5,6],"53":[8,9],'
-      '"54":["224","324"],"55":["225","325"],"61":401,"62":"402","63":403,'
-      '"64":"404","65":405,"66":"406","67":407,"68":"408","69":409,'
-      '"70":"410","71":411.0,"72":412.0,"73":false,"74":"415","75":"NDE2",'
-      '"81":1,"82":4,"83":7,"84":"424","85":"425"}';
-
-  /**
-   * Checks that message once serialized to JSON
-   * matches TEST_ALL_TYPES_JSON massaged with [:.replaceAll(from, to):].
-   */
-  expectedJson(from, to) {
-    var expectedJson = TEST_ALL_TYPES_JSON.replaceAll(from, to);
-    return predicate(
-        (message) => message.writeToJson() == expectedJson, 'Incorrect output');
-  }
-
-  test('testOutput', () {
-    expect(getAllSet().writeToJson(), TEST_ALL_TYPES_JSON);
-
-    // Test empty list.
-    expect(getAllSet()..repeatedBool.clear(),
-        expectedJson('"43":[true,false],', ''));
-
-    // Test negative number.
-    expect(getAllSet()..optionalInt32 = -1234567,
-        expectedJson(':101,', ':-1234567,'));
-
-    // All 64-bit numbers are quoted.
-    expect(getAllSet()..optionalInt64 = make64(0, 0x200000),
-        expectedJson(':"102",', ':"9007199254740992",'));
-    expect(getAllSet()..optionalInt64 = make64(1, 0x200000),
-        expectedJson(':"102",', ':"9007199254740993",'));
-    expect(getAllSet()..optionalInt64 = -make64(0, 0x200000),
-        expectedJson(':"102",', ':"-9007199254740992",'));
-    expect(getAllSet()..optionalInt64 = -make64(1, 0x200000),
-        expectedJson(':"102",', ':"-9007199254740993",'));
-
-    // Quotes, backslashes, and control characters in strings are quoted.
-    expect(getAllSet()..optionalString = 'a\u0000b\u0001cd\\e\"fg',
-        expectedJson(':"115",', ':"a\\u0000b\\u0001cd\\\\e\\"fg",'));
-  });
-
-  test('testBase64Encode', () {
-    expect(getAllSet()..optionalBytes = 'Hello, world'.codeUnits,
-        expectedJson(':"MTE2",', ':"SGVsbG8sIHdvcmxk",'));
-
-    expect(getAllSet()..optionalBytes = 'Hello, world!'.codeUnits,
-        expectedJson(':"MTE2",', ':"SGVsbG8sIHdvcmxkIQ==",'));
-
-    expect(getAllSet()..optionalBytes = 'Hello, world!!'.codeUnits,
-        expectedJson(':"MTE2",', ':"SGVsbG8sIHdvcmxkISE=",'));
-
-    // An empty list should not appear in the output.
-    expect(getAllSet()..optionalBytes = [], expectedJson('"15":"MTE2",', ''));
-
-    expect(getAllSet()..optionalBytes = 'a'.codeUnits,
-        expectedJson(':"MTE2",', ':"YQ==",'));
-  });
-
-  test('testBase64Decode', () {
-    optionalBytes(from, to) {
-      String json = TEST_ALL_TYPES_JSON.replaceAll(from, to);
-      return new String.fromCharCodes(
-          new TestAllTypes.fromJson(json).optionalBytes);
-    }
-
-    expect(optionalBytes(':"MTE2",', ':"SGVsbG8sIHdvcmxk",'), 'Hello, world');
-
-    expect(
-        optionalBytes(':"MTE2",', ':"SGVsbG8sIHdvcmxkIQ==",'), 'Hello, world!');
-
-    expect(optionalBytes(':"MTE2",', ':"SGVsbG8sIHdvcmxkISE=",'),
-        'Hello, world!!');
-
-    // Remove optionalBytes tag, reads back as empty list, hence empty string.
-    expect(optionalBytes('"15":"MTE2",', ''), isEmpty);
-
-    // Keep optionalBytes tag, set data to empty string, get back empty list.
-    expect(optionalBytes(':"MTE2",', ':"",'), isEmpty);
-
-    expect(optionalBytes(':"MTE2",', ':"YQ==",'), 'a');
-  });
-
-  test('testParse', () {
-    expect(new TestAllTypes.fromJson(TEST_ALL_TYPES_JSON), getAllSet());
-  });
-
-  test('testExtensionsOutput', () {
-    expect(getAllExtensionsSet().writeToJson(), TEST_ALL_TYPES_JSON);
-  });
-
-  test('testExtensionsParse', () {
-    ExtensionRegistry registry = getExtensionRegistry();
-    expect(new TestAllExtensions.fromJson(TEST_ALL_TYPES_JSON, registry),
-        getAllExtensionsSet());
-  });
-
-  test('testUnknownEnumValueInOptionalField', () {
-    // optional NestedEnum optional_nested_enum = 21;
-    var message = new TestAllTypes.fromJson('{"21": 4}');
-    // 4 is an unknown value.
-    expect(message.optionalNestedEnum, equals(TestAllTypes_NestedEnum.FOO));
-  });
-
-  test('testUnknownEnumValueInRepeatedField', () {
-    // repeated NestedEnum repeated_nested_enum = 51;
-    var message = new TestAllTypes.fromJson('{"51": [4]}');
-    // 4 is an unknown value.
-    expect(message.repeatedNestedEnum, isEmpty);
-
-    // 1 (FOO) and 2 (BAR) are known values.
-    message = new TestAllTypes.fromJson('{"51": [1, 4, 2, 4, 1, 4]}');
-    expect(
-        message.repeatedNestedEnum,
-        equals([
-          TestAllTypes_NestedEnum.FOO,
-          TestAllTypes_NestedEnum.BAR,
-          TestAllTypes_NestedEnum.FOO
-        ]));
-  });
-}
diff --git a/test/leading_underscores_test.dart b/test/leading_underscores_test.dart
deleted file mode 100644
index 8227542..0000000
--- a/test/leading_underscores_test.dart
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test/test.dart';
-import 'package:fixnum/fixnum.dart';
-
-import '../out/protos/_leading_underscores.pb.dart';
-
-void main() {
-  test('can set, read and clear all fields and refer to types', () {
-    A_ message = new A_();
-    message.setExtension(Leading_underscores_.p, Int64(99));
-    expect(message.getExtension(Leading_underscores_.p), Int64(99));
-    message.f = 'foo';
-    message.f_2 = 'foo2';
-    expect(message.f, 'foo');
-    expect(message.f_2, 'foo2');
-    message.clearF();
-    message.clearF_2();
-    expect(message.hasF(), false);
-    expect(message.hasF_2(), false);
-    expect(message.f, '');
-    expect(message.f_2, '');
-    A messageA = new A();
-    messageA.b = message;
-    messageA.b_6 = message;
-    expect(messageA.b_6, message);
-    messageA.amap['foo'] = message;
-    expect(messageA.amap['foo'], message);
-
-    messageA.e = Enum_.constant;
-    expect(messageA.e, Enum_.constant);
-    messageA.clearE();
-    expect(messageA.e, Enum_.constant_);
-    messageA.r.add(message);
-    expect(messageA.r, [message]);
-    messageA.setExtension(Leading_underscores_.q, Int64(100));
-    expect(messageA.getExtension(Leading_underscores_.q), Int64(100));
-
-    A__ a = A__()..foo = 'hi';
-    expect(a.foo, 'hi');
-  });
-}
diff --git a/test/map_field_test.dart b/test/map_field_test.dart
deleted file mode 100644
index 594250f..0000000
--- a/test/map_field_test.dart
+++ /dev/null
@@ -1,271 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library map_field_test;
-
-import 'dart:convert';
-
-import 'package:test/test.dart';
-
-import '../out/protos/map_field.pb.dart';
-
-void main() {
-  void _setValues(TestMap testMap) {
-    testMap
-      ..int32ToInt32Field[1] = 11
-      ..int32ToInt32Field[2] = 22
-      ..int32ToInt32Field[3] = 33
-      ..int32ToStringField[1] = '11'
-      ..int32ToStringField[2] = '22'
-      ..int32ToStringField[3] = '33'
-      ..int32ToBytesField[1] = utf8.encode('11')
-      ..int32ToBytesField[2] = utf8.encode('22')
-      ..int32ToBytesField[3] = utf8.encode('33')
-      ..int32ToEnumField[1] = TestMap_EnumValue.FOO
-      ..int32ToEnumField[2] = TestMap_EnumValue.BAR
-      ..int32ToEnumField[3] = TestMap_EnumValue.BAZ
-      ..int32ToMessageField[1] = (TestMap_MessageValue()..value = 11)
-      ..int32ToMessageField[2] = (TestMap_MessageValue()..value = 22)
-      ..int32ToMessageField[3] = (TestMap_MessageValue()..value = 33)
-      ..stringToInt32Field['1'] = 11
-      ..stringToInt32Field['2'] = 22
-      ..stringToInt32Field['3'] = 33;
-  }
-
-  void _updateValues(TestMap testMap) {
-    testMap
-      ..int32ToInt32Field[1] = 111
-      ..int32ToInt32Field.remove(2)
-      ..int32ToInt32Field[4] = 44
-      ..int32ToStringField[1] = '111'
-      ..int32ToStringField.remove(2)
-      ..int32ToStringField[4] = '44'
-      ..int32ToBytesField[1] = utf8.encode('111')
-      ..int32ToBytesField.remove(2)
-      ..int32ToBytesField[4] = utf8.encode('44')
-      ..int32ToEnumField[1] = TestMap_EnumValue.BAR
-      ..int32ToEnumField.remove(2)
-      ..int32ToEnumField[4] = TestMap_EnumValue.ZOP
-      ..int32ToMessageField[1] = (TestMap_MessageValue()..value = 111)
-      ..int32ToMessageField.remove(2)
-      ..int32ToMessageField[4] = (TestMap_MessageValue()..value = 44)
-      ..stringToInt32Field['1'] = 111
-      ..stringToInt32Field.remove('2')
-      ..stringToInt32Field['4'] = 44;
-  }
-
-  void _expectEmpty(TestMap testMap) {
-    expect(testMap.int32ToInt32Field, isEmpty);
-    expect(testMap.int32ToStringField, isEmpty);
-    expect(testMap.int32ToBytesField, isEmpty);
-    expect(testMap.int32ToEnumField, isEmpty);
-    expect(testMap.int32ToMessageField, isEmpty);
-    expect(testMap.stringToInt32Field, isEmpty);
-  }
-
-  void _expectMapValuesSet(TestMap testMap) {
-    expect(testMap.int32ToInt32Field[1], 11);
-    expect(testMap.int32ToInt32Field[2], 22);
-    expect(testMap.int32ToInt32Field[3], 33);
-
-    expect(testMap.int32ToStringField[1], '11');
-    expect(testMap.int32ToStringField[2], '22');
-    expect(testMap.int32ToStringField[3], '33');
-
-    expect(testMap.int32ToBytesField[1], utf8.encode('11'));
-    expect(testMap.int32ToBytesField[2], utf8.encode('22'));
-    expect(testMap.int32ToBytesField[3], utf8.encode('33'));
-
-    expect(testMap.int32ToEnumField[1], TestMap_EnumValue.FOO);
-    expect(testMap.int32ToEnumField[2], TestMap_EnumValue.BAR);
-    expect(testMap.int32ToEnumField[3], TestMap_EnumValue.BAZ);
-
-    expect(testMap.int32ToMessageField[1].value, 11);
-    expect(testMap.int32ToMessageField[2].value, 22);
-    expect(testMap.int32ToMessageField[3].value, 33);
-
-    expect(testMap.stringToInt32Field['1'], 11);
-    expect(testMap.stringToInt32Field['2'], 22);
-    expect(testMap.stringToInt32Field['3'], 33);
-  }
-
-  void _expectMapValuesUpdated(TestMap testMap) {
-    expect(testMap.int32ToInt32Field.length, 3);
-    expect(testMap.int32ToInt32Field[1], 111);
-    expect(testMap.int32ToInt32Field[3], 33);
-    expect(testMap.int32ToInt32Field[4], 44);
-
-    expect(testMap.int32ToStringField.length, 3);
-    expect(testMap.int32ToStringField[1], '111');
-    expect(testMap.int32ToStringField[3], '33');
-    expect(testMap.int32ToStringField[4], '44');
-
-    expect(testMap.int32ToBytesField.length, 3);
-    expect(testMap.int32ToBytesField[1], utf8.encode('111'));
-    expect(testMap.int32ToBytesField[3], utf8.encode('33'));
-    expect(testMap.int32ToBytesField[4], utf8.encode('44'));
-
-    expect(testMap.int32ToEnumField.length, 3);
-    expect(testMap.int32ToEnumField[1], TestMap_EnumValue.BAR);
-    expect(testMap.int32ToEnumField[3], TestMap_EnumValue.BAZ);
-    expect(testMap.int32ToEnumField[4], TestMap_EnumValue.ZOP);
-
-    expect(testMap.int32ToMessageField.length, 3);
-    expect(testMap.int32ToMessageField[1].value, 111);
-    expect(testMap.int32ToMessageField[3].value, 33);
-    expect(testMap.int32ToMessageField[4].value, 44);
-
-    expect(testMap.stringToInt32Field.length, 3);
-    expect(testMap.stringToInt32Field['1'], 111);
-    expect(testMap.stringToInt32Field['3'], 33);
-    expect(testMap.stringToInt32Field['4'], 44);
-  }
-
-  test('set and clear values', () {
-    TestMap testMap = TestMap();
-    _expectEmpty(testMap);
-
-    _setValues(testMap);
-    _expectMapValuesSet(testMap);
-
-    testMap.clear();
-    _expectEmpty(testMap);
-  });
-
-  test('update map values', () {
-    TestMap testMap = TestMap();
-    _setValues(testMap);
-    _updateValues(testMap);
-    _expectMapValuesUpdated(testMap);
-  });
-
-  test('null keys and value are not allowed', () {
-    TestMap testMap = TestMap();
-
-    try {
-      testMap.stringToInt32Field[null] = 1;
-      fail('Should have thrown an exception.');
-    } on ArgumentError catch (e) {
-      expect(e.message, "Can't add a null to a map field");
-    }
-
-    try {
-      testMap.int32ToBytesField[1] = null;
-      fail('Should have thrown an exception.');
-    } on ArgumentError catch (e) {
-      expect(e.message, "Can't add a null to a map field");
-    }
-
-    try {
-      testMap.int32ToStringField[1] = null;
-      fail('Should have thrown an exception.');
-    } on ArgumentError catch (e) {
-      expect(e.message, "Can't add a null to a map field");
-    }
-
-    try {
-      testMap.int32ToEnumField[1] = null;
-      fail('Should have thrown an exception.');
-    } on ArgumentError catch (e) {
-      expect(e.message, "Can't add a null to a map field");
-    }
-
-    try {
-      testMap.int32ToMessageField[1] = null;
-      fail('Should have thrown an exception.');
-    } on ArgumentError catch (e) {
-      expect(e.message, "Can't add a null to a map field");
-    }
-  });
-
-  test('Serialize and parse map', () {
-    TestMap testMap = TestMap();
-    _setValues(testMap);
-
-    testMap = TestMap.fromBuffer(testMap.writeToBuffer());
-    _expectMapValuesSet(testMap);
-
-    _updateValues(testMap);
-    testMap = TestMap.fromBuffer(testMap.writeToBuffer());
-    _expectMapValuesUpdated(testMap);
-
-    testMap.clear();
-    testMap = TestMap.fromBuffer(testMap.writeToBuffer());
-    _expectEmpty(testMap);
-  });
-
-  test('json serialize map', () {
-    TestMap testMap = TestMap();
-    _setValues(testMap);
-
-    testMap = TestMap.fromJson(testMap.writeToJson());
-    _expectMapValuesSet(testMap);
-
-    _updateValues(testMap);
-    testMap = TestMap.fromJson(testMap.writeToJson());
-    _expectMapValuesUpdated(testMap);
-
-    testMap.clear();
-    testMap = TestMap.fromJson(testMap.writeToJson());
-    _expectEmpty(testMap);
-  });
-
-  test('merge from other message', () {
-    TestMap testMap = TestMap();
-    _setValues(testMap);
-
-    TestMap other = TestMap();
-    other.mergeFromMessage(testMap);
-    _expectMapValuesSet(other);
-
-    testMap = TestMap()
-      ..int32ToMessageField[1] = (TestMap_MessageValue()..value = 42)
-      ..int32ToMessageField[2] = (TestMap_MessageValue()..value = 44);
-    other = TestMap()
-      ..int32ToMessageField[1] = (TestMap_MessageValue()..secondValue = 43);
-    testMap.mergeFromMessage(other);
-
-    expect(testMap.int32ToMessageField[1].value, 0);
-    expect(testMap.int32ToMessageField[1].secondValue, 43);
-    expect(testMap.int32ToMessageField[2].value, 44);
-  });
-
-  test('parse duplicate keys', () {
-    TestMap testMap = TestMap()..int32ToStringField[1] = 'foo';
-    TestMap testMap2 = TestMap()..int32ToStringField[1] = 'bar';
-
-    TestMap merge = TestMap.fromBuffer(
-        []..addAll(testMap.writeToBuffer())..addAll(testMap2.writeToBuffer()));
-
-    // When parsing from the wire, if there are duplicate map keys the last key
-    // seen should be used.
-    expect(merge.int32ToStringField.length, 1);
-    expect(merge.int32ToStringField[1], 'bar');
-  });
-
-  // TODO(zarah): remove skip once https://github.com/dart-lang/protobuf/issues/139 is fixed.
-  test('Deep merge from other message', () {
-    Inner i1 = Inner()..innerMap['a'] = 'a';
-    Inner i2 = Inner()..innerMap['b'] = 'b';
-
-    Outer o1 = Outer()..i = i1;
-    Outer o2 = Outer()..i = i2;
-
-    o1.mergeFromMessage(o2);
-    expect(o1.i.innerMap.length, 2);
-  }, skip: true);
-
-  test('retain explicit default values of sub-messages', () {
-    TestMap testMap = TestMap()
-      ..int32ToMessageField[1] = TestMap_MessageValue();
-    expect(testMap.int32ToMessageField[1].secondValue, 42);
-
-    TestMap testMap2 = TestMap()
-      ..int32ToMessageField[2] = TestMap_MessageValue();
-
-    testMap.mergeFromBuffer(testMap2.writeToBuffer());
-    expect(testMap.int32ToMessageField[2].secondValue, 42);
-  });
-}
diff --git a/test/map_test.dart b/test/map_test.dart
deleted file mode 100644
index b5837c7..0000000
--- a/test/map_test.dart
+++ /dev/null
@@ -1,151 +0,0 @@
-library map_test;
-
-import 'package:test/test.dart'
-    show test, expect, predicate, same, throwsA, throwsArgumentError;
-
-import '../out/protos/map_api.pb.dart' as pb;
-import '../out/protos/map_api2.pb.dart' as pb2;
-
-throwsError(Type expectedType, String expectedMessage) =>
-    throwsA(predicate((x) {
-      expect(x.runtimeType, expectedType);
-      expect(x.message, expectedMessage);
-      return true;
-    }));
-
-void main() {
-  test("message doesn't implement Map when turned off", () {
-    expect(new pb.NonMap(), predicate((x) => x is! Map));
-    expect(new pb2.NonMap2(), predicate((x) => x is! Map));
-  });
-
-  test("message implements Map when turned on", () {
-    expect(new pb.Rec(), predicate((x) => x is Map));
-    expect(new pb2.Rec2(), predicate((x) => x is Map));
-  });
-
-  test('operator [] returns null for unrecognized keys', () {
-    var rec = new pb.Rec();
-    expect(rec["noSuchField"], null);
-    expect(rec[1234], null);
-    expect(rec[null], null);
-  });
-
-  test('operator [] returns default value when not set', () {
-    var rec = new pb.Rec();
-    expect(rec["num"], 0);
-    expect(rec["nums"], []);
-    expect(rec["str"], "");
-    expect(rec["msg"], predicate((x) => x is pb.NonMap));
-  });
-
-  test('operator [] returns new value when set', () {
-    var rec = new pb.Rec();
-    rec.num = 42;
-    expect(rec["num"], 42);
-    rec.nums.add(123);
-    expect(rec["nums"], [123]);
-    rec.str = "hello";
-    expect(rec["str"], "hello");
-    var msg = new pb.NonMap();
-    rec.msg = msg;
-    expect(rec["msg"], same(msg));
-  });
-
-  test('operator []= throws exception for invalid key', () {
-    var rec = new pb.Rec();
-    expect(() {
-      rec["unknown"] = 123;
-    },
-        throwsError(ArgumentError,
-            "field 'unknown' not found in protobuf_unittest.Rec"));
-  });
-
-  test('operator []= throws exception for repeated field', () {
-    // Copying the values would be confusing.
-    var rec = new pb.Rec();
-    expect(() {
-      rec["nums"] = [1, 2];
-    }, throwsArgumentError);
-  });
-
-  test('operator []= throws exception for invalid value type', () {
-    var rec = new pb.Rec();
-    expect(() {
-      rec["num"] = "hello";
-    }, throwsArgumentError);
-    expect(() {
-      rec["str"] = 123;
-    }, throwsArgumentError);
-  });
-
-  test('operator []= sets the field', () {
-    var rec = new pb.Rec();
-    rec["num"] = 123;
-    expect(rec.num, 123);
-    rec["str"] = "hello";
-    expect(rec.str, "hello");
-  });
-
-  test('keys returns each field name (even when unset)', () {
-    var rec = new pb.Rec();
-    expect(new Set.from(rec.keys), new Set.from(["msg", "num", "nums", "str"]));
-  });
-
-  test('containsKey returns true for fields that exist (even when unset)', () {
-    var rec = new pb.Rec();
-    expect(rec.containsKey("unknown"), false);
-    expect(rec.containsKey("str"), true);
-    expect(rec.containsKey("num"), true);
-    expect(rec.containsKey("nums"), true);
-    expect(rec.containsKey("msg"), true);
-  });
-
-  test('length is constant', () {
-    var rec = new pb.Rec();
-    expect(rec.length, 4);
-    rec.str = "hello";
-    expect(rec.length, 4);
-  });
-
-  test("remove isn't supported", () {
-    var rec = new pb.Rec();
-    rec.str = "hello";
-    expect(() {
-      rec.remove("str");
-    },
-        throwsError(UnsupportedError,
-            "remove() not supported by protobuf_unittest.Rec"));
-    expect(rec.str, "hello");
-  });
-
-  test("clear sets each field to its default value (unlike a regular Map)", () {
-    // We have little choice here since the clear() method already existed.
-    var rec = new pb.Rec();
-    rec.str = "hello";
-    rec.num = 123;
-    rec.nums.add(456);
-    rec.clear();
-    expect(rec.length, 4);
-    expect(rec["str"], "");
-    expect(rec["num"], 0);
-    expect(rec["nums"], []);
-  });
-
-  test("addAll sets each field to a new value", () {
-    var rec = new pb.Rec();
-    rec.addAll({"str": "hello", "num": 123});
-    expect(rec["str"], "hello");
-    expect(rec["num"], 123);
-  });
-
-  test("addAll doesn't work for repeated fields", () {
-    // It would be confusing to copy the values.
-    var rec = new pb.Rec();
-    expect(() {
-      rec.addAll({
-        "nums": [1, 2, 3]
-      });
-    }, throwsArgumentError);
-  });
-}
diff --git a/test/message_generator_test.dart b/test/message_generator_test.dart
deleted file mode 100755
index 70b0341..0000000
--- a/test/message_generator_test.dart
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library message_generator_test;
-
-import 'package:protoc_plugin/indenting_writer.dart';
-import 'package:protoc_plugin/protoc.dart';
-import 'package:test/test.dart';
-
-import 'package:protoc_plugin/src/descriptor.pb.dart';
-import 'package:protoc_plugin/src/plugin.pb.dart';
-
-import 'golden_file.dart';
-
-void main() {
-  test('testMessageGenerator', () {
-    FileDescriptorProto fd = new FileDescriptorProto();
-    EnumDescriptorProto ed = new EnumDescriptorProto()
-      ..name = 'PhoneType'
-      ..value.addAll([
-        new EnumValueDescriptorProto()
-          ..name = 'MOBILE'
-          ..number = 0,
-        new EnumValueDescriptorProto()
-          ..name = 'HOME'
-          ..number = 1,
-        new EnumValueDescriptorProto()
-          ..name = 'WORK'
-          ..number = 2,
-        new EnumValueDescriptorProto()
-          ..name = 'BUSINESS'
-          ..number = 2
-      ]);
-    DescriptorProto md = new DescriptorProto()
-      ..name = 'PhoneNumber'
-      ..field.addAll([
-        // optional PhoneType type = 2 [default = HOME];
-        new FieldDescriptorProto()
-          ..name = 'type'
-          ..number = 2
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = FieldDescriptorProto_Type.TYPE_ENUM
-          ..typeName = '.PhoneNumber.PhoneType',
-        // required string number = 1;
-        new FieldDescriptorProto()
-          ..name = 'number'
-          ..number = 1
-          ..label = FieldDescriptorProto_Label.LABEL_REQUIRED
-          ..type = FieldDescriptorProto_Type.TYPE_STRING,
-        new FieldDescriptorProto()
-          ..name = 'name'
-          ..number = 3
-          ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-          ..type = FieldDescriptorProto_Type.TYPE_STRING
-          ..defaultValue = r'$'
-      ])
-      ..enumType.add(ed);
-    var options = parseGenerationOptions(
-        new CodeGeneratorRequest(), new CodeGeneratorResponse());
-
-    FileGenerator fg = new FileGenerator(fd, options);
-    MessageGenerator mg =
-        new MessageGenerator(md, fg, {}, null, new Set<String>());
-
-    var ctx = new GenerationContext(options);
-    mg.register(ctx);
-    mg.resolve(ctx);
-
-    var writer = new IndentingWriter();
-    mg.generate(writer);
-    expectMatchesGoldenFile(writer.toString(), 'test/goldens/messageGenerator');
-
-    writer = new IndentingWriter();
-    mg.generateEnums(writer);
-    expectMatchesGoldenFile(
-        writer.toString(), 'test/goldens/messageGeneratorEnums');
-  });
-}
diff --git a/test/message_test.dart b/test/message_test.dart
deleted file mode 100755
index 7a933ab..0000000
--- a/test/message_test.dart
+++ /dev/null
@@ -1,256 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library message_test;
-
-import 'package:protoc_plugin/src/descriptor.pb.dart' show DescriptorProto;
-import 'package:test/test.dart';
-
-import 'test_util.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-import '../out/protos/google/protobuf/unittest.pbjson.dart';
-
-void main() {
-  TestRequired TEST_REQUIRED_UNINITIALIZED = new TestRequired();
-
-  TestRequired TEST_REQUIRED_INITIALIZED = new TestRequired()
-    ..a = 1
-    ..b = 2
-    ..c = 3;
-
-  test('testMergeFrom', () {
-    TestAllTypes mergeSource = new TestAllTypes()
-      ..optionalInt32 = 1
-      ..optionalString = 'foo'
-      ..optionalForeignMessage = new ForeignMessage()
-      ..repeatedString.add('bar');
-
-    TestAllTypes mergeDest = new TestAllTypes()
-      ..optionalInt64 = make64(2)
-      ..optionalString = 'baz'
-      ..optionalForeignMessage = new ForeignMessage()
-      ..optionalForeignMessage = (new ForeignMessage()..c = 3)
-      ..repeatedString.add('qux');
-
-    String mergeResultExpected = '''
-optionalInt32: 1
-optionalInt64: 2
-optionalString: baz
-optionalForeignMessage: {
-  c: 3
-}
-repeatedString: bar
-repeatedString: qux
-''';
-
-    TestAllTypes result = new TestAllTypes()
-      ..mergeFromMessage(mergeSource)
-      ..mergeFromMessage(mergeDest);
-
-    expect(result.toString(), mergeResultExpected);
-  });
-
-  test('testRequired', () {
-    TestRequired message = new TestRequired();
-
-    expect(message.isInitialized(), isFalse, reason: 'no required fields set');
-    message.a = 1;
-    expect(message.isInitialized(), isFalse,
-        reason: 'single required field set');
-    message.b = 1;
-    expect(message.isInitialized(), isFalse,
-        reason: 'all but one required field set');
-    message.c = 1;
-    expect(message.isInitialized(), isTrue, reason: 'required fields set');
-  });
-
-  test('testRequiredForeign', () {
-    TestRequiredForeign message = new TestRequiredForeign();
-    expect(message.isInitialized(), isTrue,
-        reason: 'TestRequiredForeign without children should be initialized');
-
-    message.optionalMessage = TEST_REQUIRED_UNINITIALIZED;
-    expect(message.isInitialized(), isFalse,
-        reason: 'TestRequiredForeign with optional TEST_REQUIRED_UNINITIALIZED '
-            'should not be initialized');
-
-    message.optionalMessage = TEST_REQUIRED_INITIALIZED;
-    expect(message.isInitialized(), isTrue,
-        reason: 'TestRequiredForeign with optional TEST_REQUIRED_INITIALIZED '
-            'should be initialized');
-
-    message.repeatedMessage.add(TEST_REQUIRED_UNINITIALIZED);
-    expect(message.isInitialized(), isFalse,
-        reason:
-            'TestRequiredForeign with repeating TEST_REQUIRED_UNINITIALIZED '
-            'should not be initialized');
-
-    message.repeatedMessage[0] = TEST_REQUIRED_INITIALIZED;
-    expect(message.isInitialized(), isTrue,
-        reason: 'TestRequiredForeign with repeating TEST_REQUIRED_INITIALIZED '
-            'should be initialized');
-  });
-
-  test('testRequiredExtension', () {
-    TestAllExtensions message = new TestAllExtensions();
-    expect(message.isInitialized(), isTrue);
-
-    message.setExtension(TestRequired.single, TEST_REQUIRED_UNINITIALIZED);
-    expect(message.isInitialized(), isFalse);
-
-    message.setExtension(TestRequired.single, TEST_REQUIRED_INITIALIZED);
-    expect(message.isInitialized(), isTrue);
-
-    message.addExtension(TestRequired.multi, TEST_REQUIRED_UNINITIALIZED);
-    expect(message.isInitialized(), isFalse);
-
-    message.getExtension(TestRequired.multi)[0] = TEST_REQUIRED_INITIALIZED;
-    expect(message.isInitialized(), isTrue);
-  });
-
-  test('testUninitializedException', () {
-    try {
-      new TestRequired().check();
-      fail('Should have thrown an exception.');
-    } on StateError catch (e) {
-      expect(e.message, 'Message missing required fields: a, b, c');
-    }
-  });
-
-  test('testBuildPartial', () {
-    // We're mostly testing that no exception is thrown.
-    TestRequired message = new TestRequired();
-    expect(message.isInitialized(), isFalse);
-  });
-
-  test('testNestedUninitializedException', () {
-    try {
-      TestRequiredForeign message = new TestRequiredForeign();
-      message.optionalMessage = TEST_REQUIRED_UNINITIALIZED;
-      message.repeatedMessage.add(TEST_REQUIRED_UNINITIALIZED);
-      message.repeatedMessage.add(TEST_REQUIRED_UNINITIALIZED);
-      message.check();
-      fail('Should have thrown an exception.');
-    } on StateError catch (e) {
-      // NOTE: error message differs from Java in that
-      // fields are referenced using Dart fieldnames r.t.
-      // proto field names.
-      expect(
-          e.message,
-          'Message missing required fields: '
-          'optionalMessage.a, '
-          'optionalMessage.b, '
-          'optionalMessage.c, '
-          'repeatedMessage[0].a, '
-          'repeatedMessage[0].b, '
-          'repeatedMessage[0].c, '
-          'repeatedMessage[1].a, '
-          'repeatedMessage[1].b, '
-          'repeatedMessage[1].c');
-    }
-  });
-
-  test('testBuildNestedPartial', () {
-    // We're mostly testing that no exception is thrown.
-    TestRequiredForeign message = new TestRequiredForeign();
-    message.optionalMessage = TEST_REQUIRED_UNINITIALIZED;
-    message.repeatedMessage.add(TEST_REQUIRED_UNINITIALIZED);
-    message.repeatedMessage.add(TEST_REQUIRED_UNINITIALIZED);
-    expect(message.isInitialized(), isFalse);
-  });
-
-  test('testParseUnititialized', () {
-    try {
-      (new TestRequired.fromBuffer([])).check();
-      fail('Should have thrown an exception.');
-    } on StateError catch (e) {
-      expect(e.message, 'Message missing required fields: a, b, c');
-    }
-  });
-
-  test('testParseNestedUnititialized', () {
-    TestRequiredForeign message = new TestRequiredForeign();
-    message.optionalMessage = TEST_REQUIRED_UNINITIALIZED;
-    message.repeatedMessage.add(TEST_REQUIRED_UNINITIALIZED);
-    message.repeatedMessage.add(TEST_REQUIRED_UNINITIALIZED);
-    List<int> buffer = message.writeToBuffer();
-
-    try {
-      (new TestRequiredForeign.fromBuffer(buffer)).check();
-      fail('Should have thrown an exception.');
-    } on StateError catch (e) {
-      // NOTE: error message differs from Java in that
-      // fields are referenced using Dart fieldnames r.t.
-      // proto field names.
-      expect(
-          e.message,
-          'Message missing required fields: '
-          'optionalMessage.a, '
-          'optionalMessage.b, '
-          'optionalMessage.c, '
-          'repeatedMessage[0].a, '
-          'repeatedMessage[0].b, '
-          'repeatedMessage[0].c, '
-          'repeatedMessage[1].a, '
-          'repeatedMessage[1].b, '
-          'repeatedMessage[1].c');
-    }
-  });
-
-  test('testClearField', () {
-    int fieldNo;
-    TestAllTypes message = new TestAllTypes();
-
-    // Singular field with no default.
-    fieldNo = 1;
-    expect(message.hasField(fieldNo), isFalse);
-    expect(message.getField(fieldNo), 0);
-    message.clearField(fieldNo);
-    expect(message.hasField(fieldNo), isFalse);
-    message.setField(fieldNo, 0);
-    expect(message.getField(fieldNo), 0);
-    expect(message.hasField(fieldNo), isTrue);
-    message.clearField(fieldNo);
-    expect(message.hasField(fieldNo), isFalse);
-
-    // Repeated field.
-    fieldNo = 31;
-    expect(message.hasField(fieldNo), isFalse);
-    message.getField(fieldNo).add(1);
-    expect(message.hasField(fieldNo), isTrue);
-
-    // Singular field with default.
-    fieldNo = 61;
-    expect(message.hasField(fieldNo), isFalse);
-    expect(message.getField(fieldNo), 41);
-    message.clearField(fieldNo);
-    message.setField(fieldNo, 41);
-    expect(message.hasField(fieldNo), isTrue);
-    message.setField(fieldNo, 42);
-    expect(message.hasField(fieldNo), isTrue);
-    expect(message.getField(fieldNo), 42);
-    message.clearField(fieldNo);
-    expect(message.hasField(fieldNo), isFalse);
-    expect(message.getField(fieldNo), 41);
-  });
-
-  test('JSON constants share structure', () {
-    const nestedTypeTag = 3;
-    List fields = TestAllTypes$json['$nestedTypeTag'];
-    expect(fields[0], same(TestAllTypes_NestedMessage$json));
-
-    const enumTypeTag = 4;
-    fields = TestAllTypes$json['$enumTypeTag'];
-    expect(fields[0], same(TestAllTypes_NestedEnum$json));
-  });
-
-  test('Can read JSON constant into DescriptorProto', () {
-    var d = new DescriptorProto()..mergeFromJsonMap(TestAllTypes$json);
-    expect(d.name, "TestAllTypes");
-    expect(d.field[0].name, "optional_int32");
-    expect(d.nestedType[0].name, "NestedMessage");
-  });
-}
diff --git a/test/mixin_test.dart b/test/mixin_test.dart
deleted file mode 100644
index 2e8c789..0000000
--- a/test/mixin_test.dart
+++ /dev/null
@@ -1,67 +0,0 @@
-import 'package:test/test.dart';
-
-import '../out/protos/mixins.pb.dart' as pb;
-import 'package:protoc_plugin/testing/mixins.dart';
-
-void main() {
-  group('Proto with Mixin1', () {
-    pb.Mixin1PB proto;
-
-    setUp(() {
-      proto = new pb.Mixin1PB();
-    });
-
-    test('is a Mixin1', () {
-      expect(proto is Mixin1, isTrue);
-      expect(proto is Mixin2, isFalse);
-    });
-
-    test('implements interface defined by mixins', () {
-      proto.interfaceString = 'test';
-      expect(proto.hasInterfaceString(), isTrue);
-      expect(proto.interfaceString, equals('test'));
-    });
-  });
-
-  group('Proto with Mixin2', () {
-    pb.Mixin2PB proto;
-
-    setUp(() {
-      proto = new pb.Mixin2PB();
-    });
-
-    test('overrides has method', () {
-      expect(proto.hasOverriddenHasMethod(), isFalse);
-      proto.overriddenHasMethod = 'test';
-
-      expect(proto.hasOverriddenHasMethod(), isTrue);
-    });
-  });
-
-  group('Proto without mixins', () {
-    pb.NoMixinPB proto;
-
-    setUp(() {
-      proto = new pb.NoMixinPB();
-    });
-
-    test('is neither Mixin1 nor Mixin2', () {
-      expect(proto is Mixin1, isFalse);
-      expect(proto is Mixin2, isFalse);
-    });
-  });
-
-  group('Proto with Mixin3', () {
-    pb.Mixin3PB proto;
-
-    setUp(() {
-      proto = new pb.Mixin3PB();
-    });
-
-    test('is both Mixin1 (from parent) and Mixin3', () {
-      expect(proto is Mixin1, isTrue);
-      expect(proto is Mixin2, isFalse);
-      expect(proto is Mixin3, isTrue);
-    });
-  });
-}
diff --git a/test/names_test.dart b/test/names_test.dart
deleted file mode 100644
index 667d11d..0000000
--- a/test/names_test.dart
+++ /dev/null
@@ -1,154 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library dart_name_test;
-
-import 'package:test/test.dart';
-import 'package:protoc_plugin/names.dart' as names;
-import 'package:protoc_plugin/src/descriptor.pb.dart';
-import 'package:protoc_plugin/src/dart_options.pb.dart';
-
-import '../out/protos/dart_name.pb.dart' as pb;
-
-Matcher throwsMessage(String msg) => throwsA(new _ToStringMatcher(equals(msg)));
-
-class _ToStringMatcher extends CustomMatcher {
-  _ToStringMatcher(Matcher matcher)
-      : super("object where toString() returns", "toString()", matcher);
-  featureValueOf(actual) => actual.toString();
-}
-
-void main() {
-  test('Can access a field that was renamed using dart_name option', () {
-    var msg = new pb.DartName();
-    expect(msg.hasRenamedField(), false);
-    msg.renamedField = 'test';
-    expect(msg.hasRenamedField(), true);
-    expect(msg.renamedField, 'test');
-    msg.clearRenamedField();
-    expect(msg.hasRenamedField(), false);
-  });
-
-  test('Can swap field names using dart_name option', () {
-    var msg = new pb.SwapNames();
-    msg.first = "one";
-    msg.second = "two";
-    expect(msg.getField(1), "two");
-    expect(msg.getField(2), "one");
-  });
-
-  test("Can take another field's name using dart_name option", () {
-    var msg = new pb.TakeExistingName();
-    msg.first = "one";
-    expect(msg.getField(2), "one");
-    msg.first_1 = "renamed";
-    expect(msg.getField(1), "renamed");
-  });
-
-  test('Throws exception for dart_name option containing a space', () {
-    var descriptor = new DescriptorProto()
-      ..name = 'Example'
-      ..field.add(stringField("first", 1, "hello world"));
-    expect(() {
-      names.messageFieldNames(descriptor);
-    },
-        throwsMessage("Example.first: dart_name option is invalid: "
-            "'hello world' is not a valid Dart field name"));
-  });
-
-  test('Throws exception for dart_name option set to reserved word', () {
-    var descriptor = new DescriptorProto()
-      ..name = 'Example'
-      ..field.add(stringField("first", 1, "class"));
-    expect(() {
-      names.messageFieldNames(descriptor);
-    },
-        throwsMessage("Example.first: "
-            "dart_name option is invalid: 'class' is already used"));
-  });
-
-  test('Throws exception for duplicate dart_name options', () {
-    var descriptor = new DescriptorProto()
-      ..name = 'Example'
-      ..field.addAll([
-        stringField("first", 1, "renamed"),
-        stringField("second", 2, "renamed"),
-      ]);
-    expect(() {
-      names.messageFieldNames(descriptor);
-    },
-        throwsMessage("Example.second: "
-            "dart_name option is invalid: 'renamed' is already used"));
-  });
-
-  test('message classes renamed to avoid Function keyword', () {
-    new pb.Function_()..fun = 'renamed';
-    new pb.Function__()..fun1 = 'also renamed';
-  });
-
-  test('disambiguateName', () {
-    Iterable<String> oneTwoThree() sync* {
-      yield* ['_one', '_two', '_three'];
-    }
-
-    {
-      final used = Set<String>.from(['moo']);
-      expect(names.disambiguateName('foo', used, oneTwoThree()), 'foo');
-      expect(used, Set<String>.from(['moo', 'foo']));
-    }
-    {
-      final used = Set<String>.from(['foo']);
-      expect(names.disambiguateName('foo', used, oneTwoThree()), 'foo_one');
-      expect(used, Set<String>.from(['foo', 'foo_one']));
-    }
-    {
-      final used = Set<String>.from(['foo', 'foo_one']);
-      expect(names.disambiguateName('foo', used, oneTwoThree()), 'foo_two');
-      expect(used, Set<String>.from(['foo', 'foo_one', 'foo_two']));
-    }
-
-    {
-      List<String> variants(String s) {
-        return ['a_' + s, 'b_' + s];
-      }
-
-      final used = Set<String>.from(['a_foo', 'b_foo_one']);
-      expect(
-          names.disambiguateName('foo', used, oneTwoThree(),
-              generateVariants: variants),
-          'foo_two');
-      expect(used,
-          Set<String>.from(['a_foo', 'b_foo_one', 'a_foo_two', 'b_foo_two']));
-    }
-  });
-
-  test('avoidInitialUnderscore', () {
-    expect(names.avoidInitialUnderscore('foo'), 'foo');
-    expect(names.avoidInitialUnderscore('foo_'), 'foo_');
-    expect(names.avoidInitialUnderscore('_foo'), 'foo_');
-    expect(names.avoidInitialUnderscore('__foo'), 'foo__');
-  });
-
-  test('legalDartIdentifier', () {
-    expect(names.legalDartIdentifier("foo"), "foo");
-    expect(names.legalDartIdentifier("_foo"), "_foo");
-    expect(names.legalDartIdentifier("-foo"), "_foo");
-    expect(names.legalDartIdentifier("foo.\$a{b}c(d)e_"), "foo_\$a_b_c_d_e_");
-  });
-
-  test('defaultSuffixes', () {
-    expect(names.defaultSuffixes().take(5).toList(),
-        ['_', '_0', '_1', '_2', '_3']);
-  });
-}
-
-FieldDescriptorProto stringField(String name, int number, String dartName) {
-  return new FieldDescriptorProto()
-    ..name = name
-    ..number = number
-    ..label = FieldDescriptorProto_Label.LABEL_OPTIONAL
-    ..type = FieldDescriptorProto_Type.TYPE_STRING
-    ..options =
-        (new FieldOptions()..setExtension(Dart_options.dartName, dartName));
-}
diff --git a/test/protoc_options_test.dart b/test/protoc_options_test.dart
deleted file mode 100644
index 8f531fc..0000000
--- a/test/protoc_options_test.dart
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library protoc_options_test;
-
-import 'package:protoc_plugin/src/plugin.pb.dart';
-import 'package:protoc_plugin/protoc.dart';
-import 'package:test/test.dart';
-
-void main() {
-  test('testValidGeneratorOptions', () {
-    checkValid(String parameter) {
-      var request = new CodeGeneratorRequest();
-      if (parameter != null) request.parameter = parameter;
-      var response = new CodeGeneratorResponse();
-      var options = parseGenerationOptions(request, response);
-      expect(options, new TypeMatcher<GenerationOptions>());
-      expect(response.error, '');
-    }
-
-    checkValid(null);
-    checkValid('');
-    checkValid(',');
-    checkValid(',,,');
-    checkValid('  , , ,');
-  });
-
-  test('testInvalidGeneratorOptions', () {
-    checkInvalid(String parameter) {
-      var request = new CodeGeneratorRequest();
-      if (parameter != null) request.parameter = parameter;
-      var response = new CodeGeneratorResponse();
-      var options = parseGenerationOptions(request, response);
-      expect(options, isNull);
-    }
-
-    checkInvalid('abc');
-    checkInvalid('abc,def');
-  });
-}
diff --git a/test/protos/ExtensionEnumNameConflict.proto b/test/protos/ExtensionEnumNameConflict.proto
deleted file mode 100644
index e26f8d0..0000000
--- a/test/protos/ExtensionEnumNameConflict.proto
+++ /dev/null
@@ -1,16 +0,0 @@
-syntax = "proto2";
-
-package protobuf_unittest;
-
-// Cause a conflict with the auto-generated extension class.
-enum ExtensionEnumNameConflict {
-  UNKNOWN = 0;
-}
-
-message YetAnotherMessageToBeExtended {
-  extensions 1 to max;
-}
-
-extend YetAnotherMessageToBeExtended {
-  optional int32 enumConflictExtension = 1;
-}
diff --git a/test/protos/ExtensionNameConflict.proto b/test/protos/ExtensionNameConflict.proto
deleted file mode 100644
index 21217eb..0000000
--- a/test/protos/ExtensionNameConflict.proto
+++ /dev/null
@@ -1,16 +0,0 @@
-syntax = "proto2";
-
-package protobuf_unittest;
-
-// Cause a conflict with the auto-generated extension class.
-message ExtensionNameConflict {
-}
-
-message AnotherMessageToBeExtended {
-  extensions 1 to max;
-}
-
-extend AnotherMessageToBeExtended {
-  optional int32 someExtension = 1;
-}
-
diff --git a/test/protos/_leading_underscores.proto b/test/protos/_leading_underscores.proto
deleted file mode 100644
index 35d7688..0000000
--- a/test/protos/_leading_underscores.proto
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package _leading_underscores;
-
-message _A {
-  optional string _f = 1;
-  optional string f = 2;
-  extensions 3 to 4;
-  extend A {
-    optional int64 _q = 3;
-  }
-}
-
-message A_ {
-  optional string foo = 1;
-}
-
-message A {
-  optional string _f = 1;
-  optional string f = 2;
-  extensions 3 to 4;
-  optional _A b = 5;
-  optional _A _b = 6;
-  optional _A _c = 7;
-  optional _Enum _e = 8;
-  map<string, _A> _amap = 9;
-  repeated _A _r = 10;
-}
-
-extend _A {
-  optional int64 _p = 3;
-  optional int64 p = 4;
-}
-
-extend A {
-  optional int64 _q = 4;
-}
-
-enum _Enum {
-  _constant = 0;
-  constant = 1;
-}
-
-service _service {
-  rpc _search (_A) returns (_A);
-  rpc search (_A) returns (_A);
-}
diff --git a/test/protos/dart_name.proto b/test/protos/dart_name.proto
deleted file mode 100644
index 533d43c..0000000
--- a/test/protos/dart_name.proto
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-import "dart_options.proto";
-
-package dart_name;
-
-message DartName {
-  optional string field = 1 [
-    (dart_options.dart_name) = "renamedField"
-  ];
-}
-
-message SwapNames {
-  optional string first = 1 [
-    (dart_options.dart_name) = "second"
-  ];
-  optional string second = 2 [
-    (dart_options.dart_name) = "first"
-  ];
-}
-
-message TakeExistingName {
-  optional string first = 1;
-  optional string second = 2 [
-    (dart_options.dart_name) = "first"
-  ];
-}
-
-message Function {
-  optional string fun = 1;
-}
-
-message Function_ {
-  optional string fun1 = 1;
-}
diff --git a/test/protos/duplicate_names_import.proto b/test/protos/duplicate_names_import.proto
deleted file mode 100644
index fc0e46a..0000000
--- a/test/protos/duplicate_names_import.proto
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package pkg;
-
-import "package1.proto";
-import "package2.proto";
-import "package3.proto";
-
-message M {
-  optional pkg1.M m1 = 1;
-  optional pkg1.M.M m1_m = 2;
-  optional pkg1.pkg2.M m2 = 3;
-  optional pkg1.pkg2.M.M m2_m = 4;
-  optional pkg1_pkg2.M m3 = 5;
-  optional pkg1_pkg2.M.M m3_m = 6;
-}
-
-message M2 {
-  optional int32 pkg1 = 1;
-}
diff --git a/test/protos/enum_extension.proto b/test/protos/enum_extension.proto
deleted file mode 100644
index 7b09e3f..0000000
--- a/test/protos/enum_extension.proto
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package protobuf_unittest;
-
-message Extendable {
-  extensions 1 to max;
-}
-
-enum Animal {
-  CAT = 1;
-  DOG = 2;
-}
-
-extend Extendable {
-  optional Animal animal = 1;
-}
diff --git a/test/protos/foo.proto b/test/protos/foo.proto
deleted file mode 100644
index 2a4c36b..0000000
--- a/test/protos/foo.proto
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package foo;
-
-message Foo {
-}
diff --git a/test/protos/google/protobuf/any.proto b/test/protos/google/protobuf/any.proto
deleted file mode 100644
index 4932942..0000000
--- a/test/protos/google/protobuf/any.proto
+++ /dev/null
@@ -1,154 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// https://developers.google.com/protocol-buffers/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-syntax = "proto3";
-
-package google.protobuf;
-
-option csharp_namespace = "Google.Protobuf.WellKnownTypes";
-option go_package = "github.com/golang/protobuf/ptypes/any";
-option java_package = "com.google.protobuf";
-option java_outer_classname = "AnyProto";
-option java_multiple_files = true;
-option objc_class_prefix = "GPB";
-
-// `Any` contains an arbitrary serialized protocol buffer message along with a
-// URL that describes the type of the serialized message.
-//
-// Protobuf library provides support to pack/unpack Any values in the form
-// of utility functions or additional generated methods of the Any type.
-//
-// Example 1: Pack and unpack a message in C++.
-//
-//     Foo foo = ...;
-//     Any any;
-//     any.PackFrom(foo);
-//     ...
-//     if (any.UnpackTo(&foo)) {
-//       ...
-//     }
-//
-// Example 2: Pack and unpack a message in Java.
-//
-//     Foo foo = ...;
-//     Any any = Any.pack(foo);
-//     ...
-//     if (any.is(Foo.class)) {
-//       foo = any.unpack(Foo.class);
-//     }
-//
-//  Example 3: Pack and unpack a message in Python.
-//
-//     foo = Foo(...)
-//     any = Any()
-//     any.Pack(foo)
-//     ...
-//     if any.Is(Foo.DESCRIPTOR):
-//       any.Unpack(foo)
-//       ...
-//
-//  Example 4: Pack and unpack a message in Go
-//
-//      foo := &pb.Foo{...}
-//      any, err := ptypes.MarshalAny(foo)
-//      ...
-//      foo := &pb.Foo{}
-//      if err := ptypes.UnmarshalAny(any, foo); err != nil {
-//        ...
-//      }
-//
-// The pack methods provided by protobuf library will by default use
-// 'type.googleapis.com/full.type.name' as the type URL and the unpack
-// methods only use the fully qualified type name after the last '/'
-// in the type URL, for example "foo.bar.com/x/y.z" will yield type
-// name "y.z".
-//
-//
-// JSON
-// ====
-// The JSON representation of an `Any` value uses the regular
-// representation of the deserialized, embedded message, with an
-// additional field `@type` which contains the type URL. Example:
-//
-//     package google.profile;
-//     message Person {
-//       string first_name = 1;
-//       string last_name = 2;
-//     }
-//
-//     {
-//       "@type": "type.googleapis.com/google.profile.Person",
-//       "firstName": <string>,
-//       "lastName": <string>
-//     }
-//
-// If the embedded message type is well-known and has a custom JSON
-// representation, that representation will be embedded adding a field
-// `value` which holds the custom JSON in addition to the `@type`
-// field. Example (for message [google.protobuf.Duration][]):
-//
-//     {
-//       "@type": "type.googleapis.com/google.protobuf.Duration",
-//       "value": "1.212s"
-//     }
-//
-message Any {
-  // A URL/resource name that uniquely identifies the type of the serialized
-  // protocol buffer message. The last segment of the URL's path must represent
-  // the fully qualified name of the type (as in
-  // `path/google.protobuf.Duration`). The name should be in a canonical form
-  // (e.g., leading "." is not accepted).
-  //
-  // In practice, teams usually precompile into the binary all types that they
-  // expect it to use in the context of Any. However, for URLs which use the
-  // scheme `http`, `https`, or no scheme, one can optionally set up a type
-  // server that maps type URLs to message definitions as follows:
-  //
-  // * If no scheme is provided, `https` is assumed.
-  // * An HTTP GET on the URL must yield a [google.protobuf.Type][]
-  //   value in binary format, or produce an error.
-  // * Applications are allowed to cache lookup results based on the
-  //   URL, or have them precompiled into a binary to avoid any
-  //   lookup. Therefore, binary compatibility needs to be preserved
-  //   on changes to types. (Use versioned type names to manage
-  //   breaking changes.)
-  //
-  // Note: this functionality is not currently available in the official
-  // protobuf release, and it is not used for type URLs beginning with
-  // type.googleapis.com.
-  //
-  // Schemes other than `http`, `https` (or the empty scheme) might be
-  // used with implementation specific semantics.
-  //
-  string type_url = 1;
-
-  // Must be a valid serialized protocol buffer of the above specified type.
-  bytes value = 2;
-}
diff --git a/test/protos/google/protobuf/unittest.proto b/test/protos/google/protobuf/unittest.proto
deleted file mode 100644
index 2516bb3..0000000
--- a/test/protos/google/protobuf/unittest.proto
+++ /dev/null
@@ -1,633 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
-// A proto file we will use for unit testing.
-
-syntax = "proto2";
-
-// Some generic_services option(s) added automatically.
-// See:  http://go/proto2-generic-services-default
-option cc_generic_services = true;     // auto-added
-option java_generic_services = true;   // auto-added
-option py_generic_services = true;     // auto-added
-
-import "google/protobuf/unittest_import.proto";
-
-// We don't put this in a package within proto2 because we need to make sure
-// that the generated code doesn't depend on being in the proto2 namespace.
-// In test_util.h we do "using namespace unittest = protobuf_unittest".
-package protobuf_unittest;
-
-// Protos optimized for SPEED use a strict superset of the generated code
-// of equivalent ones optimized for CODE_SIZE, so we should optimize all our
-// tests for speed unless explicitly testing code size optimization.
-option optimize_for = SPEED;
-
-option java_outer_classname = "UnittestProto";
-
-// This proto includes every type of field in both singular and repeated
-// forms.
-message TestAllTypes {
-  message NestedMessage {
-    // The field name "b" fails to compile in proto1 because it conflicts with
-    // a local variable named "b" in one of the generated methods.  Doh.
-    // This file needs to compile in proto1 to test backwards-compatibility.
-    optional int32 bb = 1;
-  }
-
-  enum NestedEnum {
-    FOO = 1;
-    BAR = 2;
-    BAZ = 3;
-  }
-
-  // Singular
-  optional    int32 optional_int32    =  1;
-  optional    int64 optional_int64    =  2;
-  optional   uint32 optional_uint32   =  3;
-  optional   uint64 optional_uint64   =  4;
-  optional   sint32 optional_sint32   =  5;
-  optional   sint64 optional_sint64   =  6;
-  optional  fixed32 optional_fixed32  =  7;
-  optional  fixed64 optional_fixed64  =  8;
-  optional sfixed32 optional_sfixed32 =  9;
-  optional sfixed64 optional_sfixed64 = 10;
-  optional    float optional_float    = 11;
-  optional   double optional_double   = 12;
-  optional     bool optional_bool     = 13;
-  optional   string optional_string   = 14;
-  optional    bytes optional_bytes    = 15;
-
-  optional group OptionalGroup = 16 {
-    optional int32 a = 17;
-  }
-
-  optional NestedMessage                        optional_nested_message  = 18;
-  optional ForeignMessage                       optional_foreign_message = 19;
-  optional protobuf_unittest_import.ImportMessage optional_import_message  = 20;
-
-  optional NestedEnum                           optional_nested_enum     = 21;
-  optional ForeignEnum                          optional_foreign_enum    = 22;
-  optional protobuf_unittest_import.ImportEnum    optional_import_enum     = 23;
-
-  optional string optional_string_piece = 24 [ctype=STRING_PIECE];
-  optional string optional_cord = 25 [ctype=CORD];
-
-  // Repeated
-  repeated    int32 repeated_int32    = 31;
-  repeated    int64 repeated_int64    = 32;
-  repeated   uint32 repeated_uint32   = 33;
-  repeated   uint64 repeated_uint64   = 34;
-  repeated   sint32 repeated_sint32   = 35;
-  repeated   sint64 repeated_sint64   = 36;
-  repeated  fixed32 repeated_fixed32  = 37;
-  repeated  fixed64 repeated_fixed64  = 38;
-  repeated sfixed32 repeated_sfixed32 = 39;
-  repeated sfixed64 repeated_sfixed64 = 40;
-  repeated    float repeated_float    = 41;
-  repeated   double repeated_double   = 42;
-  repeated     bool repeated_bool     = 43;
-  repeated   string repeated_string   = 44;
-  repeated    bytes repeated_bytes    = 45;
-
-  repeated group RepeatedGroup = 46 {
-    optional int32 a = 47;
-  }
-
-  repeated NestedMessage                        repeated_nested_message  = 48;
-  repeated ForeignMessage                       repeated_foreign_message = 49;
-  repeated protobuf_unittest_import.ImportMessage repeated_import_message  = 50;
-
-  repeated NestedEnum                           repeated_nested_enum     = 51;
-  repeated ForeignEnum                          repeated_foreign_enum    = 52;
-  repeated protobuf_unittest_import.ImportEnum    repeated_import_enum     = 53;
-
-  repeated string repeated_string_piece = 54 [ctype=STRING_PIECE];
-  repeated string repeated_cord = 55 [ctype=CORD];
-
-  // Singular with defaults
-  optional    int32 default_int32    = 61 [default =  41    ];
-  optional    int64 default_int64    = 62 [default =  42    ];
-  optional   uint32 default_uint32   = 63 [default =  43    ];
-  optional   uint64 default_uint64   = 64 [default =  44    ];
-  optional   sint32 default_sint32   = 65 [default = -45    ];
-  optional   sint64 default_sint64   = 66 [default =  46    ];
-  optional  fixed32 default_fixed32  = 67 [default =  47    ];
-  optional  fixed64 default_fixed64  = 68 [default =  48    ];
-  optional sfixed32 default_sfixed32 = 69 [default =  49    ];
-  optional sfixed64 default_sfixed64 = 70 [default = -50    ];
-  optional    float default_float    = 71 [default =  51.5  ];
-  optional   double default_double   = 72 [default =  52e3  ];
-  optional     bool default_bool     = 73 [default = true   ];
-  optional   string default_string   = 74 [default = "hello"];
-  optional    bytes default_bytes    = 75 [default = "world"];
-
-  optional NestedEnum  default_nested_enum  = 81 [default = BAR        ];
-  optional ForeignEnum default_foreign_enum = 82 [default = FOREIGN_BAR];
-  optional protobuf_unittest_import.ImportEnum
-      default_import_enum = 83 [default = IMPORT_BAR];
-
-  optional string default_string_piece = 84 [ctype=STRING_PIECE,default="abc"];
-  optional string default_cord = 85 [ctype=CORD,default="123"];
-}
-
-message TestDeprecatedFields {
-  optional int32 deprecated_int32 = 1 [deprecated=true];
-}
-
-// Define these after TestAllTypes to make sure the compiler can handle
-// that.
-message ForeignMessage {
-  optional int32 c = 1;
-}
-
-enum ForeignEnum {
-  FOREIGN_FOO = 4;
-  FOREIGN_BAR = 5;
-  FOREIGN_BAZ = 6;
-}
-
-message TestAllExtensions {
-  extensions 1 to max;
-}
-
-extend TestAllExtensions {
-  // Singular
-  optional    int32 optional_int32_extension    =  1;
-  optional    int64 optional_int64_extension    =  2;
-  optional   uint32 optional_uint32_extension   =  3;
-  optional   uint64 optional_uint64_extension   =  4;
-  optional   sint32 optional_sint32_extension   =  5;
-  optional   sint64 optional_sint64_extension   =  6;
-  optional  fixed32 optional_fixed32_extension  =  7;
-  optional  fixed64 optional_fixed64_extension  =  8;
-  optional sfixed32 optional_sfixed32_extension =  9;
-  optional sfixed64 optional_sfixed64_extension = 10;
-  optional    float optional_float_extension    = 11;
-  optional   double optional_double_extension   = 12;
-  optional     bool optional_bool_extension     = 13;
-  optional   string optional_string_extension   = 14;
-  optional    bytes optional_bytes_extension    = 15;
-
-  optional group OptionalGroup_extension = 16 {
-    optional int32 a = 17;
-  }
-
-  optional TestAllTypes.NestedMessage optional_nested_message_extension = 18;
-  optional ForeignMessage optional_foreign_message_extension = 19;
-  optional protobuf_unittest_import.ImportMessage
-    optional_import_message_extension = 20;
-
-  optional TestAllTypes.NestedEnum optional_nested_enum_extension = 21;
-  optional ForeignEnum optional_foreign_enum_extension = 22;
-  optional protobuf_unittest_import.ImportEnum
-    optional_import_enum_extension = 23;
-
-  optional string optional_string_piece_extension = 24 [ctype=STRING_PIECE];
-  optional string optional_cord_extension = 25 [ctype=CORD];
-
-  // Repeated
-  repeated    int32 repeated_int32_extension    = 31;
-  repeated    int64 repeated_int64_extension    = 32;
-  repeated   uint32 repeated_uint32_extension   = 33;
-  repeated   uint64 repeated_uint64_extension   = 34;
-  repeated   sint32 repeated_sint32_extension   = 35;
-  repeated   sint64 repeated_sint64_extension   = 36;
-  repeated  fixed32 repeated_fixed32_extension  = 37;
-  repeated  fixed64 repeated_fixed64_extension  = 38;
-  repeated sfixed32 repeated_sfixed32_extension = 39;
-  repeated sfixed64 repeated_sfixed64_extension = 40;
-  repeated    float repeated_float_extension    = 41;
-  repeated   double repeated_double_extension   = 42;
-  repeated     bool repeated_bool_extension     = 43;
-  repeated   string repeated_string_extension   = 44;
-  repeated    bytes repeated_bytes_extension    = 45;
-
-  repeated group RepeatedGroup_extension = 46 {
-    optional int32 a = 47;
-  }
-
-  repeated TestAllTypes.NestedMessage repeated_nested_message_extension = 48;
-  repeated ForeignMessage repeated_foreign_message_extension = 49;
-  repeated protobuf_unittest_import.ImportMessage
-    repeated_import_message_extension = 50;
-
-  repeated TestAllTypes.NestedEnum repeated_nested_enum_extension = 51;
-  repeated ForeignEnum repeated_foreign_enum_extension = 52;
-  repeated protobuf_unittest_import.ImportEnum
-    repeated_import_enum_extension = 53;
-
-  repeated string repeated_string_piece_extension = 54 [ctype=STRING_PIECE];
-  repeated string repeated_cord_extension = 55 [ctype=CORD];
-
-  // Singular with defaults
-  optional    int32 default_int32_extension    = 61 [default =  41    ];
-  optional    int64 default_int64_extension    = 62 [default =  42    ];
-  optional   uint32 default_uint32_extension   = 63 [default =  43    ];
-  optional   uint64 default_uint64_extension   = 64 [default =  44    ];
-  optional   sint32 default_sint32_extension   = 65 [default = -45    ];
-  optional   sint64 default_sint64_extension   = 66 [default =  46    ];
-  optional  fixed32 default_fixed32_extension  = 67 [default =  47    ];
-  optional  fixed64 default_fixed64_extension  = 68 [default =  48    ];
-  optional sfixed32 default_sfixed32_extension = 69 [default =  49    ];
-  optional sfixed64 default_sfixed64_extension = 70 [default = -50    ];
-  optional    float default_float_extension    = 71 [default =  51.5  ];
-  optional   double default_double_extension   = 72 [default =  52e3  ];
-  optional     bool default_bool_extension     = 73 [default = true   ];
-  optional   string default_string_extension   = 74 [default = "hello"];
-  optional    bytes default_bytes_extension    = 75 [default = "world"];
-
-  optional TestAllTypes.NestedEnum
-    default_nested_enum_extension = 81 [default = BAR];
-  optional ForeignEnum
-    default_foreign_enum_extension = 82 [default = FOREIGN_BAR];
-  optional protobuf_unittest_import.ImportEnum
-    default_import_enum_extension = 83 [default = IMPORT_BAR];
-
-  optional string default_string_piece_extension = 84 [ctype=STRING_PIECE,
-                                                       default="abc"];
-  optional string default_cord_extension = 85 [ctype=CORD, default="123"];
-}
-
-message TestNestedExtension {
-  extend TestAllExtensions {
-    // Check for bug where string extensions declared in tested scope did not
-    // compile.
-    optional string test = 1002 [default="test"];
-  }
-}
-
-// We have separate messages for testing required fields because it's
-// annoying to have to fill in required fields in TestProto in order to
-// do anything with it.  Note that we don't need to test every type of
-// required filed because the code output is basically identical to
-// optional fields for all types.
-message TestRequired {
-  required int32 a = 1;
-  optional int32 dummy2 = 2;
-  required int32 b = 3;
-
-  extend TestAllExtensions {
-    optional TestRequired single = 1000;
-    repeated TestRequired multi  = 1001;
-  }
-
-  // Pad the field count to 32 so that we can test that IsInitialized()
-  // properly checks multiple elements of has_bits_.
-  optional int32 dummy4  =  4;
-  optional int32 dummy5  =  5;
-  optional int32 dummy6  =  6;
-  optional int32 dummy7  =  7;
-  optional int32 dummy8  =  8;
-  optional int32 dummy9  =  9;
-  optional int32 dummy10 = 10;
-  optional int32 dummy11 = 11;
-  optional int32 dummy12 = 12;
-  optional int32 dummy13 = 13;
-  optional int32 dummy14 = 14;
-  optional int32 dummy15 = 15;
-  optional int32 dummy16 = 16;
-  optional int32 dummy17 = 17;
-  optional int32 dummy18 = 18;
-  optional int32 dummy19 = 19;
-  optional int32 dummy20 = 20;
-  optional int32 dummy21 = 21;
-  optional int32 dummy22 = 22;
-  optional int32 dummy23 = 23;
-  optional int32 dummy24 = 24;
-  optional int32 dummy25 = 25;
-  optional int32 dummy26 = 26;
-  optional int32 dummy27 = 27;
-  optional int32 dummy28 = 28;
-  optional int32 dummy29 = 29;
-  optional int32 dummy30 = 30;
-  optional int32 dummy31 = 31;
-  optional int32 dummy32 = 32;
-
-  required int32 c = 33;
-}
-
-message TestRequiredForeign {
-  optional TestRequired optional_message = 1;
-  repeated TestRequired repeated_message = 2;
-  optional int32 dummy = 3;
-}
-
-// Test that we can use NestedMessage from outside TestAllTypes.
-message TestForeignNested {
-  optional TestAllTypes.NestedMessage foreign_nested = 1;
-}
-
-// TestEmptyMessage is used to test unknown field support.
-message TestEmptyMessage {
-}
-
-// Like above, but declare all field numbers as potential extensions.  No
-// actual extensions should ever be defined for this type.
-message TestEmptyMessageWithExtensions {
-  extensions 1 to max;
-}
-
-message TestMultipleExtensionRanges {
-  extensions 42;
-  extensions 4143 to 4243;
-  extensions 65536 to max;
-}
-
-// Test that really large tag numbers don't break anything.
-message TestReallyLargeTagNumber {
-  // The largest possible tag number is 2^28 - 1, since the wire format uses
-  // three bits to communicate wire type.
-  optional int32 a = 1;
-  optional int32 bb = 268435455;
-}
-
-message TestRecursiveMessage {
-  optional TestRecursiveMessage a = 1;
-  optional int32 i = 2;
-}
-
-// Test that mutual recursion works.
-message TestMutualRecursionA {
-  optional TestMutualRecursionB bb = 1;
-}
-
-message TestMutualRecursionB {
-  optional TestMutualRecursionA a = 1;
-  optional int32 optional_int32 = 2;
-}
-
-// Test that groups have disjoint field numbers from their siblings and
-// parents.  This is NOT possible in proto1; only proto2.  When attempting
-// to compile with proto1, this will emit an error; so we only include it
-// in protobuf_unittest_proto.
-message TestDupFieldNumber {                        // NO_PROTO1
-  optional int32 a = 1;                             // NO_PROTO1
-  optional group Foo = 2 { optional int32 a = 1; }  // NO_PROTO1
-  optional group Bar = 3 { optional int32 a = 1; }  // NO_PROTO1
-}                                                   // NO_PROTO1
-
-
-// Needed for a Python test.
-message TestNestedMessageHasBits {
-  message NestedMessage {
-    repeated int32 nestedmessage_repeated_int32 = 1;
-    repeated ForeignMessage nestedmessage_repeated_foreignmessage = 2;
-  }
-  optional NestedMessage optional_nested_message = 1;
-}
-
-
-// Test an enum that has multiple values with the same number.
-enum TestEnumWithDupValue {
-  option allow_alias = true;
-
-  FOO1 = 1;
-  BAR1 = 2;
-  BAZ = 3;
-  FOO2 = 1;
-  BAR2 = 2;
-}
-
-// Test an enum with large, unordered values.
-enum TestSparseEnum {
-  SPARSE_A = 123;
-  SPARSE_B = 62374;
-  SPARSE_C = 12589234;
-  SPARSE_D = -15;
-  SPARSE_E = -53452;
-  SPARSE_F = 0;
-  SPARSE_G = 2;
-}
-
-// Test message with CamelCase field names.  This violates Protocol Buffer
-// standard style.
-message TestCamelCaseFieldNames {
-  optional int32 PrimitiveField = 1;
-  optional string StringField = 2;
-  optional ForeignEnum EnumField = 3;
-  optional ForeignMessage MessageField = 4;
-  optional string StringPieceField = 5 [ctype=STRING_PIECE];
-  optional string CordField = 6 [ctype=CORD];
-
-  repeated int32 RepeatedPrimitiveField = 7;
-  repeated string RepeatedStringField = 8;
-  repeated ForeignEnum RepeatedEnumField = 9;
-  repeated ForeignMessage RepeatedMessageField = 10;
-  repeated string RepeatedStringPieceField = 11 [ctype=STRING_PIECE];
-  repeated string RepeatedCordField = 12 [ctype=CORD];
-}
-
-
-// We list fields out of order, to ensure that we're using field number and not
-// field index to determine serialization order.
-message TestFieldOrderings {
-  optional string my_string = 11;
-  extensions 2 to 10;
-  optional int64 my_int = 1;
-  extensions 12 to 100;
-  optional float my_float = 101;
-}
-
-
-extend TestFieldOrderings {
-  optional string my_extension_string = 50;
-  optional int32 my_extension_int = 5;
-}
-
-
-message TestExtremeDefaultValues {
-  optional bytes escaped_bytes = 1 [default = "\0\001\a\b\f\n\r\t\v\\\'\"\xfe"];
-  optional uint32 large_uint32 = 2 [default = 0xFFFFFFFF];
-  optional uint64 large_uint64 = 3 [default = 0xFFFFFFFFFFFFFFFF];
-  optional  int32 small_int32  = 4 [default = -0x7FFFFFFF];
-  optional  int64 small_int64  = 5 [default = -0x7FFFFFFFFFFFFFFF];
-
-  // The default value here is UTF-8 for "\u1234".  (We could also just type
-  // the UTF-8 text directly into this text file rather than escape it, but
-  // lots of people use editors that would be confused by this.)
-  optional string utf8_string = 6 [default = "\341\210\264"];
-
-  // Tests for single-precision floating-point values.
-  optional float zero_float = 7 [default = 0];
-  optional float one_float = 8 [default = 1];
-  optional float small_float = 9 [default = 1.5];
-  optional float negative_one_float = 10 [default = -1];
-  optional float negative_float = 11 [default = -1.5];
-  // Using exponents
-  optional float large_float = 12 [default = 2E8];
-  optional float small_negative_float = 13 [default = -8e-28];
-
-  // Text for nonfinite floating-point values.
-  optional double inf_double = 14 [default = inf];
-  optional double neg_inf_double = 15 [default = -inf];
-  optional double nan_double = 16 [default = nan];
-  optional float inf_float = 17 [default = inf];
-  optional float neg_inf_float = 18 [default = -inf];
-  optional float nan_float = 19 [default = nan];
-
-  // Tests for C++ trigraphs.
-  // Trigraphs should be escaped in C++ generated files, but they should not be
-  // escaped for other languages.
-  // Note that in .proto file, "\?" is a valid way to escape ? in string
-  // literals.
-  optional string cpp_trigraph = 20 [default = "? \? ?? \?? \??? ??/ ?\?-"];
-}
-
-message SparseEnumMessage {
-  optional TestSparseEnum sparse_enum = 1;
-}
-
-// Test String and Bytes: string is for valid UTF-8 strings
-message OneString {
-  optional string data = 1;
-}
-
-message OneBytes {
-  optional bytes data = 1;
-}
-
-// Test messages for packed fields
-
-message TestPackedTypes {
-  repeated    int32 packed_int32    =  90 [packed = true];
-  repeated    int64 packed_int64    =  91 [packed = true];
-  repeated   uint32 packed_uint32   =  92 [packed = true];
-  repeated   uint64 packed_uint64   =  93 [packed = true];
-  repeated   sint32 packed_sint32   =  94 [packed = true];
-  repeated   sint64 packed_sint64   =  95 [packed = true];
-  repeated  fixed32 packed_fixed32  =  96 [packed = true];
-  repeated  fixed64 packed_fixed64  =  97 [packed = true];
-  repeated sfixed32 packed_sfixed32 =  98 [packed = true];
-  repeated sfixed64 packed_sfixed64 =  99 [packed = true];
-  repeated    float packed_float    = 100 [packed = true];
-  repeated   double packed_double   = 101 [packed = true];
-  repeated     bool packed_bool     = 102 [packed = true];
-  repeated ForeignEnum packed_enum  = 103 [packed = true];
-}
-
-// A message with the same fields as TestPackedTypes, but without packing. Used
-// to test packed <-> unpacked wire compatibility.
-message TestUnpackedTypes {
-  repeated    int32 unpacked_int32    =  90 [packed = false];
-  repeated    int64 unpacked_int64    =  91 [packed = false];
-  repeated   uint32 unpacked_uint32   =  92 [packed = false];
-  repeated   uint64 unpacked_uint64   =  93 [packed = false];
-  repeated   sint32 unpacked_sint32   =  94 [packed = false];
-  repeated   sint64 unpacked_sint64   =  95 [packed = false];
-  repeated  fixed32 unpacked_fixed32  =  96 [packed = false];
-  repeated  fixed64 unpacked_fixed64  =  97 [packed = false];
-  repeated sfixed32 unpacked_sfixed32 =  98 [packed = false];
-  repeated sfixed64 unpacked_sfixed64 =  99 [packed = false];
-  repeated    float unpacked_float    = 100 [packed = false];
-  repeated   double unpacked_double   = 101 [packed = false];
-  repeated     bool unpacked_bool     = 102 [packed = false];
-  repeated ForeignEnum unpacked_enum  = 103 [packed = false];
-}
-
-message TestPackedExtensions {
-  extensions 1 to max;
-}
-
-extend TestPackedExtensions {
-  repeated    int32 packed_int32_extension    =  90 [packed = true];
-  repeated    int64 packed_int64_extension    =  91 [packed = true];
-  repeated   uint32 packed_uint32_extension   =  92 [packed = true];
-  repeated   uint64 packed_uint64_extension   =  93 [packed = true];
-  repeated   sint32 packed_sint32_extension   =  94 [packed = true];
-  repeated   sint64 packed_sint64_extension   =  95 [packed = true];
-  repeated  fixed32 packed_fixed32_extension  =  96 [packed = true];
-  repeated  fixed64 packed_fixed64_extension  =  97 [packed = true];
-  repeated sfixed32 packed_sfixed32_extension =  98 [packed = true];
-  repeated sfixed64 packed_sfixed64_extension =  99 [packed = true];
-  repeated    float packed_float_extension    = 100 [packed = true];
-  repeated   double packed_double_extension   = 101 [packed = true];
-  repeated     bool packed_bool_extension     = 102 [packed = true];
-  repeated ForeignEnum packed_enum_extension  = 103 [packed = true];
-}
-
-// Used by ExtensionSetTest/DynamicExtensions.  The test actually builds
-// a set of extensions to TestAllExtensions dynamically, based on the fields
-// of this message type.
-message TestDynamicExtensions {
-  enum DynamicEnumType {
-    DYNAMIC_FOO = 2200;
-    DYNAMIC_BAR = 2201;
-    DYNAMIC_BAZ = 2202;
-  }
-  message DynamicMessageType {
-    optional int32 dynamic_field = 2100;
-  }
-
-  optional fixed32 scalar_extension = 2000;
-  optional ForeignEnum enum_extension = 2001;
-  optional DynamicEnumType dynamic_enum_extension = 2002;
-
-  optional ForeignMessage message_extension = 2003;
-  optional DynamicMessageType dynamic_message_extension = 2004;
-
-  repeated string repeated_extension = 2005;
-  repeated sint32 packed_extension = 2006 [packed = true];
-}
-
-message TestRepeatedScalarDifferentTagSizes {
-  // Parsing repeated fixed size values used to fail. This message needs to be
-  // used in order to get a tag of the right size; all of the repeated fields
-  // in TestAllTypes didn't trigger the check.
-  repeated fixed32 repeated_fixed32 = 12;
-  // Check for a varint type, just for good measure.
-  repeated int32   repeated_int32   = 13;
-
-  // These have two-byte tags.
-  repeated fixed64 repeated_fixed64 = 2046;
-  repeated int64   repeated_int64   = 2047;
-
-  // Three byte tags.
-  repeated float   repeated_float   = 262142;
-  repeated uint64  repeated_uint64  = 262143;
-}
-
-
-// Test that RPC services work.
-message FooRequest  {}
-message FooResponse {}
-
-service TestService {
-  rpc Foo(FooRequest) returns (FooResponse);
-  rpc Bar(BarRequest) returns (BarResponse);
-}
-
-
-message BarRequest  {}
-message BarResponse {}
diff --git a/test/protos/google/protobuf/unittest_import.proto b/test/protos/google/protobuf/unittest_import.proto
deleted file mode 100644
index 1e64320..0000000
--- a/test/protos/google/protobuf/unittest_import.proto
+++ /dev/null
@@ -1,62 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
-// A proto file which is imported by unittest.proto to test importing.
-// We don't put this in a package within proto2 because we need to make sure
-// that the generated code doesn't depend on being in the proto2 namespace.
-// In test_util.h we do
-// "using namespace unittest_import = protobuf_unittest_import".
-
-syntax = "proto2";
-
-package protobuf_unittest_import;
-
-option optimize_for = SPEED;
-
-// Excercise the java_package option.
-option java_package = "com.google.protobuf.test";
-
-// Do not set a java_outer_classname here to verify that Proto2 works without
-// one.
-
-message ImportMessage {
-  optional int32 d = 1;
-}
-
-enum ImportEnum {
-  IMPORT_FOO = 7;
-  IMPORT_BAR = 8;
-  IMPORT_BAZ = 9;
-}
-
diff --git a/test/protos/google/protobuf/unittest_optimize_for.proto b/test/protos/google/protobuf/unittest_optimize_for.proto
deleted file mode 100644
index 2b36c60..0000000
--- a/test/protos/google/protobuf/unittest_optimize_for.proto
+++ /dev/null
@@ -1,63 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: kenton@google.com (Kenton Varda)
-//  Based on original Protocol Buffers design by
-//  Sanjay Ghemawat, Jeff Dean, and others.
-//
-// A proto file which uses optimize_for = CODE_SIZE.
-
-syntax = "proto2";
-
-import "google/protobuf/unittest.proto";
-
-package protobuf_unittest;
-
-option optimize_for = CODE_SIZE;
-
-message TestOptimizedForSize {
-  optional int32 i = 1;
-  optional ForeignMessage msg = 19;
-
-  extensions 1000 to max;
-
-  extend TestOptimizedForSize {
-    optional int32 test_extension = 1234;
-    optional TestRequiredOptimizedForSize test_extension2 = 1235;
-  }
-}
-
-message TestRequiredOptimizedForSize {
-  required int32 x = 1;
-}
- 
-message TestOptionalOptimizedForSize {
-  optional TestRequiredOptimizedForSize o = 1;
-}
diff --git a/test/protos/import_clash.proto b/test/protos/import_clash.proto
deleted file mode 100644
index ae9ecd9..0000000
--- a/test/protos/import_clash.proto
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-import "foo.proto";
-
-package import_clash;
-
-message Clasher {
-  required foo.Foo foo = 1;
-}
diff --git a/test/protos/map_api.proto b/test/protos/map_api.proto
deleted file mode 100644
index 5a3ddb4..0000000
--- a/test/protos/map_api.proto
+++ /dev/null
@@ -1,19 +0,0 @@
-syntax = "proto2";
-
-package protobuf_unittest;
-
-import "dart_options.proto";
-
-message Rec {
-  option (dart_options.mixin) = "PbMapMixin";
-
-  optional int32 num = 1;
-  repeated int32 nums = 2;
-  optional string str = 3;
-  optional NonMap msg = 4;
-}
-
-message NonMap {
-  optional string str = 1;
-  optional NonMap child = 2;
-}
diff --git a/test/protos/map_api2.proto b/test/protos/map_api2.proto
deleted file mode 100644
index 509904d..0000000
--- a/test/protos/map_api2.proto
+++ /dev/null
@@ -1,17 +0,0 @@
-syntax = "proto2";
-
-package protobuf_unittest;
-
-import "dart_options.proto";
-
-option (dart_options.default_mixin) = "PbMapMixin";
-
-message Rec2 {
-  optional int32 num = 1;
-  repeated int32 nums = 2;
-  optional string str = 3;
-}
-
-message NonMap2 {
-  option (dart_options.mixin) = "";
-}
diff --git a/test/protos/map_field.proto b/test/protos/map_field.proto
deleted file mode 100644
index d5af64f..0000000
--- a/test/protos/map_field.proto
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package protobuf_unittest;
-
-message TestMap {
-    message MessageValue {
-        optional int32 value = 1;
-        optional int32 secondValue = 2 [default = 42];
-    }
-
-    enum EnumValue {
-        FOO = 0;
-        BAR = 1;
-        BAZ = 2;
-        ZOP = 3;
-    }
-
-    map<int32, int32>        int32_to_int32_field = 1;
-    map<int32, string>       int32_to_string_field = 2;
-    map<int32, bytes>        int32_to_bytes_field = 3;
-    map<int32, EnumValue>    int32_to_enum_field = 4;
-    map<int32, MessageValue> int32_to_message_field = 5;
-    map<string, int32>       string_to_int32_field = 6;
-    map<uint32, int32>       uint32_to_int32_field = 7;
-    map<int64, int32>        int64_to_int32_field = 8;
-}
-
-message Inner  {
-    map<string, string> inner_map = 1;
-}
-
-message Outer {
-    optional Inner i = 1;
-}
diff --git a/test/protos/mixins.proto b/test/protos/mixins.proto
deleted file mode 100644
index 9395e52..0000000
--- a/test/protos/mixins.proto
+++ /dev/null
@@ -1,51 +0,0 @@
-syntax = "proto2";
-
-import "dart_options.proto";
-
-option (dart_options.imports) = {
-  mixins: [{
-    name: "Mixin1"
-    import_from: "package:protoc_plugin/testing/mixins.dart"
-  },
-  {
-    name: "Mixin2"
-    import_from: "package:protoc_plugin/testing/mixins.dart"
-  },
-  {
-    name: "Mixin3"
-    import_from: "package:protoc_plugin/testing/mixins.dart"
-    parent: "Mixin1"
-  }];
-};
-
-option (dart_options.default_mixin) = "Mixin1";
-
-message NoMixinPB {
-  option (dart_options.mixin) = "";
-}
-
-message Mixin1PB {
-  optional string interface_string = 1 [
-    (dart_options.override_getter) = true,
-    (dart_options.override_setter) = true,
-    (dart_options.override_has_method) = true
-  ];
-}
-
-message Mixin2PB {
-  option (dart_options.mixin) = "Mixin2";
-
-  optional string overridden_has_method = 3 [
-    (dart_options.override_has_method) = true
-  ];
-}
-
-message Mixin3PB {
-  option (dart_options.mixin) = "Mixin3";
-
-  optional string interface_string = 1 [
-    (dart_options.override_getter) = true,
-    (dart_options.override_setter) = true,
-    (dart_options.override_has_method) = true
-  ];
-}
diff --git a/test/protos/multiple_files_test.proto b/test/protos/multiple_files_test.proto
deleted file mode 100644
index 19414e5..0000000
--- a/test/protos/multiple_files_test.proto
+++ /dev/null
@@ -1,72 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: kenton@google.com (Kenton Varda)
-//
-// A proto file which tests the java_multiple_files option.
-
-syntax = "proto2";
-
-// Some generic_services option(s) added automatically.
-// See:  http://go/proto2-generic-services-default
-option java_generic_services = true;   // auto-added
-
-import "google/protobuf/unittest.proto";
-
-package protobuf_unittest;
-
-option java_multiple_files = true;
-option java_outer_classname = "MultipleFilesTestProto";
-
-message MessageWithNoOuter {
-  message NestedMessage {
-    optional int32 i = 1;
-  }
-  enum NestedEnum {
-    BAZ = 3;
-  }
-  optional NestedMessage nested = 1;
-  repeated TestAllTypes foreign = 2;
-  optional NestedEnum nested_enum = 3;
-  optional EnumWithNoOuter foreign_enum = 4;
-}
-
-enum EnumWithNoOuter {
-  FOO = 1;
-  BAR = 2;
-}
-
-service ServiceWithNoOuter {
-  rpc Foo(MessageWithNoOuter) returns(TestAllTypes);
-}
-
-extend TestAllExtensions {
-  optional int32 extension_with_outer = 1234567;
-}
diff --git a/test/protos/nested_extension.proto b/test/protos/nested_extension.proto
deleted file mode 100644
index 4478006..0000000
--- a/test/protos/nested_extension.proto
+++ /dev/null
@@ -1,46 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: Darick Tong (darick@google.com)
-//
-// A proto file with nested extensions. Note that this must be defined in
-// a separate file to properly test the initialization of the outer class.
-
-syntax = "proto2";
-
-import "non_nested_extension.proto";
-
-package protobuf_unittest;
-
-message MyNestedExtension {
-  extend MessageToBeExtended {
-    optional MessageToBeExtended recursiveExtension = 2;
-  }
-}
diff --git a/test/protos/non_nested_extension.proto b/test/protos/non_nested_extension.proto
deleted file mode 100644
index c3cdb95..0000000
--- a/test/protos/non_nested_extension.proto
+++ /dev/null
@@ -1,49 +0,0 @@
-// Protocol Buffers - Google's data interchange format
-// Copyright 2008 Google Inc.  All rights reserved.
-// http://code.google.com/p/protobuf/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are
-// met:
-//
-//     * Redistributions of source code must retain the above copyright
-// notice, this list of conditions and the following disclaimer.
-//     * Redistributions in binary form must reproduce the above
-// copyright notice, this list of conditions and the following disclaimer
-// in the documentation and/or other materials provided with the
-// distribution.
-//     * Neither the name of Google Inc. nor the names of its
-// contributors may be used to endorse or promote products derived from
-// this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-// Author: Darick Tong (darick@google.com)
-//
-// A proto file with extensions.
-
-syntax = "proto2";
-
-package protobuf_unittest;
-
-message MessageToBeExtended {
-  extensions 1 to max;
-}
-
-message MyNonNestedExtension {
-}
-
-extend MessageToBeExtended {
-  optional MyNonNestedExtension nonNestedExtension = 1;
-}
-
diff --git a/test/protos/package1.proto b/test/protos/package1.proto
deleted file mode 100644
index 7578110..0000000
--- a/test/protos/package1.proto
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package pkg1;
-
-message M {
-  message M {
-    optional int32 x = 1;
-  }
-  optional int32 a = 1;
-  optional string b = 2;
-}
diff --git a/test/protos/package2.proto b/test/protos/package2.proto
deleted file mode 100644
index e8c7133..0000000
--- a/test/protos/package2.proto
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package pkg1.pkg2;
-
-message M {
-  message M {
-    optional int32 x = 1;
-  }
-  optional int32 a = 1;
-  optional string b = 2;
-}
diff --git a/test/protos/package3.proto b/test/protos/package3.proto
deleted file mode 100644
index d650ef2..0000000
--- a/test/protos/package3.proto
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package pkg1_pkg2;
-
-message M {
-  message M {
-    optional int32 x = 1;
-  }
-  optional int32 a = 1;
-  optional string b = 2;
-}
diff --git a/test/protos/reserved_names.proto b/test/protos/reserved_names.proto
deleted file mode 100644
index fcee7c5..0000000
--- a/test/protos/reserved_names.proto
+++ /dev/null
@@ -1,253 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package protobuf_unittest;
-
-message ReservedNamesOptional {
-  // Conflicts with Object.
-  optional int32 hash_code = 1;
-  optional int32 no_such_method = 2;
-  optional int32 runtime_type = 3;
-  optional int32 to_string = 4;
-
-  // Conflicts with GeneratedMessage.
-  optional int32 from_buffer = 10;
-  optional int32 from_json = 11;
-  optional int32 has_required_fields = 12;
-  optional int32 is_initialized = 13;
-  optional int32 clear = 14;
-  optional int32 get_tag_number = 15;
-  optional int32 check = 16;
-  optional int32 write_to_buffer = 17;
-  optional int32 write_to_coded_buffer_writer = 18;
-  optional int32 merge_from_coded_buffer_reader = 19;
-  optional int32 merge_from_buffer = 20;
-  optional int32 write_to_json = 21;
-  optional int32 merge_from_json = 22;
-  optional int32 add_extension = 23;
-  optional int32 get_extension = 24;
-  optional int32 set_extension = 25;
-  optional int32 has_extension = 26;
-  optional int32 clear_extension = 27;
-  optional int32 get_field = 28;
-  optional int32 set_field = 29;
-  optional int32 has_field = 30;
-  optional int32 clear_field = 31;
-  optional int32 extensions_are_initialized = 32;
-  optional int32 merge_from_message = 33;
-  optional int32 merge_unknown_fields = 34;
-
-  // Other conflicts.
-  optional int32 hash_code_1 = 40;
-  optional int32 create = 41;
-  optional int32 create_repeated = 42;
-
-  optional int32 x = 50;
-  optional int32 has_x = 51;
-  optional int32 clear_x = 53;
-  optional int32 has_x_51 = 54;
-  optional int32 clear_x_53 = 55;
-}
-
-message ReservedNamesRepeated {
-  // Conflicts with Object.
-  repeated int32 hash_code = 1;
-  repeated int32 no_such_method = 2;
-  repeated int32 runtime_type = 3;
-  repeated int32 to_string = 4;
-
-  // Conflicts with GeneratedMessage.
-  repeated int32 from_buffer = 10;
-  repeated int32 from_json = 11;
-  repeated int32 has_required_fields = 12;
-  repeated int32 is_initialized = 13;
-  repeated int32 clear = 14;
-  repeated int32 get_tag_number = 15;
-  repeated int32 check = 16;
-  repeated int32 write_to_buffer = 17;
-  repeated int32 write_to_coded_buffer_writer = 18;
-  repeated int32 merge_from_coded_buffer_reader = 19;
-  repeated int32 merge_from_buffer = 20;
-  repeated int32 write_to_json = 21;
-  repeated int32 merge_from_json = 22;
-  repeated int32 add_extension = 23;
-  repeated int32 get_extension = 24;
-  repeated int32 set_extension = 25;
-  repeated int32 has_extension = 26;
-  repeated int32 clear_extension = 27;
-  repeated int32 get_field = 28;
-  repeated int32 set_field = 29;
-  repeated int32 has_field = 30;
-  repeated int32 clear_field = 31;
-  repeated int32 extensions_are_initialized = 32;
-  repeated int32 merge_from_message = 33;
-  repeated int32 merge_unknown_fields = 34;
-
-  // Other conflicts.
-  repeated int32 hash_code_1 = 40;
-  repeated int32 create = 41;
-  repeated int32 create_repeated = 42;
-
-  repeated int32 x = 50;
-  repeated int32 has_x = 51;
-  repeated int32 clear_x = 53;
-  repeated int32 has_x_51 = 54;
-  repeated int32 clear_x_53 = 55;
-}
-
-message ReservedNamesRequired {
-  // Conflicts with Object.
-  required int32 hash_code = 1;
-  required int32 no_such_method = 2;
-  required int32 runtime_type = 3;
-  required int32 to_string = 4;
-
-  // Conflicts with GeneratedMessage.
-  required int32 from_buffer = 10;
-  required int32 from_json = 11;
-  required int32 has_required_fields = 12;
-  required int32 is_initialized = 13;
-  required int32 clear = 14;
-  required int32 get_tag_number = 15;
-  required int32 check = 16;
-  required int32 write_to_buffer = 17;
-  required int32 write_to_coded_buffer_writer = 18;
-  required int32 merge_from_coded_buffer_reader = 19;
-  required int32 merge_from_buffer = 20;
-  required int32 write_to_json = 21;
-  required int32 merge_from_json = 22;
-  required int32 add_extension = 23;
-  required int32 get_extension = 24;
-  required int32 set_extension = 25;
-  required int32 has_extension = 26;
-  required int32 clear_extension = 27;
-  required int32 get_field = 28;
-  required int32 set_field = 29;
-  required int32 has_field = 30;
-  required int32 clear_field = 31;
-  required int32 extensions_are_initialized = 32;
-  required int32 merge_from_message = 33;
-  required int32 merge_unknown_fields = 34;
-
-  // Other conflicts.
-  required int32 hash_code_1 = 40;
-  required int32 create = 41;
-  required int32 create_repeated = 42;
-
-  required int32 x = 50;
-  required int32 has_x = 51;
-  required int32 clear_x = 53;
-  required int32 has_x_51 = 54;
-  required int32 clear_x_53 = 55;
-}
-
-message ReservedWordsOptional {
-  optional int32 assert = 1;
-  optional int32 break = 2;
-  optional int32 case = 3;
-  optional int32 catch = 4;
-  optional int32 class = 5;
-  optional int32 const = 6;
-  optional int32 continue = 7;
-  optional int32 default = 8;
-  optional int32 do = 9;
-  optional int32 else = 10;
-  optional int32 enum = 11;
-  optional int32 extends = 12;
-  optional int32 false = 13;
-  optional int32 final = 14;
-  optional int32 finally = 15;
-  optional int32 for = 16;
-  optional int32 if = 17;
-  optional int32 in = 18;
-  optional int32 is = 19;
-  optional int32 new = 20;
-  optional int32 null = 21;
-  optional int32 rethrow = 22;
-  optional int32 return = 23;
-  optional int32 super = 24;
-  optional int32 switch = 25;
-  optional int32 this = 26;
-  optional int32 throw = 27;
-  optional int32 true = 28;
-  optional int32 try = 29;
-  optional int32 var = 30;
-  optional int32 void = 31;
-  optional int32 while = 32;
-  optional int32 with = 33;
-}
-
-message ReservedWordsRepeated {
-  repeated int32 assert = 1;
-  repeated int32 break = 2;
-  repeated int32 case = 3;
-  repeated int32 catch = 4;
-  repeated int32 class = 5;
-  repeated int32 const = 6;
-  repeated int32 continue = 7;
-  repeated int32 default = 8;
-  repeated int32 do = 9;
-  repeated int32 else = 10;
-  repeated int32 enum = 11;
-  repeated int32 extends = 12;
-  repeated int32 false = 13;
-  repeated int32 final = 14;
-  repeated int32 finally = 15;
-  repeated int32 for = 16;
-  repeated int32 if = 17;
-  repeated int32 in = 18;
-  repeated int32 is = 19;
-  repeated int32 new = 20;
-  repeated int32 null = 21;
-  repeated int32 rethrow = 22;
-  repeated int32 return = 23;
-  repeated int32 super = 24;
-  repeated int32 switch = 25;
-  repeated int32 this = 26;
-  repeated int32 throw = 27;
-  repeated int32 true = 28;
-  repeated int32 try = 29;
-  repeated int32 var = 30;
-  repeated int32 void = 31;
-  repeated int32 while = 32;
-  repeated int32 with = 33;
-}
-
-message ReservedWordsRequired {
-  required int32 assert = 1;
-  required int32 break = 2;
-  required int32 case = 3;
-  required int32 catch = 4;
-  required int32 class = 5;
-  required int32 const = 6;
-  required int32 continue = 7;
-  required int32 default = 8;
-  required int32 do = 9;
-  required int32 else = 10;
-  required int32 enum = 11;
-  required int32 extends = 12;
-  required int32 false = 13;
-  required int32 final = 14;
-  required int32 finally = 15;
-  required int32 for = 16;
-  required int32 if = 17;
-  required int32 in = 18;
-  required int32 is = 19;
-  required int32 new = 20;
-  required int32 null = 21;
-  required int32 rethrow = 22;
-  required int32 return = 23;
-  required int32 super = 24;
-  required int32 switch = 25;
-  required int32 this = 26;
-  required int32 throw = 27;
-  required int32 true = 28;
-  required int32 try = 29;
-  required int32 var = 30;
-  required int32 void = 31;
-  required int32 while = 32;
-  required int32 with = 33;
-}
diff --git a/test/protos/service.proto b/test/protos/service.proto
deleted file mode 100644
index 6cbb64a..0000000
--- a/test/protos/service.proto
+++ /dev/null
@@ -1,16 +0,0 @@
-syntax = "proto2";
-
-import "service2.proto";
-
-message SearchRequest {
-  optional string query = 1;
-}
-
-message SearchResponse {
-  repeated string result = 1;
-}
-
-service SearchService {
-	rpc Search (SearchRequest) returns (SearchResponse);
-	rpc Search2 (service2.SearchRequest) returns (service2.SearchResponse);
-}
diff --git a/test/protos/service2.proto b/test/protos/service2.proto
deleted file mode 100644
index 18a2bbb..0000000
--- a/test/protos/service2.proto
+++ /dev/null
@@ -1,13 +0,0 @@
-syntax = "proto2";
-
-package service2;
-
-import "service3.proto";
-
-message SearchRequest {
-  optional string query = 1;
-}
-
-message SearchResponse {
-  repeated service3.SearchResult results = 1;
-}
diff --git a/test/protos/service3.proto b/test/protos/service3.proto
deleted file mode 100644
index d5a5ce9..0000000
--- a/test/protos/service3.proto
+++ /dev/null
@@ -1,8 +0,0 @@
-syntax = "proto2";
-
-package service3;
-
-message SearchResult {
-  optional string url = 1;
-  optional string snippet = 2;
-}
diff --git a/test/protos/toplevel.proto b/test/protos/toplevel.proto
deleted file mode 100644
index b15f091..0000000
--- a/test/protos/toplevel.proto
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-message T {
-  optional int32 a = 1;
-  optional string b = 2;
-}
diff --git a/test/protos/toplevel_import.proto b/test/protos/toplevel_import.proto
deleted file mode 100644
index b025a2a..0000000
--- a/test/protos/toplevel_import.proto
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto2";
-
-package toplevel.import;
-
-import "toplevel.proto";
-
-message M {
-  optional T t = 1;
-}
-
-service S {
-  rpc Foo (T) returns (M);
-}
diff --git a/test/protos/using_any.proto b/test/protos/using_any.proto
deleted file mode 100644
index 8cfd0cb..0000000
--- a/test/protos/using_any.proto
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-syntax = "proto3";
-
-package protobuf_unittest;
-
-import "google/protobuf/any.proto";
-
-message TestAny {
-  int32 int32_value = 1;
-  google.protobuf.Any any_value = 2;
-  repeated google.protobuf.Any repeated_any_value = 3;
-}
-
-message Container {
-  message Nested {
-    int32 int32_value = 1;
-  }
-}
diff --git a/test/repeated_field_test.dart b/test/repeated_field_test.dart
deleted file mode 100644
index 77e97ed..0000000
--- a/test/repeated_field_test.dart
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library repeated_field_test;
-
-import 'package:protobuf/protobuf.dart';
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-import 'test_util.dart';
-
-// Suppress an analyzer warning for a deliberate type mismatch.
-cast(x) => x;
-
-void main() {
-  test("checkItems works for messages", () {
-    expect(() {
-      TestAllTypes.$checkItem(new TestAllTypes());
-    }, returnsNormally);
-
-    expect(() {
-      TestAllTypes.$checkItem(cast(new TestAllTypes_NestedMessage()));
-    }, throwsATypeError);
-  });
-
-  test("checkItems works for groups", () {
-    expect(() {
-      TestAllTypes_RepeatedGroup.$checkItem(new TestAllTypes_RepeatedGroup());
-    }, returnsNormally);
-
-    expect(() {
-      TestAllTypes_RepeatedGroup.$checkItem(
-          cast(new TestAllTypes_OptionalGroup()));
-    }, throwsATypeError);
-  });
-
-  test("checkItems works for enums", () {
-    expect(() {
-      TestAllTypes_NestedEnum.$checkItem(TestAllTypes_NestedEnum.FOO);
-    }, returnsNormally);
-
-    expect(() {
-      TestAllTypes_NestedEnum.$checkItem(cast(ForeignEnum.FOREIGN_FOO));
-    }, throwsATypeError);
-  });
-
-  test("check properties are initialized for repeated fields", () {
-    var msg = new TestAllTypes();
-    expect(
-        (msg.info_.byName["repeatedNestedMessage"]
-                as FieldInfo<TestAllTypes_NestedMessage>)
-            .check,
-        same(TestAllTypes_NestedMessage.$checkItem));
-
-    expect(
-        (msg.info_.byName["repeatedGroup"]
-                as FieldInfo<TestAllTypes_RepeatedGroup>)
-            .check,
-        same(TestAllTypes_RepeatedGroup.$checkItem));
-
-    expect(
-        (msg.info_.byName["repeatedNestedEnum"]
-                as FieldInfo<TestAllTypes_NestedEnum>)
-            .check,
-        same(TestAllTypes_NestedEnum.$checkItem));
-  });
-}
diff --git a/test/service_generator_test.dart b/test/service_generator_test.dart
deleted file mode 100644
index ca15923..0000000
--- a/test/service_generator_test.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library service_generator_test;
-
-import 'package:protoc_plugin/indenting_writer.dart';
-import 'package:protoc_plugin/protoc.dart';
-import 'package:test/test.dart';
-import 'service_util.dart';
-
-import 'golden_file.dart';
-
-void main() {
-  test('testServiceGenerator', () {
-    var options = new GenerationOptions();
-    var fd = buildFileDescriptor(
-        "testpkg", "testpkg.proto", ["SomeRequest", "SomeReply"]);
-    fd.service.add(buildServiceDescriptor());
-    var fg = new FileGenerator(fd, options);
-
-    var fd2 = buildFileDescriptor(
-        "foo.bar", "foobar.proto", ["EmptyMessage", "AnotherReply"]);
-    var fg2 = new FileGenerator(fd2, options);
-
-    link(new GenerationOptions(), [fg, fg2]);
-
-    var serviceWriter = new IndentingWriter();
-    fg.serviceGenerators[0].generate(serviceWriter);
-    expectMatchesGoldenFile(
-        serviceWriter.toString(), 'test/goldens/serviceGenerator');
-    expectMatchesGoldenFile(
-        fg.generateJsonFile(), 'test/goldens/serviceGenerator.pb.json');
-  });
-}
diff --git a/test/service_test.dart b/test/service_test.dart
deleted file mode 100644
index 82b52c0..0000000
--- a/test/service_test.dart
+++ /dev/null
@@ -1,121 +0,0 @@
-library service_test;
-
-import 'dart:async' show Future;
-
-import 'package:protobuf/protobuf.dart';
-import 'package:protoc_plugin/src/descriptor.pb.dart'
-    show DescriptorProto, ServiceDescriptorProto;
-import 'package:test/test.dart';
-
-import '../out/protos/service.pbserver.dart' as pb;
-import '../out/protos/service2.pb.dart' as pb2;
-import '../out/protos/service3.pb.dart' as pb3;
-
-class SearchService extends pb.SearchServiceBase {
-  Future<pb.SearchResponse> search(
-      ServerContext ctx, pb.SearchRequest request) async {
-    var out = new pb.SearchResponse();
-    if (request.query == 'hello' || request.query == 'world') {
-      out.result.add('hello, world!');
-    }
-    return out;
-  }
-
-  Future<pb2.SearchResponse> search2(
-      ServerContext ctx, pb2.SearchRequest request) async {
-    var out = new pb2.SearchResponse();
-    if (request.query == '2') {
-      var result = new pb3.SearchResult()
-        ..url = 'http://example.com/'
-        ..snippet = 'hello world (2)!';
-      out.results.add(result);
-    }
-    return out;
-  }
-}
-
-class FakeJsonServer {
-  final GeneratedService searchService;
-  FakeJsonServer(this.searchService);
-
-  Future<String> messageHandler(
-      String serviceName, String methodName, String requestJson) async {
-    if (serviceName == 'SearchService') {
-      GeneratedMessage request = searchService.createRequest(methodName);
-      request.mergeFromJson(requestJson);
-      var ctx = new ServerContext();
-      var reply = await searchService.handleCall(ctx, methodName, request);
-      return reply.writeToJson();
-    } else {
-      throw 'unknown service: $serviceName';
-    }
-  }
-}
-
-class FakeJsonClient implements RpcClient {
-  final FakeJsonServer server;
-
-  FakeJsonClient(this.server);
-
-  Future<T> invoke<T extends GeneratedMessage>(
-      ClientContext ctx,
-      String serviceName,
-      String methodName,
-      GeneratedMessage request,
-      T response) async {
-    String requestJson = request.writeToJson();
-    String replyJson =
-        await server.messageHandler(serviceName, methodName, requestJson);
-    response.mergeFromJson(replyJson);
-    return response;
-  }
-}
-
-void main() {
-  var service = new SearchService();
-  var server = new FakeJsonServer(service);
-  var api = new pb.SearchServiceApi(new FakeJsonClient(server));
-
-  test('end to end RPC using JSON', () async {
-    var request = new pb.SearchRequest()..query = 'hello';
-    var reply = await api.search(new ClientContext(), request);
-    expect(reply.result, ['hello, world!']);
-  });
-
-  test('end to end RPC using message from a different package', () async {
-    var request = new pb2.SearchRequest()..query = "2";
-    var reply = await api.search2(new ClientContext(), request);
-    expect(reply.results.length, 1);
-    expect(reply.results[0].url, 'http://example.com/');
-    expect(reply.results[0].snippet, 'hello world (2)!');
-  });
-
-  test('can read service descriptor from JSON', () {
-    var descriptor = new ServiceDescriptorProto()
-      ..mergeFromJsonMap(service.$json);
-    expect(descriptor.name, "SearchService");
-    var methodNames = descriptor.method.map((m) => m.name).toList();
-    expect(methodNames, ["Search", "Search2"]);
-  });
-
-  test('can read message descriptors from JSON', () {
-    var map = service.$messageJson;
-    expect(map.keys, [
-      '.SearchRequest',
-      '.SearchResponse',
-      '.service2.SearchRequest',
-      '.service2.SearchResponse',
-      '.service3.SearchResult',
-    ]);
-
-    String readMessageName(fqname) {
-      var json = map[fqname];
-      var descriptor = new DescriptorProto()..mergeFromJsonMap(json);
-      return descriptor.name;
-    }
-
-    expect(readMessageName('.SearchRequest'), "SearchRequest");
-    expect(readMessageName('.service2.SearchRequest'), "SearchRequest");
-    expect(readMessageName('.service3.SearchResult'), "SearchResult");
-  });
-}
diff --git a/test/service_util.dart b/test/service_util.dart
deleted file mode 100644
index 0f8ffec..0000000
--- a/test/service_util.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library service_util;
-
-import 'package:protoc_plugin/src/descriptor.pb.dart';
-
-ServiceDescriptorProto buildServiceDescriptor() {
-  ServiceDescriptorProto sd = new ServiceDescriptorProto()
-    ..name = 'Test'
-    ..method.addAll([
-      new MethodDescriptorProto()
-        ..name = 'AMethod'
-        ..inputType = '.testpkg.SomeRequest'
-        ..outputType = '.testpkg.SomeReply',
-      new MethodDescriptorProto()
-        ..name = 'AnotherMethod'
-        ..inputType = '.foo.bar.EmptyMessage'
-        ..outputType = '.foo.bar.AnotherReply',
-    ]);
-  return sd;
-}
-
-FileDescriptorProto buildFileDescriptor(
-    String package, String fileUri, List<String> messages) {
-  var fd = new FileDescriptorProto()
-    ..package = package
-    ..name = fileUri;
-  for (var name in messages) {
-    var md = new DescriptorProto()..name = name;
-
-    fd.messageType.add(md);
-  }
-  return fd;
-}
diff --git a/test/test_util.dart b/test/test_util.dart
deleted file mode 100644
index b30ae40..0000000
--- a/test/test_util.dart
+++ /dev/null
@@ -1,1824 +0,0 @@
-// Copyright(c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library test_util;
-
-import 'package:fixnum/fixnum.dart';
-import 'package:protobuf/protobuf.dart';
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest_import.pb.dart';
-import '../out/protos/google/protobuf/unittest.pb.dart';
-
-final Matcher throwsATypeError = throwsA(new TypeMatcher<TypeError>());
-
-Int64 make64(lo, [hi = null]) {
-  if (hi == null) hi = lo < 0 ? -1 : 0;
-  return new Int64.fromInts(hi, lo);
-}
-
-expect64(lo, [hi = null]) {
-  final Int64 expected = make64(lo, hi);
-  return predicate((Int64 actual) => actual == expected);
-}
-
-void assertAllExtensionsSet(TestAllExtensions message) {
-  // TODO(antonm): introduce hasExtension matcher and other domain
-  // specific ones.
-  expect(message.hasExtension(Unittest.optionalInt32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalInt64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalUint32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalUint64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalSint32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalSint64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalFixed32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalFixed64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalSfixed32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalSfixed64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalFloatExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalDoubleExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalBoolExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalStringExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalBytesExtension), isTrue);
-
-  expect(message.hasExtension(Unittest.optionalGroupExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalNestedMessageExtension), isTrue);
-  expect(
-      message.hasExtension(Unittest.optionalForeignMessageExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalImportMessageExtension), isTrue);
-
-  expect(message.getExtension(Unittest.optionalGroupExtension).hasA(), isTrue);
-  expect(message.getExtension(Unittest.optionalNestedMessageExtension).hasBb(),
-      isTrue);
-  expect(message.getExtension(Unittest.optionalForeignMessageExtension).hasC(),
-      isTrue);
-  expect(message.getExtension(Unittest.optionalImportMessageExtension).hasD(),
-      isTrue);
-
-  expect(message.hasExtension(Unittest.optionalNestedEnumExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalForeignEnumExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalImportEnumExtension), isTrue);
-
-  expect(message.hasExtension(Unittest.optionalStringPieceExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalCordExtension), isTrue);
-
-  expect(message.getExtension(Unittest.optionalInt32Extension), 101);
-  expect(message.getExtension(Unittest.optionalInt64Extension), expect64(102));
-  expect(message.getExtension(Unittest.optionalUint32Extension), 103);
-  expect(message.getExtension(Unittest.optionalUint64Extension), expect64(104));
-  expect(message.getExtension(Unittest.optionalSint32Extension), 105);
-  expect(message.getExtension(Unittest.optionalSint64Extension), expect64(106));
-  expect(message.getExtension(Unittest.optionalFixed32Extension), 107);
-  expect(
-      message.getExtension(Unittest.optionalFixed64Extension), expect64(108));
-  expect(message.getExtension(Unittest.optionalSfixed32Extension), 109);
-  expect(
-      message.getExtension(Unittest.optionalSfixed64Extension), expect64(110));
-  expect(message.getExtension(Unittest.optionalFloatExtension), 111.0);
-  expect(message.getExtension(Unittest.optionalDoubleExtension), 112.0);
-  expect(message.getExtension(Unittest.optionalBoolExtension), true);
-  expect(message.getExtension(Unittest.optionalStringExtension), '115');
-  expect(
-      message.getExtension(Unittest.optionalBytesExtension), '116'.codeUnits);
-
-  expect(message.getExtension(Unittest.optionalGroupExtension).a, 117);
-  expect(message.getExtension(Unittest.optionalNestedMessageExtension).bb, 118);
-  expect(message.getExtension(Unittest.optionalForeignMessageExtension).c, 119);
-  expect(message.getExtension(Unittest.optionalImportMessageExtension).d, 120);
-
-  expect(message.getExtension(Unittest.optionalNestedEnumExtension),
-      TestAllTypes_NestedEnum.BAZ);
-  expect(message.getExtension(Unittest.optionalForeignEnumExtension),
-      ForeignEnum.FOREIGN_BAZ);
-  expect(message.getExtension(Unittest.optionalImportEnumExtension),
-      ImportEnum.IMPORT_BAZ);
-
-  expect(message.getExtension(Unittest.optionalStringPieceExtension), '124');
-  expect(message.getExtension(Unittest.optionalCordExtension), '125');
-
-  // -----------------------------------------------------------------
-
-  expect(message.getExtension(Unittest.repeatedInt32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedInt64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedUint32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedUint64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedSint32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedSint64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedFixed32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedFixed64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedSfixed32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedSfixed64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedFloatExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedDoubleExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedBoolExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedStringExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedBytesExtension).length, 2);
-
-  expect(message.getExtension(Unittest.repeatedGroupExtension).length, 2);
-  expect(
-      message.getExtension(Unittest.repeatedNestedMessageExtension).length, 2);
-  expect(
-      message.getExtension(Unittest.repeatedForeignMessageExtension).length, 2);
-  expect(
-      message.getExtension(Unittest.repeatedImportMessageExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedNestedEnumExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedForeignEnumExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedImportEnumExtension).length, 2);
-
-  expect(message.getExtension(Unittest.repeatedStringPieceExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedCordExtension).length, 2);
-
-  expect(message.getExtension(Unittest.repeatedInt32Extension)[0], 201);
-  expect(
-      message.getExtension(Unittest.repeatedInt64Extension)[0], expect64(202));
-  expect(message.getExtension(Unittest.repeatedUint32Extension)[0], 203);
-  expect(
-      message.getExtension(Unittest.repeatedUint64Extension)[0], expect64(204));
-  expect(message.getExtension(Unittest.repeatedSint32Extension)[0], 205);
-  expect(
-      message.getExtension(Unittest.repeatedSint64Extension)[0], expect64(206));
-  expect(message.getExtension(Unittest.repeatedFixed32Extension)[0], 207);
-  expect(message.getExtension(Unittest.repeatedFixed64Extension)[0],
-      expect64(208));
-  expect(message.getExtension(Unittest.repeatedSfixed32Extension)[0], 209);
-  expect(message.getExtension(Unittest.repeatedSfixed64Extension)[0],
-      expect64(210));
-  expect(message.getExtension(Unittest.repeatedFloatExtension)[0], 211.0);
-  expect(message.getExtension(Unittest.repeatedDoubleExtension)[0], 212.0);
-  expect(message.getExtension(Unittest.repeatedBoolExtension)[0], true);
-  expect(message.getExtension(Unittest.repeatedStringExtension)[0], '215');
-  expect(message.getExtension(Unittest.repeatedBytesExtension)[0],
-      '216'.codeUnits);
-
-  expect(message.getExtension(Unittest.repeatedGroupExtension)[0].a, 217);
-  expect(
-      message.getExtension(Unittest.repeatedNestedMessageExtension)[0].bb, 218);
-  expect(
-      message.getExtension(Unittest.repeatedForeignMessageExtension)[0].c, 219);
-  expect(
-      message.getExtension(Unittest.repeatedImportMessageExtension)[0].d, 220);
-
-  expect(message.getExtension(Unittest.repeatedNestedEnumExtension)[0],
-      TestAllTypes_NestedEnum.BAR);
-  expect(message.getExtension(Unittest.repeatedForeignEnumExtension)[0],
-      ForeignEnum.FOREIGN_BAR);
-  expect(message.getExtension(Unittest.repeatedImportEnumExtension)[0],
-      ImportEnum.IMPORT_BAR);
-
-  expect(message.getExtension(Unittest.repeatedStringPieceExtension)[0], '224');
-  expect(message.getExtension(Unittest.repeatedCordExtension)[0], '225');
-
-  expect(message.getExtension(Unittest.repeatedInt32Extension)[1], 301);
-  expect(
-      message.getExtension(Unittest.repeatedInt64Extension)[1], expect64(302));
-  expect(message.getExtension(Unittest.repeatedUint32Extension)[1], 303);
-  expect(
-      message.getExtension(Unittest.repeatedUint64Extension)[1], expect64(304));
-  expect(message.getExtension(Unittest.repeatedSint32Extension)[1], 305);
-  expect(
-      message.getExtension(Unittest.repeatedSint64Extension)[1], expect64(306));
-  expect(message.getExtension(Unittest.repeatedFixed32Extension)[1], 307);
-  expect(message.getExtension(Unittest.repeatedFixed64Extension)[1],
-      expect64(308));
-  expect(message.getExtension(Unittest.repeatedSfixed32Extension)[1], 309);
-  expect(message.getExtension(Unittest.repeatedSfixed64Extension)[1],
-      expect64(310));
-  expect(message.getExtension(Unittest.repeatedFloatExtension)[1], 311.0);
-  expect(message.getExtension(Unittest.repeatedDoubleExtension)[1], 312.0);
-  expect(message.getExtension(Unittest.repeatedBoolExtension)[1], false);
-  expect(message.getExtension(Unittest.repeatedStringExtension)[1], '315');
-  expect(message.getExtension(Unittest.repeatedBytesExtension)[1],
-      '316'.codeUnits);
-
-  expect(message.getExtension(Unittest.repeatedGroupExtension)[1].a, 317);
-  expect(
-      message.getExtension(Unittest.repeatedNestedMessageExtension)[1].bb, 318);
-  expect(
-      message.getExtension(Unittest.repeatedForeignMessageExtension)[1].c, 319);
-  expect(
-      message.getExtension(Unittest.repeatedImportMessageExtension)[1].d, 320);
-
-  expect(message.getExtension(Unittest.repeatedNestedEnumExtension)[1],
-      TestAllTypes_NestedEnum.BAZ);
-  expect(message.getExtension(Unittest.repeatedForeignEnumExtension)[1],
-      ForeignEnum.FOREIGN_BAZ);
-  expect(message.getExtension(Unittest.repeatedImportEnumExtension)[1],
-      ImportEnum.IMPORT_BAZ);
-
-  expect(message.getExtension(Unittest.repeatedStringPieceExtension)[1], '324');
-  expect(message.getExtension(Unittest.repeatedCordExtension)[1], '325');
-
-  // -----------------------------------------------------------------
-
-  expect(message.hasExtension(Unittest.defaultInt32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultInt64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultUint32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultUint64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultSint32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultSint64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultFixed32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultFixed64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultSfixed32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultSfixed64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultFloatExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultDoubleExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultBoolExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultStringExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultBytesExtension), isTrue);
-
-  expect(message.hasExtension(Unittest.defaultNestedEnumExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultForeignEnumExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultImportEnumExtension), isTrue);
-
-  expect(message.hasExtension(Unittest.defaultStringPieceExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultCordExtension), isTrue);
-  expect(message.getExtension(Unittest.defaultInt32Extension), 401);
-  expect(message.getExtension(Unittest.defaultInt64Extension), expect64(402));
-  expect(message.getExtension(Unittest.defaultUint32Extension), 403);
-  expect(message.getExtension(Unittest.defaultUint64Extension), expect64(404));
-  expect(message.getExtension(Unittest.defaultSint32Extension), 405);
-  expect(message.getExtension(Unittest.defaultSint64Extension), expect64(406));
-  expect(message.getExtension(Unittest.defaultFixed32Extension), 407);
-  expect(message.getExtension(Unittest.defaultFixed64Extension), expect64(408));
-  expect(message.getExtension(Unittest.defaultSfixed32Extension), 409);
-  expect(
-      message.getExtension(Unittest.defaultSfixed64Extension), expect64(410));
-  expect(message.getExtension(Unittest.defaultFloatExtension), 411.0);
-  expect(message.getExtension(Unittest.defaultDoubleExtension), 412.0);
-  expect(message.getExtension(Unittest.defaultBoolExtension), false);
-  expect(message.getExtension(Unittest.defaultStringExtension), '415');
-  expect(message.getExtension(Unittest.defaultBytesExtension), '416'.codeUnits);
-
-  expect(message.getExtension(Unittest.defaultNestedEnumExtension),
-      TestAllTypes_NestedEnum.FOO);
-  expect(message.getExtension(Unittest.defaultForeignEnumExtension),
-      ForeignEnum.FOREIGN_FOO);
-  expect(message.getExtension(Unittest.defaultImportEnumExtension),
-      ImportEnum.IMPORT_FOO);
-
-  expect(message.getExtension(Unittest.defaultStringPieceExtension), '424');
-  expect(message.getExtension(Unittest.defaultCordExtension), '425');
-}
-
-void assertAllFieldsSet(TestAllTypes message) {
-  expect(message.hasOptionalInt32(), isTrue);
-  expect(message.hasOptionalInt64(), isTrue);
-  expect(message.hasOptionalUint32(), isTrue);
-  expect(message.hasOptionalUint64(), isTrue);
-  expect(message.hasOptionalSint32(), isTrue);
-  expect(message.hasOptionalSint64(), isTrue);
-  expect(message.hasOptionalFixed32(), isTrue);
-  expect(message.hasOptionalFixed64(), isTrue);
-  expect(message.hasOptionalSfixed32(), isTrue);
-  expect(message.hasOptionalSfixed64(), isTrue);
-  expect(message.hasOptionalFloat(), isTrue);
-  expect(message.hasOptionalDouble(), isTrue);
-  expect(message.hasOptionalBool(), isTrue);
-  expect(message.hasOptionalString(), isTrue);
-  expect(message.hasOptionalBytes(), isTrue);
-
-  expect(message.hasOptionalGroup(), isTrue);
-  expect(message.hasOptionalNestedMessage(), isTrue);
-  expect(message.hasOptionalForeignMessage(), isTrue);
-  expect(message.hasOptionalImportMessage(), isTrue);
-
-  expect(message.optionalGroup.hasA(), isTrue);
-  expect(message.optionalNestedMessage.hasBb(), isTrue);
-  expect(message.optionalForeignMessage.hasC(), isTrue);
-  expect(message.optionalImportMessage.hasD(), isTrue);
-
-  expect(message.hasOptionalNestedEnum(), isTrue);
-  expect(message.hasOptionalForeignEnum(), isTrue);
-  expect(message.hasOptionalImportEnum(), isTrue);
-
-  expect(message.hasOptionalStringPiece(), isTrue);
-  expect(message.hasOptionalCord(), isTrue);
-
-  expect(message.optionalInt32, 101);
-  expect(message.optionalInt64, expect64(102));
-  expect(message.optionalUint32, 103);
-  expect(message.optionalUint64, expect64(104));
-  expect(message.optionalSint32, 105);
-  expect(message.optionalSint64, expect64(106));
-  expect(message.optionalFixed32, 107);
-  expect(message.optionalFixed64, expect64(108));
-  expect(message.optionalSfixed32, 109);
-  expect(message.optionalSfixed64, expect64(110));
-  expect(message.optionalFloat, 111.0);
-  expect(message.optionalDouble, 112.0);
-  expect(message.optionalBool, true);
-  expect(message.optionalString, '115');
-  expect(message.optionalBytes, '116'.codeUnits);
-
-  expect(message.optionalGroup.a, 117);
-  expect(message.optionalNestedMessage.bb, 118);
-  expect(message.optionalForeignMessage.c, 119);
-  expect(message.optionalImportMessage.d, 120);
-
-  expect(message.optionalNestedEnum, TestAllTypes_NestedEnum.BAZ);
-  expect(message.optionalForeignEnum, ForeignEnum.FOREIGN_BAZ);
-  expect(message.optionalImportEnum, ImportEnum.IMPORT_BAZ);
-
-  expect(message.optionalStringPiece, '124');
-  expect(message.optionalCord, '125');
-
-  // -----------------------------------------------------------------
-
-  expect(message.repeatedInt32.length, 2);
-  expect(message.repeatedInt64.length, 2);
-  expect(message.repeatedUint32.length, 2);
-  expect(message.repeatedUint64.length, 2);
-  expect(message.repeatedSint32.length, 2);
-  expect(message.repeatedSint64.length, 2);
-  expect(message.repeatedFixed32.length, 2);
-  expect(message.repeatedFixed64.length, 2);
-  expect(message.repeatedSfixed32.length, 2);
-  expect(message.repeatedSfixed64.length, 2);
-  expect(message.repeatedFloat.length, 2);
-  expect(message.repeatedDouble.length, 2);
-  expect(message.repeatedBool.length, 2);
-  expect(message.repeatedString.length, 2);
-  expect(message.repeatedBytes.length, 2);
-
-  expect(message.repeatedGroup.length, 2);
-  expect(message.repeatedNestedMessage.length, 2);
-  expect(message.repeatedForeignMessage.length, 2);
-  expect(message.repeatedImportMessage.length, 2);
-  expect(message.repeatedNestedEnum.length, 2);
-  expect(message.repeatedForeignEnum.length, 2);
-  expect(message.repeatedImportEnum.length, 2);
-
-  expect(message.repeatedStringPiece.length, 2);
-  expect(message.repeatedCord.length, 2);
-
-  expect(message.repeatedInt32[0], 201);
-  expect(message.repeatedInt64[0], expect64(202));
-  expect(message.repeatedUint32[0], 203);
-  expect(message.repeatedUint64[0], expect64(204));
-  expect(message.repeatedSint32[0], 205);
-  expect(message.repeatedSint64[0], expect64(206));
-  expect(message.repeatedFixed32[0], 207);
-  expect(message.repeatedFixed64[0], expect64(208));
-  expect(message.repeatedSfixed32[0], 209);
-  expect(message.repeatedSfixed64[0], expect64(210));
-  expect(message.repeatedFloat[0], 211.0);
-  expect(message.repeatedDouble[0], 212.0);
-  expect(message.repeatedBool[0], true);
-  expect(message.repeatedString[0], '215');
-  expect(message.repeatedBytes[0], '216'.codeUnits);
-
-  expect(message.repeatedGroup[0].a, 217);
-  expect(message.repeatedNestedMessage[0].bb, 218);
-  expect(message.repeatedForeignMessage[0].c, 219);
-  expect(message.repeatedImportMessage[0].d, 220);
-
-  expect(message.repeatedNestedEnum[0], TestAllTypes_NestedEnum.BAR);
-  expect(message.repeatedForeignEnum[0], ForeignEnum.FOREIGN_BAR);
-  expect(message.repeatedImportEnum[0], ImportEnum.IMPORT_BAR);
-
-  expect(message.repeatedStringPiece[0], '224');
-  expect(message.repeatedCord[0], '225');
-
-  expect(message.repeatedInt32[1], 301);
-  expect(message.repeatedInt64[1], expect64(302));
-  expect(message.repeatedUint32[1], 303);
-  expect(message.repeatedUint64[1], expect64(304));
-  expect(message.repeatedSint32[1], 305);
-  expect(message.repeatedSint64[1], expect64(306));
-  expect(message.repeatedFixed32[1], 307);
-  expect(message.repeatedFixed64[1], expect64(308));
-  expect(message.repeatedSfixed32[1], 309);
-  expect(message.repeatedSfixed64[1], expect64(310));
-  expect(message.repeatedFloat[1], 311.0);
-  expect(message.repeatedDouble[1], 312.0);
-  expect(message.repeatedBool[1], false);
-  expect(message.repeatedString[1], '315');
-  expect(message.repeatedBytes[1], '316'.codeUnits);
-
-  expect(message.repeatedGroup[1].a, 317);
-  expect(message.repeatedNestedMessage[1].bb, 318);
-  expect(message.repeatedForeignMessage[1].c, 319);
-  expect(message.repeatedImportMessage[1].d, 320);
-
-  expect(message.repeatedNestedEnum[1], TestAllTypes_NestedEnum.BAZ);
-  expect(message.repeatedForeignEnum[1], ForeignEnum.FOREIGN_BAZ);
-  expect(message.repeatedImportEnum[1], ImportEnum.IMPORT_BAZ);
-
-  expect(message.repeatedStringPiece[1], '324');
-  expect(message.repeatedCord[1], '325');
-
-  // -----------------------------------------------------------------
-
-  expect(message.hasDefaultInt32(), isTrue);
-  expect(message.hasDefaultInt64(), isTrue);
-  expect(message.hasDefaultUint32(), isTrue);
-  expect(message.hasDefaultUint64(), isTrue);
-  expect(message.hasDefaultSint32(), isTrue);
-  expect(message.hasDefaultSint64(), isTrue);
-  expect(message.hasDefaultFixed32(), isTrue);
-  expect(message.hasDefaultFixed64(), isTrue);
-  expect(message.hasDefaultSfixed32(), isTrue);
-  expect(message.hasDefaultSfixed64(), isTrue);
-  expect(message.hasDefaultFloat(), isTrue);
-  expect(message.hasDefaultDouble(), isTrue);
-  expect(message.hasDefaultBool(), isTrue);
-  expect(message.hasDefaultString(), isTrue);
-  expect(message.hasDefaultBytes(), isTrue);
-
-  expect(message.hasDefaultNestedEnum(), isTrue);
-  expect(message.hasDefaultForeignEnum(), isTrue);
-  expect(message.hasDefaultImportEnum(), isTrue);
-
-  expect(message.hasDefaultStringPiece(), isTrue);
-  expect(message.hasDefaultCord(), isTrue);
-
-  expect(message.defaultInt32, 401);
-  expect(message.defaultInt64, expect64(402));
-  expect(message.defaultUint32, 403);
-  expect(message.defaultUint64, expect64(404));
-  expect(message.defaultSint32, 405);
-  expect(message.defaultSint64, expect64(406));
-  expect(message.defaultFixed32, 407);
-  expect(message.defaultFixed64, expect64(408));
-  expect(message.defaultSfixed32, 409);
-  expect(message.defaultSfixed64, expect64(410));
-  expect(message.defaultFloat, 411.0);
-  expect(message.defaultDouble, 412.0);
-  expect(message.defaultBool, false);
-  expect(message.defaultString, '415');
-  expect(message.defaultBytes, '416'.codeUnits);
-
-  expect(message.defaultNestedEnum, TestAllTypes_NestedEnum.FOO);
-  expect(message.defaultForeignEnum, ForeignEnum.FOREIGN_FOO);
-  expect(message.defaultImportEnum, ImportEnum.IMPORT_FOO);
-
-  expect(message.defaultStringPiece, '424');
-  expect(message.defaultCord, '425');
-}
-
-void assertClear(TestAllTypes message) {
-  // hasBlah() should initially be false for all optional fields.
-  expect(message.hasOptionalInt32(), isFalse);
-  expect(message.hasOptionalInt64(), isFalse);
-  expect(message.hasOptionalUint32(), isFalse);
-  expect(message.hasOptionalUint64(), isFalse);
-  expect(message.hasOptionalSint32(), isFalse);
-  expect(message.hasOptionalSint64(), isFalse);
-  expect(message.hasOptionalFixed32(), isFalse);
-  expect(message.hasOptionalFixed64(), isFalse);
-  expect(message.hasOptionalSfixed32(), isFalse);
-  expect(message.hasOptionalSfixed64(), isFalse);
-  expect(message.hasOptionalFloat(), isFalse);
-  expect(message.hasOptionalDouble(), isFalse);
-  expect(message.hasOptionalBool(), isFalse);
-  expect(message.hasOptionalString(), isFalse);
-  expect(message.hasOptionalBytes(), isFalse);
-
-  expect(message.hasOptionalGroup(), isFalse);
-  expect(message.hasOptionalNestedMessage(), isFalse);
-  expect(message.hasOptionalForeignMessage(), isFalse);
-  expect(message.hasOptionalImportMessage(), isFalse);
-
-  expect(message.hasOptionalNestedEnum(), isFalse);
-  expect(message.hasOptionalForeignEnum(), isFalse);
-  expect(message.hasOptionalImportEnum(), isFalse);
-
-  expect(message.hasOptionalStringPiece(), isFalse);
-  expect(message.hasOptionalCord(), isFalse);
-
-  // Optional fields without defaults are set to zero or something like it.
-  expect(message.optionalInt32, 0);
-  expect(message.optionalInt64, expect64(0));
-  expect(message.optionalUint32, 0);
-  expect(message.optionalUint64, expect64(0));
-  expect(message.optionalSint32, 0);
-  expect(message.optionalSint64, expect64(0));
-  expect(message.optionalFixed32, 0);
-  expect(message.optionalFixed64, expect64(0));
-  expect(message.optionalSfixed32, 0);
-  expect(message.optionalSfixed64, expect64(0));
-  expect(message.optionalFloat, 0);
-  expect(message.optionalDouble, 0);
-  expect(message.optionalBool, false);
-  expect(message.optionalString, '');
-  expect(message.optionalBytes, <int>[]);
-
-  // Embedded messages should also be clear.
-  expect(message.optionalGroup.hasA(), isFalse);
-  expect(message.optionalNestedMessage.hasBb(), isFalse);
-  expect(message.optionalForeignMessage.hasC(), isFalse);
-  expect(message.optionalImportMessage.hasD(), isFalse);
-
-  expect(message.optionalGroup.a, 0);
-  expect(message.optionalNestedMessage.bb, 0);
-  expect(message.optionalForeignMessage.c, 0);
-  expect(message.optionalImportMessage.d, 0);
-
-  // Enums without defaults are set to the first value in the enum.
-  expect(message.optionalNestedEnum, TestAllTypes_NestedEnum.FOO);
-  expect(message.optionalForeignEnum, ForeignEnum.FOREIGN_FOO);
-  expect(message.optionalImportEnum, ImportEnum.IMPORT_FOO);
-
-  expect(message.optionalStringPiece, '');
-  expect(message.optionalCord, '');
-
-  // Repeated fields are empty.
-  expect(message.repeatedInt32.length, 0);
-  expect(message.repeatedInt64.length, 0);
-  expect(message.repeatedUint32.length, 0);
-  expect(message.repeatedUint64.length, 0);
-  expect(message.repeatedSint32.length, 0);
-  expect(message.repeatedSint64.length, 0);
-  expect(message.repeatedFixed32.length, 0);
-  expect(message.repeatedFixed64.length, 0);
-  expect(message.repeatedSfixed32.length, 0);
-  expect(message.repeatedSfixed64.length, 0);
-  expect(message.repeatedFloat.length, 0);
-  expect(message.repeatedDouble.length, 0);
-  expect(message.repeatedBool.length, 0);
-  expect(message.repeatedString.length, 0);
-  expect(message.repeatedBytes.length, 0);
-
-  expect(message.repeatedGroup.length, 0);
-  expect(message.repeatedNestedMessage.length, 0);
-  expect(message.repeatedForeignMessage.length, 0);
-  expect(message.repeatedImportMessage.length, 0);
-  expect(message.repeatedNestedEnum.length, 0);
-  expect(message.repeatedForeignEnum.length, 0);
-  expect(message.repeatedImportEnum.length, 0);
-
-  expect(message.repeatedStringPiece.length, 0);
-  expect(message.repeatedCord.length, 0);
-
-  // hasBlah() should also be false for all default fields.
-  expect(message.hasDefaultInt32(), isFalse);
-  expect(message.hasDefaultInt64(), isFalse);
-  expect(message.hasDefaultUint32(), isFalse);
-  expect(message.hasDefaultUint64(), isFalse);
-  expect(message.hasDefaultSint32(), isFalse);
-  expect(message.hasDefaultSint64(), isFalse);
-  expect(message.hasDefaultFixed32(), isFalse);
-  expect(message.hasDefaultFixed64(), isFalse);
-  expect(message.hasDefaultSfixed32(), isFalse);
-  expect(message.hasDefaultSfixed64(), isFalse);
-  expect(message.hasDefaultFloat(), isFalse);
-  expect(message.hasDefaultDouble(), isFalse);
-  expect(message.hasDefaultBool(), isFalse);
-  expect(message.hasDefaultString(), isFalse);
-  expect(message.hasDefaultBytes(), isFalse);
-
-  expect(message.hasDefaultNestedEnum(), isFalse);
-  expect(message.hasDefaultForeignEnum(), isFalse);
-  expect(message.hasDefaultImportEnum(), isFalse);
-
-  expect(message.hasDefaultStringPiece(), isFalse);
-  expect(message.hasDefaultCord(), isFalse);
-
-  // Fields with defaults have their default values(duh).
-  expect(message.defaultInt32, 41);
-  expect(message.defaultInt64, expect64(42));
-  expect(message.defaultUint32, 43);
-  expect(message.defaultUint64, expect64(44));
-  expect(message.defaultSint32, -45);
-  expect(message.defaultSint64, expect64(46));
-  expect(message.defaultFixed32, 47);
-  expect(message.defaultFixed64, expect64(48));
-  expect(message.defaultSfixed32, 49);
-  expect(message.defaultSfixed64, expect64(-50));
-  expect(message.defaultFloat, 51.5);
-  expect(message.defaultDouble, 52e3);
-  expect(message.defaultBool, isTrue);
-  expect(message.defaultString, 'hello');
-  expect(message.defaultBytes, 'world'.codeUnits);
-
-  expect(message.defaultNestedEnum, TestAllTypes_NestedEnum.BAR);
-  expect(message.defaultForeignEnum, ForeignEnum.FOREIGN_BAR);
-  expect(message.defaultImportEnum, ImportEnum.IMPORT_BAR);
-
-  expect(message.defaultStringPiece, 'abc');
-  expect(message.defaultCord, '123');
-}
-
-void assertExtensionsClear(TestAllExtensions message) {
-  // hasBlah() should initially be false for all optional fields.
-  expect(message.hasExtension(Unittest.optionalInt32Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalInt64Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalUint32Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalUint64Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalSint32Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalSint64Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalFixed32Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalFixed64Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalSfixed32Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalSfixed64Extension), isFalse);
-  expect(message.hasExtension(Unittest.optionalFloatExtension), isFalse);
-  expect(message.hasExtension(Unittest.optionalDoubleExtension), isFalse);
-  expect(message.hasExtension(Unittest.optionalBoolExtension), isFalse);
-  expect(message.hasExtension(Unittest.optionalStringExtension), isFalse);
-  expect(message.hasExtension(Unittest.optionalBytesExtension), isFalse);
-
-  expect(message.hasExtension(Unittest.optionalGroupExtension), isFalse);
-  expect(
-      message.hasExtension(Unittest.optionalNestedMessageExtension), isFalse);
-  expect(
-      message.hasExtension(Unittest.optionalForeignMessageExtension), isFalse);
-  expect(
-      message.hasExtension(Unittest.optionalImportMessageExtension), isFalse);
-
-  expect(message.hasExtension(Unittest.optionalNestedEnumExtension), isFalse);
-  expect(message.hasExtension(Unittest.optionalForeignEnumExtension), isFalse);
-  expect(message.hasExtension(Unittest.optionalImportEnumExtension), isFalse);
-
-  expect(message.hasExtension(Unittest.optionalStringPieceExtension), isFalse);
-  expect(message.hasExtension(Unittest.optionalCordExtension), isFalse);
-
-  // Optional fields without defaults are set to zero or something like it.
-  expect(message.getExtension(Unittest.optionalInt32Extension), 0);
-  expect(message.getExtension(Unittest.optionalInt64Extension), expect64(0));
-  expect(message.getExtension(Unittest.optionalUint32Extension), 0);
-  expect(message.getExtension(Unittest.optionalUint64Extension), expect64(0));
-  expect(message.getExtension(Unittest.optionalSint32Extension), 0);
-  expect(message.getExtension(Unittest.optionalSint64Extension), expect64(0));
-  expect(message.getExtension(Unittest.optionalFixed32Extension), 0);
-  expect(message.getExtension(Unittest.optionalFixed64Extension), expect64(0));
-  expect(message.getExtension(Unittest.optionalSfixed32Extension), 0);
-  expect(message.getExtension(Unittest.optionalSfixed64Extension), expect64(0));
-  expect(message.getExtension(Unittest.optionalFloatExtension), 0.0);
-  expect(message.getExtension(Unittest.optionalDoubleExtension), 0.0);
-  expect(message.getExtension(Unittest.optionalBoolExtension), false);
-  expect(message.getExtension(Unittest.optionalStringExtension), '');
-  expect(message.getExtension(Unittest.optionalBytesExtension), <int>[]);
-
-  // Embedded messages should also be clear.
-  expect(message.getExtension(Unittest.optionalGroupExtension).hasA(), isFalse);
-  expect(message.getExtension(Unittest.optionalNestedMessageExtension).hasBb(),
-      isFalse);
-  expect(message.getExtension(Unittest.optionalForeignMessageExtension).hasC(),
-      isFalse);
-  expect(message.getExtension(Unittest.optionalImportMessageExtension).hasD(),
-      isFalse);
-
-  expect(message.getExtension(Unittest.optionalGroupExtension).a, 0);
-  expect(message.getExtension(Unittest.optionalNestedMessageExtension).bb, 0);
-  expect(message.getExtension(Unittest.optionalForeignMessageExtension).c, 0);
-  expect(message.getExtension(Unittest.optionalImportMessageExtension).d, 0);
-
-  // Enums without defaults are set to the first value in the enum.
-  expect(message.getExtension(Unittest.optionalNestedEnumExtension),
-      TestAllTypes_NestedEnum.FOO);
-  expect(message.getExtension(Unittest.optionalForeignEnumExtension),
-      ForeignEnum.FOREIGN_FOO);
-  expect(message.getExtension(Unittest.optionalImportEnumExtension),
-      ImportEnum.IMPORT_FOO);
-
-  expect(message.getExtension(Unittest.optionalStringPieceExtension), '');
-  expect(message.getExtension(Unittest.optionalCordExtension), '');
-
-  // Repeated fields are empty.
-  expect(message.getExtension(Unittest.repeatedInt32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedInt64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedUint32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedUint64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedSint32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedSint64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedFixed32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedFixed64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedSfixed32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedSfixed64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedFloatExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedDoubleExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedBoolExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedStringExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedBytesExtension).length, 0);
-
-  expect(message.getExtension(Unittest.repeatedGroupExtension).length, 0);
-  expect(
-      message.getExtension(Unittest.repeatedNestedMessageExtension).length, 0);
-  expect(
-      message.getExtension(Unittest.repeatedForeignMessageExtension).length, 0);
-  expect(
-      message.getExtension(Unittest.repeatedImportMessageExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedNestedEnumExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedForeignEnumExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedImportEnumExtension).length, 0);
-
-  expect(message.getExtension(Unittest.repeatedStringPieceExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedCordExtension).length, 0);
-
-  // Repeated fields are empty via getExtension().length.
-  expect(message.getExtension(Unittest.repeatedInt32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedInt64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedUint32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedUint64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedSint32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedSint64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedFixed32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedFixed64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedSfixed32Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedSfixed64Extension).length, 0);
-  expect(message.getExtension(Unittest.repeatedFloatExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedDoubleExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedBoolExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedStringExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedBytesExtension).length, 0);
-
-  expect(message.getExtension(Unittest.repeatedGroupExtension).length, 0);
-  expect(
-      message.getExtension(Unittest.repeatedNestedMessageExtension).length, 0);
-  expect(
-      message.getExtension(Unittest.repeatedForeignMessageExtension).length, 0);
-  expect(
-      message.getExtension(Unittest.repeatedImportMessageExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedNestedEnumExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedForeignEnumExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedImportEnumExtension).length, 0);
-
-  expect(message.getExtension(Unittest.repeatedStringPieceExtension).length, 0);
-  expect(message.getExtension(Unittest.repeatedCordExtension).length, 0);
-
-  // hasBlah() should also be false for all default fields.
-  expect(message.hasExtension(Unittest.defaultInt32Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultInt64Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultUint32Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultUint64Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultSint32Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultSint64Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultFixed32Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultFixed64Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultSfixed32Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultSfixed64Extension), isFalse);
-  expect(message.hasExtension(Unittest.defaultFloatExtension), isFalse);
-  expect(message.hasExtension(Unittest.defaultDoubleExtension), isFalse);
-  expect(message.hasExtension(Unittest.defaultBoolExtension), isFalse);
-  expect(message.hasExtension(Unittest.defaultStringExtension), isFalse);
-  expect(message.hasExtension(Unittest.defaultBytesExtension), isFalse);
-
-  expect(message.hasExtension(Unittest.defaultNestedEnumExtension), isFalse);
-  expect(message.hasExtension(Unittest.defaultForeignEnumExtension), isFalse);
-  expect(message.hasExtension(Unittest.defaultImportEnumExtension), isFalse);
-
-  expect(message.hasExtension(Unittest.defaultStringPieceExtension), isFalse);
-  expect(message.hasExtension(Unittest.defaultCordExtension), isFalse);
-
-  // Fields with defaults have their default values (duh).
-  expect(message.getExtension(Unittest.defaultInt32Extension), 41);
-  expect(message.getExtension(Unittest.defaultInt64Extension), expect64(42));
-  expect(message.getExtension(Unittest.defaultUint32Extension), 43);
-  expect(message.getExtension(Unittest.defaultUint64Extension), expect64(44));
-  expect(message.getExtension(Unittest.defaultSint32Extension), -45);
-  expect(message.getExtension(Unittest.defaultSint64Extension), expect64(46));
-  expect(message.getExtension(Unittest.defaultFixed32Extension), 47);
-  expect(message.getExtension(Unittest.defaultFixed64Extension), expect64(48));
-  expect(message.getExtension(Unittest.defaultSfixed32Extension), 49);
-  expect(
-      message.getExtension(Unittest.defaultSfixed64Extension), expect64(-50));
-  expect(message.getExtension(Unittest.defaultFloatExtension), 51.5);
-  expect(message.getExtension(Unittest.defaultDoubleExtension), 52e3);
-  expect(message.getExtension(Unittest.defaultBoolExtension), true);
-  expect(message.getExtension(Unittest.defaultStringExtension), 'hello');
-  expect(
-      message.getExtension(Unittest.defaultBytesExtension), 'world'.codeUnits);
-
-  expect(message.getExtension(Unittest.defaultNestedEnumExtension),
-      TestAllTypes_NestedEnum.BAR);
-  expect(message.getExtension(Unittest.defaultForeignEnumExtension),
-      ForeignEnum.FOREIGN_BAR);
-  expect(message.getExtension(Unittest.defaultImportEnumExtension),
-      ImportEnum.IMPORT_BAR);
-
-  expect(message.getExtension(Unittest.defaultStringPieceExtension), 'abc');
-  expect(message.getExtension(Unittest.defaultCordExtension), '123');
-}
-
-void assertPackedExtensionsSet(TestPackedExtensions message) {
-  expect(message.getExtension(Unittest.packedInt32Extension).length, 2);
-  expect(message.getExtension(Unittest.packedInt64Extension).length, 2);
-  expect(message.getExtension(Unittest.packedUint32Extension).length, 2);
-  expect(message.getExtension(Unittest.packedUint64Extension).length, 2);
-  expect(message.getExtension(Unittest.packedSint32Extension).length, 2);
-  expect(message.getExtension(Unittest.packedSint64Extension).length, 2);
-  expect(message.getExtension(Unittest.packedFixed32Extension).length, 2);
-  expect(message.getExtension(Unittest.packedFixed64Extension).length, 2);
-  expect(message.getExtension(Unittest.packedSfixed32Extension).length, 2);
-  expect(message.getExtension(Unittest.packedSfixed64Extension).length, 2);
-  expect(message.getExtension(Unittest.packedFloatExtension).length, 2);
-  expect(message.getExtension(Unittest.packedDoubleExtension).length, 2);
-  expect(message.getExtension(Unittest.packedBoolExtension).length, 2);
-  expect(message.getExtension(Unittest.packedEnumExtension).length, 2);
-  expect(message.getExtension(Unittest.packedInt32Extension)[0], 601);
-  expect(message.getExtension(Unittest.packedInt64Extension)[0], expect64(602));
-  expect(message.getExtension(Unittest.packedUint32Extension)[0], 603);
-  expect(
-      message.getExtension(Unittest.packedUint64Extension)[0], expect64(604));
-  expect(message.getExtension(Unittest.packedSint32Extension)[0], 605);
-  expect(
-      message.getExtension(Unittest.packedSint64Extension)[0], expect64(606));
-  expect(message.getExtension(Unittest.packedFixed32Extension)[0], 607);
-  expect(
-      message.getExtension(Unittest.packedFixed64Extension)[0], expect64(608));
-  expect(message.getExtension(Unittest.packedSfixed32Extension)[0], 609);
-  expect(
-      message.getExtension(Unittest.packedSfixed64Extension)[0], expect64(610));
-  expect(message.getExtension(Unittest.packedFloatExtension)[0], 611.0);
-  expect(message.getExtension(Unittest.packedDoubleExtension)[0], 612.0);
-  expect(message.getExtension(Unittest.packedBoolExtension)[0], true);
-  expect(message.getExtension(Unittest.packedEnumExtension)[0],
-      ForeignEnum.FOREIGN_BAR);
-  expect(message.getExtension(Unittest.packedInt32Extension)[1], 701);
-  expect(message.getExtension(Unittest.packedInt64Extension)[1], expect64(702));
-  expect(message.getExtension(Unittest.packedUint32Extension)[1], 703);
-  expect(
-      message.getExtension(Unittest.packedUint64Extension)[1], expect64(704));
-  expect(message.getExtension(Unittest.packedSint32Extension)[1], 705);
-  expect(
-      message.getExtension(Unittest.packedSint64Extension)[1], expect64(706));
-  expect(message.getExtension(Unittest.packedFixed32Extension)[1], 707);
-  expect(
-      message.getExtension(Unittest.packedFixed64Extension)[1], expect64(708));
-  expect(message.getExtension(Unittest.packedSfixed32Extension)[1], 709);
-  expect(
-      message.getExtension(Unittest.packedSfixed64Extension)[1], expect64(710));
-  expect(message.getExtension(Unittest.packedFloatExtension)[1], 711.0);
-  expect(message.getExtension(Unittest.packedDoubleExtension)[1], 712.0);
-  expect(message.getExtension(Unittest.packedBoolExtension)[1], false);
-  expect(message.getExtension(Unittest.packedEnumExtension)[1],
-      ForeignEnum.FOREIGN_BAZ);
-}
-
-/**
- * Assert (using expect} that all fields of [message] are set to the values
- * assigned by [setPackedFields].
- */
-void assertPackedFieldsSet(TestPackedTypes message) {
-  expect(message.packedInt32.length, 2);
-  expect(message.packedInt64.length, 2);
-  expect(message.packedUint32.length, 2);
-  expect(message.packedUint64.length, 2);
-  expect(message.packedSint32.length, 2);
-  expect(message.packedSint64.length, 2);
-  expect(message.packedFixed32.length, 2);
-  expect(message.packedFixed64.length, 2);
-  expect(message.packedSfixed32.length, 2);
-  expect(message.packedSfixed64.length, 2);
-  expect(message.packedFloat.length, 2);
-  expect(message.packedDouble.length, 2);
-  expect(message.packedBool.length, 2);
-  expect(message.packedEnum.length, 2);
-  expect(message.packedInt32[0], 601);
-  expect(message.packedInt64[0], expect64(602));
-  expect(message.packedUint32[0], 603);
-  expect(message.packedUint64[0], expect64(604));
-  expect(message.packedSint32[0], 605);
-  expect(message.packedSint64[0], expect64(606));
-  expect(message.packedFixed32[0], 607);
-  expect(message.packedFixed64[0], expect64(608));
-  expect(message.packedSfixed32[0], 609);
-  expect(message.packedSfixed64[0], expect64(610));
-  expect(message.packedFloat[0], 611.0);
-  expect(message.packedDouble[0], 612.0);
-  expect(message.packedBool[0], true);
-  expect(message.packedEnum[0], ForeignEnum.FOREIGN_BAR);
-  expect(message.packedInt32[1], 701);
-  expect(message.packedInt64[1], expect64(702));
-  expect(message.packedUint32[1], 703);
-  expect(message.packedUint64[1], expect64(704));
-  expect(message.packedSint32[1], 705);
-  expect(message.packedSint64[1], expect64(706));
-  expect(message.packedFixed32[1], 707);
-  expect(message.packedFixed64[1], expect64(708));
-  expect(message.packedSfixed32[1], 709);
-  expect(message.packedSfixed64[1], expect64(710));
-  expect(message.packedFloat[1], 711.0);
-  expect(message.packedDouble[1], 712.0);
-  expect(message.packedBool[1], false);
-  expect(message.packedEnum[1], ForeignEnum.FOREIGN_BAZ);
-}
-
-void assertRepeatedExtensionsModified(TestAllExtensions message) {
-  expect(message.hasExtension(Unittest.optionalInt32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalInt64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalUint32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalUint64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalSint32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalSint64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalFixed32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalFixed64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalSfixed32Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalSfixed64Extension), isTrue);
-  expect(message.hasExtension(Unittest.optionalFloatExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalDoubleExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalBoolExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalStringExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalBytesExtension), isTrue);
-
-  expect(message.hasExtension(Unittest.optionalGroupExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalNestedMessageExtension), isTrue);
-  expect(
-      message.hasExtension(Unittest.optionalForeignMessageExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalImportMessageExtension), isTrue);
-
-  expect(message.getExtension(Unittest.optionalGroupExtension).hasA(), isTrue);
-  expect(message.getExtension(Unittest.optionalNestedMessageExtension).hasBb(),
-      isTrue);
-  expect(message.getExtension(Unittest.optionalForeignMessageExtension).hasC(),
-      isTrue);
-  expect(message.getExtension(Unittest.optionalImportMessageExtension).hasD(),
-      isTrue);
-
-  expect(message.hasExtension(Unittest.optionalNestedEnumExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalForeignEnumExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalImportEnumExtension), isTrue);
-
-  expect(message.hasExtension(Unittest.optionalStringPieceExtension), isTrue);
-  expect(message.hasExtension(Unittest.optionalCordExtension), isTrue);
-
-  expect(message.getExtension(Unittest.optionalInt32Extension), 101);
-  expect(message.getExtension(Unittest.optionalInt64Extension), expect64(102));
-  expect(message.getExtension(Unittest.optionalUint32Extension), 103);
-  expect(message.getExtension(Unittest.optionalUint64Extension), expect64(104));
-  expect(message.getExtension(Unittest.optionalSint32Extension), 105);
-  expect(message.getExtension(Unittest.optionalSint64Extension), expect64(106));
-  expect(message.getExtension(Unittest.optionalFixed32Extension), 107);
-  expect(
-      message.getExtension(Unittest.optionalFixed64Extension), expect64(108));
-  expect(message.getExtension(Unittest.optionalSfixed32Extension), 109);
-  expect(
-      message.getExtension(Unittest.optionalSfixed64Extension), expect64(110));
-  expect(message.getExtension(Unittest.optionalFloatExtension), 111.0);
-  expect(message.getExtension(Unittest.optionalDoubleExtension), 112.0);
-  expect(message.getExtension(Unittest.optionalBoolExtension), true);
-  expect(message.getExtension(Unittest.optionalStringExtension), '115');
-  expect(
-      message.getExtension(Unittest.optionalBytesExtension), '116'.codeUnits);
-
-  expect(message.getExtension(Unittest.optionalGroupExtension).a, 117);
-  expect(message.getExtension(Unittest.optionalNestedMessageExtension).bb, 118);
-  expect(message.getExtension(Unittest.optionalForeignMessageExtension).c, 119);
-  expect(message.getExtension(Unittest.optionalImportMessageExtension).d, 120);
-
-  expect(message.getExtension(Unittest.optionalNestedEnumExtension),
-      TestAllTypes_NestedEnum.BAZ);
-  expect(message.getExtension(Unittest.optionalForeignEnumExtension),
-      ForeignEnum.FOREIGN_BAZ);
-  expect(message.getExtension(Unittest.optionalImportEnumExtension),
-      ImportEnum.IMPORT_BAZ);
-
-  expect(message.getExtension(Unittest.optionalStringPieceExtension), '124');
-  expect(message.getExtension(Unittest.optionalCordExtension), '125');
-
-  // -----------------------------------------------------------------
-
-  expect(message.getExtension(Unittest.repeatedInt32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedInt64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedUint32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedUint64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedSint32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedSint64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedFixed32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedFixed64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedSfixed32Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedSfixed64Extension).length, 2);
-  expect(message.getExtension(Unittest.repeatedFloatExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedDoubleExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedBoolExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedStringExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedBytesExtension).length, 2);
-
-  expect(message.getExtension(Unittest.repeatedGroupExtension).length, 2);
-  expect(
-      message.getExtension(Unittest.repeatedNestedMessageExtension).length, 2);
-  expect(
-      message.getExtension(Unittest.repeatedForeignMessageExtension).length, 2);
-  expect(
-      message.getExtension(Unittest.repeatedImportMessageExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedNestedEnumExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedForeignEnumExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedImportEnumExtension).length, 2);
-
-  expect(message.getExtension(Unittest.repeatedStringPieceExtension).length, 2);
-  expect(message.getExtension(Unittest.repeatedCordExtension).length, 2);
-
-  expect(message.getExtension(Unittest.repeatedInt32Extension)[0], 201);
-  expect(
-      message.getExtension(Unittest.repeatedInt64Extension)[0], expect64(202));
-  expect(message.getExtension(Unittest.repeatedUint32Extension)[0], 203);
-  expect(
-      message.getExtension(Unittest.repeatedUint64Extension)[0], expect64(204));
-  expect(message.getExtension(Unittest.repeatedSint32Extension)[0], 205);
-  expect(
-      message.getExtension(Unittest.repeatedSint64Extension)[0], expect64(206));
-  expect(message.getExtension(Unittest.repeatedFixed32Extension)[0], 207);
-  expect(message.getExtension(Unittest.repeatedFixed64Extension)[0],
-      expect64(208));
-  expect(message.getExtension(Unittest.repeatedSfixed32Extension)[0], 209);
-  expect(message.getExtension(Unittest.repeatedSfixed64Extension)[0],
-      expect64(210));
-  expect(message.getExtension(Unittest.repeatedFloatExtension)[0], 211.0);
-  expect(message.getExtension(Unittest.repeatedDoubleExtension)[0], 212.0);
-  expect(message.getExtension(Unittest.repeatedBoolExtension)[0], true);
-  expect(message.getExtension(Unittest.repeatedStringExtension)[0], '215');
-  expect(message.getExtension(Unittest.repeatedBytesExtension)[0],
-      '216'.codeUnits);
-
-  expect(message.getExtension(Unittest.repeatedGroupExtension)[0].a, 217);
-  expect(
-      message.getExtension(Unittest.repeatedNestedMessageExtension)[0].bb, 218);
-  expect(
-      message.getExtension(Unittest.repeatedForeignMessageExtension)[0].c, 219);
-  expect(
-      message.getExtension(Unittest.repeatedImportMessageExtension)[0].d, 220);
-
-  expect(message.getExtension(Unittest.repeatedNestedEnumExtension)[0],
-      TestAllTypes_NestedEnum.BAR);
-  expect(message.getExtension(Unittest.repeatedForeignEnumExtension)[0],
-      ForeignEnum.FOREIGN_BAR);
-  expect(message.getExtension(Unittest.repeatedImportEnumExtension)[0],
-      ImportEnum.IMPORT_BAR);
-
-  expect(message.getExtension(Unittest.repeatedStringPieceExtension)[0], '224');
-  expect(message.getExtension(Unittest.repeatedCordExtension)[0], '225');
-
-  expect(message.getExtension(Unittest.repeatedInt32Extension)[1], 501);
-  expect(
-      message.getExtension(Unittest.repeatedInt64Extension)[1], expect64(502));
-  expect(message.getExtension(Unittest.repeatedUint32Extension)[1], 503);
-  expect(
-      message.getExtension(Unittest.repeatedUint64Extension)[1], expect64(504));
-  expect(message.getExtension(Unittest.repeatedSint32Extension)[1], 505);
-  expect(
-      message.getExtension(Unittest.repeatedSint64Extension)[1], expect64(506));
-  expect(message.getExtension(Unittest.repeatedFixed32Extension)[1], 507);
-  expect(message.getExtension(Unittest.repeatedFixed64Extension)[1],
-      expect64(508));
-  expect(message.getExtension(Unittest.repeatedSfixed32Extension)[1], 509);
-  expect(message.getExtension(Unittest.repeatedSfixed64Extension)[1],
-      expect64(510));
-  expect(message.getExtension(Unittest.repeatedFloatExtension)[1], 511.0);
-  expect(message.getExtension(Unittest.repeatedDoubleExtension)[1], 512.0);
-  expect(message.getExtension(Unittest.repeatedBoolExtension)[1], true);
-  expect(message.getExtension(Unittest.repeatedStringExtension)[1], '515');
-  expect(message.getExtension(Unittest.repeatedBytesExtension)[1],
-      '516'.codeUnits);
-
-  expect(message.getExtension(Unittest.repeatedGroupExtension)[1].a, 517);
-  expect(
-      message.getExtension(Unittest.repeatedNestedMessageExtension)[1].bb, 518);
-  expect(
-      message.getExtension(Unittest.repeatedForeignMessageExtension)[1].c, 519);
-  expect(
-      message.getExtension(Unittest.repeatedImportMessageExtension)[1].d, 520);
-
-  expect(message.getExtension(Unittest.repeatedNestedEnumExtension)[1],
-      TestAllTypes_NestedEnum.FOO);
-  expect(message.getExtension(Unittest.repeatedForeignEnumExtension)[1],
-      ForeignEnum.FOREIGN_FOO);
-  expect(message.getExtension(Unittest.repeatedImportEnumExtension)[1],
-      ImportEnum.IMPORT_FOO);
-
-  expect(message.getExtension(Unittest.repeatedStringPieceExtension)[1], '524');
-  expect(message.getExtension(Unittest.repeatedCordExtension)[1], '525');
-
-  // -----------------------------------------------------------------
-
-  expect(message.hasExtension(Unittest.defaultInt32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultInt64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultUint32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultUint64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultSint32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultSint64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultFixed32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultFixed64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultSfixed32Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultSfixed64Extension), isTrue);
-  expect(message.hasExtension(Unittest.defaultFloatExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultDoubleExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultBoolExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultStringExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultBytesExtension), isTrue);
-
-  expect(message.hasExtension(Unittest.defaultNestedEnumExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultForeignEnumExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultImportEnumExtension), isTrue);
-
-  expect(message.hasExtension(Unittest.defaultStringPieceExtension), isTrue);
-  expect(message.hasExtension(Unittest.defaultCordExtension), isTrue);
-
-  expect(message.getExtension(Unittest.defaultInt32Extension), 401);
-  expect(message.getExtension(Unittest.defaultInt64Extension), expect64(402));
-  expect(message.getExtension(Unittest.defaultUint32Extension), 403);
-  expect(message.getExtension(Unittest.defaultUint64Extension), expect64(404));
-  expect(message.getExtension(Unittest.defaultSint32Extension), 405);
-  expect(message.getExtension(Unittest.defaultSint64Extension), expect64(406));
-  expect(message.getExtension(Unittest.defaultFixed32Extension), 407);
-  expect(message.getExtension(Unittest.defaultFixed64Extension), expect64(408));
-  expect(message.getExtension(Unittest.defaultSfixed32Extension), 409);
-  expect(
-      message.getExtension(Unittest.defaultSfixed64Extension), expect64(410));
-  expect(message.getExtension(Unittest.defaultFloatExtension), 411.0);
-  expect(message.getExtension(Unittest.defaultDoubleExtension), 412.0);
-  expect(message.getExtension(Unittest.defaultBoolExtension), false);
-  expect(message.getExtension(Unittest.defaultStringExtension), '415');
-  expect(message.getExtension(Unittest.defaultBytesExtension), '416'.codeUnits);
-
-  expect(message.getExtension(Unittest.defaultNestedEnumExtension),
-      TestAllTypes_NestedEnum.FOO);
-  expect(message.getExtension(Unittest.defaultForeignEnumExtension),
-      ForeignEnum.FOREIGN_FOO);
-  expect(message.getExtension(Unittest.defaultImportEnumExtension),
-      ImportEnum.IMPORT_FOO);
-
-  expect(message.getExtension(Unittest.defaultStringPieceExtension), '424');
-  expect(message.getExtension(Unittest.defaultCordExtension), '425');
-}
-
-void assertRepeatedFieldsModified(TestAllTypes message) {
-  // ModifyRepeatedFields only sets the second repeated element of each
-  // field.  In addition to verifying this, we also verify that the first
-  // element and size were *not* modified.
-  expect(message.repeatedInt32.length, 2);
-  expect(message.repeatedInt64.length, 2);
-  expect(message.repeatedUint32.length, 2);
-  expect(message.repeatedUint64.length, 2);
-  expect(message.repeatedSint32.length, 2);
-  expect(message.repeatedSint64.length, 2);
-  expect(message.repeatedFixed32.length, 2);
-  expect(message.repeatedFixed64.length, 2);
-  expect(message.repeatedSfixed32.length, 2);
-  expect(message.repeatedSfixed64.length, 2);
-  expect(message.repeatedFloat.length, 2);
-  expect(message.repeatedDouble.length, 2);
-  expect(message.repeatedBool.length, 2);
-  expect(message.repeatedString.length, 2);
-  expect(message.repeatedBytes.length, 2);
-
-  expect(message.repeatedGroup.length, 2);
-  expect(message.repeatedNestedMessage.length, 2);
-  expect(message.repeatedForeignMessage.length, 2);
-  expect(message.repeatedImportMessage.length, 2);
-  expect(message.repeatedNestedEnum.length, 2);
-  expect(message.repeatedForeignEnum.length, 2);
-  expect(message.repeatedImportEnum.length, 2);
-
-  expect(message.repeatedStringPiece.length, 2);
-  expect(message.repeatedCord.length, 2);
-
-  expect(message.repeatedInt32[0], 201);
-  expect(message.repeatedInt64[0], expect64(202));
-  expect(message.repeatedUint32[0], 203);
-  expect(message.repeatedUint64[0], expect64(204));
-  expect(message.repeatedSint32[0], 205);
-  expect(message.repeatedSint64[0], expect64(206));
-  expect(message.repeatedFixed32[0], 207);
-  expect(message.repeatedFixed64[0], expect64(208));
-  expect(message.repeatedSfixed32[0], 209);
-  expect(message.repeatedSfixed64[0], expect64(210));
-  expect(message.repeatedFloat[0], 211.0);
-  expect(message.repeatedDouble[0], 212.0);
-  expect(message.repeatedBool[0], true);
-  expect(message.repeatedString[0], '215');
-  expect(message.repeatedBytes[0], '216'.codeUnits);
-
-  expect(message.repeatedGroup[0].a, 217);
-  expect(message.repeatedNestedMessage[0].bb, 218);
-  expect(message.repeatedForeignMessage[0].c, 219);
-  expect(message.repeatedImportMessage[0].d, 220);
-
-  expect(message.repeatedNestedEnum[0], TestAllTypes_NestedEnum.BAR);
-  expect(message.repeatedForeignEnum[0], ForeignEnum.FOREIGN_BAR);
-  expect(message.repeatedImportEnum[0], ImportEnum.IMPORT_BAR);
-
-  expect(message.repeatedStringPiece[0], '224');
-  expect(message.repeatedCord[0], '225');
-
-  // Actually verify the second(modified) elements now.
-  expect(message.repeatedInt32[1], 501);
-  expect(message.repeatedInt64[1], expect64(502));
-  expect(message.repeatedUint32[1], 503);
-  expect(message.repeatedUint64[1], expect64(504));
-  expect(message.repeatedSint32[1], 505);
-  expect(message.repeatedSint64[1], expect64(506));
-  expect(message.repeatedFixed32[1], 507);
-  expect(message.repeatedFixed64[1], expect64(508));
-  expect(message.repeatedSfixed32[1], 509);
-  expect(message.repeatedSfixed64[1], expect64(510));
-  expect(message.repeatedFloat[1], 511.0);
-  expect(message.repeatedDouble[1], 512.0);
-  expect(message.repeatedBool[1], true);
-  expect(message.repeatedString[1], '515');
-  expect(message.repeatedBytes[1], '516'.codeUnits);
-
-  expect(message.repeatedGroup[1].a, 517);
-  expect(message.repeatedNestedMessage[1].bb, 518);
-  expect(message.repeatedForeignMessage[1].c, 519);
-  expect(message.repeatedImportMessage[1].d, 520);
-
-  expect(message.repeatedNestedEnum[1], TestAllTypes_NestedEnum.BAR);
-  expect(message.repeatedForeignEnum[1], ForeignEnum.FOREIGN_BAR);
-  expect(message.repeatedImportEnum[1], ImportEnum.IMPORT_BAR);
-
-  expect(message.repeatedStringPiece[1], '524');
-  expect(message.repeatedCord[1], '525');
-}
-
-/**
- * Assert (using expect} that all fields of [message] are set to the values
- * assigned by [setUnpackedFields].
- */
-void assertUnpackedFieldsSet(TestUnpackedTypes message) {
-  expect(message.unpackedInt32.length, 2);
-  expect(message.unpackedInt64.length, 2);
-  expect(message.unpackedUint32.length, 2);
-  expect(message.unpackedUint64.length, 2);
-  expect(message.unpackedSint32.length, 2);
-  expect(message.unpackedSint64.length, 2);
-  expect(message.unpackedFixed32.length, 2);
-  expect(message.unpackedFixed64.length, 2);
-  expect(message.unpackedSfixed32.length, 2);
-  expect(message.unpackedSfixed64.length, 2);
-  expect(message.unpackedFloat.length, 2);
-  expect(message.unpackedDouble.length, 2);
-  expect(message.unpackedBool.length, 2);
-  expect(message.unpackedEnum.length, 2);
-  expect(message.unpackedInt32[0], 601);
-  expect(message.unpackedInt64[0], expect64(602));
-  expect(message.unpackedUint32[0], 603);
-  expect(message.unpackedUint64[0], expect64(604));
-  expect(message.unpackedSint32[0], 605);
-  expect(message.unpackedSint64[0], expect64(606));
-  expect(message.unpackedFixed32[0], 607);
-  expect(message.unpackedFixed64[0], expect64(608));
-  expect(message.unpackedSfixed32[0], 609);
-  expect(message.unpackedSfixed64[0], expect64(610));
-  expect(message.unpackedFloat[0], 611.0);
-  expect(message.unpackedDouble[0], 612.0);
-  expect(message.unpackedBool[0], true);
-  expect(message.unpackedEnum[0], ForeignEnum.FOREIGN_BAR);
-  expect(message.unpackedInt32[1], 701);
-  expect(message.unpackedInt64[1], expect64(702));
-  expect(message.unpackedUint32[1], 703);
-  expect(message.unpackedUint64[1], expect64(704));
-  expect(message.unpackedSint32[1], 705);
-  expect(message.unpackedSint64[1], expect64(706));
-  expect(message.unpackedFixed32[1], 707);
-  expect(message.unpackedFixed64[1], expect64(708));
-  expect(message.unpackedSfixed32[1], 709);
-  expect(message.unpackedSfixed64[1], expect64(710));
-  expect(message.unpackedFloat[1], 711.0);
-  expect(message.unpackedDouble[1], 712.0);
-  expect(message.unpackedBool[1], false);
-  expect(message.unpackedEnum[1], ForeignEnum.FOREIGN_BAZ);
-}
-
-TestAllExtensions getAllExtensionsSet() {
-  TestAllExtensions message = new TestAllExtensions();
-  setAllExtensions(message);
-  return message;
-}
-
-/**
- * Get a [TestAllTypes] with all fields set as they would
- * be by [setAllFields(TestAllTypes)].
- */
-TestAllTypes getAllSet() {
-  TestAllTypes message = new TestAllTypes();
-  setAllFields(message);
-  return message;
-}
-
-ExtensionRegistry getExtensionRegistry() {
-  ExtensionRegistry registry = new ExtensionRegistry();
-  registerAllExtensions(registry);
-  return registry /*.getUnmodifiable()*/;
-}
-
-TestPackedExtensions getPackedExtensionsSet() {
-  TestPackedExtensions message = new TestPackedExtensions();
-  setPackedExtensions(message);
-  return message;
-}
-
-TestPackedTypes getPackedSet() {
-  TestPackedTypes message = new TestPackedTypes();
-  setPackedFields(message);
-  return message;
-}
-
-TestUnpackedTypes getUnpackedSet() {
-  TestUnpackedTypes message = new TestUnpackedTypes();
-  setUnpackedFields(message);
-  return message;
-}
-
-void modifyRepeatedExtensions(TestAllExtensions message) {
-  message.getExtension(Unittest.repeatedInt32Extension)[1] = 501;
-  message.getExtension(Unittest.repeatedInt64Extension)[1] = make64(502);
-  message.getExtension(Unittest.repeatedUint32Extension)[1] = 503;
-  message.getExtension(Unittest.repeatedUint64Extension)[1] = make64(504);
-  message.getExtension(Unittest.repeatedSint32Extension)[1] = 505;
-  message.getExtension(Unittest.repeatedSint64Extension)[1] = make64(506);
-  message.getExtension(Unittest.repeatedFixed32Extension)[1] = 507;
-  message.getExtension(Unittest.repeatedFixed64Extension)[1] = make64(508);
-  message.getExtension(Unittest.repeatedSfixed32Extension)[1] = 509;
-  message.getExtension(Unittest.repeatedSfixed64Extension)[1] = make64(510);
-  message.getExtension(Unittest.repeatedFloatExtension)[1] = 511.0;
-  message.getExtension(Unittest.repeatedDoubleExtension)[1] = 512.0;
-  message.getExtension(Unittest.repeatedBoolExtension)[1] = true;
-  message.getExtension(Unittest.repeatedStringExtension)[1] = '515';
-  message.getExtension(Unittest.repeatedBytesExtension)[1] = '516'.codeUnits;
-
-  var msg;
-
-  msg = new RepeatedGroup_extension();
-  msg.a = 517;
-  message.getExtension(Unittest.repeatedGroupExtension)[1] = msg;
-
-  msg = new TestAllTypes_NestedMessage();
-  msg.bb = 518;
-  message.getExtension(Unittest.repeatedNestedMessageExtension)[1] = msg;
-
-  msg = new ForeignMessage();
-  msg.c = 519;
-  message.getExtension(Unittest.repeatedForeignMessageExtension)[1] = msg;
-
-  msg = new ImportMessage();
-  msg.d = 520;
-  message.getExtension(Unittest.repeatedImportMessageExtension)[1] = msg;
-
-  message.getExtension(Unittest.repeatedNestedEnumExtension)[1] =
-      TestAllTypes_NestedEnum.FOO;
-  message.getExtension(Unittest.repeatedForeignEnumExtension)[1] =
-      ForeignEnum.FOREIGN_FOO;
-  message.getExtension(Unittest.repeatedImportEnumExtension)[1] =
-      ImportEnum.IMPORT_FOO;
-
-  message.getExtension(Unittest.repeatedStringPieceExtension)[1] = '524';
-  message.getExtension(Unittest.repeatedCordExtension)[1] = '525';
-}
-
-/**
- * Modify the repeated fields of {@code message} to contain the values
- * expected by {@code assertRepeatedFieldsModified()}.
- */
-void modifyRepeatedFields(TestAllTypes message) {
-  message.repeatedInt32[1] = 501;
-  message.repeatedInt64[1] = make64(502);
-  message.repeatedUint32[1] = 503;
-  message.repeatedUint64[1] = make64(504);
-  message.repeatedSint32[1] = 505;
-  message.repeatedSint64[1] = make64(506);
-  message.repeatedFixed32[1] = 507;
-  message.repeatedFixed64[1] = make64(508);
-  message.repeatedSfixed32[1] = 509;
-  message.repeatedSfixed64[1] = make64(510);
-  message.repeatedFloat[1] = 511.0;
-  message.repeatedDouble[1] = 512.0;
-  message.repeatedBool[1] = true;
-  message.repeatedString[1] = '515';
-  message.repeatedBytes[1] = '516'.codeUnits;
-
-  TestAllTypes_RepeatedGroup repeatedGroup = new TestAllTypes_RepeatedGroup();
-  repeatedGroup.a = 517;
-  message.repeatedGroup[1] = repeatedGroup;
-
-  TestAllTypes_NestedMessage optionalNestedMessage =
-      new TestAllTypes_NestedMessage();
-  optionalNestedMessage.bb = 518;
-  message.repeatedNestedMessage[1] = optionalNestedMessage;
-
-  ForeignMessage optionalForeignMessage = new ForeignMessage();
-  optionalForeignMessage.c = 519;
-  message.repeatedForeignMessage[1] = optionalForeignMessage;
-
-  ImportMessage optionalImportMessage = new ImportMessage();
-  optionalImportMessage.d = 520;
-  message.repeatedImportMessage[1] = optionalImportMessage;
-
-  message.repeatedNestedEnum[1] = TestAllTypes_NestedEnum.BAR;
-  message.repeatedForeignEnum[1] = ForeignEnum.FOREIGN_BAR;
-  message.repeatedImportEnum[1] = ImportEnum.IMPORT_BAR;
-
-  message.repeatedStringPiece[1] = '524';
-  message.repeatedCord[1] = '525';
-}
-
-void registerAllExtensions(ExtensionRegistry registry) {
-  Unittest.registerAllExtensions(registry);
-}
-
-void setAllExtensions(TestAllExtensions message) {
-  message.setExtension(Unittest.optionalInt32Extension, 101);
-  message.setExtension(Unittest.optionalInt64Extension, make64(102));
-  message.setExtension(Unittest.optionalUint32Extension, 103);
-  message.setExtension(Unittest.optionalUint64Extension, make64(104));
-  message.setExtension(Unittest.optionalSint32Extension, 105);
-  message.setExtension(Unittest.optionalSint64Extension, make64(106));
-  message.setExtension(Unittest.optionalFixed32Extension, 107);
-  message.setExtension(Unittest.optionalFixed64Extension, make64(108));
-  message.setExtension(Unittest.optionalSfixed32Extension, 109);
-  message.setExtension(Unittest.optionalSfixed64Extension, make64(110));
-  message.setExtension(Unittest.optionalFloatExtension, 111.0);
-  message.setExtension(Unittest.optionalDoubleExtension, 112.0);
-  message.setExtension(Unittest.optionalBoolExtension, true);
-  message.setExtension(Unittest.optionalStringExtension, '115');
-  message.setExtension(Unittest.optionalBytesExtension, '116'.codeUnits);
-
-  var msg;
-
-  msg = new OptionalGroup_extension();
-  msg.a = 117;
-  message.setExtension(Unittest.optionalGroupExtension, msg);
-
-  msg = new TestAllTypes_NestedMessage();
-  msg.bb = 118;
-  message.setExtension(Unittest.optionalNestedMessageExtension, msg);
-
-  msg = new ForeignMessage();
-  msg.c = 119;
-  message.setExtension(Unittest.optionalForeignMessageExtension, msg);
-
-  msg = new ImportMessage();
-  msg.d = 120;
-  message.setExtension(Unittest.optionalImportMessageExtension, msg);
-
-  message.setExtension(
-      Unittest.optionalNestedEnumExtension, TestAllTypes_NestedEnum.BAZ);
-  message.setExtension(
-      Unittest.optionalForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
-  message.setExtension(
-      Unittest.optionalImportEnumExtension, ImportEnum.IMPORT_BAZ);
-
-  message.setExtension(Unittest.optionalStringPieceExtension, '124');
-  message.setExtension(Unittest.optionalCordExtension, '125');
-
-  // -----------------------------------------------------------------
-
-  message.addExtension(Unittest.repeatedInt32Extension, 201);
-  message.addExtension(Unittest.repeatedInt64Extension, make64(202));
-  message.addExtension(Unittest.repeatedUint32Extension, 203);
-  message.addExtension(Unittest.repeatedUint64Extension, make64(204));
-  message.addExtension(Unittest.repeatedSint32Extension, 205);
-  message.addExtension(Unittest.repeatedSint64Extension, make64(206));
-  message.addExtension(Unittest.repeatedFixed32Extension, 207);
-  message.addExtension(Unittest.repeatedFixed64Extension, make64(208));
-  message.addExtension(Unittest.repeatedSfixed32Extension, 209);
-  message.addExtension(Unittest.repeatedSfixed64Extension, make64(210));
-  message.addExtension(Unittest.repeatedFloatExtension, 211.0);
-  message.addExtension(Unittest.repeatedDoubleExtension, 212.0);
-  message.addExtension(Unittest.repeatedBoolExtension, true);
-  message.addExtension(Unittest.repeatedStringExtension, '215');
-  message.addExtension(Unittest.repeatedBytesExtension, '216'.codeUnits);
-
-  msg = new RepeatedGroup_extension();
-  msg.a = 217;
-  message.addExtension(Unittest.repeatedGroupExtension, msg);
-
-  msg = new TestAllTypes_NestedMessage();
-  msg.bb = 218;
-  message.addExtension(Unittest.repeatedNestedMessageExtension, msg);
-
-  msg = new ForeignMessage();
-  msg.c = 219;
-  message.addExtension(Unittest.repeatedForeignMessageExtension, msg);
-
-  msg = new ImportMessage();
-  msg.d = 220;
-  message.addExtension(Unittest.repeatedImportMessageExtension, msg);
-
-  message.addExtension(
-      Unittest.repeatedNestedEnumExtension, TestAllTypes_NestedEnum.BAR);
-  message.addExtension(
-      Unittest.repeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAR);
-  message.addExtension(
-      Unittest.repeatedImportEnumExtension, ImportEnum.IMPORT_BAR);
-
-  message.addExtension(Unittest.repeatedStringPieceExtension, '224');
-  message.addExtension(Unittest.repeatedCordExtension, '225');
-
-  // Add a second one of each field.
-  message.addExtension(Unittest.repeatedInt32Extension, 301);
-  message.addExtension(Unittest.repeatedInt64Extension, make64(302));
-  message.addExtension(Unittest.repeatedUint32Extension, 303);
-  message.addExtension(Unittest.repeatedUint64Extension, make64(304));
-  message.addExtension(Unittest.repeatedSint32Extension, 305);
-  message.addExtension(Unittest.repeatedSint64Extension, make64(306));
-  message.addExtension(Unittest.repeatedFixed32Extension, 307);
-  message.addExtension(Unittest.repeatedFixed64Extension, make64(308));
-  message.addExtension(Unittest.repeatedSfixed32Extension, 309);
-  message.addExtension(Unittest.repeatedSfixed64Extension, make64(310));
-  message.addExtension(Unittest.repeatedFloatExtension, 311.0);
-  message.addExtension(Unittest.repeatedDoubleExtension, 312.0);
-  message.addExtension(Unittest.repeatedBoolExtension, false);
-  message.addExtension(Unittest.repeatedStringExtension, '315');
-  message.addExtension(Unittest.repeatedBytesExtension, '316'.codeUnits);
-
-  msg = new RepeatedGroup_extension();
-  msg.a = 317;
-  message.addExtension(Unittest.repeatedGroupExtension, msg);
-
-  msg = new TestAllTypes_NestedMessage();
-  msg.bb = 318;
-  message.addExtension(Unittest.repeatedNestedMessageExtension, msg);
-
-  msg = new ForeignMessage();
-  msg.c = 319;
-  message.addExtension(Unittest.repeatedForeignMessageExtension, msg);
-
-  msg = new ImportMessage();
-  msg.d = 320;
-  message.addExtension(Unittest.repeatedImportMessageExtension, msg);
-
-  message.addExtension(
-      Unittest.repeatedNestedEnumExtension, TestAllTypes_NestedEnum.BAZ);
-  message.addExtension(
-      Unittest.repeatedForeignEnumExtension, ForeignEnum.FOREIGN_BAZ);
-  message.addExtension(
-      Unittest.repeatedImportEnumExtension, ImportEnum.IMPORT_BAZ);
-
-  message.addExtension(Unittest.repeatedStringPieceExtension, '324');
-  message.addExtension(Unittest.repeatedCordExtension, '325');
-
-  // -----------------------------------------------------------------
-
-  message.setExtension(Unittest.defaultInt32Extension, 401);
-  message.setExtension(Unittest.defaultInt64Extension, make64(402));
-  message.setExtension(Unittest.defaultUint32Extension, 403);
-  message.setExtension(Unittest.defaultUint64Extension, make64(404));
-  message.setExtension(Unittest.defaultSint32Extension, 405);
-  message.setExtension(Unittest.defaultSint64Extension, make64(406));
-  message.setExtension(Unittest.defaultFixed32Extension, 407);
-  message.setExtension(Unittest.defaultFixed64Extension, make64(408));
-  message.setExtension(Unittest.defaultSfixed32Extension, 409);
-  message.setExtension(Unittest.defaultSfixed64Extension, make64(410));
-  message.setExtension(Unittest.defaultFloatExtension, 411.0);
-  message.setExtension(Unittest.defaultDoubleExtension, 412.0);
-  message.setExtension(Unittest.defaultBoolExtension, false);
-  message.setExtension(Unittest.defaultStringExtension, '415');
-  message.setExtension(Unittest.defaultBytesExtension, '416'.codeUnits);
-
-  message.setExtension(
-      Unittest.defaultNestedEnumExtension, TestAllTypes_NestedEnum.FOO);
-  message.setExtension(
-      Unittest.defaultForeignEnumExtension, ForeignEnum.FOREIGN_FOO);
-  message.setExtension(
-      Unittest.defaultImportEnumExtension, ImportEnum.IMPORT_FOO);
-
-  message.setExtension(Unittest.defaultStringPieceExtension, '424');
-  message.setExtension(Unittest.defaultCordExtension, '425');
-}
-
-/**
- * Set every field of {@code message} to the values expected by
- * {@code assertAllFieldsSet()}.
- */
-void setAllFields(TestAllTypes message) {
-  message.optionalInt32 = 101;
-  message.optionalInt64 = make64(102);
-  message.optionalUint32 = 103;
-  message.optionalUint64 = make64(104);
-  message.optionalSint32 = 105;
-  message.optionalSint64 = make64(106);
-  message.optionalFixed32 = 107;
-  message.optionalFixed64 = make64(108);
-  message.optionalSfixed32 = 109;
-  message.optionalSfixed64 = make64(110);
-  message.optionalFloat = 111.0;
-  message.optionalDouble = 112.0;
-  message.optionalBool = true;
-  message.optionalString = '115';
-  message.optionalBytes = '116'.codeUnits;
-
-  TestAllTypes_OptionalGroup optionalGroup = new TestAllTypes_OptionalGroup();
-  optionalGroup.a = 117;
-  message.optionalGroup = optionalGroup;
-
-  TestAllTypes_NestedMessage optionalNestedMessage =
-      new TestAllTypes_NestedMessage();
-  optionalNestedMessage.bb = 118;
-  message.optionalNestedMessage = optionalNestedMessage;
-
-  ForeignMessage optionalForeignMessage = new ForeignMessage();
-  optionalForeignMessage.c = 119;
-  message.optionalForeignMessage = optionalForeignMessage;
-
-  ImportMessage optionalImportMessage = new ImportMessage();
-  optionalImportMessage.d = 120;
-  message.optionalImportMessage = optionalImportMessage;
-
-  message.optionalNestedEnum = TestAllTypes_NestedEnum.BAZ;
-  message.optionalForeignEnum = ForeignEnum.FOREIGN_BAZ;
-  message.optionalImportEnum = ImportEnum.IMPORT_BAZ;
-
-  message.optionalStringPiece = '124';
-  message.optionalCord = '125';
-
-  // -----------------------------------------------------------------
-
-  message.repeatedInt32.add(201);
-  message.repeatedInt64.add(make64(202));
-  message.repeatedUint32.add(203);
-  message.repeatedUint64.add(make64(204));
-  message.repeatedSint32.add(205);
-  message.repeatedSint64.add(make64(206));
-  message.repeatedFixed32.add(207);
-  message.repeatedFixed64.add(make64(208));
-  message.repeatedSfixed32.add(209);
-  message.repeatedSfixed64.add(make64(210));
-  message.repeatedFloat.add(211.0);
-  message.repeatedDouble.add(212.0);
-  message.repeatedBool.add(true);
-  message.repeatedString.add('215');
-  message.repeatedBytes.add('216'.codeUnits);
-
-  TestAllTypes_RepeatedGroup repeatedGroup = new TestAllTypes_RepeatedGroup();
-  repeatedGroup.a = 217;
-  message.repeatedGroup.add(repeatedGroup);
-
-  TestAllTypes_NestedMessage repeatedNested = new TestAllTypes_NestedMessage();
-  repeatedNested.bb = 218;
-  message.repeatedNestedMessage.add(repeatedNested);
-
-  ForeignMessage repeatedForeignMessage = new ForeignMessage();
-  repeatedForeignMessage.c = 219;
-  message.repeatedForeignMessage.add(repeatedForeignMessage);
-
-  ImportMessage repeatedImportMessage = new ImportMessage();
-  repeatedImportMessage.d = 220;
-  message.repeatedImportMessage.add(repeatedImportMessage);
-
-  message.repeatedNestedEnum.add(TestAllTypes_NestedEnum.BAR);
-  message.repeatedForeignEnum.add(ForeignEnum.FOREIGN_BAR);
-  message.repeatedImportEnum.add(ImportEnum.IMPORT_BAR);
-
-  message.repeatedStringPiece.add('224');
-  message.repeatedCord.add('225');
-
-  // Add a second one of each field.
-  message.repeatedInt32.add(301);
-  message.repeatedInt64.add(make64(302));
-  message.repeatedUint32.add(303);
-  message.repeatedUint64.add(make64(304));
-  message.repeatedSint32.add(305);
-  message.repeatedSint64.add(make64(306));
-  message.repeatedFixed32.add(307);
-  message.repeatedFixed64.add(make64(308));
-  message.repeatedSfixed32.add(309);
-  message.repeatedSfixed64.add(make64(310));
-  message.repeatedFloat.add(311.0);
-  message.repeatedDouble.add(312.0);
-  message.repeatedBool.add(false);
-  message.repeatedString.add('315');
-  message.repeatedBytes.add('316'.codeUnits);
-
-  repeatedGroup = new TestAllTypes_RepeatedGroup();
-  repeatedGroup.a = 317;
-  message.repeatedGroup.add(repeatedGroup);
-
-  repeatedNested = new TestAllTypes_NestedMessage();
-  repeatedNested.bb = 318;
-  message.repeatedNestedMessage.add(repeatedNested);
-
-  repeatedForeignMessage = new ForeignMessage();
-  repeatedForeignMessage.c = 319;
-  message.repeatedForeignMessage.add(repeatedForeignMessage);
-
-  repeatedImportMessage = new ImportMessage();
-  repeatedImportMessage.d = 320;
-  message.repeatedImportMessage.add(repeatedImportMessage);
-
-  message.repeatedNestedEnum.add(TestAllTypes_NestedEnum.BAZ);
-  message.repeatedForeignEnum.add(ForeignEnum.FOREIGN_BAZ);
-  message.repeatedImportEnum.add(ImportEnum.IMPORT_BAZ);
-
-  message.repeatedStringPiece.add('324');
-  message.repeatedCord.add('325');
-
-  // -----------------------------------------------------------------
-
-  message.defaultInt32 = 401;
-  message.defaultInt64 = make64(402);
-  message.defaultUint32 = 403;
-  message.defaultUint64 = make64(404);
-  message.defaultSint32 = 405;
-  message.defaultSint64 = make64(406);
-  message.defaultFixed32 = 407;
-  message.defaultFixed64 = make64(408);
-  message.defaultSfixed32 = 409;
-  message.defaultSfixed64 = make64(410);
-  message.defaultFloat = 411.0;
-  message.defaultDouble = 412.0;
-  message.defaultBool = false;
-  message.defaultString = '415';
-  message.defaultBytes = '416'.codeUnits;
-
-  message.defaultNestedEnum = TestAllTypes_NestedEnum.FOO;
-  message.defaultForeignEnum = ForeignEnum.FOREIGN_FOO;
-  message.defaultImportEnum = ImportEnum.IMPORT_FOO;
-
-  message.defaultStringPiece = '424';
-  message.defaultCord = '425';
-}
-
-void setPackedExtensions(TestPackedExtensions message) {
-  message.addExtension(Unittest.packedInt32Extension, 601);
-  message.addExtension(Unittest.packedInt64Extension, make64(602));
-  message.addExtension(Unittest.packedUint32Extension, 603);
-  message.addExtension(Unittest.packedUint64Extension, make64(604));
-  message.addExtension(Unittest.packedSint32Extension, 605);
-  message.addExtension(Unittest.packedSint64Extension, make64(606));
-  message.addExtension(Unittest.packedFixed32Extension, 607);
-  message.addExtension(Unittest.packedFixed64Extension, make64(608));
-  message.addExtension(Unittest.packedSfixed32Extension, 609);
-  message.addExtension(Unittest.packedSfixed64Extension, make64(610));
-  message.addExtension(Unittest.packedFloatExtension, 611.0);
-  message.addExtension(Unittest.packedDoubleExtension, 612.0);
-  message.addExtension(Unittest.packedBoolExtension, true);
-  message.addExtension(Unittest.packedEnumExtension, ForeignEnum.FOREIGN_BAR);
-  // Add a second one of each field.
-  message.addExtension(Unittest.packedInt32Extension, 701);
-  message.addExtension(Unittest.packedInt64Extension, make64(702));
-  message.addExtension(Unittest.packedUint32Extension, 703);
-  message.addExtension(Unittest.packedUint64Extension, make64(704));
-  message.addExtension(Unittest.packedSint32Extension, 705);
-  message.addExtension(Unittest.packedSint64Extension, make64(706));
-  message.addExtension(Unittest.packedFixed32Extension, 707);
-  message.addExtension(Unittest.packedFixed64Extension, make64(708));
-  message.addExtension(Unittest.packedSfixed32Extension, 709);
-  message.addExtension(Unittest.packedSfixed64Extension, make64(710));
-  message.addExtension(Unittest.packedFloatExtension, 711.0);
-  message.addExtension(Unittest.packedDoubleExtension, 712.0);
-  message.addExtension(Unittest.packedBoolExtension, false);
-  message.addExtension(Unittest.packedEnumExtension, ForeignEnum.FOREIGN_BAZ);
-}
-
-/**
- * Set every field of [message] to a unique value. Must correspond with
- * the values applied by [setUnpackedFields].
- */
-void setPackedFields(TestPackedTypes message) {
-  message.packedInt32.add(601);
-  message.packedInt64.add(make64(602));
-  message.packedUint32.add(603);
-  message.packedUint64.add(make64(604));
-  message.packedSint32.add(605);
-  message.packedSint64.add(make64(606));
-  message.packedFixed32.add(607);
-  message.packedFixed64.add(make64(608));
-  message.packedSfixed32.add(609);
-  message.packedSfixed64.add(make64(610));
-  message.packedFloat.add(611.0);
-  message.packedDouble.add(612.0);
-  message.packedBool.add(true);
-  message.packedEnum.add(ForeignEnum.FOREIGN_BAR);
-  // Add a second one of each field.
-  message.packedInt32.add(701);
-  message.packedInt64.add(make64(702));
-  message.packedUint32.add(703);
-  message.packedUint64.add(make64(704));
-  message.packedSint32.add(705);
-  message.packedSint64.add(make64(706));
-  message.packedFixed32.add(707);
-  message.packedFixed64.add(make64(708));
-  message.packedSfixed32.add(709);
-  message.packedSfixed64.add(make64(710));
-  message.packedFloat.add(711.0);
-  message.packedDouble.add(712.0);
-  message.packedBool.add(false);
-  message.packedEnum.add(ForeignEnum.FOREIGN_BAZ);
-}
-
-/**
- * Set every field of [message] to a unique value. Must correspond with
- * the values applied by [setPackedFields].
- */
-void setUnpackedFields(TestUnpackedTypes message) {
-  message.unpackedInt32.add(601);
-  message.unpackedInt64.add(make64(602));
-  message.unpackedUint32.add(603);
-  message.unpackedUint64.add(make64(604));
-  message.unpackedSint32.add(605);
-  message.unpackedSint64.add(make64(606));
-  message.unpackedFixed32.add(607);
-  message.unpackedFixed64.add(make64(608));
-  message.unpackedSfixed32.add(609);
-  message.unpackedSfixed64.add(make64(610));
-  message.unpackedFloat.add(611.0);
-  message.unpackedDouble.add(612.0);
-  message.unpackedBool.add(true);
-  message.unpackedEnum.add(ForeignEnum.FOREIGN_BAR);
-  // Add a second one of each field.
-  message.unpackedInt32.add(701);
-  message.unpackedInt64.add(make64(702));
-  message.unpackedUint32.add(703);
-  message.unpackedUint64.add(make64(704));
-  message.unpackedSint32.add(705);
-  message.unpackedSint64.add(make64(706));
-  message.unpackedFixed32.add(707);
-  message.unpackedFixed64.add(make64(708));
-  message.unpackedSfixed32.add(709);
-  message.unpackedSfixed64.add(make64(710));
-  message.unpackedFloat.add(711.0);
-  message.unpackedDouble.add(712.0);
-  message.unpackedBool.add(false);
-  message.unpackedEnum.add(ForeignEnum.FOREIGN_BAZ);
-}
diff --git a/test/unknown_field_set_test.dart b/test/unknown_field_set_test.dart
deleted file mode 100755
index b0305a4..0000000
--- a/test/unknown_field_set_test.dart
+++ /dev/null
@@ -1,339 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library unknown_field_set_test;
-
-import 'package:protobuf/protobuf.dart';
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-
-import 'test_util.dart';
-
-void main() {
-  TestAllTypes testAllTypes = getAllSet();
-  List<int> allFieldsData = testAllTypes.writeToBuffer();
-  TestEmptyMessage emptyMessage =
-      new TestEmptyMessage.fromBuffer(allFieldsData);
-  UnknownFieldSet unknownFields = emptyMessage.unknownFields;
-
-  UnknownFieldSetField getField(String name) {
-    int tagNumber = testAllTypes.getTagNumber(name);
-    assert(unknownFields.hasField(tagNumber));
-    return unknownFields.getField(tagNumber);
-  }
-
-  /**
-   * Asserts that the given field sets are not equal and have different
-   * hash codes.
-   *
-   * N.B.: It is valid for non-equal objects to have the same hash code, so
-   * this test is more strict than necessary. However, in the test cases
-   * identifies, the hash codes should differ, and as a matter of principle
-   * hash collisions should be relatively rare.
-   */
-  void _checkNotEqual(UnknownFieldSet s1, UnknownFieldSet s2) {
-    expect(s1 == s2, isFalse);
-    expect(s2 == s1, isFalse);
-
-    expect(s1.hashCode == s2.hashCode, isFalse,
-        reason: '${s1.toString()} should have a different hash code '
-            'from ${s2.toString()}');
-  }
-
-  /**
-   * Asserts that the given field sets are equal and have identical hash codes.
-   */
-  void _checkEqualsIsConsistent(UnknownFieldSet set) {
-    // Object should be equal to itself.
-    expect(set, set);
-
-    // Object should be equal to a copy of itself.
-    UnknownFieldSet copy = set.clone();
-    expect(copy, set);
-    expect(set, copy);
-  }
-
-  test('testVarint', () {
-    UnknownFieldSetField optionalInt32 = getField('optionalInt32');
-    expect(optionalInt32.varints[0], expect64(testAllTypes.optionalInt32));
-  });
-
-  test('testFixed32', () {
-    UnknownFieldSetField optionalFixed32 = getField('optionalFixed32');
-    expect(optionalFixed32.fixed32s[0], testAllTypes.optionalFixed32);
-  });
-
-  test('testFixed64', () {
-    UnknownFieldSetField optionalFixed64 = getField('optionalFixed64');
-    expect(optionalFixed64.fixed64s[0], testAllTypes.optionalFixed64);
-  });
-
-  test('testLengthDelimited', () {
-    UnknownFieldSetField optionalBytes = getField('optionalBytes');
-    expect(optionalBytes.lengthDelimited[0], testAllTypes.optionalBytes);
-  });
-
-  test('testGroup', () {
-    int tagNumberA = new TestAllTypes_OptionalGroup().getTagNumber('a');
-    expect(tagNumberA != null, isTrue);
-
-    UnknownFieldSetField optionalGroupField = getField('optionalGroup');
-    expect(optionalGroupField.groups.length, 1);
-    UnknownFieldSet group = optionalGroupField.groups[0];
-    expect(group.hasField(tagNumberA), isTrue);
-    expect(group.getField(tagNumberA).varints[0],
-        expect64(testAllTypes.optionalGroup.a));
-  });
-
-  test('testSerialize', () {
-    expect(emptyMessage.writeToBuffer(), allFieldsData);
-  });
-
-  test('testCopyFrom', () {
-    TestEmptyMessage message = emptyMessage.clone();
-    expect(message.toString(), emptyMessage.toString());
-    expect(emptyMessage.toString().isEmpty, isFalse);
-  });
-
-  test('testMergeFrom', () {
-    // Source.
-    UnknownFieldSet sourceFieldSet = new UnknownFieldSet()
-      ..addField(2, new UnknownFieldSetField()..addVarint(make64(2)))
-      ..addField(3, new UnknownFieldSetField()..addVarint(make64(3)));
-
-    TestEmptyMessage source = new TestEmptyMessage()
-      ..mergeUnknownFields(sourceFieldSet);
-
-    // Destination.
-    UnknownFieldSet destinationFieldSet = new UnknownFieldSet()
-      ..addField(1, new UnknownFieldSetField()..addVarint(make64(1)))
-      ..addField(3, new UnknownFieldSetField()..addVarint(make64(4)));
-
-    TestEmptyMessage destination = new TestEmptyMessage()
-      ..mergeUnknownFields(destinationFieldSet)
-      ..mergeFromMessage(source);
-
-    expect(
-        destination.toString(),
-        '1: 1\n'
-        '2: 2\n'
-        '3: 4\n'
-        '3: 3\n');
-  });
-
-  test('testClear', () {
-    UnknownFieldSet fsb = unknownFields.clone()..clear();
-    expect(fsb.asMap(), isEmpty);
-  });
-
-  test('testEmpty', () {
-    expect(new UnknownFieldSet().asMap(), isEmpty);
-  });
-
-  test('testClearMessage', () {
-    TestEmptyMessage message = emptyMessage.clone();
-    message.clear();
-    expect(message.writeToBuffer(), isEmpty);
-  });
-
-  test('testParseKnownAndUnknown', () {
-    // Test mixing known and unknown fields when parsing.
-    UnknownFieldSet fields = unknownFields.clone()
-      ..addField(123456, new UnknownFieldSetField()..addVarint(make64(654321)));
-
-    CodedBufferWriter writer = new CodedBufferWriter();
-    fields.writeToCodedBufferWriter(writer);
-
-    TestAllTypes destination = new TestAllTypes.fromBuffer(writer.toBuffer());
-
-    assertAllFieldsSet(destination);
-    expect(destination.unknownFields.asMap().length, 1);
-
-    UnknownFieldSetField field = destination.unknownFields.getField(123456);
-    expect(field.varints.length, 1);
-    expect(field.varints[0], expect64(654321));
-  });
-
-  // Constructs a protocol buffer which contains fields with all the same
-  // numbers as allFieldsData except that each field is some other wire
-  // type.
-  List<int> getBizarroData() {
-    UnknownFieldSet bizarroFields = new UnknownFieldSet();
-
-    UnknownFieldSetField varintField = new UnknownFieldSetField()
-      ..addVarint(make64(1));
-
-    UnknownFieldSetField fixed32Field = new UnknownFieldSetField()
-      ..addFixed32(1);
-
-    unknownFields.asMap().forEach((int tag, UnknownFieldSetField value) {
-      if (value.varints.isEmpty) {
-        // Original field is not a varint, so use a varint.
-        bizarroFields.addField(tag, varintField);
-      } else {
-        // Original field *is* a varint, so use something else.
-        bizarroFields.addField(tag, fixed32Field);
-      }
-    });
-    CodedBufferWriter writer = new CodedBufferWriter();
-    bizarroFields.writeToCodedBufferWriter(writer);
-    return writer.toBuffer();
-  }
-
-  test('testWrongTypeTreatedAsUnknown', () {
-    // Test that fields of the wrong wire type are treated like unknown fields
-    // when parsing.
-    List<int> bizarroData = getBizarroData();
-    TestAllTypes allTypesMessage = new TestAllTypes.fromBuffer(bizarroData);
-    TestEmptyMessage emptyMessage_ =
-        new TestEmptyMessage.fromBuffer(bizarroData);
-    // All fields should have been interpreted as unknown, so the debug strings
-    // should be the same.
-    expect(allTypesMessage.toString(), emptyMessage_.toString());
-  });
-
-  test('testUnknownExtensions', () {
-    // Make sure fields are properly parsed to the UnknownFieldSet even when
-    // they are declared as extension numbers.
-    TestEmptyMessageWithExtensions message =
-        new TestEmptyMessageWithExtensions.fromBuffer(allFieldsData);
-
-    expect(message.unknownFields.asMap().length, unknownFields.asMap().length);
-    expect(message.writeToBuffer(), allFieldsData);
-  });
-
-  test('testWrongExtensionTypeTreatedAsUnknown', () {
-    // Test that fields of the wrong wire type are treated like unknown fields
-    // when parsing extensions.
-
-    List<int> bizarroData = getBizarroData();
-    TestAllExtensions allExtensionsMessage =
-        new TestAllExtensions.fromBuffer(bizarroData);
-    TestEmptyMessage emptyMessage_ =
-        new TestEmptyMessage.fromBuffer(bizarroData);
-
-    // All fields should have been interpreted as unknown, so the debug strings
-    // should be the same.
-    expect(allExtensionsMessage.toString(), emptyMessage_.toString());
-  });
-
-  test('testParseUnknownEnumValue', () {
-    int singularFieldNum = testAllTypes.getTagNumber('optionalNestedEnum');
-    int repeatedFieldNum = testAllTypes.getTagNumber('repeatedNestedEnum');
-    expect(singularFieldNum, isNotNull);
-    expect(repeatedFieldNum, isNotNull);
-
-    UnknownFieldSet fieldSet = new UnknownFieldSet()
-      ..addField(
-          singularFieldNum,
-          new UnknownFieldSetField()
-            ..addVarint(make64(TestAllTypes_NestedEnum.BAR.value))
-            ..addVarint(make64(5)))
-      ..addField(
-          repeatedFieldNum,
-          new UnknownFieldSetField()
-            ..addVarint(make64(TestAllTypes_NestedEnum.FOO.value))
-            ..addVarint(make64(4))
-            ..addVarint(make64(TestAllTypes_NestedEnum.BAZ.value))
-            ..addVarint(make64(6)));
-
-    CodedBufferWriter writer = new CodedBufferWriter();
-    fieldSet.writeToCodedBufferWriter(writer);
-    {
-      TestAllTypes message = new TestAllTypes.fromBuffer(writer.toBuffer());
-      expect(message.optionalNestedEnum, TestAllTypes_NestedEnum.BAR);
-      expect(message.repeatedNestedEnum,
-          [TestAllTypes_NestedEnum.FOO, TestAllTypes_NestedEnum.BAZ]);
-      final singularVarints =
-          message.unknownFields.getField(singularFieldNum).varints;
-      expect(singularVarints.length, 1);
-      expect(singularVarints[0], expect64(5));
-      final repeatedVarints =
-          message.unknownFields.getField(repeatedFieldNum).varints;
-      expect(repeatedVarints.length, 2);
-      expect(repeatedVarints[0], expect64(4));
-      expect(repeatedVarints[1], expect64(6));
-    }
-    {
-      TestAllExtensions message = new TestAllExtensions.fromBuffer(
-          writer.toBuffer(), getExtensionRegistry());
-      expect(message.getExtension(Unittest.optionalNestedEnumExtension),
-          TestAllTypes_NestedEnum.BAR);
-
-      expect(message.getExtension(Unittest.repeatedNestedEnumExtension),
-          [TestAllTypes_NestedEnum.FOO, TestAllTypes_NestedEnum.BAZ]);
-      final singularVarints =
-          message.unknownFields.getField(singularFieldNum).varints;
-      expect(singularVarints.length, 1);
-      expect(singularVarints[0], expect64(5));
-      final repeatedVarints =
-          message.unknownFields.getField(repeatedFieldNum).varints;
-      expect(repeatedVarints.length, 2);
-      expect(repeatedVarints[0], expect64(4));
-      expect(repeatedVarints[1], expect64(6));
-    }
-  });
-
-  test('testLargeVarint', () {
-    UnknownFieldSet unknownFieldSet = new UnknownFieldSet()
-      ..addField(
-          1,
-          new UnknownFieldSetField()
-            ..addVarint(make64(0x7FFFFFFF, 0xFFFFFFFF)));
-    CodedBufferWriter writer = new CodedBufferWriter();
-    unknownFieldSet.writeToCodedBufferWriter(writer);
-
-    var parsed = new UnknownFieldSet()
-      ..mergeFromCodedBufferReader(new CodedBufferReader(writer.toBuffer()));
-    var field = parsed.getField(1);
-    expect(field.varints.length, 1);
-    expect(field.varints[0], expect64(0x7FFFFFFF, 0xFFFFFFFFF));
-  });
-
-  test('testEquals', () {
-    UnknownFieldSet a = new UnknownFieldSet()
-      ..addField(1, new UnknownFieldSetField()..addFixed32(1));
-
-    UnknownFieldSet b = new UnknownFieldSet()
-      ..addField(1, new UnknownFieldSetField()..addFixed64(make64(1)));
-
-    UnknownFieldSet c = new UnknownFieldSet()
-      ..addField(1, new UnknownFieldSetField()..addVarint(make64(1)));
-
-    UnknownFieldSet d = new UnknownFieldSet()
-      ..addField(1, new UnknownFieldSetField()..addLengthDelimited([]));
-
-    UnknownFieldSet e = new UnknownFieldSet()
-      ..addField(1, new UnknownFieldSetField()..addGroup(unknownFields));
-
-    _checkEqualsIsConsistent(a);
-    _checkEqualsIsConsistent(b);
-    _checkEqualsIsConsistent(c);
-    _checkEqualsIsConsistent(d);
-    _checkEqualsIsConsistent(e);
-
-    _checkNotEqual(a, b);
-    _checkNotEqual(a, c);
-    _checkNotEqual(a, d);
-    _checkNotEqual(a, e);
-    _checkNotEqual(b, c);
-    _checkNotEqual(b, d);
-    _checkNotEqual(b, e);
-    _checkNotEqual(c, d);
-    _checkNotEqual(c, e);
-    _checkNotEqual(d, e);
-
-    UnknownFieldSet f1 = new UnknownFieldSet()
-      ..addField(1, new UnknownFieldSetField()..addLengthDelimited([1, 2]));
-    UnknownFieldSet f2 = new UnknownFieldSet()
-      ..addField(1, new UnknownFieldSetField()..addLengthDelimited([2, 1]));
-
-    _checkEqualsIsConsistent(f1);
-    _checkEqualsIsConsistent(f2);
-
-    _checkNotEqual(f1, f2);
-  });
-}
diff --git a/test/validate_fail_test.dart b/test/validate_fail_test.dart
deleted file mode 100755
index fee3a11..0000000
--- a/test/validate_fail_test.dart
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library validate_fail_test;
-
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-
-// [ArgumentError] in production mode, [TypeError] in checked.
-final invalidArgumentException =
-    predicate((e) => e is ArgumentError || e is TypeError);
-final badArgument = throwsA(invalidArgumentException);
-
-// Suppress an analyzer warning for a deliberate type mismatch.
-cast(x) => x;
-
-void main() {
-  test('testValidationFailureMessages', () {
-    TestAllTypes builder = new TestAllTypes();
-
-    expect(() {
-      builder.optionalInt32 = null;
-    }, throwsArgumentError);
-
-    expect(() {
-      builder.optionalInt32 = cast('101');
-    }, badArgument);
-    expect(() {
-      builder.optionalInt32 = -2147483649;
-    }, throwsArgumentError);
-    expect(() {
-      builder.optionalInt32 = 2147483648;
-    }, throwsArgumentError);
-
-    expect(() {
-      builder.optionalInt64 = cast('102');
-    }, badArgument);
-    expect(() {
-      builder.optionalInt64 = cast(-9223372036854775808);
-    }, badArgument);
-    expect(() {
-      builder.optionalInt64 = cast(9223372036854775807);
-    }, badArgument);
-
-    expect(() {
-      builder.optionalUint32 = cast('103');
-    }, badArgument);
-    expect(() {
-      builder.optionalUint32 = -1;
-    }, throwsArgumentError);
-    expect(() {
-      builder.optionalUint32 = 4294967296;
-    }, throwsArgumentError);
-
-    expect(() {
-      builder.optionalUint64 = cast('104');
-    }, badArgument);
-    expect(() {
-      builder.optionalUint64 = cast(-1);
-    }, badArgument);
-    expect(() {
-      builder.optionalUint64 = cast(8446744073709551616);
-    }, badArgument);
-
-    expect(() {
-      builder.optionalSint32 = cast('105');
-    }, badArgument);
-    expect(() {
-      builder.optionalSint32 = -2147483649;
-    }, throwsArgumentError);
-    expect(() {
-      builder.optionalSint32 = 2147483648;
-    }, throwsArgumentError);
-
-    expect(() {
-      builder.optionalSint64 = cast('106');
-    }, badArgument);
-    expect(() {
-      builder.optionalSint64 = cast(-9223372036854775808);
-    }, badArgument);
-    expect(() {
-      builder.optionalSint64 = cast(9223372036854775807);
-    }, badArgument);
-
-    expect(() {
-      builder.optionalFixed32 = cast('107');
-    }, badArgument);
-    expect(() {
-      builder.optionalFixed32 = -1;
-    }, throwsArgumentError);
-    expect(() {
-      builder.optionalFixed32 = 4294967296;
-    }, throwsArgumentError);
-
-    expect(() {
-      builder.optionalFixed64 = cast('108');
-    }, badArgument);
-    expect(() {
-      builder.optionalFixed64 = cast(-1);
-    }, badArgument);
-    expect(() {
-      builder.optionalFixed64 = cast(8446744073709551616);
-    }, badArgument);
-
-    expect(() {
-      builder.optionalSfixed32 = cast('109');
-    }, badArgument);
-    expect(() {
-      builder.optionalSfixed32 = -2147483649;
-    }, throwsArgumentError);
-    expect(() {
-      builder.optionalSfixed32 = 2147483648;
-    }, throwsArgumentError);
-
-    expect(() {
-      builder.optionalSfixed64 = cast('110');
-    }, badArgument);
-    expect(() {
-      builder.optionalSfixed64 = cast(-9223372036854775808);
-    }, badArgument);
-    expect(() {
-      builder.optionalSfixed64 = cast(9223372036854775807);
-    }, badArgument);
-
-    expect(() {
-      builder.optionalFloat = cast('111');
-    }, badArgument);
-    expect(() {
-      builder.optionalFloat = -3.4028234663852886E39;
-    }, throwsArgumentError);
-    expect(() {
-      builder.optionalFloat = 3.4028234663852886E39;
-    }, throwsArgumentError);
-
-    expect(() {
-      builder.optionalDouble = cast('112');
-    }, badArgument);
-
-    expect(() {
-      builder.optionalBool = cast('113');
-    }, badArgument);
-
-    expect(() {
-      builder.optionalString = cast(false);
-    }, badArgument);
-
-    // Can't test this easily in strong mode.
-    // expect(() {
-    //   builder.optionalBytes = cast('115');
-    // }, badArgument);
-
-    expect(() {
-      builder.optionalNestedMessage = cast('118');
-    }, badArgument);
-
-    expect(() {
-      builder.optionalNestedEnum = cast('121');
-    }, badArgument);
-
-    // Set repeating value (no setter should exist).
-    expect(() {
-      cast(builder).repeatedInt32 = 201;
-    }, throwsNoSuchMethodError);
-
-    // Unknown tag.
-    expect(() {
-      builder.setField(999, 'field');
-    }, throwsArgumentError);
-
-    expect(() {
-      new TestAllExtensions()
-          .setExtension(Unittest.optionalInt32Extension, '101');
-    }, throwsArgumentError);
-  });
-}
diff --git a/test/wire_format_test.dart b/test/wire_format_test.dart
deleted file mode 100755
index f4530e3..0000000
--- a/test/wire_format_test.dart
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env dart
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library wire_format_test;
-
-import 'package:protobuf/protobuf.dart';
-import 'package:test/test.dart';
-
-import '../out/protos/google/protobuf/unittest.pb.dart';
-
-import 'test_util.dart';
-
-void main() {
-  test('testSerialization', () {
-    assertAllFieldsSet(
-        new TestAllTypes.fromBuffer(getAllSet().writeToBuffer()));
-  });
-
-  test('testSerializationPacked', () {
-    assertPackedFieldsSet(
-        new TestPackedTypes.fromBuffer(getPackedSet().writeToBuffer()));
-  });
-
-  test('testSerializeExtensions', () {
-    assertAllFieldsSet(
-        new TestAllTypes.fromBuffer(getAllExtensionsSet().writeToBuffer()));
-  });
-
-  test('testSerializePackedExtensions', () {
-    expect(getPackedExtensionsSet().writeToBuffer(),
-        getPackedSet().writeToBuffer());
-  });
-
-  test('testParseExtensions', () {
-    // TestAllTypes and TestAllExtensions should have compatible wire formats,
-    // so if we serialize a TestAllTypes then parse it as TestAllExtensions
-    // it should work.
-    List<int> rawBytes = getAllSet().writeToBuffer();
-    ExtensionRegistry registry = getExtensionRegistry();
-
-    assertAllExtensionsSet(
-        new TestAllExtensions.fromBuffer(rawBytes, registry));
-  });
-
-  test('testParsePackedExtensions', () {
-    // Ensure that packed extensions can be properly parsed.
-    List<int> rawBytes = getPackedExtensionsSet().writeToBuffer();
-    ExtensionRegistry registry = getExtensionRegistry();
-
-    assertPackedExtensionsSet(
-        new TestPackedExtensions.fromBuffer(rawBytes, registry));
-  });
-
-  test('testExtensionsSerialized', () {
-    expect(getAllExtensionsSet().writeToBuffer(), getAllSet().writeToBuffer());
-  });
-
-  test('testParseMultipleExtensionRanges', () {
-    // Make sure we can parse a message that contains multiple extensions
-    // ranges.
-    TestFieldOrderings source = new TestFieldOrderings()
-      ..myInt = make64(1)
-      ..myString = 'foo'
-      ..myFloat = 1.0
-      ..setExtension(Unittest.myExtensionInt, 23)
-      ..setExtension(Unittest.myExtensionString, 'bar');
-
-    ExtensionRegistry registry = new ExtensionRegistry()
-      ..add(Unittest.myExtensionInt)
-      ..add(Unittest.myExtensionString);
-
-    TestFieldOrderings dest =
-        new TestFieldOrderings.fromBuffer(source.writeToBuffer(), registry);
-
-    expect(dest, source);
-  });
-}
diff --git a/tool/builder.dart b/tool/builder.dart
deleted file mode 100644
index acf8865..0000000
--- a/tool/builder.dart
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'dart:async';
-import 'dart:convert';
-
-import 'package:build/build.dart';
-import 'package:glob/glob.dart';
-
-Builder benchmarkBuilder(BuilderOptions options) => _BenchmarkBuilder();
-
-class _BenchmarkBuilder implements Builder {
-  @override
-  Future build(BuildStep buildStep) async {
-    var data = <String, String>{};
-
-    await for (var item in buildStep
-        .findAssets(Glob('benchmark/**/*.pb.json'))
-        .where((id) =>
-            id.pathSegments.length > 2 &&
-            id.pathSegments[0] == 'benchmark' &&
-            id.pathSegments[1] == 'data')) {
-      data[item.pathSegments.skip(2).join('/')] =
-          await buildStep.readAsString(item);
-    }
-
-    await buildStep.writeAsString(
-        AssetId(buildStep.inputId.package, 'benchmark/data/data.json'),
-        JsonEncoder.withIndent(' ').convert(data));
-  }
-
-  @override
-  final buildExtensions = const {
-    r'lib/$lib$': ['benchmark/data/data.json']
-  };
-}
diff --git a/tool/travis/analyze.sh b/tool/travis/analyze.sh
deleted file mode 100755
index 42e3d43..0000000
--- a/tool/travis/analyze.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-set -ev
-
-PATH=$HOME/protoc/bin:$PATH
-protoc --version
-dartanalyzer --version
-pub get
-make protos
-dartanalyzer .
diff --git a/tool/travis/setup.sh b/tool/travis/setup.sh
deleted file mode 100755
index 114befe..0000000
--- a/tool/travis/setup.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-set -ev
-
-mkdir $HOME/protoc
-pushd $HOME/protoc
-wget https://github.com/google/protobuf/releases/download/v$PROTOC_VERSION/protoc-$PROTOC_VERSION-linux-x86_64.zip
-unzip protoc-$PROTOC_VERSION-linux-x86_64.zip
-popd
diff --git a/tool/travis/test.sh b/tool/travis/test.sh
deleted file mode 100755
index cd30c94..0000000
--- a/tool/travis/test.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/usr/bin/env bash
-set -ev
-
-PATH=$HOME/protoc/bin:$PATH
-protoc --version
-pub get
-make clean run-tests
