testing/protopack: make package publicly available

Change-Id: I342ed27df17867f18c58e60880bcac5a31a3096b
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/219837
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/encoding/protojson/encode_test.go b/encoding/protojson/encode_test.go
index df2fbc9..1e2ceb0 100644
--- a/encoding/protojson/encode_test.go
+++ b/encoding/protojson/encode_test.go
@@ -13,10 +13,10 @@
 
 	"google.golang.org/protobuf/encoding/protojson"
 	"google.golang.org/protobuf/internal/detrand"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/flags"
 	"google.golang.org/protobuf/proto"
 	preg "google.golang.org/protobuf/reflect/protoregistry"
+	"google.golang.org/protobuf/testing/protopack"
 
 	fieldmaskpb "google.golang.org/protobuf/internal/testprotos/fieldmaskpb"
 	pb2 "google.golang.org/protobuf/internal/testprotos/textpb2"
@@ -860,8 +860,8 @@
 			m := &pb2.Scalars{
 				OptString: proto.String("no unknowns"),
 			}
-			m.ProtoReflect().SetUnknown(pack.Message{
-				pack.Tag{101, pack.BytesType}, pack.String("hello world"),
+			m.ProtoReflect().SetUnknown(protopack.Message{
+				protopack.Tag{101, protopack.BytesType}, protopack.String("hello world"),
 			}.Marshal())
 			return m
 		}(),
diff --git a/encoding/prototext/encode_test.go b/encoding/prototext/encode_test.go
index 8b821e1..b910727 100644
--- a/encoding/prototext/encode_test.go
+++ b/encoding/prototext/encode_test.go
@@ -12,10 +12,10 @@
 
 	"google.golang.org/protobuf/encoding/prototext"
 	"google.golang.org/protobuf/internal/detrand"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/flags"
 	"google.golang.org/protobuf/proto"
 	preg "google.golang.org/protobuf/reflect/protoregistry"
+	"google.golang.org/protobuf/testing/protopack"
 
 	pb2 "google.golang.org/protobuf/internal/testprotos/textpb2"
 	pb3 "google.golang.org/protobuf/internal/testprotos/textpb3"
@@ -826,11 +826,11 @@
 			m := &pb2.Scalars{
 				OptString: proto.String("this message contains unknown fields"),
 			}
-			m.ProtoReflect().SetUnknown(pack.Message{
-				pack.Tag{101, pack.VarintType}, pack.Bool(true),
-				pack.Tag{102, pack.VarintType}, pack.Varint(0xff),
-				pack.Tag{103, pack.Fixed32Type}, pack.Uint32(47),
-				pack.Tag{104, pack.Fixed64Type}, pack.Int64(0xdeadbeef),
+			m.ProtoReflect().SetUnknown(protopack.Message{
+				protopack.Tag{101, protopack.VarintType}, protopack.Bool(true),
+				protopack.Tag{102, protopack.VarintType}, protopack.Varint(0xff),
+				protopack.Tag{103, protopack.Fixed32Type}, protopack.Uint32(47),
+				protopack.Tag{104, protopack.Fixed64Type}, protopack.Int64(0xdeadbeef),
 			}.Marshal())
 			return m
 		}(),
@@ -843,11 +843,11 @@
 			m := &pb2.Scalars{
 				OptString: proto.String("this message contains unknown fields"),
 			}
-			m.ProtoReflect().SetUnknown(pack.Message{
-				pack.Tag{101, pack.VarintType}, pack.Bool(true),
-				pack.Tag{102, pack.VarintType}, pack.Varint(0xff),
-				pack.Tag{103, pack.Fixed32Type}, pack.Uint32(0x47),
-				pack.Tag{104, pack.Fixed64Type}, pack.Int64(0xdeadbeef),
+			m.ProtoReflect().SetUnknown(protopack.Message{
+				protopack.Tag{101, protopack.VarintType}, protopack.Bool(true),
+				protopack.Tag{102, protopack.VarintType}, protopack.Varint(0xff),
+				protopack.Tag{103, protopack.Fixed32Type}, protopack.Uint32(0x47),
+				protopack.Tag{104, protopack.Fixed64Type}, protopack.Int64(0xdeadbeef),
 			}.Marshal())
 			return m
 		}(),
@@ -862,10 +862,10 @@
 		mo:   prototext.MarshalOptions{EmitUnknown: true},
 		input: func() proto.Message {
 			m := new(pb2.Scalars)
-			m.ProtoReflect().SetUnknown(pack.Message{
-				pack.Tag{101, pack.BytesType}, pack.LengthPrefix{pack.Bool(true), pack.Bool(false)},
-				pack.Tag{102, pack.BytesType}, pack.String("hello world"),
-				pack.Tag{103, pack.BytesType}, pack.Bytes("\xe4\xb8\x96\xe7\x95\x8c"),
+			m.ProtoReflect().SetUnknown(protopack.Message{
+				protopack.Tag{101, protopack.BytesType}, protopack.LengthPrefix{protopack.Bool(true), protopack.Bool(false)},
+				protopack.Tag{102, protopack.BytesType}, protopack.String("hello world"),
+				protopack.Tag{103, protopack.BytesType}, protopack.Bytes("\xe4\xb8\x96\xe7\x95\x8c"),
 			}.Marshal())
 			return m
 		}(),
@@ -878,12 +878,12 @@
 		mo:   prototext.MarshalOptions{EmitUnknown: true},
 		input: func() proto.Message {
 			m := new(pb2.Scalars)
-			m.ProtoReflect().SetUnknown(pack.Message{
-				pack.Tag{101, pack.StartGroupType}, pack.Tag{101, pack.EndGroupType},
-				pack.Tag{102, pack.StartGroupType},
-				pack.Tag{101, pack.VarintType}, pack.Bool(false),
-				pack.Tag{102, pack.BytesType}, pack.String("inside a group"),
-				pack.Tag{102, pack.EndGroupType},
+			m.ProtoReflect().SetUnknown(protopack.Message{
+				protopack.Tag{101, protopack.StartGroupType}, protopack.Tag{101, protopack.EndGroupType},
+				protopack.Tag{102, protopack.StartGroupType},
+				protopack.Tag{101, protopack.VarintType}, protopack.Bool(false),
+				protopack.Tag{102, protopack.BytesType}, protopack.String("inside a group"),
+				protopack.Tag{102, protopack.EndGroupType},
 			}.Marshal())
 			return m
 		}(),
@@ -898,11 +898,11 @@
 		mo:   prototext.MarshalOptions{EmitUnknown: true},
 		input: func() proto.Message {
 			m := new(pb2.Scalars)
-			m.ProtoReflect().SetUnknown(pack.Message{
-				pack.Tag{101, pack.BytesType}, pack.LengthPrefix{pack.Bool(true), pack.Bool(false), pack.Bool(true)},
-				pack.Tag{102, pack.BytesType}, pack.String("hello"),
-				pack.Tag{101, pack.VarintType}, pack.Bool(true),
-				pack.Tag{102, pack.BytesType}, pack.String("世界"),
+			m.ProtoReflect().SetUnknown(protopack.Message{
+				protopack.Tag{101, protopack.BytesType}, protopack.LengthPrefix{protopack.Bool(true), protopack.Bool(false), protopack.Bool(true)},
+				protopack.Tag{102, protopack.BytesType}, protopack.String("hello"),
+				protopack.Tag{101, protopack.VarintType}, protopack.Bool(true),
+				protopack.Tag{102, protopack.BytesType}, protopack.String("世界"),
 			}.Marshal())
 			return m
 		}(),
diff --git a/internal/cmd/pbdump/pbdump.go b/internal/cmd/pbdump/pbdump.go
index 456fdb6..87d6030 100644
--- a/internal/cmd/pbdump/pbdump.go
+++ b/internal/cmd/pbdump/pbdump.go
@@ -18,11 +18,11 @@
 	"strings"
 
 	"google.golang.org/protobuf/encoding/protowire"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/errors"
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/reflect/protodesc"
 	"google.golang.org/protobuf/reflect/protoreflect"
+	"google.golang.org/protobuf/testing/protopack"
 
 	"google.golang.org/protobuf/types/descriptorpb"
 )
@@ -127,7 +127,7 @@
 
 	// Parse and print message structure.
 	defer log.Printf("fatal input: %q", buf) // debug printout if panic occurs
-	var m pack.Message
+	var m protopack.Message
 	m.UnmarshalDescriptor(buf, desc)
 	if *printSource {
 		fmt.Printf("%#v\n", m)
diff --git a/proto/decode_test.go b/proto/decode_test.go
index a6b7ce8..766c12d 100644
--- a/proto/decode_test.go
+++ b/proto/decode_test.go
@@ -11,9 +11,9 @@
 	"testing"
 
 	"google.golang.org/protobuf/encoding/prototext"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/reflect/protoreflect"
+	"google.golang.org/protobuf/testing/protopack"
 
 	testpb "google.golang.org/protobuf/internal/testprotos/test"
 	test3pb "google.golang.org/protobuf/internal/testprotos/test3"
@@ -91,8 +91,8 @@
 func TestDecodeZeroLengthBytes(t *testing.T) {
 	// Verify that proto3 bytes fields don't give the mistaken
 	// impression that they preserve presence.
-	wire := pack.Message{
-		pack.Tag{15, pack.BytesType}, pack.Bytes(nil),
+	wire := protopack.Message{
+		protopack.Tag{15, protopack.BytesType}, protopack.Bytes(nil),
 	}.Marshal()
 	m := &test3pb.TestAllTypes{}
 	if err := proto.Unmarshal(wire, m); err != nil {
@@ -104,8 +104,8 @@
 }
 
 func TestDecodeOneofNilWrapper(t *testing.T) {
-	wire := pack.Message{
-		pack.Tag{111, pack.VarintType}, pack.Varint(1111),
+	wire := protopack.Message{
+		protopack.Tag{111, protopack.VarintType}, protopack.Varint(1111),
 	}.Marshal()
 	m := &testpb.TestAllTypes{OneofField: (*testpb.TestAllTypes_OneofUint32)(nil)}
 	if err := proto.Unmarshal(wire, m); err != nil {
@@ -121,8 +121,8 @@
 	// but we take care to produce non-nil []bytes for zero-length
 	// byte strings, so test for it.
 	m := &testpb.TestAllTypes{}
-	b := pack.Message{
-		pack.Tag{45, pack.BytesType}, pack.Bytes(nil),
+	b := protopack.Message{
+		protopack.Tag{45, protopack.BytesType}, protopack.Bytes(nil),
 	}.Marshal()
 	if err := proto.Unmarshal(b, m); err != nil {
 		t.Fatal(err)
diff --git a/proto/equal_test.go b/proto/equal_test.go
index 3ae5771..95ec497 100644
--- a/proto/equal_test.go
+++ b/proto/equal_test.go
@@ -9,8 +9,8 @@
 	"testing"
 
 	"google.golang.org/protobuf/encoding/prototext"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/proto"
+	"google.golang.org/protobuf/testing/protopack"
 
 	testpb "google.golang.org/protobuf/internal/testprotos/test"
 	test3pb "google.golang.org/protobuf/internal/testprotos/test3"
@@ -416,15 +416,15 @@
 
 		// Unknown fields.
 		{
-			x: build(&testpb.TestAllTypes{}, unknown(pack.Message{
-				pack.Tag{100000, pack.VarintType}, pack.Varint(1),
+			x: build(&testpb.TestAllTypes{}, unknown(protopack.Message{
+				protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1),
 			}.Marshal())),
-			y: build(&testpb.TestAllTypes{}, unknown(pack.Message{
-				pack.Tag{100000, pack.VarintType}, pack.Varint(2),
+			y: build(&testpb.TestAllTypes{}, unknown(protopack.Message{
+				protopack.Tag{100000, protopack.VarintType}, protopack.Varint(2),
 			}.Marshal())),
 		}, {
-			x: build(&testpb.TestAllTypes{}, unknown(pack.Message{
-				pack.Tag{100000, pack.VarintType}, pack.Varint(1),
+			x: build(&testpb.TestAllTypes{}, unknown(protopack.Message{
+				protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1),
 			}.Marshal())),
 			y: &testpb.TestAllTypes{},
 		},
diff --git a/proto/merge_test.go b/proto/merge_test.go
index 2f2b4ba..7cc2093 100644
--- a/proto/merge_test.go
+++ b/proto/merge_test.go
@@ -13,11 +13,11 @@
 	"github.com/google/go-cmp/cmp"
 
 	"google.golang.org/protobuf/encoding/prototext"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/protobuild"
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/reflect/protoreflect"
 	"google.golang.org/protobuf/testing/protocmp"
+	"google.golang.org/protobuf/testing/protopack"
 	"google.golang.org/protobuf/types/dynamicpb"
 
 	legacypb "google.golang.org/protobuf/internal/testprotos/legacy"
@@ -511,19 +511,19 @@
 }, {
 	desc: "merge unknown fields",
 	dst: protobuild.Message{
-		protobuild.Unknown: pack.Message{
-			pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
+		protobuild.Unknown: protopack.Message{
+			protopack.Tag{Number: 50000, Type: protopack.VarintType}, protopack.Svarint(-5),
 		}.Marshal(),
 	},
 	src: protobuild.Message{
-		protobuild.Unknown: pack.Message{
-			pack.Tag{Number: 500000, Type: pack.VarintType}, pack.Svarint(-50),
+		protobuild.Unknown: protopack.Message{
+			protopack.Tag{Number: 500000, Type: protopack.VarintType}, protopack.Svarint(-50),
 		}.Marshal(),
 	},
 	want: protobuild.Message{
-		protobuild.Unknown: pack.Message{
-			pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
-			pack.Tag{Number: 500000, Type: pack.VarintType}, pack.Svarint(-50),
+		protobuild.Unknown: protopack.Message{
+			protopack.Tag{Number: 50000, Type: protopack.VarintType}, protopack.Svarint(-5),
+			protopack.Tag{Number: 500000, Type: protopack.VarintType}, protopack.Svarint(-50),
 		}.Marshal(),
 	},
 }, {
@@ -786,8 +786,8 @@
 		}},
 		func() *testpb.TestAllTypes {
 			m := new(testpb.TestAllTypes)
-			m.ProtoReflect().SetUnknown(pack.Message{
-				pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
+			m.ProtoReflect().SetUnknown(protopack.Message{
+				protopack.Tag{Number: 50000, Type: protopack.VarintType}, protopack.Svarint(-5),
 			}.Marshal())
 			return m
 		}(),
@@ -816,8 +816,8 @@
 			A: proto.Int32(5),
 		},
 	}
-	got.ProtoReflect().SetUnknown(pack.Message{
-		pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
+	got.ProtoReflect().SetUnknown(protopack.Message{
+		protopack.Tag{Number: 50000, Type: protopack.VarintType}, protopack.Svarint(-5),
 	}.Marshal())
 	proto.Merge(got, got)
 
@@ -833,9 +833,9 @@
 			A: proto.Int32(5),
 		},
 	}
-	want.ProtoReflect().SetUnknown(pack.Message{
-		pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
-		pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Svarint(-5),
+	want.ProtoReflect().SetUnknown(protopack.Message{
+		protopack.Tag{Number: 50000, Type: protopack.VarintType}, protopack.Svarint(-5),
+		protopack.Tag{Number: 50000, Type: protopack.VarintType}, protopack.Svarint(-5),
 	}.Marshal())
 
 	if !proto.Equal(got, want) {
diff --git a/proto/messageset_test.go b/proto/messageset_test.go
index 1418f4a..e634112 100644
--- a/proto/messageset_test.go
+++ b/proto/messageset_test.go
@@ -6,9 +6,9 @@
 
 import (
 	"google.golang.org/protobuf/encoding/protowire"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/flags"
 	"google.golang.org/protobuf/proto"
+	"google.golang.org/protobuf/testing/protopack"
 
 	messagesetpb "google.golang.org/protobuf/internal/testprotos/messageset/messagesetpb"
 	msetextpb "google.golang.org/protobuf/internal/testprotos/messageset/msetextpb"
@@ -31,14 +31,14 @@
 			})
 			return m
 		}()},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{2, pack.VarintType}, pack.Varint(1000),
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(10),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000),
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 				}),
-				pack.Tag{1, pack.EndGroupType},
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
@@ -51,14 +51,14 @@
 			})
 			return m
 		}()},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(10),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 				}),
-				pack.Tag{2, pack.VarintType}, pack.Varint(1000),
-				pack.Tag{1, pack.EndGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000),
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
@@ -70,34 +70,34 @@
 				Ext1Field1: proto.Int32(10),
 			}),
 		)},
-		wire: pack.Message{
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(1000),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(10),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 			}),
-			pack.Tag{1, pack.EndGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 			// Unknown field
-			pack.Tag{4, pack.VarintType}, pack.Varint(30),
+			protopack.Tag{4, protopack.VarintType}, protopack.Varint(30),
 		}.Marshal(),
 	},
 	{
 		desc: "MessageSet with unknown type_id",
 		decodeTo: []proto.Message{build(
 			&messagesetpb.MessageSet{},
-			unknown(pack.Message{
-				pack.Tag{999, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(10),
+			unknown(protopack.Message{
+				protopack.Tag{999, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 				}),
 			}.Marshal()),
 		)},
-		wire: pack.Message{
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(999),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(10),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(999),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 			}),
-			pack.Tag{1, pack.EndGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -109,16 +109,16 @@
 				Ext1Field2: proto.Int32(20),
 			}),
 		)},
-		wire: pack.Message{
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(1000),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(10),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 			}),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{2, pack.VarintType}, pack.Varint(20),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(20),
 			}),
-			pack.Tag{1, pack.EndGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -133,28 +133,28 @@
 				Ext2Field1: proto.Int32(30),
 			}),
 		)},
-		wire: pack.Message{
+		wire: protopack.Message{
 			// Ext1, field1
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(1000),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(10),
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 			}),
-			pack.Tag{1, pack.EndGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 			// Ext2, field1
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(1001),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(30),
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(1001),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(30),
 			}),
-			pack.Tag{1, pack.EndGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 			// Ext2, field2
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(1000),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{2, pack.VarintType}, pack.Varint(20),
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(20),
 			}),
