Discontinue repository (#143)

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) {