-			pack.Tag{1, pack.EndGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -162,12 +162,12 @@
 		decodeTo: []proto.Message{build(
 			&messagesetpb.MessageSet{},
 		)},
-		wire: pack.Message{
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(10),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 			}),
-			pack.Tag{1, pack.EndGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -176,10 +176,10 @@
 			&messagesetpb.MessageSet{},
 			extend(msetextpb.E_Ext1_MessageSetExtension, &msetextpb.Ext1{}),
 		)},
-		wire: pack.Message{
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(1000),
-			pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000),
+			protopack.Tag{1, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -189,12 +189,12 @@
 			proto.SetExtension(m.MessageSet, msetextpb.E_ExtLargeNumber_MessageSetExtension, &msetextpb.ExtLargeNumber{})
 			return m
 		}()},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{2, pack.VarintType}, pack.Varint(protowire.MaxValidNumber + 1),
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-				pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(protowire.MaxValidNumber + 1),
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
@@ -203,18 +203,18 @@
 		decodeTo: []proto.Message{func() proto.Message {
 			m := &messagesetpb.MessageSetContainer{MessageSet: &messagesetpb.MessageSet{}}
 			m.MessageSet.ProtoReflect().SetUnknown(
-				pack.Message{
-					pack.Tag{protowire.MaxValidNumber + 2, pack.BytesType}, pack.LengthPrefix{},
+				protopack.Message{
+					protopack.Tag{protowire.MaxValidNumber + 2, protopack.BytesType}, protopack.LengthPrefix{},
 				}.Marshal(),
 			)
 			return m
 		}()},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{2, pack.VarintType}, pack.Varint(protowire.MaxValidNumber + 2),
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-				pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(protowire.MaxValidNumber + 2),
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
@@ -227,15 +227,15 @@
 			})
 			return m
 		}()},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{2, pack.VarintType}, pack.Varint(1000),
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(10),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1000),
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(10),
 				}),
-				pack.Tag{4, pack.VarintType}, pack.Varint(0),
-				pack.Tag{1, pack.EndGroupType},
+				protopack.Tag{4, protopack.VarintType}, protopack.Varint(0),
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
@@ -249,14 +249,14 @@
 			})
 			return m
 		}()},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{2, pack.VarintType}, pack.Varint(1002),
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1002),
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 				}),
-				pack.Tag{1, pack.EndGroupType},
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
@@ -269,12 +269,12 @@
 			proto.SetExtension(m.MessageSet, msetextpb.E_ExtRequired_MessageSetExtension, &msetextpb.ExtRequired{})
 			return m
 		}()},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{2, pack.VarintType}, pack.Varint(1002),
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-				pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1002),
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
@@ -286,12 +286,12 @@
 		decodeTo: []proto.Message{
 			(*messagesetpb.MessageSetContainer)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{2, pack.VarintType}, pack.Uvarint(0),
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-				pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Uvarint(0),
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
@@ -300,12 +300,12 @@
 		decodeTo: []proto.Message{
 			(*messagesetpb.MessageSetContainer)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.StartGroupType},
-				pack.Tag{2, pack.VarintType}, pack.Uvarint(0x80000000),
-				pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-				pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.StartGroupType},
+				protopack.Tag{2, protopack.VarintType}, protopack.Uvarint(0x80000000),
+				protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+				protopack.Tag{1, protopack.EndGroupType},
 			}),
 		}.Marshal(),
 	},
diff --git a/proto/noenforceutf8_test.go b/proto/noenforceutf8_test.go
index f41b35a..2bd011e 100644
--- a/proto/noenforceutf8_test.go
+++ b/proto/noenforceutf8_test.go
@@ -8,13 +8,13 @@
 	"reflect"
 
 	"google.golang.org/protobuf/encoding/prototext"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/filedesc"
 	"google.golang.org/protobuf/internal/flags"
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/reflect/protodesc"
 	"google.golang.org/protobuf/reflect/protoreflect"
 	"google.golang.org/protobuf/runtime/protoimpl"
+	"google.golang.org/protobuf/testing/protopack"
 
 	"google.golang.org/protobuf/types/descriptorpb"
 )
@@ -33,8 +33,8 @@
 		decodeTo: []proto.Message{&TestNoEnforceUTF8{
 			OptionalString: string("abc\xff"),
 		}},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.String("abc\xff"),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.String("abc\xff"),
 		}.Marshal(),
 	},
 	{
@@ -42,8 +42,8 @@
 		decodeTo: []proto.Message{&TestNoEnforceUTF8{
 			OptionalBytes: []byte("abc\xff"),
 		}},
-		wire: pack.Message{
-			pack.Tag{2, pack.BytesType}, pack.String("abc\xff"),
+		wire: protopack.Message{
+			protopack.Tag{2, protopack.BytesType}, protopack.String("abc\xff"),
 		}.Marshal(),
 	},
 	{
@@ -51,9 +51,9 @@
 		decodeTo: []proto.Message{&TestNoEnforceUTF8{
 			RepeatedString: []string{string("foo"), string("abc\xff")},
 		}},
-		wire: pack.Message{
-			pack.Tag{3, pack.BytesType}, pack.String("foo"),
-			pack.Tag{3, pack.BytesType}, pack.String("abc\xff"),
+		wire: protopack.Message{
+			protopack.Tag{3, protopack.BytesType}, protopack.String("foo"),
+			protopack.Tag{3, protopack.BytesType}, protopack.String("abc\xff"),
 		}.Marshal(),
 	},
 	{
@@ -61,9 +61,9 @@
 		decodeTo: []proto.Message{&TestNoEnforceUTF8{
 			RepeatedBytes: [][]byte{[]byte("foo"), []byte("abc\xff")},
 		}},
-		wire: pack.Message{
-			pack.Tag{4, pack.BytesType}, pack.String("foo"),
-			pack.Tag{4, pack.BytesType}, pack.String("abc\xff"),
+		wire: protopack.Message{
+			protopack.Tag{4, protopack.BytesType}, protopack.String("foo"),
+			protopack.Tag{4, protopack.BytesType}, protopack.String("abc\xff"),
 		}.Marshal(),
 	},
 	{
@@ -71,14 +71,14 @@
 		decodeTo: []proto.Message{
 			&TestNoEnforceUTF8{OneofField: &TestNoEnforceUTF8_OneofString{string("abc\xff")}},
 		},
-		wire: pack.Message{pack.Tag{5, pack.BytesType}, pack.String("abc\xff")}.Marshal(),
+		wire: protopack.Message{protopack.Tag{5, protopack.BytesType}, protopack.String("abc\xff")}.Marshal(),
 	},
 	{
 		desc: "invalid UTF-8 in oneof string field of Go bytes",
 		decodeTo: []proto.Message{
 			&TestNoEnforceUTF8{OneofField: &TestNoEnforceUTF8_OneofBytes{[]byte("abc\xff")}},
 		},
-		wire: pack.Message{pack.Tag{6, pack.BytesType}, pack.String("abc\xff")}.Marshal(),
+		wire: protopack.Message{protopack.Tag{6, protopack.BytesType}, protopack.String("abc\xff")}.Marshal(),
 	},
 }
 
diff --git a/proto/testmessages_test.go b/proto/testmessages_test.go
index 680faf6..b0090fe 100644
--- a/proto/testmessages_test.go
+++ b/proto/testmessages_test.go
@@ -6,12 +6,12 @@
 
 import (
 	"google.golang.org/protobuf/encoding/protowire"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/impl"
 	"google.golang.org/protobuf/internal/protobuild"
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/reflect/protoreflect"
 	"google.golang.org/protobuf/reflect/protoregistry"
+	"google.golang.org/protobuf/testing/protopack"
 
 	legacypb "google.golang.org/protobuf/internal/testprotos/legacy"
 	requiredpb "google.golang.org/protobuf/internal/testprotos/required"
@@ -83,23 +83,23 @@
 			"optional_bytes":       []byte("bytes"),
 			"optional_nested_enum": "BAR",
 		}),
-		wire: pack.Message{
-			pack.Tag{1, pack.VarintType}, pack.Varint(1001),
-			pack.Tag{2, pack.VarintType}, pack.Varint(1002),
-			pack.Tag{3, pack.VarintType}, pack.Uvarint(1003),
-			pack.Tag{4, pack.VarintType}, pack.Uvarint(1004),
-			pack.Tag{5, pack.VarintType}, pack.Svarint(1005),
-			pack.Tag{6, pack.VarintType}, pack.Svarint(1006),
-			pack.Tag{7, pack.Fixed32Type}, pack.Uint32(1007),
-			pack.Tag{8, pack.Fixed64Type}, pack.Uint64(1008),
-			pack.Tag{9, pack.Fixed32Type}, pack.Int32(1009),
-			pack.Tag{10, pack.Fixed64Type}, pack.Int64(1010),
-			pack.Tag{11, pack.Fixed32Type}, pack.Float32(1011.5),
-			pack.Tag{12, pack.Fixed64Type}, pack.Float64(1012.5),
-			pack.Tag{13, pack.VarintType}, pack.Bool(true),
-			pack.Tag{14, pack.BytesType}, pack.String("string"),
-			pack.Tag{15, pack.BytesType}, pack.Bytes([]byte("bytes")),
-			pack.Tag{21, pack.VarintType}, pack.Varint(int(testpb.TestAllTypes_BAR)),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.VarintType}, protopack.Varint(1001),
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(1002),
+			protopack.Tag{3, protopack.VarintType}, protopack.Uvarint(1003),
+			protopack.Tag{4, protopack.VarintType}, protopack.Uvarint(1004),
+			protopack.Tag{5, protopack.VarintType}, protopack.Svarint(1005),
+			protopack.Tag{6, protopack.VarintType}, protopack.Svarint(1006),
+			protopack.Tag{7, protopack.Fixed32Type}, protopack.Uint32(1007),
+			protopack.Tag{8, protopack.Fixed64Type}, protopack.Uint64(1008),
+			protopack.Tag{9, protopack.Fixed32Type}, protopack.Int32(1009),
+			protopack.Tag{10, protopack.Fixed64Type}, protopack.Int64(1010),
+			protopack.Tag{11, protopack.Fixed32Type}, protopack.Float32(1011.5),
+			protopack.Tag{12, protopack.Fixed64Type}, protopack.Float64(1012.5),
+			protopack.Tag{13, protopack.VarintType}, protopack.Bool(true),
+			protopack.Tag{14, protopack.BytesType}, protopack.String("string"),
+			protopack.Tag{15, protopack.BytesType}, protopack.Bytes([]byte("bytes")),
+			protopack.Tag{21, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR)),
 		}.Marshal(),
 	},
 	{
@@ -121,22 +121,22 @@
 			"optional_string":   "",
 			"optional_bytes":    []byte{},
 		}),
-		wire: pack.Message{
-			pack.Tag{1, pack.VarintType}, pack.Varint(0),
-			pack.Tag{2, pack.VarintType}, pack.Varint(0),
-			pack.Tag{3, pack.VarintType}, pack.Uvarint(0),
-			pack.Tag{4, pack.VarintType}, pack.Uvarint(0),
-			pack.Tag{5, pack.VarintType}, pack.Svarint(0),
-			pack.Tag{6, pack.VarintType}, pack.Svarint(0),
-			pack.Tag{7, pack.Fixed32Type}, pack.Uint32(0),
-			pack.Tag{8, pack.Fixed64Type}, pack.Uint64(0),
-			pack.Tag{9, pack.Fixed32Type}, pack.Int32(0),
-			pack.Tag{10, pack.Fixed64Type}, pack.Int64(0),
-			pack.Tag{11, pack.Fixed32Type}, pack.Float32(0),
-			pack.Tag{12, pack.Fixed64Type}, pack.Float64(0),
-			pack.Tag{13, pack.VarintType}, pack.Bool(false),
-			pack.Tag{14, pack.BytesType}, pack.String(""),
-			pack.Tag{15, pack.BytesType}, pack.Bytes(nil),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.VarintType}, protopack.Varint(0),
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(0),
+			protopack.Tag{3, protopack.VarintType}, protopack.Uvarint(0),
+			protopack.Tag{4, protopack.VarintType}, protopack.Uvarint(0),
+			protopack.Tag{5, protopack.VarintType}, protopack.Svarint(0),
+			protopack.Tag{6, protopack.VarintType}, protopack.Svarint(0),
+			protopack.Tag{7, protopack.Fixed32Type}, protopack.Uint32(0),
+			protopack.Tag{8, protopack.Fixed64Type}, protopack.Uint64(0),
+			protopack.Tag{9, protopack.Fixed32Type}, protopack.Int32(0),
+			protopack.Tag{10, protopack.Fixed64Type}, protopack.Int64(0),
+			protopack.Tag{11, protopack.Fixed32Type}, protopack.Float32(0),
+			protopack.Tag{12, protopack.Fixed64Type}, protopack.Float64(0),
+			protopack.Tag{13, protopack.VarintType}, protopack.Bool(false),
+			protopack.Tag{14, protopack.BytesType}, protopack.String(""),
+			protopack.Tag{15, protopack.BytesType}, protopack.Bytes(nil),
 		}.Marshal(),
 	},
 	{
@@ -147,11 +147,11 @@
 				"same_field_number": 1016,
 			},
 		}, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}),
-		wire: pack.Message{
-			pack.Tag{16, pack.StartGroupType},
-			pack.Tag{17, pack.VarintType}, pack.Varint(1017),
-			pack.Tag{16, pack.VarintType}, pack.Varint(1016),
-			pack.Tag{16, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{16, protopack.StartGroupType},
+			protopack.Tag{17, protopack.VarintType}, protopack.Varint(1017),
+			protopack.Tag{16, protopack.VarintType}, protopack.Varint(1016),
+			protopack.Tag{16, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -161,13 +161,13 @@
 				"a": 2,
 			},
 		}, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}),
-		wire: pack.Message{
-			pack.Tag{16, pack.StartGroupType},
-			pack.Tag{17, pack.VarintType}, pack.Varint(1),
-			pack.Tag{16, pack.EndGroupType},
-			pack.Tag{16, pack.StartGroupType},
-			pack.Tag{17, pack.VarintType}, pack.Varint(2),
-			pack.Tag{16, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{16, protopack.StartGroupType},
+			protopack.Tag{17, protopack.VarintType}, protopack.Varint(1),
+			protopack.Tag{16, protopack.EndGroupType},
+			protopack.Tag{16, protopack.StartGroupType},
+			protopack.Tag{17, protopack.VarintType}, protopack.Varint(2),
+			protopack.Tag{16, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -180,11 +180,11 @@
 				},
 			},
 		}),
-		wire: pack.Message{
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(42),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(43),
+		wire: protopack.Message{
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(42),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(43),
 				}),
 			}),
 		}.Marshal(),
@@ -199,13 +199,13 @@
 				},
 			},
 		}),
-		wire: pack.Message{
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(42),
+		wire: protopack.Message{
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(42),
 			}),
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(43),
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(43),
 				}),
 			}),
 		}.Marshal(),
@@ -217,12 +217,12 @@
 				"a": 2,
 			},
 		}),
-		wire: pack.Message{
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2),
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
 			}),
 		}.Marshal(),
 	},
@@ -246,39 +246,39 @@
 			"repeated_bytes":       []string{"FOO", "BAR"},
 			"repeated_nested_enum": []string{"FOO", "BAR"},
 		}),
-		wire: pack.Message{
-			pack.Tag{31, pack.VarintType}, pack.Varint(1001),
-			pack.Tag{31, pack.VarintType}, pack.Varint(2001),
-			pack.Tag{32, pack.VarintType}, pack.Varint(1002),
-			pack.Tag{32, pack.VarintType}, pack.Varint(2002),
-			pack.Tag{33, pack.VarintType}, pack.Uvarint(1003),
-			pack.Tag{33, pack.VarintType}, pack.Uvarint(2003),
-			pack.Tag{34, pack.VarintType}, pack.Uvarint(1004),
-			pack.Tag{34, pack.VarintType}, pack.Uvarint(2004),
-			pack.Tag{35, pack.VarintType}, pack.Svarint(1005),
-			pack.Tag{35, pack.VarintType}, pack.Svarint(2005),
-			pack.Tag{36, pack.VarintType}, pack.Svarint(1006),
-			pack.Tag{36, pack.VarintType}, pack.Svarint(2006),
-			pack.Tag{37, pack.Fixed32Type}, pack.Uint32(1007),
-			pack.Tag{37, pack.Fixed32Type}, pack.Uint32(2007),
-			pack.Tag{38, pack.Fixed64Type}, pack.Uint64(1008),
-			pack.Tag{38, pack.Fixed64Type}, pack.Uint64(2008),
-			pack.Tag{39, pack.Fixed32Type}, pack.Int32(1009),
-			pack.Tag{39, pack.Fixed32Type}, pack.Int32(2009),
-			pack.Tag{40, pack.Fixed64Type}, pack.Int64(1010),
-			pack.Tag{40, pack.Fixed64Type}, pack.Int64(2010),
-			pack.Tag{41, pack.Fixed32Type}, pack.Float32(1011.5),
-			pack.Tag{41, pack.Fixed32Type}, pack.Float32(2011.5),
-			pack.Tag{42, pack.Fixed64Type}, pack.Float64(1012.5),
-			pack.Tag{42, pack.Fixed64Type}, pack.Float64(2012.5),
-			pack.Tag{43, pack.VarintType}, pack.Bool(true),
-			pack.Tag{43, pack.VarintType}, pack.Bool(false),
-			pack.Tag{44, pack.BytesType}, pack.String("foo"),
-			pack.Tag{44, pack.BytesType}, pack.String("bar"),
-			pack.Tag{45, pack.BytesType}, pack.Bytes([]byte("FOO")),
-			pack.Tag{45, pack.BytesType}, pack.Bytes([]byte("BAR")),
-			pack.Tag{51, pack.VarintType}, pack.Varint(int(testpb.TestAllTypes_FOO)),
-			pack.Tag{51, pack.VarintType}, pack.Varint(int(testpb.TestAllTypes_BAR)),
+		wire: protopack.Message{
+			protopack.Tag{31, protopack.VarintType}, protopack.Varint(1001),
+			protopack.Tag{31, protopack.VarintType}, protopack.Varint(2001),
+			protopack.Tag{32, protopack.VarintType}, protopack.Varint(1002),
+			protopack.Tag{32, protopack.VarintType}, protopack.Varint(2002),
+			protopack.Tag{33, protopack.VarintType}, protopack.Uvarint(1003),
+			protopack.Tag{33, protopack.VarintType}, protopack.Uvarint(2003),
+			protopack.Tag{34, protopack.VarintType}, protopack.Uvarint(1004),
+			protopack.Tag{34, protopack.VarintType}, protopack.Uvarint(2004),
+			protopack.Tag{35, protopack.VarintType}, protopack.Svarint(1005),
+			protopack.Tag{35, protopack.VarintType}, protopack.Svarint(2005),
+			protopack.Tag{36, protopack.VarintType}, protopack.Svarint(1006),
+			protopack.Tag{36, protopack.VarintType}, protopack.Svarint(2006),
+			protopack.Tag{37, protopack.Fixed32Type}, protopack.Uint32(1007),
+			protopack.Tag{37, protopack.Fixed32Type}, protopack.Uint32(2007),
+			protopack.Tag{38, protopack.Fixed64Type}, protopack.Uint64(1008),
+			protopack.Tag{38, protopack.Fixed64Type}, protopack.Uint64(2008),
+			protopack.Tag{39, protopack.Fixed32Type}, protopack.Int32(1009),
+			protopack.Tag{39, protopack.Fixed32Type}, protopack.Int32(2009),
+			protopack.Tag{40, protopack.Fixed64Type}, protopack.Int64(1010),
+			protopack.Tag{40, protopack.Fixed64Type}, protopack.Int64(2010),
+			protopack.Tag{41, protopack.Fixed32Type}, protopack.Float32(1011.5),
+			protopack.Tag{41, protopack.Fixed32Type}, protopack.Float32(2011.5),
+			protopack.Tag{42, protopack.Fixed64Type}, protopack.Float64(1012.5),
+			protopack.Tag{42, protopack.Fixed64Type}, protopack.Float64(2012.5),
+			protopack.Tag{43, protopack.VarintType}, protopack.Bool(true),
+			protopack.Tag{43, protopack.VarintType}, protopack.Bool(false),
+			protopack.Tag{44, protopack.BytesType}, protopack.String("foo"),
+			protopack.Tag{44, protopack.BytesType}, protopack.String("bar"),
+			protopack.Tag{45, protopack.BytesType}, protopack.Bytes([]byte("FOO")),
+			protopack.Tag{45, protopack.BytesType}, protopack.Bytes([]byte("BAR")),
+			protopack.Tag{51, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_FOO)),
+			protopack.Tag{51, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR)),
 		}.Marshal(),
 	},
 	{
@@ -299,49 +299,49 @@
 			"repeated_bool":        []bool{true, false},
 			"repeated_nested_enum": []string{"FOO", "BAR"},
 		}),
-		wire: pack.Message{
-			pack.Tag{31, pack.BytesType}, pack.LengthPrefix{
-				pack.Varint(1001), pack.Varint(2001),
+		wire: protopack.Message{
+			protopack.Tag{31, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Varint(1001), protopack.Varint(2001),
 			},
-			pack.Tag{32, pack.BytesType}, pack.LengthPrefix{
-				pack.Varint(1002), pack.Varint(2002),
+			protopack.Tag{32, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Varint(1002), protopack.Varint(2002),
 			},
-			pack.Tag{33, pack.BytesType}, pack.LengthPrefix{
-				pack.Uvarint(1003), pack.Uvarint(2003),
+			protopack.Tag{33, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Uvarint(1003), protopack.Uvarint(2003),
 			},
-			pack.Tag{34, pack.BytesType}, pack.LengthPrefix{
-				pack.Uvarint(1004), pack.Uvarint(2004),
+			protopack.Tag{34, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Uvarint(1004), protopack.Uvarint(2004),
 			},
-			pack.Tag{35, pack.BytesType}, pack.LengthPrefix{
-				pack.Svarint(1005), pack.Svarint(2005),
+			protopack.Tag{35, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Svarint(1005), protopack.Svarint(2005),
 			},
-			pack.Tag{36, pack.BytesType}, pack.LengthPrefix{
-				pack.Svarint(1006), pack.Svarint(2006),
+			protopack.Tag{36, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Svarint(1006), protopack.Svarint(2006),
 			},
-			pack.Tag{37, pack.BytesType}, pack.LengthPrefix{
-				pack.Uint32(1007), pack.Uint32(2007),
+			protopack.Tag{37, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Uint32(1007), protopack.Uint32(2007),
 			},
-			pack.Tag{38, pack.BytesType}, pack.LengthPrefix{
-				pack.Uint64(1008), pack.Uint64(2008),
+			protopack.Tag{38, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Uint64(1008), protopack.Uint64(2008),
 			},
-			pack.Tag{39, pack.BytesType}, pack.LengthPrefix{
-				pack.Int32(1009), pack.Int32(2009),
+			protopack.Tag{39, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Int32(1009), protopack.Int32(2009),
 			},
-			pack.Tag{40, pack.BytesType}, pack.LengthPrefix{
-				pack.Int64(1010), pack.Int64(2010),
+			protopack.Tag{40, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Int64(1010), protopack.Int64(2010),
 			},
-			pack.Tag{41, pack.BytesType}, pack.LengthPrefix{
-				pack.Float32(1011.5), pack.Float32(2011.5),
+			protopack.Tag{41, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Float32(1011.5), protopack.Float32(2011.5),
 			},
-			pack.Tag{42, pack.BytesType}, pack.LengthPrefix{
-				pack.Float64(1012.5), pack.Float64(2012.5),
+			protopack.Tag{42, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Float64(1012.5), protopack.Float64(2012.5),
 			},
-			pack.Tag{43, pack.BytesType}, pack.LengthPrefix{
-				pack.Bool(true), pack.Bool(false),
+			protopack.Tag{43, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Bool(true), protopack.Bool(false),
 			},
-			pack.Tag{51, pack.BytesType}, pack.LengthPrefix{
-				pack.Varint(int(testpb.TestAllTypes_FOO)),
-				pack.Varint(int(testpb.TestAllTypes_BAR)),
+			protopack.Tag{51, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Varint(int(testpb.TestAllTypes_FOO)),
+				protopack.Varint(int(testpb.TestAllTypes_BAR)),
 			},
 		}.Marshal(),
 	},
@@ -363,21 +363,21 @@
 			"repeated_bool":        []bool{},
 			"repeated_nested_enum": []string{},
 		}),
-		wire: pack.Message{
-			pack.Tag{31, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{32, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{33, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{34, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{35, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{36, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{37, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{38, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{39, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{40, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{41, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{42, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{43, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{51, pack.BytesType}, pack.LengthPrefix{},
+		wire: protopack.Message{
+			protopack.Tag{31, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{32, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{33, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{34, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{35, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{36, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{37, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{38, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{39, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{40, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{41, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{42, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{43, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{51, protopack.BytesType}, protopack.LengthPrefix{},
 		}.Marshal(),
 	},
 	{
@@ -398,49 +398,49 @@
 			"packed_bool":     []bool{true, false},
 			"packed_enum":     []string{"FOREIGN_FOO", "FOREIGN_BAR"},
 		}, &testpb.TestPackedTypes{}, &testpb.TestPackedExtensions{}),
-		wire: pack.Message{
-			pack.Tag{90, pack.BytesType}, pack.LengthPrefix{
-				pack.Varint(1001), pack.Varint(2001),
+		wire: protopack.Message{
+			protopack.Tag{90, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Varint(1001), protopack.Varint(2001),
 			},
-			pack.Tag{91, pack.BytesType}, pack.LengthPrefix{
-				pack.Varint(1002), pack.Varint(2002),
+			protopack.Tag{91, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Varint(1002), protopack.Varint(2002),
 			},
-			pack.Tag{92, pack.BytesType}, pack.LengthPrefix{
-				pack.Uvarint(1003), pack.Uvarint(2003),
+			protopack.Tag{92, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Uvarint(1003), protopack.Uvarint(2003),
 			},
-			pack.Tag{93, pack.BytesType}, pack.LengthPrefix{
-				pack.Uvarint(1004), pack.Uvarint(2004),
+			protopack.Tag{93, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Uvarint(1004), protopack.Uvarint(2004),
 			},
-			pack.Tag{94, pack.BytesType}, pack.LengthPrefix{
-				pack.Svarint(1005), pack.Svarint(2005),
+			protopack.Tag{94, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Svarint(1005), protopack.Svarint(2005),
 			},
-			pack.Tag{95, pack.BytesType}, pack.LengthPrefix{
-				pack.Svarint(1006), pack.Svarint(2006),
+			protopack.Tag{95, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Svarint(1006), protopack.Svarint(2006),
 			},
-			pack.Tag{96, pack.BytesType}, pack.LengthPrefix{
-				pack.Uint32(1007), pack.Uint32(2007),
+			protopack.Tag{96, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Uint32(1007), protopack.Uint32(2007),
 			},
-			pack.Tag{97, pack.BytesType}, pack.LengthPrefix{
-				pack.Uint64(1008), pack.Uint64(2008),
+			protopack.Tag{97, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Uint64(1008), protopack.Uint64(2008),
 			},
-			pack.Tag{98, pack.BytesType}, pack.LengthPrefix{
-				pack.Int32(1009), pack.Int32(2009),
+			protopack.Tag{98, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Int32(1009), protopack.Int32(2009),
 			},
-			pack.Tag{99, pack.BytesType}, pack.LengthPrefix{
-				pack.Int64(1010), pack.Int64(2010),
+			protopack.Tag{99, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Int64(1010), protopack.Int64(2010),
 			},
-			pack.Tag{100, pack.BytesType}, pack.LengthPrefix{
-				pack.Float32(1011.5), pack.Float32(2011.5),
+			protopack.Tag{100, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Float32(1011.5), protopack.Float32(2011.5),
 			},
-			pack.Tag{101, pack.BytesType}, pack.LengthPrefix{
-				pack.Float64(1012.5), pack.Float64(2012.5),
+			protopack.Tag{101, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Float64(1012.5), protopack.Float64(2012.5),
 			},
-			pack.Tag{102, pack.BytesType}, pack.LengthPrefix{
-				pack.Bool(true), pack.Bool(false),
+			protopack.Tag{102, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Bool(true), protopack.Bool(false),
 			},
-			pack.Tag{103, pack.BytesType}, pack.LengthPrefix{
-				pack.Varint(int(testpb.ForeignEnum_FOREIGN_FOO)),
-				pack.Varint(int(testpb.ForeignEnum_FOREIGN_BAR)),
+			protopack.Tag{103, protopack.BytesType}, protopack.LengthPrefix{
+				protopack.Varint(int(testpb.ForeignEnum_FOREIGN_FOO)),
+				protopack.Varint(int(testpb.ForeignEnum_FOREIGN_BAR)),
 			},
 		}.Marshal(),
 	},
@@ -462,21 +462,21 @@
 			"packed_bool":     []bool{},
 			"packed_enum":     []string{},
 		}, &testpb.TestPackedTypes{}, &testpb.TestPackedExtensions{}),
-		wire: pack.Message{
-			pack.Tag{90, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{91, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{92, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{93, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{94, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{95, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{96, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{97, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{98, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{99, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{100, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{101, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{102, pack.BytesType}, pack.LengthPrefix{},
-			pack.Tag{103, pack.BytesType}, pack.LengthPrefix{},
+		wire: protopack.Message{
+			protopack.Tag{90, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{91, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{92, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{93, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{94, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{95, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{96, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{97, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{98, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{99, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{100, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{101, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{102, protopack.BytesType}, protopack.LengthPrefix{},
+			protopack.Tag{103, protopack.BytesType}, protopack.LengthPrefix{},
 		}.Marshal(),
 	},
 	{
@@ -488,13 +488,13 @@
 				{"a": 2},
 			},
 		}),
-		wire: pack.Message{
-			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
-			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2),
+			protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+			protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
 			}),
 		}.Marshal(),
 	},
@@ -520,13 +520,13 @@
 				{A: proto.Int32(2)},
 			}),
 		)},
-		wire: pack.Message{
-			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
-			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2),
+			protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+			protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
 			}),
 		}.Marshal(),
 	},
@@ -539,15 +539,15 @@
 				{"a": 2017},
 			},
 		}, &testpb.TestAllTypes{}, &testpb.TestAllExtensions{}),
-		wire: pack.Message{
-			pack.Tag{46, pack.StartGroupType},
-			pack.Tag{47, pack.VarintType}, pack.Varint(1017),
-			pack.Tag{46, pack.EndGroupType},
-			pack.Tag{46, pack.StartGroupType},
-			pack.Tag{46, pack.EndGroupType},
-			pack.Tag{46, pack.StartGroupType},
-			pack.Tag{47, pack.VarintType}, pack.Varint(2017),
-			pack.Tag{46, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{46, protopack.StartGroupType},
+			protopack.Tag{47, protopack.VarintType}, protopack.Varint(1017),
+			protopack.Tag{46, protopack.EndGroupType},
+			protopack.Tag{46, protopack.StartGroupType},
+			protopack.Tag{46, protopack.EndGroupType},
+			protopack.Tag{46, protopack.StartGroupType},
+			protopack.Tag{47, protopack.VarintType}, protopack.Varint(2017),
+			protopack.Tag{46, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -566,15 +566,15 @@
 				{A: proto.Int32(2017)},
 			}),
 		)},
-		wire: pack.Message{
-			pack.Tag{46, pack.StartGroupType},
-			pack.Tag{47, pack.VarintType}, pack.Varint(1017),
-			pack.Tag{46, pack.EndGroupType},
-			pack.Tag{46, pack.StartGroupType},
-			pack.Tag{46, pack.EndGroupType},
-			pack.Tag{46, pack.StartGroupType},
-			pack.Tag{47, pack.VarintType}, pack.Varint(2017),
-			pack.Tag{46, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{46, protopack.StartGroupType},
+			protopack.Tag{47, protopack.VarintType}, protopack.Varint(1017),
+			protopack.Tag{46, protopack.EndGroupType},
+			protopack.Tag{46, protopack.StartGroupType},
+			protopack.Tag{46, protopack.EndGroupType},
+			protopack.Tag{46, protopack.StartGroupType},
+			protopack.Tag{47, protopack.VarintType}, protopack.Varint(2017),
+			protopack.Tag{46, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -601,146 +601,146 @@
 			},
 			"map_string_nested_enum": map[string]string{"73.1.key": "FOO", "73.2.key": "BAR"},
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1056),
-				pack.Tag{2, pack.VarintType}, pack.Varint(1156),
+		wire: protopack.Message{
+			protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1056),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1156),
 			}),
-			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2056),
-				pack.Tag{2, pack.VarintType}, pack.Varint(2156),
+			protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2056),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(2156),
 			}),
-			pack.Tag{57, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1057),
-				pack.Tag{2, pack.VarintType}, pack.Varint(1157),
+			protopack.Tag{57, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1057),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1157),
 			}),
-			pack.Tag{57, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2057),
-				pack.Tag{2, pack.VarintType}, pack.Varint(2157),
+			protopack.Tag{57, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2057),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(2157),
 			}),
-			pack.Tag{58, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1058),
-				pack.Tag{2, pack.VarintType}, pack.Varint(1158),
+			protopack.Tag{58, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1058),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1158),
 			}),
-			pack.Tag{58, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2058),
-				pack.Tag{2, pack.VarintType}, pack.Varint(2158),
+			protopack.Tag{58, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2058),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(2158),
 			}),
-			pack.Tag{59, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1059),
-				pack.Tag{2, pack.VarintType}, pack.Varint(1159),
+			protopack.Tag{59, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1059),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1159),
 			}),
-			pack.Tag{59, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2059),
-				pack.Tag{2, pack.VarintType}, pack.Varint(2159),
+			protopack.Tag{59, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2059),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(2159),
 			}),
-			pack.Tag{60, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Svarint(1060),
-				pack.Tag{2, pack.VarintType}, pack.Svarint(1160),
+			protopack.Tag{60, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Svarint(1060),
+				protopack.Tag{2, protopack.VarintType}, protopack.Svarint(1160),
 			}),
-			pack.Tag{60, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Svarint(2060),
-				pack.Tag{2, pack.VarintType}, pack.Svarint(2160),
+			protopack.Tag{60, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Svarint(2060),
+				protopack.Tag{2, protopack.VarintType}, protopack.Svarint(2160),
 			}),
-			pack.Tag{61, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Svarint(1061),
-				pack.Tag{2, pack.VarintType}, pack.Svarint(1161),
+			protopack.Tag{61, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Svarint(1061),
+				protopack.Tag{2, protopack.VarintType}, protopack.Svarint(1161),
 			}),
-			pack.Tag{61, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Svarint(2061),
-				pack.Tag{2, pack.VarintType}, pack.Svarint(2161),
+			protopack.Tag{61, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Svarint(2061),
+				protopack.Tag{2, protopack.VarintType}, protopack.Svarint(2161),
 			}),
-			pack.Tag{62, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.Fixed32Type}, pack.Int32(1062),
-				pack.Tag{2, pack.Fixed32Type}, pack.Int32(1162),
+			protopack.Tag{62, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(1062),
+				protopack.Tag{2, protopack.Fixed32Type}, protopack.Int32(1162),
 			}),
-			pack.Tag{62, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.Fixed32Type}, pack.Int32(2062),
-				pack.Tag{2, pack.Fixed32Type}, pack.Int32(2162),
+			protopack.Tag{62, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2062),
+				protopack.Tag{2, protopack.Fixed32Type}, protopack.Int32(2162),
 			}),
-			pack.Tag{63, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.Fixed64Type}, pack.Int64(1063),
-				pack.Tag{2, pack.Fixed64Type}, pack.Int64(1163),
+			protopack.Tag{63, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(1063),
+				protopack.Tag{2, protopack.Fixed64Type}, protopack.Int64(1163),
 			}),
-			pack.Tag{63, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.Fixed64Type}, pack.Int64(2063),
-				pack.Tag{2, pack.Fixed64Type}, pack.Int64(2163),
+			protopack.Tag{63, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(2063),
+				protopack.Tag{2, protopack.Fixed64Type}, protopack.Int64(2163),
 			}),
-			pack.Tag{64, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.Fixed32Type}, pack.Int32(1064),
-				pack.Tag{2, pack.Fixed32Type}, pack.Int32(1164),
+			protopack.Tag{64, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(1064),
+				protopack.Tag{2, protopack.Fixed32Type}, protopack.Int32(1164),
 			}),
-			pack.Tag{64, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.Fixed32Type}, pack.Int32(2064),
-				pack.Tag{2, pack.Fixed32Type}, pack.Int32(2164),
+			protopack.Tag{64, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2064),
+				protopack.Tag{2, protopack.Fixed32Type}, protopack.Int32(2164),
 			}),
-			pack.Tag{65, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.Fixed64Type}, pack.Int64(1065),
-				pack.Tag{2, pack.Fixed64Type}, pack.Int64(1165),
+			protopack.Tag{65, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(1065),
+				protopack.Tag{2, protopack.Fixed64Type}, protopack.Int64(1165),
 			}),
-			pack.Tag{65, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.Fixed64Type}, pack.Int64(2065),
-				pack.Tag{2, pack.Fixed64Type}, pack.Int64(2165),
+			protopack.Tag{65, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(2065),
+				protopack.Tag{2, protopack.Fixed64Type}, protopack.Int64(2165),
 			}),
-			pack.Tag{66, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1066),
-				pack.Tag{2, pack.Fixed32Type}, pack.Float32(1166.5),
+			protopack.Tag{66, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1066),
+				protopack.Tag{2, protopack.Fixed32Type}, protopack.Float32(1166.5),
 			}),
-			pack.Tag{66, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2066),
-				pack.Tag{2, pack.Fixed32Type}, pack.Float32(2166.5),
+			protopack.Tag{66, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2066),
+				protopack.Tag{2, protopack.Fixed32Type}, protopack.Float32(2166.5),
 			}),
-			pack.Tag{67, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1067),
-				pack.Tag{2, pack.Fixed64Type}, pack.Float64(1167.5),
+			protopack.Tag{67, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1067),
+				protopack.Tag{2, protopack.Fixed64Type}, protopack.Float64(1167.5),
 			}),
-			pack.Tag{67, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2067),
-				pack.Tag{2, pack.Fixed64Type}, pack.Float64(2167.5),
+			protopack.Tag{67, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2067),
+				protopack.Tag{2, protopack.Fixed64Type}, protopack.Float64(2167.5),
 			}),
-			pack.Tag{68, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Bool(true),
-				pack.Tag{2, pack.VarintType}, pack.Bool(false),
+			protopack.Tag{68, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Bool(true),
+				protopack.Tag{2, protopack.VarintType}, protopack.Bool(false),
 			}),
-			pack.Tag{68, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Bool(false),
-				pack.Tag{2, pack.VarintType}, pack.Bool(true),
+			protopack.Tag{68, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Bool(false),
+				protopack.Tag{2, protopack.VarintType}, protopack.Bool(true),
 			}),
-			pack.Tag{69, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("69.1.key"),
-				pack.Tag{2, pack.BytesType}, pack.String("69.1.val"),
+			protopack.Tag{69, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("69.1.key"),
+				protopack.Tag{2, protopack.BytesType}, protopack.String("69.1.val"),
 			}),
-			pack.Tag{69, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("69.2.key"),
-				pack.Tag{2, pack.BytesType}, pack.String("69.2.val"),
+			protopack.Tag{69, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("69.2.key"),
+				protopack.Tag{2, protopack.BytesType}, protopack.String("69.2.val"),
 			}),
-			pack.Tag{70, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("70.1.key"),
-				pack.Tag{2, pack.BytesType}, pack.String("70.1.val"),
+			protopack.Tag{70, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("70.1.key"),
+				protopack.Tag{2, protopack.BytesType}, protopack.String("70.1.val"),
 			}),
-			pack.Tag{70, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("70.2.key"),
-				pack.Tag{2, pack.BytesType}, pack.String("70.2.val"),
+			protopack.Tag{70, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("70.2.key"),
+				protopack.Tag{2, protopack.BytesType}, protopack.String("70.2.val"),
 			}),
-			pack.Tag{71, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("71.1.key"),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(1171),
+			protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("71.1.key"),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(1171),
 				}),
 			}),
-			pack.Tag{71, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("71.2.key"),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(2171),
+			protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("71.2.key"),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(2171),
 				}),
 			}),
-			pack.Tag{73, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("73.1.key"),
-				pack.Tag{2, pack.VarintType}, pack.Varint(int(testpb.TestAllTypes_FOO)),
+			protopack.Tag{73, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("73.1.key"),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_FOO)),
 			}),
-			pack.Tag{73, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("73.2.key"),
-				pack.Tag{2, pack.VarintType}, pack.Varint(int(testpb.TestAllTypes_BAR)),
+			protopack.Tag{73, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("73.2.key"),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR)),
 			}),
 		}.Marshal(),
 	},
@@ -752,16 +752,16 @@
 				"71.1.key": {"a": 1171},
 			},
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{2, pack.VarintType}, pack.Varint(1156),
-				pack.Tag{1, pack.VarintType}, pack.Varint(1056),
+		wire: protopack.Message{
+			protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1156),
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1056),
 			}),
-			pack.Tag{71, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(1171),
+			protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(1171),
 				}),
-				pack.Tag{1, pack.BytesType}, pack.String("71.1.key"),
+				protopack.Tag{1, protopack.BytesType}, protopack.String("71.1.key"),
 			}),
 		}.Marshal(),
 	},
@@ -773,19 +773,19 @@
 				"71.1.key": {"a": 1171},
 			},
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(0),
-				pack.Tag{2, pack.VarintType}, pack.Varint(0),
-				pack.Tag{1, pack.VarintType}, pack.Varint(1056),
-				pack.Tag{2, pack.VarintType}, pack.Varint(1156),
+		wire: protopack.Message{
+			protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(0),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(0),
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1056),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1156),
 			}),
-			pack.Tag{71, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String(0),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-				pack.Tag{1, pack.BytesType}, pack.String("71.1.key"),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(1171),
+			protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String(0),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+				protopack.Tag{1, protopack.BytesType}, protopack.String("71.1.key"),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(1171),
 				}),
 			}),
 		}.Marshal(),
@@ -795,7 +795,7 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_uint32": 1111,
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{111, pack.VarintType}, pack.Varint(1111)}.Marshal(),
+		wire: protopack.Message{protopack.Tag{111, protopack.VarintType}, protopack.Varint(1111)}.Marshal(),
 	},
 	{
 		desc: "oneof (message)",
@@ -804,8 +804,8 @@
 				"a": 1112,
 			},
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{112, pack.BytesType}, pack.LengthPrefix(pack.Message{
-			pack.Message{pack.Tag{1, pack.VarintType}, pack.Varint(1112)},
+		wire: protopack.Message{protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+			protopack.Message{protopack.Tag{1, protopack.VarintType}, protopack.Varint(1112)},
 		})}.Marshal(),
 	},
 	{
@@ -813,7 +813,7 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_nested_message": protobuild.Message{},
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{112, pack.BytesType}, pack.LengthPrefix(pack.Message{})}.Marshal(),
+		wire: protopack.Message{protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{})}.Marshal(),
 	},
 	{
 		desc: "oneof (merged message)",
@@ -825,13 +825,13 @@
 				},
 			},
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{112, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Message{pack.Tag{1, pack.VarintType}, pack.Varint(1)},
+		wire: protopack.Message{
+			protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Message{protopack.Tag{1, protopack.VarintType}, protopack.Varint(1)},
 			}),
-			pack.Tag{112, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(43),
+			protopack.Tag{112, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(43),
 				}),
 			}),
 		}.Marshal(),
@@ -843,10 +843,10 @@
 				"a": 1,
 			},
 		}, &testpb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{121, pack.StartGroupType},
-			pack.Tag{1, pack.VarintType}, pack.Varint(1),
-			pack.Tag{121, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{121, protopack.StartGroupType},
+			protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
+			protopack.Tag{121, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -854,9 +854,9 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"oneofgroup": protobuild.Message{},
 		}, &testpb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{121, pack.StartGroupType},
-			pack.Tag{121, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{121, protopack.StartGroupType},
+			protopack.Tag{121, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -867,13 +867,13 @@
 				"b": 2,
 			},
 		}, &testpb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{121, pack.StartGroupType},
-			pack.Tag{1, pack.VarintType}, pack.Varint(1),
-			pack.Tag{121, pack.EndGroupType},
-			pack.Tag{121, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(2),
-			pack.Tag{121, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{121, protopack.StartGroupType},
+			protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
+			protopack.Tag{121, protopack.EndGroupType},
+			protopack.Tag{121, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(2),
+			protopack.Tag{121, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -881,65 +881,65 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_string": "1113",
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{113, pack.BytesType}, pack.String("1113")}.Marshal(),
+		wire: protopack.Message{protopack.Tag{113, protopack.BytesType}, protopack.String("1113")}.Marshal(),
 	},
 	{
 		desc: "oneof (bytes)",
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_bytes": "1114",
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{114, pack.BytesType}, pack.String("1114")}.Marshal(),
+		wire: protopack.Message{protopack.Tag{114, protopack.BytesType}, protopack.String("1114")}.Marshal(),
 	},
 	{
 		desc: "oneof (bool)",
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_bool": true,
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{115, pack.VarintType}, pack.Bool(true)}.Marshal(),
+		wire: protopack.Message{protopack.Tag{115, protopack.VarintType}, protopack.Bool(true)}.Marshal(),
 	},
 	{
 		desc: "oneof (uint64)",
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_uint64": 116,
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{116, pack.VarintType}, pack.Varint(116)}.Marshal(),
+		wire: protopack.Message{protopack.Tag{116, protopack.VarintType}, protopack.Varint(116)}.Marshal(),
 	},
 	{
 		desc: "oneof (float)",
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_float": 117.5,
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{117, pack.Fixed32Type}, pack.Float32(117.5)}.Marshal(),
+		wire: protopack.Message{protopack.Tag{117, protopack.Fixed32Type}, protopack.Float32(117.5)}.Marshal(),
 	},
 	{
 		desc: "oneof (double)",
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_double": 118.5,
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{118, pack.Fixed64Type}, pack.Float64(118.5)}.Marshal(),
+		wire: protopack.Message{protopack.Tag{118, protopack.Fixed64Type}, protopack.Float64(118.5)}.Marshal(),
 	},
 	{
 		desc: "oneof (enum)",
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_enum": "BAR",
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{119, pack.VarintType}, pack.Varint(int(testpb.TestAllTypes_BAR))}.Marshal(),
+		wire: protopack.Message{protopack.Tag{119, protopack.VarintType}, protopack.Varint(int(testpb.TestAllTypes_BAR))}.Marshal(),
 	},
 	{
 		desc: "oneof (zero)",
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_uint64": 0,
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{116, pack.VarintType}, pack.Varint(0)}.Marshal(),
+		wire: protopack.Message{protopack.Tag{116, protopack.VarintType}, protopack.Varint(0)}.Marshal(),
 	},
 	{
 		desc: "oneof (overridden value)",
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_uint64": 2,
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{111, pack.VarintType}, pack.Varint(1),
-			pack.Tag{116, pack.VarintType}, pack.Varint(2),
+		wire: protopack.Message{
+			protopack.Tag{111, protopack.VarintType}, protopack.Varint(1),
+			protopack.Tag{116, protopack.VarintType}, protopack.Varint(2),
 		}.Marshal(),
 	},
 	// TODO: More unknown field tests for ordering, repeated fields, etc.
@@ -951,12 +951,12 @@
 		desc:          "unknown fields",
 		checkFastInit: true,
 		decodeTo: makeMessages(protobuild.Message{
-			protobuild.Unknown: pack.Message{
-				pack.Tag{100000, pack.VarintType}, pack.Varint(1),
+			protobuild.Unknown: protopack.Message{
+				protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1),
 			}.Marshal(),
 		}),
-		wire: pack.Message{
-			pack.Tag{100000, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1),
 		}.Marshal(),
 	},
 	{
@@ -965,19 +965,19 @@
 			DiscardUnknown: true,
 		},
 		decodeTo: makeMessages(protobuild.Message{}),
-		wire: pack.Message{
-			pack.Tag{100000, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{100000, protopack.VarintType}, protopack.Varint(1),
 		}.Marshal(),
 	},
 	{
 		desc: "field type mismatch",
 		decodeTo: makeMessages(protobuild.Message{
-			protobuild.Unknown: pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("string"),
+			protobuild.Unknown: protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("string"),
 			}.Marshal(),
 		}),
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.String("string"),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.String("string"),
 		}.Marshal(),
 	},
 	{
@@ -985,10 +985,10 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"map_int32_int32": map[int32]int32{1: 0},
 		}, &testpb.TestAllTypes{}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
-				pack.Tag{2, pack.BytesType}, pack.String("string"),
+		wire: protopack.Message{
+			protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
+				protopack.Tag{2, protopack.BytesType}, protopack.String("string"),
 			}),
 		}.Marshal(),
 	},
@@ -1010,8 +1010,8 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"v": 1,
 		}, &requiredpb.Int32{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 		}.Marshal(),
 	},
 	{
@@ -1026,8 +1026,8 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"v": 1,
 		}, &requiredpb.Fixed32{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.Fixed32Type}, pack.Int32(1),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(1),
 		}.Marshal(),
 	},
 	{
@@ -1042,8 +1042,8 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"v": 1,
 		}, &requiredpb.Fixed64{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.Fixed64Type}, pack.Int64(1),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.Fixed64Type}, protopack.Int64(1),
 		}.Marshal(),
 	},
 	{
@@ -1058,8 +1058,8 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"v": "",
 		}, &requiredpb.Bytes{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.Bytes(nil),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.Bytes(nil),
 		}.Marshal(),
 	},
 	{
@@ -1074,8 +1074,8 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"v": protobuild.Message{},
 		}, &requiredpb.Message{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
 		}.Marshal(),
 	},
 	{
@@ -1090,9 +1090,9 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"group": protobuild.Message{},
 		}, &requiredpb.Group{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -1101,12 +1101,12 @@
 		partial:       true,
 		decodeTo: []proto.Message{build(
 			&testpb.TestRequired{},
-			unknown(pack.Message{
-				pack.Tag{1, pack.Fixed32Type}, pack.Int32(2),
+			unknown(protopack.Message{
+				protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2),
 			}.Marshal()),
 		)},
-		wire: pack.Message{
-			pack.Tag{1, pack.Fixed32Type}, pack.Int32(2),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.Fixed32Type}, protopack.Int32(2),
 		}.Marshal(),
 	},
 	{
@@ -1116,8 +1116,8 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"optional_message": protobuild.Message{},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
 		}.Marshal(),
 	},
 	{
@@ -1128,9 +1128,9 @@
 				"required_field": 1,
 			},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
 		}.Marshal(),
 	},
@@ -1143,10 +1143,10 @@
 				"required_field": 1,
 			},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
 		}.Marshal(),
 	},
@@ -1160,11 +1160,11 @@
 				{},
 			},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{
-			pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
-			pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
+			protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
 		}.Marshal(),
 	},
 	{
@@ -1176,12 +1176,12 @@
 				{"required_field": 2},
 			},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{
-			pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
-			pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2),
+			protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
 			}),
 		}.Marshal(),
 	},
@@ -1195,16 +1195,16 @@
 				2: {},
 			},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 				}),
 			}),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
 			}),
 		}.Marshal(),
 	},
@@ -1217,9 +1217,9 @@
 				2: {},
 			},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2),
+		wire: protopack.Message{
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
 			}),
 		}.Marshal(),
 	},
@@ -1232,17 +1232,17 @@
 				2: {"required_field": 2},
 			},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 				}),
 			}),
-			pack.Tag{3, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(2),
+			protopack.Tag{3, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
 				}),
 			}),
 		}.Marshal(),
@@ -1254,9 +1254,9 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"optionalgroup": protobuild.Message{},
 		}, &testpb.TestRequiredGroupFields{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{1, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -1267,10 +1267,10 @@
 				"a": 1,
 			},
 		}, &testpb.TestRequiredGroupFields{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.StartGroupType},
-			pack.Tag{2, pack.VarintType}, pack.Varint(1),
-			pack.Tag{1, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.StartGroupType},
+			protopack.Tag{2, protopack.VarintType}, protopack.Varint(1),
+			protopack.Tag{1, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -1283,12 +1283,12 @@
 				{},
 			},
 		}, &testpb.TestRequiredGroupFields{}),
-		wire: pack.Message{
-			pack.Tag{3, pack.StartGroupType},
-			pack.Tag{4, pack.VarintType}, pack.Varint(1),
-			pack.Tag{3, pack.EndGroupType},
-			pack.Tag{3, pack.StartGroupType},
-			pack.Tag{3, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{3, protopack.StartGroupType},
+			protopack.Tag{4, protopack.VarintType}, protopack.Varint(1),
+			protopack.Tag{3, protopack.EndGroupType},
+			protopack.Tag{3, protopack.StartGroupType},
+			protopack.Tag{3, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -1300,13 +1300,13 @@
 				{"a": 2},
 			},
 		}, &testpb.TestRequiredGroupFields{}),
-		wire: pack.Message{
-			pack.Tag{3, pack.StartGroupType},
-			pack.Tag{4, pack.VarintType}, pack.Varint(1),
-			pack.Tag{3, pack.EndGroupType},
-			pack.Tag{3, pack.StartGroupType},
-			pack.Tag{4, pack.VarintType}, pack.Varint(2),
-			pack.Tag{3, pack.EndGroupType},
+		wire: protopack.Message{
+			protopack.Tag{3, protopack.StartGroupType},
+			protopack.Tag{4, protopack.VarintType}, protopack.Varint(1),
+			protopack.Tag{3, protopack.EndGroupType},
+			protopack.Tag{3, protopack.StartGroupType},
+			protopack.Tag{4, protopack.VarintType}, protopack.Varint(2),
+			protopack.Tag{3, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -1316,7 +1316,7 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_message": protobuild.Message{},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{pack.Tag{4, pack.BytesType}, pack.LengthPrefix(pack.Message{})}.Marshal(),
+		wire: protopack.Message{protopack.Tag{4, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{})}.Marshal(),
 	},
 	{
 		desc:          "required field in oneof message set",
@@ -1326,8 +1326,8 @@
 				"required_field": 1,
 			},
 		}, &testpb.TestRequiredForeign{}),
-		wire: pack.Message{pack.Tag{4, pack.BytesType}, pack.LengthPrefix(pack.Message{
-			pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{protopack.Tag{4, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+			protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 		})}.Marshal(),
 	},
 	{
@@ -1337,8 +1337,8 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"single": protobuild.Message{},
 		}, &testpb.TestAllExtensions{}),
-		wire: pack.Message{
-			pack.Tag{1000, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
+		wire: protopack.Message{
+			protopack.Tag{1000, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
 		}.Marshal(),
 	},
 	{
@@ -1349,9 +1349,9 @@
 				"required_field": 1,
 			},
 		}, &testpb.TestAllExtensions{}),
-		wire: pack.Message{
-			pack.Tag{1000, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{1000, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
 		}.Marshal(),
 	},
@@ -1365,11 +1365,11 @@
 				{},
 			},
 		}, &testpb.TestAllExtensions{}),
-		wire: pack.Message{
-			pack.Tag{1001, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
-			pack.Tag{1001, pack.BytesType}, pack.LengthPrefix(pack.Message{}),
+			protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{}),
 		}.Marshal(),
 	},
 	{
@@ -1381,12 +1381,12 @@
 				{"required_field": 2},
 			},
 		}, &testpb.TestAllExtensions{}),
-		wire: pack.Message{
-			pack.Tag{1001, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1),
+		wire: protopack.Message{
+			protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
 			}),
-			pack.Tag{1001, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2),
+			protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2),
 			}),
 		}.Marshal(),
 	},
@@ -1425,30 +1425,30 @@
 				},
 			},
 		}, &legacypb.Legacy{}),
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{101, pack.VarintType}, pack.Varint(1),
-				pack.Tag{115, pack.VarintType}, pack.Varint(0),
-				pack.Tag{116, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.BytesType}, pack.String("x"),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{101, protopack.VarintType}, protopack.Varint(1),
+				protopack.Tag{115, protopack.VarintType}, protopack.Varint(0),
+				protopack.Tag{116, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.BytesType}, protopack.String("x"),
 				}),
-				pack.Tag{120, pack.StartGroupType},
-				pack.Tag{1, pack.BytesType}, pack.String("x"),
-				pack.Tag{120, pack.EndGroupType},
-				pack.Tag{516, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.BytesType}, pack.String("x"),
+				protopack.Tag{120, protopack.StartGroupType},
+				protopack.Tag{1, protopack.BytesType}, protopack.String("x"),
+				protopack.Tag{120, protopack.EndGroupType},
+				protopack.Tag{516, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.BytesType}, protopack.String("x"),
 				}),
-				pack.Tag{520, pack.StartGroupType},
-				pack.Tag{1, pack.BytesType}, pack.String("x"),
-				pack.Tag{520, pack.EndGroupType},
-				pack.Tag{616, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.VarintType}, pack.Varint(1),
-					pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-						pack.Tag{1, pack.BytesType}, pack.String("x"),
+				protopack.Tag{520, protopack.StartGroupType},
+				protopack.Tag{1, protopack.BytesType}, protopack.String("x"),
+				protopack.Tag{520, protopack.EndGroupType},
+				protopack.Tag{616, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.VarintType}, protopack.Varint(1),
+					protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+						protopack.Tag{1, protopack.BytesType}, protopack.String("x"),
 					}),
 				}),
-				pack.Tag{716, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{1, pack.BytesType}, pack.String("x"),
+				protopack.Tag{716, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{1, protopack.BytesType}, protopack.String("x"),
 				}),
 			}),
 		}.Marshal(),
@@ -1457,23 +1457,23 @@
 	{
 		desc: "first reserved field number",
 		decodeTo: makeMessages(protobuild.Message{
-			protobuild.Unknown: pack.Message{
-				pack.Tag{pack.FirstReservedNumber, pack.VarintType}, pack.Varint(1004),
+			protobuild.Unknown: protopack.Message{
+				protopack.Tag{protopack.FirstReservedNumber, protopack.VarintType}, protopack.Varint(1004),
 			}.Marshal(),
 		}),
-		wire: pack.Message{
-			pack.Tag{pack.FirstReservedNumber, pack.VarintType}, pack.Varint(1004),
+		wire: protopack.Message{
+			protopack.Tag{protopack.FirstReservedNumber, protopack.VarintType}, protopack.Varint(1004),
 		}.Marshal(),
 	},
 	{
 		desc: "last reserved field number",
 		decodeTo: makeMessages(protobuild.Message{
-			protobuild.Unknown: pack.Message{
-				pack.Tag{pack.LastReservedNumber, pack.VarintType}, pack.Varint(1005),
+			protobuild.Unknown: protopack.Message{
+				protopack.Tag{protopack.LastReservedNumber, protopack.VarintType}, protopack.Varint(1005),
 			}.Marshal(),
 		}),
-		wire: pack.Message{
-			pack.Tag{pack.LastReservedNumber, pack.VarintType}, pack.Varint(1005),
+		wire: protopack.Message{
+			protopack.Tag{protopack.LastReservedNumber, protopack.VarintType}, protopack.Varint(1005),
 		}.Marshal(),
 	},
 	{
@@ -1503,13 +1503,13 @@
 				},
 			},
 		}, &testpb.TestAllExtensions{}),
-		wire: pack.Message{
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-						pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-							pack.Tag{1, pack.VarintType}, pack.Varint(42),
-							pack.Tag{2, pack.VarintType}, pack.Varint(43),
+		wire: protopack.Message{
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+						protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+							protopack.Tag{1, protopack.VarintType}, protopack.Varint(42),
+							protopack.Tag{2, protopack.VarintType}, protopack.Varint(43),
 						}),
 					}),
 				}),
@@ -1524,8 +1524,8 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"optional_string": "abc\xff",
 		}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{14, pack.BytesType}, pack.String("abc\xff"),
+		wire: protopack.Message{
+			protopack.Tag{14, protopack.BytesType}, protopack.String("abc\xff"),
 		}.Marshal(),
 	},
 	{
@@ -1533,9 +1533,9 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"repeated_string": []string{"foo", "abc\xff"},
 		}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{44, pack.BytesType}, pack.String("foo"),
-			pack.Tag{44, pack.BytesType}, pack.String("abc\xff"),
+		wire: protopack.Message{
+			protopack.Tag{44, protopack.BytesType}, protopack.String("foo"),
+			protopack.Tag{44, protopack.BytesType}, protopack.String("abc\xff"),
 		}.Marshal(),
 	},
 	{
@@ -1547,10 +1547,10 @@
 				},
 			},
 		}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Tag{14, pack.BytesType}, pack.String("abc\xff"),
+		wire: protopack.Message{
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Tag{14, protopack.BytesType}, protopack.String("abc\xff"),
 				}),
 			}),
 		}.Marshal(),
@@ -1560,17 +1560,17 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"oneof_string": "abc\xff",
 		}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{pack.Tag{113, pack.BytesType}, pack.String("abc\xff")}.Marshal(),
+		wire: protopack.Message{protopack.Tag{113, protopack.BytesType}, protopack.String("abc\xff")}.Marshal(),
 	},
 	{
 		desc: "invalid UTF-8 in map key",
 		decodeTo: makeMessages(protobuild.Message{
 			"map_string_string": map[string]string{"key\xff": "val"},
 		}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{69, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("key\xff"),
-				pack.Tag{2, pack.BytesType}, pack.String("val"),
+		wire: protopack.Message{
+			protopack.Tag{69, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("key\xff"),
+				protopack.Tag{2, protopack.BytesType}, protopack.String("val"),
 			}),
 		}.Marshal(),
 	},
@@ -1579,10 +1579,10 @@
 		decodeTo: makeMessages(protobuild.Message{
 			"map_string_string": map[string]string{"key": "val\xff"},
 		}, &test3pb.TestAllTypes{}),
-		wire: pack.Message{
-			pack.Tag{69, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.BytesType}, pack.String("key"),
-				pack.Tag{2, pack.BytesType}, pack.String("val\xff"),
+		wire: protopack.Message{
+			protopack.Tag{69, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.BytesType}, protopack.String("key"),
+				protopack.Tag{2, protopack.BytesType}, protopack.String("val\xff"),
 			}),
 		}.Marshal(),
 	},
@@ -1592,8 +1592,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{pack.MinValidNumber - 1, pack.VarintType}, pack.Varint(1001),
+		wire: protopack.Message{
+			protopack.Tag{protopack.MinValidNumber - 1, protopack.VarintType}, protopack.Varint(1001),
 		}.Marshal(),
 	},
 	{
@@ -1602,9 +1602,9 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{pack.MinValidNumber - 1, pack.VarintType}, pack.Varint(1002),
-			pack.Tag{pack.MinValidNumber, pack.VarintType}, pack.Varint(1003),
+		wire: protopack.Message{
+			protopack.Tag{protopack.MinValidNumber - 1, protopack.VarintType}, protopack.Varint(1002),
+			protopack.Tag{protopack.MinValidNumber, protopack.VarintType}, protopack.Varint(1003),
 		}.Marshal(),
 	},
 	{
@@ -1613,9 +1613,9 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{pack.MaxValidNumber, pack.VarintType}, pack.Varint(1006),
-			pack.Tag{pack.MaxValidNumber + 1, pack.VarintType}, pack.Varint(1007),
+		wire: protopack.Message{
+			protopack.Tag{protopack.MaxValidNumber, protopack.VarintType}, protopack.Varint(1006),
+			protopack.Tag{protopack.MaxValidNumber + 1, protopack.VarintType}, protopack.Varint(1007),
 		}.Marshal(),
 	},
 	{
@@ -1624,8 +1624,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{pack.MaxValidNumber + 1, pack.VarintType}, pack.Varint(1008),
+		wire: protopack.Message{
+			protopack.Tag{protopack.MaxValidNumber + 1, protopack.VarintType}, protopack.Varint(1008),
 		}.Marshal(),
 	},
 	{
@@ -1634,18 +1634,18 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Varint(2234993595104), pack.Varint(0),
+		wire: protopack.Message{
+			protopack.Varint(2234993595104), protopack.Varint(0),
 		}.Marshal(),
 	},
 	{
 		desc:     "invalid field number in map",
 		decodeTo: []proto.Message{(*testpb.TestAllTypes)(nil)},
-		wire: pack.Message{
-			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1056),
-				pack.Tag{2, pack.VarintType}, pack.Varint(1156),
-				pack.Tag{pack.MaxValidNumber + 1, pack.VarintType}, pack.Varint(0),
+		wire: protopack.Message{
+			protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1056),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(1156),
+				protopack.Tag{protopack.MaxValidNumber + 1, protopack.VarintType}, protopack.Varint(0),
 			}),
 		}.Marshal(),
 	},
@@ -1663,8 +1663,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{0, pack.VarintType}, pack.Varint(0),
+		wire: protopack.Message{
+			protopack.Tag{0, protopack.VarintType}, protopack.Varint(0),
 		}.Marshal(),
 	},
 	{
@@ -1673,8 +1673,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{protowire.MaxValidNumber + 1, pack.VarintType}, pack.Varint(0),
+		wire: protopack.Message{
+			protopack.Tag{protowire.MaxValidNumber + 1, protopack.VarintType}, protopack.Varint(0),
 		}.Marshal(),
 	},
 	{
@@ -1683,9 +1683,9 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Raw{0xff},
+		wire: protopack.Message{
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Raw{0xff},
 			}),
 		}.Marshal(),
 	},
@@ -1695,9 +1695,9 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{48, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Raw{0xff},
+		wire: protopack.Message{
+			protopack.Tag{48, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Raw{0xff},
 			}),
 		}.Marshal(),
 	},
@@ -1707,12 +1707,12 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{16, pack.StartGroupType},
-			pack.Tag{1000, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Raw{0xff},
+		wire: protopack.Message{
+			protopack.Tag{16, protopack.StartGroupType},
+			protopack.Tag{1000, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Raw{0xff},
 			}),
-			pack.Tag{16, pack.EndGroupType},
+			protopack.Tag{16, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -1721,12 +1721,12 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{46, pack.StartGroupType},
-			pack.Tag{1001, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Raw{0xff},
+		wire: protopack.Message{
+			protopack.Tag{46, protopack.StartGroupType},
+			protopack.Tag{1001, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Raw{0xff},
 			}),
-			pack.Tag{46, pack.EndGroupType},
+			protopack.Tag{46, protopack.EndGroupType},
 		}.Marshal(),
 	},
 	{
@@ -1735,8 +1735,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{46, pack.StartGroupType},
+		wire: protopack.Message{
+			protopack.Tag{46, protopack.StartGroupType},
 		}.Marshal(),
 	},
 	{
@@ -1744,11 +1744,11 @@
 		decodeTo: []proto.Message{
 			(*testpb.TestAllTypes)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{56, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(0),
-				pack.Tag{2, pack.VarintType}, pack.Varint(0),
-				pack.Raw{0xff},
+		wire: protopack.Message{
+			protopack.Tag{56, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(0),
+				protopack.Tag{2, protopack.VarintType}, protopack.Varint(0),
+				protopack.Raw{0xff},
 			}),
 		}.Marshal(),
 	},
@@ -1757,11 +1757,11 @@
 		decodeTo: []proto.Message{
 			(*testpb.TestAllTypes)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{71, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(0),
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-					pack.Raw{0xff},
+		wire: protopack.Message{
+			protopack.Tag{71, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(0),
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+					protopack.Raw{0xff},
 				}),
 			}),
 		}.Marshal(),
@@ -1772,8 +1772,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{31, pack.BytesType}, pack.Bytes{0xff},
+		wire: protopack.Message{
+			protopack.Tag{31, protopack.BytesType}, protopack.Bytes{0xff},
 		}.Marshal(),
 	},
 	{
@@ -1782,8 +1782,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{32, pack.BytesType}, pack.Bytes{0xff},
+		wire: protopack.Message{
+			protopack.Tag{32, protopack.BytesType}, protopack.Bytes{0xff},
 		}.Marshal(),
 	},
 	{
@@ -1792,8 +1792,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{33, pack.BytesType}, pack.Bytes{0xff},
+		wire: protopack.Message{
+			protopack.Tag{33, protopack.BytesType}, protopack.Bytes{0xff},
 		}.Marshal(),
 	},
 	{
@@ -1802,8 +1802,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{34, pack.BytesType}, pack.Bytes{0xff},
+		wire: protopack.Message{
+			protopack.Tag{34, protopack.BytesType}, protopack.Bytes{0xff},
 		}.Marshal(),
 	},
 	{
@@ -1812,8 +1812,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{35, pack.BytesType}, pack.Bytes{0xff},
+		wire: protopack.Message{
+			protopack.Tag{35, protopack.BytesType}, protopack.Bytes{0xff},
 		}.Marshal(),
 	},
 	{
@@ -1822,8 +1822,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{36, pack.BytesType}, pack.Bytes{0xff},
+		wire: protopack.Message{
+			protopack.Tag{36, protopack.BytesType}, protopack.Bytes{0xff},
 		}.Marshal(),
 	},
 	{
@@ -1832,8 +1832,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{37, pack.BytesType}, pack.Bytes{0x00},
+		wire: protopack.Message{
+			protopack.Tag{37, protopack.BytesType}, protopack.Bytes{0x00},
 		}.Marshal(),
 	},
 	{
@@ -1842,8 +1842,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{38, pack.BytesType}, pack.Bytes{0x00},
+		wire: protopack.Message{
+			protopack.Tag{38, protopack.BytesType}, protopack.Bytes{0x00},
 		}.Marshal(),
 	},
 	{
@@ -1852,8 +1852,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{39, pack.BytesType}, pack.Bytes{0x00},
+		wire: protopack.Message{
+			protopack.Tag{39, protopack.BytesType}, protopack.Bytes{0x00},
 		}.Marshal(),
 	},
 	{
@@ -1862,8 +1862,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{40, pack.BytesType}, pack.Bytes{0x00},
+		wire: protopack.Message{
+			protopack.Tag{40, protopack.BytesType}, protopack.Bytes{0x00},
 		}.Marshal(),
 	},
 	{
@@ -1872,8 +1872,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{41, pack.BytesType}, pack.Bytes{0x00},
+		wire: protopack.Message{
+			protopack.Tag{41, protopack.BytesType}, protopack.Bytes{0x00},
 		}.Marshal(),
 	},
 	{
@@ -1882,8 +1882,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{42, pack.BytesType}, pack.Bytes{0x00},
+		wire: protopack.Message{
+			protopack.Tag{42, protopack.BytesType}, protopack.Bytes{0x00},
 		}.Marshal(),
 	},
 	{
@@ -1892,8 +1892,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{43, pack.BytesType}, pack.Bytes{0xff},
+		wire: protopack.Message{
+			protopack.Tag{43, protopack.BytesType}, protopack.Bytes{0xff},
 		}.Marshal(),
 	},
 	{
@@ -1902,12 +1902,12 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{18, pack.BytesType}, pack.LengthPrefix{pack.Message{
-				pack.Tag{2, pack.BytesType}, pack.LengthPrefix{pack.Message{
-					pack.Tag{15, pack.BytesType}, pack.Varint(2),
+		wire: protopack.Message{
+			protopack.Tag{18, protopack.BytesType}, protopack.LengthPrefix{protopack.Message{
+				protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix{protopack.Message{
+					protopack.Tag{15, protopack.BytesType}, protopack.Varint(2),
 				}},
-				pack.Tag{1, pack.VarintType}, pack.Varint(0),
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(0),
 			}},
 		}.Marshal(),
 	},
@@ -1917,8 +1917,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{1, pack.VarintType},
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.VarintType},
 		}.Marshal(),
 	},
 	{
@@ -1927,8 +1927,8 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{18, pack.BytesType},
+		wire: protopack.Message{
+			protopack.Tag{18, protopack.BytesType},
 		}.Marshal(),
 	},
 	{
@@ -1937,9 +1937,9 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{1, pack.VarintType},
-			pack.Raw("\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02"),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.VarintType},
+			protopack.Raw("\xff\xff\xff\xff\xff\xff\xff\xff\xff\x02"),
 		}.Marshal(),
 	},
 	{
@@ -1948,9 +1948,9 @@
 			(*testpb.TestAllTypes)(nil),
 			(*testpb.TestAllExtensions)(nil),
 		},
-		wire: pack.Message{
-			pack.Tag{1, pack.VarintType},
-			pack.Raw("\xff\xff\xff\xff\xff\xff\xff\xff\xff"),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.VarintType},
+			protopack.Raw("\xff\xff\xff\xff\xff\xff\xff\xff\xff"),
 		}.Marshal(),
 	},
 }
diff --git a/proto/weak_test.go b/proto/weak_test.go
index bbb1c8d..79340e3 100644
--- a/proto/weak_test.go
+++ b/proto/weak_test.go
@@ -7,10 +7,10 @@
 import (
 	"testing"
 
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/internal/flags"
 	"google.golang.org/protobuf/internal/protobuild"
 	"google.golang.org/protobuf/proto"
+	"google.golang.org/protobuf/testing/protopack"
 
 	testpb "google.golang.org/protobuf/internal/testprotos/test"
 	weakpb "google.golang.org/protobuf/internal/testprotos/test/weak1"
@@ -36,20 +36,20 @@
 				m.SetWeakMessage1(&weakpb.WeakImportMessage1{
 					A: proto.Int32(1000),
 				})
-				m.ProtoReflect().SetUnknown(pack.Message{
-					pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-						pack.Tag{1, pack.VarintType}, pack.Varint(2000),
+				m.ProtoReflect().SetUnknown(protopack.Message{
+					protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+						protopack.Tag{1, protopack.VarintType}, protopack.Varint(2000),
 					}),
 				}.Marshal())
 				return m
 			}(),
 		},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(1000),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(1000),
 			}),
-			pack.Tag{2, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{1, pack.VarintType}, pack.Varint(2000),
+			protopack.Tag{2, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{1, protopack.VarintType}, protopack.Varint(2000),
 			}),
 		}.Marshal(),
 	},
@@ -59,9 +59,9 @@
 	{
 		desc:     "invalid field number 0 in weak message",
 		decodeTo: []proto.Message{(*testpb.TestWeak)(nil)},
-		wire: pack.Message{
-			pack.Tag{1, pack.BytesType}, pack.LengthPrefix(pack.Message{
-				pack.Tag{0, pack.VarintType}, pack.Varint(1000),
+		wire: protopack.Message{
+			protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+				protopack.Tag{0, protopack.VarintType}, protopack.Varint(1000),
 			}),
 		}.Marshal(),
 	},
diff --git a/testing/protocmp/util_test.go b/testing/protocmp/util_test.go
index 728dcc7..ed386e4 100644
--- a/testing/protocmp/util_test.go
+++ b/testing/protocmp/util_test.go
@@ -12,9 +12,9 @@
 
 	"github.com/google/go-cmp/cmp"
 
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/reflect/protoreflect"
+	"google.golang.org/protobuf/testing/protopack"
 	"google.golang.org/protobuf/types/dynamicpb"
 
 	testpb "google.golang.org/protobuf/internal/testprotos/test"
@@ -208,8 +208,8 @@
 	}}...)
 
 	// Test IgnoreUnknown.
-	raw := pack.Message{
-		pack.Tag{1, pack.BytesType}, pack.String("Hello, goodbye!"),
+	raw := protopack.Message{
+		protopack.Tag{1, protopack.BytesType}, protopack.String("Hello, goodbye!"),
 	}.Marshal()
 	tests = append(tests, []test{{
 		x:    apply(&testpb.TestAllTypes{OptionalSint64: proto.Int64(5)}, setUnknown{raw}),
diff --git a/testing/protocmp/xform_test.go b/testing/protocmp/xform_test.go
index a5b15ee..da6550b 100644
--- a/testing/protocmp/xform_test.go
+++ b/testing/protocmp/xform_test.go
@@ -10,9 +10,9 @@
 	"github.com/google/go-cmp/cmp"
 
 	"google.golang.org/protobuf/internal/detrand"
-	"google.golang.org/protobuf/internal/encoding/pack"
 	"google.golang.org/protobuf/proto"
 	"google.golang.org/protobuf/reflect/protoreflect"
+	"google.golang.org/protobuf/testing/protopack"
 
 	testpb "google.golang.org/protobuf/internal/testprotos/test"
 )
@@ -210,51 +210,51 @@
 	}, {
 		in: func() proto.Message {
 			m := &testpb.TestAllTypes{}
-			m.ProtoReflect().SetUnknown(pack.Message{
-				pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Uvarint(100),
-				pack.Tag{Number: 50001, Type: pack.Fixed32Type}, pack.Uint32(200),
-				pack.Tag{Number: 50002, Type: pack.Fixed64Type}, pack.Uint64(300),
-				pack.Tag{Number: 50003, Type: pack.BytesType}, pack.String("hello"),
-				pack.Message{
-					pack.Tag{Number: 50004, Type: pack.StartGroupType},
-					pack.Tag{Number: 1, Type: pack.VarintType}, pack.Uvarint(100),
-					pack.Tag{Number: 1, Type: pack.Fixed32Type}, pack.Uint32(200),
-					pack.Tag{Number: 1, Type: pack.Fixed64Type}, pack.Uint64(300),
-					pack.Tag{Number: 1, Type: pack.BytesType}, pack.String("hello"),
-					pack.Message{
-						pack.Tag{Number: 1, Type: pack.StartGroupType},
-						pack.Tag{Number: 1, Type: pack.VarintType}, pack.Uvarint(100),
-						pack.Tag{Number: 1, Type: pack.Fixed32Type}, pack.Uint32(200),
-						pack.Tag{Number: 1, Type: pack.Fixed64Type}, pack.Uint64(300),
-						pack.Tag{Number: 1, Type: pack.BytesType}, pack.String("hello"),
-						pack.Tag{Number: 1, Type: pack.EndGroupType},
+			m.ProtoReflect().SetUnknown(protopack.Message{
+				protopack.Tag{Number: 50000, Type: protopack.VarintType}, protopack.Uvarint(100),
+				protopack.Tag{Number: 50001, Type: protopack.Fixed32Type}, protopack.Uint32(200),
+				protopack.Tag{Number: 50002, Type: protopack.Fixed64Type}, protopack.Uint64(300),
+				protopack.Tag{Number: 50003, Type: protopack.BytesType}, protopack.String("hello"),
+				protopack.Message{
+					protopack.Tag{Number: 50004, Type: protopack.StartGroupType},
+					protopack.Tag{Number: 1, Type: protopack.VarintType}, protopack.Uvarint(100),
+					protopack.Tag{Number: 1, Type: protopack.Fixed32Type}, protopack.Uint32(200),
+					protopack.Tag{Number: 1, Type: protopack.Fixed64Type}, protopack.Uint64(300),
+					protopack.Tag{Number: 1, Type: protopack.BytesType}, protopack.String("hello"),
+					protopack.Message{
+						protopack.Tag{Number: 1, Type: protopack.StartGroupType},
+						protopack.Tag{Number: 1, Type: protopack.VarintType}, protopack.Uvarint(100),
+						protopack.Tag{Number: 1, Type: protopack.Fixed32Type}, protopack.Uint32(200),
+						protopack.Tag{Number: 1, Type: protopack.Fixed64Type}, protopack.Uint64(300),
+						protopack.Tag{Number: 1, Type: protopack.BytesType}, protopack.String("hello"),
+						protopack.Tag{Number: 1, Type: protopack.EndGroupType},
 					},
-					pack.Tag{Number: 50004, Type: pack.EndGroupType},
+					protopack.Tag{Number: 50004, Type: protopack.EndGroupType},
 				},
 			}.Marshal())
 			return m
 		}(),
 		want: Message{
 			messageTypeKey: messageTypeOf(&testpb.TestAllTypes{}),
-			"50000":        protoreflect.RawFields(pack.Message{pack.Tag{Number: 50000, Type: pack.VarintType}, pack.Uvarint(100)}.Marshal()),
-			"50001":        protoreflect.RawFields(pack.Message{pack.Tag{Number: 50001, Type: pack.Fixed32Type}, pack.Uint32(200)}.Marshal()),
-			"50002":        protoreflect.RawFields(pack.Message{pack.Tag{Number: 50002, Type: pack.Fixed64Type}, pack.Uint64(300)}.Marshal()),
-			"50003":        protoreflect.RawFields(pack.Message{pack.Tag{Number: 50003, Type: pack.BytesType}, pack.String("hello")}.Marshal()),
-			"50004": protoreflect.RawFields(pack.Message{
-				pack.Tag{Number: 50004, Type: pack.StartGroupType},
-				pack.Tag{Number: 1, Type: pack.VarintType}, pack.Uvarint(100),
-				pack.Tag{Number: 1, Type: pack.Fixed32Type}, pack.Uint32(200),
-				pack.Tag{Number: 1, Type: pack.Fixed64Type}, pack.Uint64(300),
-				pack.Tag{Number: 1, Type: pack.BytesType}, pack.String("hello"),
-				pack.Message{
-					pack.Tag{Number: 1, Type: pack.StartGroupType},
-					pack.Tag{Number: 1, Type: pack.VarintType}, pack.Uvarint(100),
-					pack.Tag{Number: 1, Type: pack.Fixed32Type}, pack.Uint32(200),
-					pack.Tag{Number: 1, Type: pack.Fixed64Type}, pack.Uint64(300),
-					pack.Tag{Number: 1, Type: pack.BytesType}, pack.String("hello"),
-					pack.Tag{Number: 1, Type: pack.EndGroupType},
+			"50000":        protoreflect.RawFields(protopack.Message{protopack.Tag{Number: 50000, Type: protopack.VarintType}, protopack.Uvarint(100)}.Marshal()),
+			"50001":        protoreflect.RawFields(protopack.Message{protopack.Tag{Number: 50001, Type: protopack.Fixed32Type}, protopack.Uint32(200)}.Marshal()),
+			"50002":        protoreflect.RawFields(protopack.Message{protopack.Tag{Number: 50002, Type: protopack.Fixed64Type}, protopack.Uint64(300)}.Marshal()),
+			"50003":        protoreflect.RawFields(protopack.Message{protopack.Tag{Number: 50003, Type: protopack.BytesType}, protopack.String("hello")}.Marshal()),
+			"50004": protoreflect.RawFields(protopack.Message{
+				protopack.Tag{Number: 50004, Type: protopack.StartGroupType},
+				protopack.Tag{Number: 1, Type: protopack.VarintType}, protopack.Uvarint(100),
+				protopack.Tag{Number: 1, Type: protopack.Fixed32Type}, protopack.Uint32(200),
+				protopack.Tag{Number: 1, Type: protopack.Fixed64Type}, protopack.Uint64(300),
+				protopack.Tag{Number: 1, Type: protopack.BytesType}, protopack.String("hello"),
+				protopack.Message{
+					protopack.Tag{Number: 1, Type: protopack.StartGroupType},
+					protopack.Tag{Number: 1, Type: protopack.VarintType}, protopack.Uvarint(100),
+					protopack.Tag{Number: 1, Type: protopack.Fixed32Type}, protopack.Uint32(200),
+					protopack.Tag{Number: 1, Type: protopack.Fixed64Type}, protopack.Uint64(300),
+					protopack.Tag{Number: 1, Type: protopack.BytesType}, protopack.String("hello"),
+					protopack.Tag{Number: 1, Type: protopack.EndGroupType},
 				},
-				pack.Tag{Number: 50004, Type: pack.EndGroupType},
+				protopack.Tag{Number: 50004, Type: protopack.EndGroupType},
 			}.Marshal()),
 		},
 		wantString: `{50000:100, 50001:200, 50002:300, 50003:"hello", 50004:{1:[100, 200, 300, "hello", {1:[100, 200, 300, "hello"]}]}}`,
diff --git a/internal/encoding/pack/pack.go b/testing/protopack/pack.go
similarity index 97%
rename from internal/encoding/pack/pack.go
rename to testing/protopack/pack.go
index 163002f..060529e 100644
--- a/internal/encoding/pack/pack.go
+++ b/testing/protopack/pack.go
@@ -2,13 +2,13 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package pack enables manual encoding and decoding of protobuf wire data.
+// Package protopack enables manual encoding and decoding of protobuf wire data.
 //
 // This package is intended for use in debugging and/or creation of test data.
 // Proper usage of this package requires knowledge of the wire format.
 //
 // See https://developers.google.com/protocol-buffers/docs/encoding.
-package pack
+package protopack
 
 import (
 	"fmt"
@@ -25,10 +25,10 @@
 	"google.golang.org/protobuf/reflect/protoreflect"
 )
 
-// Number is the field number; aliased from the wire package for convenience.
+// Number is the field number; aliased from the protowire package for convenience.
 type Number = protowire.Number
 
-// Number type constants; copied from the wire package for convenience.
+// Number type constants; copied from the protowire package for convenience.
 const (
 	MinValidNumber      Number = protowire.MinValidNumber
 	FirstReservedNumber Number = protowire.FirstReservedNumber
@@ -36,10 +36,10 @@
 	MaxValidNumber      Number = protowire.MaxValidNumber
 )
 
-// Type is the wire type; aliased from the wire package for convenience.
+// Type is the wire type; aliased from the protowire package for convenience.
 type Type = protowire.Type
 
-// Wire type constants; copied from the wire package for convenience.
+// Wire type constants; copied from the protowire package for convenience.
 const (
 	VarintType     Type = protowire.VarintType
 	Fixed32Type    Type = protowire.Fixed32Type
diff --git a/internal/encoding/pack/pack_test.go b/testing/protopack/pack_test.go
similarity index 86%
rename from internal/encoding/pack/pack_test.go
rename to testing/protopack/pack_test.go
index 8a3d069..9752549 100644
--- a/internal/encoding/pack/pack_test.go
+++ b/testing/protopack/pack_test.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package pack
+package protopack
 
 import (
 	"bytes"
@@ -81,11 +81,11 @@
 			Tag{1, VarintType}, Denormalized{5, Uvarint(2)},
 			Tag{1, BytesType}, LengthPrefix{Bool(true), Bool(false), Uvarint(2), Denormalized{5, Uvarint(2)}},
 		},
-		wantOutSource: `pack.Message{
-	pack.Tag{1, pack.VarintType}, pack.Bool(false),
-	pack.Denormalized{+5, pack.Tag{1, pack.VarintType}}, pack.Uvarint(2),
-	pack.Tag{1, pack.VarintType}, pack.Denormalized{+5, pack.Uvarint(2)},
-	pack.Tag{1, pack.BytesType}, pack.LengthPrefix{pack.Bool(true), pack.Bool(false), pack.Uvarint(2), pack.Denormalized{+5, pack.Uvarint(2)}},
+		wantOutSource: `protopack.Message{
+	protopack.Tag{1, protopack.VarintType}, protopack.Bool(false),
+	protopack.Denormalized{+5, protopack.Tag{1, protopack.VarintType}}, protopack.Uvarint(2),
+	protopack.Tag{1, protopack.VarintType}, protopack.Denormalized{+5, protopack.Uvarint(2)},
+	protopack.Tag{1, protopack.BytesType}, protopack.LengthPrefix{protopack.Bool(true), protopack.Bool(false), protopack.Uvarint(2), protopack.Denormalized{+5, protopack.Uvarint(2)}},
 }`,
 	}, {
 		raw: dhex("100010828080808000121980808080808080808001ffffffffffffffff7f828080808000"),
@@ -114,10 +114,10 @@
 			Tag{4, VarintType}, Denormalized{5, Uvarint(+1)},
 			Tag{4, BytesType}, LengthPrefix{Uvarint(0), Uvarint(math.MaxUint64), Denormalized{5, Uvarint(+1)}},
 		},
-		wantOutSource: `pack.Message{
-	pack.Tag{4, pack.VarintType}, pack.Uvarint(1),
-	pack.Tag{4, pack.VarintType}, pack.Denormalized{+5, pack.Uvarint(1)},
-	pack.Tag{4, pack.BytesType}, pack.LengthPrefix{pack.Uvarint(0), pack.Uvarint(18446744073709551615), pack.Denormalized{+5, pack.Uvarint(1)}},
+		wantOutSource: `protopack.Message{
+	protopack.Tag{4, protopack.VarintType}, protopack.Uvarint(1),
+	protopack.Tag{4, protopack.VarintType}, protopack.Denormalized{+5, protopack.Uvarint(1)},
+	protopack.Tag{4, protopack.BytesType}, protopack.LengthPrefix{protopack.Uvarint(0), protopack.Uvarint(18446744073709551615), protopack.Denormalized{+5, protopack.Uvarint(1)}},
 }`,
 	}, {
 		raw: dhex("2d010000002a0800000000ffffffff"),
@@ -142,9 +142,9 @@
 			Tag{7, Fixed32Type}, Float32(math.Pi),
 			Tag{7, BytesType}, LengthPrefix{Float32(math.SmallestNonzeroFloat32), Float32(math.MaxFloat32), Float32(math.Inf(+1)), Float32(math.Inf(-1))},
 		},
-		wantOutSource: `pack.Message{
-	pack.Tag{7, pack.Fixed32Type}, pack.Float32(3.1415927),
-	pack.Tag{7, pack.BytesType}, pack.LengthPrefix{pack.Float32(1e-45), pack.Float32(3.4028235e+38), pack.Float32(math.Inf(+1)), pack.Float32(math.Inf(-1))},
+		wantOutSource: `protopack.Message{
+	protopack.Tag{7, protopack.Fixed32Type}, protopack.Float32(3.1415927),
+	protopack.Tag{7, protopack.BytesType}, protopack.LengthPrefix{protopack.Float32(1e-45), protopack.Float32(3.4028235e+38), protopack.Float32(math.Inf(+1)), protopack.Float32(math.Inf(-1))},
 }`,
 	}, {
 		raw: dhex("41010000000000000042100000000000000000ffffffffffffffff"),
@@ -201,14 +201,14 @@
 				Tag{100, StartGroupType}, Tag{100, EndGroupType},
 			}),
 		},
-		wantOutSource: `pack.Message{
-	pack.Tag{13, pack.BytesType}, pack.LengthPrefix(pack.Message{
-		pack.Tag{100, pack.VarintType}, pack.Uvarint(18446744073709551615),
-		pack.Tag{100, pack.Fixed32Type}, pack.Uint32(4294967295),
-		pack.Tag{100, pack.Fixed64Type}, pack.Uint64(18446744073709551615),
-		pack.Tag{100, pack.BytesType}, pack.Bytes("bytes"),
-		pack.Tag{100, pack.StartGroupType},
-		pack.Tag{100, pack.EndGroupType},
+		wantOutSource: `protopack.Message{
+	protopack.Tag{13, protopack.BytesType}, protopack.LengthPrefix(protopack.Message{
+		protopack.Tag{100, protopack.VarintType}, protopack.Uvarint(18446744073709551615),
+		protopack.Tag{100, protopack.Fixed32Type}, protopack.Uint32(4294967295),
+		protopack.Tag{100, protopack.Fixed64Type}, protopack.Uint64(18446744073709551615),
+		protopack.Tag{100, protopack.BytesType}, protopack.Bytes("bytes"),
+		protopack.Tag{100, protopack.StartGroupType},
+		protopack.Tag{100, protopack.EndGroupType},
 	}),
 }`,
 	}, {
@@ -269,16 +269,16 @@
 				func() uint32 { return 0x7fe5d008 }(),
 			)),
 		},
-		wantOutSource: `pack.Message{
-	pack.Tag{7, pack.Fixed32Type}, pack.Float32(math.Float32frombits(0x7fe5d008)),
+		wantOutSource: `protopack.Message{
+	protopack.Tag{7, protopack.Fixed32Type}, protopack.Float32(math.Float32frombits(0x7fe5d008)),
 }`,
 	}, {
 		raw: dhex("51a8d65110771bf97f"),
 		msg: Message{
 			Tag{10, Fixed64Type}, Float64(math.Float64frombits(0x7ff91b771051d6a8)),
 		},
-		wantOutSource: `pack.Message{
-	pack.Tag{10, pack.Fixed64Type}, pack.Float64(math.Float64frombits(0x7ff91b771051d6a8)),
+		wantOutSource: `protopack.Message{
+	protopack.Tag{10, protopack.Fixed64Type}, protopack.Float64(math.Float64frombits(0x7ff91b771051d6a8)),
 }`,
 	}, {
 		raw: dhex("ab2c14481ab3e9a76d937fb4dd5e6c616ef311f62b7fe888785fca5609ffe81c1064e50dd7a9edb408d317e2891c0d54c719446938d41ab0ccf8e61dc28b0ebb"),