1
1
mirror of https://github.com/wader/fq.git synced 2024-12-27 15:42:07 +03:00

Merge pull request #38 from xentripetal/avro

Avro: Add decoder
This commit is contained in:
Mattias Wadman 2022-02-13 10:27:39 +01:00 committed by GitHub
commit db9c2e3d74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
39 changed files with 2848 additions and 1610 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
.DS_Store
testfiles/
fq

View File

@ -48,6 +48,7 @@ avc_nalu,
avc_pps,
avc_sei,
avc_sps,
avro_ocf,
bencode,
bsd_loopback_frame,
bson,

View File

@ -20,6 +20,7 @@
|`avc_pps` |H.264/AVC&nbsp;Picture&nbsp;Parameter&nbsp;Set |<sub></sub>|
|`avc_sei` |H.264/AVC&nbsp;Supplemental&nbsp;Enhancement&nbsp;Information |<sub></sub>|
|`avc_sps` |H.264/AVC&nbsp;Sequence&nbsp;Parameter&nbsp;Set |<sub></sub>|
|[`avro_ocf`](#avro_ocf) |Avro&nbsp;object&nbsp;container&nbsp;file |<sub></sub>|
|`bencode` |BitTorrent&nbsp;bencoding |<sub></sub>|
|`bsd_loopback_frame` |BSD&nbsp;loopback&nbsp;frame |<sub>`ipv4_packet`</sub>|
|[`bson`](#bson) |Binary&nbsp;JSON |<sub></sub>|
@ -89,7 +90,7 @@
|`zip` |ZIP&nbsp;archive |<sub>`probe`</sub>|
|`image` |Group |<sub>`gif` `jpeg` `mp4` `png` `tiff` `webp`</sub>|
|`link_frame` |Group |<sub>`bsd_loopback_frame` `ether8023_frame` `sll2_packet` `sll_packet`</sub>|
|`probe` |Group |<sub>`adts` `ar` `bzip2` `elf` `flac` `gif` `gzip` `jpeg` `json` `matroska` `mp3` `mp4` `mpeg_ts` `ogg` `pcap` `pcapng` `png` `tar` `tiff` `wav` `webp` `zip`</sub>|
|`probe` |Group |<sub>`adts` `ar` `avro_ocf` `bzip2` `elf` `flac` `gif` `gzip` `jpeg` `json` `matroska` `mp3` `mp4` `mpeg_ts` `ogg` `pcap` `pcapng` `png` `tar` `tiff` `wav` `webp` `zip`</sub>|
|`tcp_stream` |Group |<sub>`dns`</sub>|
|`udp_payload` |Group |<sub>`dns`</sub>|
@ -129,6 +130,15 @@ If the schema is known and not that complicated it can be reproduced:
```
fq -d asn1_ber 'torepr as $r | ["version", "modulus", "private_exponent", "private_exponen", "prime1", "prime2", "exponent1", "exponent2", "coefficient"] | with_entries({key: .value, value: $r[.key]})' pkcs1.der
```
### avro_ocf
Supports reading Avro Object Container Format (OCF) files based on the [1.11.0 specification](https://avro.apache.org/docs/current/spec.html#Object+Container+Files).
Capable of handling null, deflate, and snappy codecs for data compression.
Limitations:
- Schema does not support self-referential types, only built-in types.
- Decimal logical types are not supported for decoding, will just be treated as their primitive type
### becode
Supports `torepr`:

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 0 B

View File

@ -2,6 +2,7 @@ $ fq -n _registry.groups.probe
[
"adts",
"ar",
"avro_ocf",
"bzip2",
"elf",
"flac",

View File

@ -7,6 +7,7 @@ import (
_ "github.com/wader/fq/format/ar"
_ "github.com/wader/fq/format/asn1"
_ "github.com/wader/fq/format/av1"
_ "github.com/wader/fq/format/avro"
_ "github.com/wader/fq/format/bencode"
_ "github.com/wader/fq/format/bson"
_ "github.com/wader/fq/format/bzip2"

7
format/avro/avro_ocf.md Normal file
View File

@ -0,0 +1,7 @@
Supports reading Avro Object Container Format (OCF) files based on the [1.11.0 specification](https://avro.apache.org/docs/current/spec.html#Object+Container+Files).
Capable of handling null, deflate, and snappy codecs for data compression.
Limitations:
- Schema does not support self-referential types, only built-in types.
- Decimal logical types are not supported for decoding, will just be treated as their primitive type

View File

@ -0,0 +1,52 @@
package decoders
import (
"errors"
"fmt"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/decode"
)
func decodeArrayFn(schema schema.SimplifiedSchema) (DecodeFn, error) {
if schema.Items == nil {
return nil, errors.New("array schema must have items")
}
valueD, err := DecodeFnForSchema(*schema.Items)
if err != nil {
return nil, fmt.Errorf("failed getting decode fn for array item: %w", err)
}
// Arrays are encoded as a series of blocks. Each block consists of a long count value, followed by that many array
// items. A block with count zero indicates the end of the array. Each item is encoded per the array's item schema.
// If a block's count is negative, its absolute value is used, and the count is followed immediately by a long block
// size indicating the number of bytes in the block. This block size permits fast skipping through data, e.g., when
// projecting a record to a subset of its fields.
// For example, the array schema {"type": "array", "items": "long"}
// an array containing the items 3 and 27 could be encoded as the long value 2 (encoded as hex 04)
// followed by long values 3 and 27 (encoded as hex 06 36) terminated by zero:
// 04 06 36 00
return func(name string, d *decode.D) interface{} {
var values []interface{}
d.FieldArray(name, func(d *decode.D) {
count := int64(-1)
for count != 0 {
d.FieldStruct("block", func(d *decode.D) {
count = d.FieldSFn("count", VarZigZag)
if count < 0 {
d.FieldSFn("size", VarZigZag)
count *= -1
}
d.FieldArray("data", func(d *decode.D) {
for i := int64(0); i < count; i++ {
values = append(values, valueD("entry", d))
}
})
})
}
})
return values
}, nil
}

View File

@ -0,0 +1,15 @@
package decoders
import (
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
func decodeBoolFn(sms ...scalar.Mapper) (DecodeFn, error) {
// A boolean is written as a single byte whose value is either 0 (false) or 1 (true).
return func(name string, d *decode.D) interface{} {
return d.FieldBoolFn(name, func(d *decode.D) bool {
return d.U8() >= 1
}, sms...)
}, nil
}

View File

@ -0,0 +1,28 @@
package decoders
import (
"github.com/wader/fq/pkg/bitio"
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
type BytesCodec struct{}
func decodeBytesFn(sms ...scalar.Mapper) (DecodeFn, error) {
// Bytes are encoded as a long followed by that many bytes of data.
return func(name string, d *decode.D) interface{} {
var val []byte
d.FieldStruct(name, func(d *decode.D) {
length := d.FieldSFn("length", VarZigZag)
br := d.FieldRawLen("data", length*8, sms...)
val = make([]byte, length)
if _, err := bitio.ReadFull(br, val, length*8); err != nil {
d.Fatalf("failed to read %s bytes: %v", name, err)
}
})
return val
}, nil
}

View File

@ -0,0 +1,52 @@
package decoders
import (
"fmt"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
type DecodeFn func(string, *decode.D) interface{}
func DecodeFnForSchema(s schema.SimplifiedSchema) (DecodeFn, error) {
var sms []scalar.Mapper
mapper := logicalMapperForSchema(s)
if mapper != nil {
sms = append(sms, mapper)
}
switch s.Type {
case schema.ARRAY:
return decodeArrayFn(s)
case schema.BOOLEAN:
return decodeBoolFn(sms...)
case schema.BYTES:
return decodeBytesFn(sms...)
case schema.DOUBLE:
return decodeDoubleFn(sms...)
case schema.ENUM:
return decodeEnumFn(s, sms...)
case schema.FIXED:
return decodeFixedFn(s, sms...)
case schema.FLOAT:
return decodeFloatFn(sms...)
case schema.INT:
return decodeIntFn(sms...)
case schema.LONG:
return decodeLongFn(sms...)
case schema.NULL:
return decodeNullFn(sms...)
case schema.RECORD:
return decodeRecordFn(s)
case schema.STRING:
return decodeStringFn(s, sms...)
case schema.UNION:
return decodeUnionFn(s)
case schema.MAP:
return decodeMapFn(s)
default:
return nil, fmt.Errorf("unknown type: %s", s.Type)
}
}

View File

@ -0,0 +1,14 @@
package decoders
import (
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
func decodeDoubleFn(sms ...scalar.Mapper) (DecodeFn, error) {
// A double is written as 8 bytes. The double is converted into a 64-bit integer using a method equivalent to Java's
// doubleToLongBits and then encoded in little-endian format.
return func(name string, d *decode.D) interface{} {
return d.FieldF64(name, sms...)
}, nil
}

View File

@ -0,0 +1,34 @@
package decoders
import (
"errors"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/scalar"
)
type EnumMapper struct {
Symbols []string
}
func (e EnumMapper) MapScalar(s scalar.S) (scalar.S, error) {
v := int(s.ActualS())
if v < 0 || v >= len(e.Symbols) {
return s, errors.New("enum value of out range")
}
s.Sym = e.Symbols[v]
return s, nil
}
func decodeEnumFn(schema schema.SimplifiedSchema, sms ...scalar.Mapper) (DecodeFn, error) {
if len(schema.Symbols) == 0 {
return nil, errors.New("enum requires symbols")
}
// An enum is encoded by an int, representing the zero-based position of the symbol in the schema.
// For example, consider the enum:
// {"type": "enum", "name": "Foo", "symbols": ["A", "B", "C", "D"] }
// This would be encoded by an int between zero and three, with zero indicating "A", and 3 indicating "D".
sms = append([]scalar.Mapper{EnumMapper{Symbols: schema.Symbols}}, sms...)
return decodeIntFn(sms...)
}

View File

@ -0,0 +1,26 @@
package decoders
import (
"errors"
"github.com/wader/fq/pkg/scalar"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/decode"
)
func decodeFixedFn(schema schema.SimplifiedSchema, sms ...scalar.Mapper) (DecodeFn, error) {
if schema.Size < 0 {
return nil, errors.New("fixed size must be greater than or equal to zero")
}
size := int64(schema.Size)
// Fixed instances are encoded using the number of bytes declared in the schema.
return func(name string, d *decode.D) interface{} {
r := d.FieldRawLen(name, size*8, sms...)
val := make([]byte, size)
if _, err := r.ReadBits(val, size*8); err != nil {
d.Fatalf("failed to read fixed %s value: %v", name, err)
}
return val
}, nil
}

View File

@ -0,0 +1,14 @@
package decoders
import (
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
func decodeFloatFn(sms ...scalar.Mapper) (DecodeFn, error) {
// A float is written as 4 bytes. The float is converted into a 32-bit integer using a method equivalent to Java's
// floatToIntBits and then encoded in little-endian format.
return func(name string, d *decode.D) interface{} {
return d.FieldF32(name, sms...)
}, nil
}

View File

@ -0,0 +1,13 @@
package decoders
import (
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
func decodeIntFn(sms ...scalar.Mapper) (DecodeFn, error) {
// Int and long values are written using variable-length zig-zag coding.
return func(name string, d *decode.D) interface{} {
return d.FieldSFn(name, VarZigZag, sms...)
}, nil
}

View File

@ -0,0 +1,98 @@
package decoders
import (
"errors"
"time"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/scalar"
)
type Precision int
const (
SECOND = iota
MILLISECOND
MICROSECOND
NANOSECOND
)
func logicalMapperForSchema(schema schema.SimplifiedSchema) scalar.Mapper {
switch schema.LogicalType {
case "timestamp":
return TimestampMapper{Precision: SECOND}
case "timestamp-millis":
return TimestampMapper{Precision: MILLISECOND}
case "timestamp-micros":
return TimestampMapper{Precision: MICROSECOND}
case "timestamp-nanos":
return TimestampMapper{Precision: NANOSECOND}
case "time":
return TimeMapper{Precision: SECOND}
case "time-millis":
return TimeMapper{Precision: MILLISECOND}
case "time-micros":
return TimeMapper{Precision: MICROSECOND}
case "time-nanos":
return TimeMapper{Precision: NANOSECOND}
case "date":
return DateMapper{}
default:
return nil
}
}
type TimestampMapper struct {
Precision Precision
}
func (t TimestampMapper) MapScalar(s scalar.S) (scalar.S, error) {
v := s.ActualS()
var ts time.Time
if t.Precision == SECOND {
ts = time.Unix(v, 0)
} else if t.Precision == MILLISECOND {
ts = time.UnixMilli(v)
} else if t.Precision == MICROSECOND {
ts = time.UnixMicro(v)
} else if t.Precision == NANOSECOND {
ts = time.Unix(0, v)
} else {
return s, errors.New("unknown precision")
}
s.Sym = ts.UTC().Format(time.RFC3339Nano)
return s, nil
}
type TimeMapper struct {
Precision Precision
}
func (t TimeMapper) MapScalar(s scalar.S) (scalar.S, error) {
v := s.ActualS()
if t.Precision == SECOND {
s.Sym = time.Unix(v, 0).UTC().Format("15:04:05")
} else if t.Precision == MILLISECOND {
s.Sym = time.UnixMilli(v).UTC().Format("15:04:05.000")
} else if t.Precision == MICROSECOND {
s.Sym = time.UnixMicro(v).UTC().Format("15:04:05.000000")
} else if t.Precision == NANOSECOND {
s.Sym = time.Unix(0, v).UTC().Format("15:04:05.000000000")
} else {
return s, errors.New("unknown precision")
}
return s, nil
}
type DateMapper struct {
}
func (d DateMapper) MapScalar(s scalar.S) (scalar.S, error) {
v := s.ActualS()
s.Sym = time.Unix(0, 0).AddDate(0, 0, int(v)).UTC().Format("2006-01-02")
return s, nil
}
// Todo Decimal: https://github.com/linkedin/goavro/blob/master/logical_type.go
// Todo Duration

View File

@ -0,0 +1,37 @@
package decoders
import (
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
const intMask = 0b0111_1111
const intFlag = 0b1000_0000
// VarZigZag reads a variable length zigzag long from the current position in decoder
func VarZigZag(d *decode.D) int64 {
var value uint64
var shift uint
size := 0
for d.NotEnd() && size < 8 {
size++
b := byte(d.U8())
value |= uint64(b&intMask) << shift
if b&intFlag == 0 {
return int64(value>>1) ^ -int64(value&1)
}
shift += 7
}
if size >= 8 {
d.Fatalf("long exceeds 8 bytes")
}
d.Fatalf("unexpected end of data")
return 0
}
func decodeLongFn(sms ...scalar.Mapper) (DecodeFn, error) {
// Int and long values are written using variable-length zig-zag coding.
return func(name string, d *decode.D) interface{} {
return d.FieldSFn(name, VarZigZag, sms...)
}, nil
}

View File

@ -0,0 +1,76 @@
package decoders
import (
"errors"
"fmt"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/decode"
)
func decodeMapFn(s schema.SimplifiedSchema) (DecodeFn, error) {
if s.Values == nil {
return nil, errors.New("map schema must have values")
}
// Maps are encoded as a series of blocks. Each block consists of a long count value, followed by that many
// key/value pairs. A block with count zero indicates the end of the map. Each item is encoded per the map's
// value schema.
// If a block's count is negative, its absolute value is used, and the count is followed immediately by a long
// block size indicating the number of bytes in the block. This block size permits fast skipping through data,
// e.g., when projecting a record to a subset of its fields.
// The blocked representation permits one to read and write maps larger than can be buffered in memory, since one
// can start writing items without knowing the full length of the map.
// This is the exact same as the array decoder, with the value being a KV record, so we just use the array decoder
subSchema := schema.SimplifiedSchema{
Type: schema.ARRAY,
Items: &schema.SimplifiedSchema{
Type: schema.RECORD,
Fields: []schema.Field{
{
Name: "key",
Type: schema.SimplifiedSchema{Type: schema.STRING},
},
{
Name: "value",
Type: *s.Values,
},
},
},
}
subFn, err := DecodeFnForSchema(subSchema)
if err != nil {
return nil, fmt.Errorf("decode map: %w", err)
}
return func(s string, d *decode.D) interface{} {
val := make(map[string]interface{})
rawV := subFn(s, d)
rawSlice, ok := rawV.([]interface{})
if !ok {
d.Fatalf("decode map: expected array of interfaces, got %v", rawV)
return nil
}
for _, rawEntry := range rawSlice {
entry, ok := rawEntry.(map[string]interface{})
if !ok {
d.Fatalf("decode map: expected map, got %T", rawEntry)
}
rawKey, ok := entry["key"]
if !ok {
d.Fatalf("decode map: expected key in map %v", entry)
}
value, ok := entry["value"]
if !ok {
d.Fatalf("decode map: expected value in map %v", entry)
}
key, ok := rawKey.(string)
if !ok {
d.Fatalf("decode map: expected string key in map %v", entry)
}
val[key] = value
}
return val
}, nil
}

View File

@ -0,0 +1,14 @@
package decoders
import (
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
func decodeNullFn(sms ...scalar.Mapper) (DecodeFn, error) {
// null is written as zero bytes.
return func(name string, d *decode.D) interface{} {
d.FieldValueNil(name, sms...)
return nil
}, nil
}

View File

@ -0,0 +1,51 @@
package decoders
import (
"fmt"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/decode"
)
func decodeRecordFn(schema schema.SimplifiedSchema) (DecodeFn, error) {
if len(schema.Fields) == 0 {
return nil, fmt.Errorf("record must have fields")
}
var fieldNames []string
var fieldDecoders []func(string, *decode.D) interface{}
for _, f := range schema.Fields {
fieldNames = append(fieldNames, f.Name)
fc, err := DecodeFnForSchema(f.Type)
if err != nil {
return nil, fmt.Errorf("failed parsing record field %s: %w", f.Name, err)
}
fieldDecoders = append(fieldDecoders, fc)
}
// A record is encoded by encoding the values of its fields in the order that they are declared. In other words, a
// record is encoded as just the concatenation of the encodings of its fields. Field values are encoded per their
// schema. For example, the record schema
// { "type": "record",
// "name": "test",
// "fields" : [
// {"name": "a", "type": "long"},
// {"name": "b", "type": "string"}
// ]
// }
//
// An instance of this record whose a field has value 27 (encoded as hex 36) and whose b field has value "foo"
// (encoded as hex bytes 06 66 6f 6f), would be encoded simply as the concatenation of these, namely
// the hex byte sequence:
// 36 06 66 6f 6f
return func(name string, d *decode.D) interface{} {
val := make(map[string]interface{})
d.FieldStruct(name, func(d *decode.D) {
for i, f := range fieldNames {
val[f] = fieldDecoders[i](f, d)
}
})
return val
}, nil
}

View File

@ -0,0 +1,22 @@
package decoders
import (
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
func decodeStringFn(schema schema.SimplifiedSchema, sms ...scalar.Mapper) (DecodeFn, error) {
// String is encoded as a long followed by that many bytes of UTF-8 encoded character data.
// For example, the three-character string "foo" would be encoded as the long value 3 (encoded as hex 06) followed
// by the UTF-8 encoding of 'f', 'o', and 'o' (the hex bytes 66 6f 6f):
// 06 66 6f 6f
return func(name string, d *decode.D) interface{} {
var val string
d.FieldStruct(name, func(d *decode.D) {
length := d.FieldSFn("length", VarZigZag)
val = d.FieldUTF8("data", int(length))
})
return val
}, nil
}

View File

@ -0,0 +1,38 @@
package decoders
import (
"errors"
"fmt"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/pkg/decode"
)
func decodeUnionFn(schema schema.SimplifiedSchema) (DecodeFn, error) {
if len(schema.UnionTypes) == 0 {
return nil, errors.New("union must have types")
}
var decoders []func(string, *decode.D) interface{}
for i, t := range schema.UnionTypes {
decodeFn, err := DecodeFnForSchema(t)
if err != nil {
return nil, fmt.Errorf("failed getting decodeFn for union type %d: %w", i, err)
}
decoders = append(decoders, decodeFn)
}
// A union is encoded by first writing an int value indicating the zero-based position within the union of the
// schema of its value. The value is then encoded per the indicated schema within the union.
return func(name string, d *decode.D) interface{} {
var val interface{}
d.FieldStruct(name, func(d *decode.D) {
v := int(d.FieldSFn("type", VarZigZag))
if v < 0 || v >= len(decoders) {
d.Fatalf("invalid union value: %d", v)
}
val = decoders[v]("value", d)
})
return val
}, nil
}

155
format/avro/ocf.go Normal file
View File

@ -0,0 +1,155 @@
package avro
import (
"bytes"
"compress/flate"
"hash/crc32"
"github.com/golang/snappy"
"github.com/wader/fq/format"
"github.com/wader/fq/format/avro/decoders"
"github.com/wader/fq/format/avro/schema"
"github.com/wader/fq/format/registry"
"github.com/wader/fq/pkg/bitio"
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/scalar"
)
func init() {
registry.MustRegister(decode.Format{
Name: format.AVRO_OCF,
Description: "Avro object container file",
Groups: []string{format.PROBE},
DecodeFn: decodeAvroOCF,
})
}
type HeaderData struct {
Schema schema.SimplifiedSchema
Codec string
Sync []byte
}
const headerSchemaSpec = `
{
"type": "record",
"name": "org.apache.avro.file.Header",
"fields": [
{"name": "meta", "type": {"type": "map", "values": "string"}},
{"name": "sync", "type": {"type": "fixed", "name": "Sync", "size": 16}}
]
}`
func decodeHeader(d *decode.D) HeaderData {
d.FieldRawLen("magic", 4*8, d.AssertBitBuf([]byte{'O', 'b', 'j', 1}))
var headerData HeaderData
headerSchema, err := schema.FromSchemaString(headerSchemaSpec)
if err != nil {
d.Fatalf("Failed to parse header schema: %v", err)
}
decodeHeaderFn, err := decoders.DecodeFnForSchema(headerSchema)
if err != nil {
d.Fatalf("failed to parse header: %v", err)
}
header := decodeHeaderFn("header", d)
headerRecord, ok := header.(map[string]interface{})
if !ok {
d.Fatalf("header is not a map")
}
meta, ok := headerRecord["meta"].(map[string]interface{})
if !ok {
d.Fatalf("header.meta is not a map")
}
headerData.Schema, err = schema.FromSchemaString(meta["avro.schema"].(string))
if err != nil {
d.Fatalf("failed to parse schema: %v", err)
}
if codec, ok := meta["avro.codec"]; ok {
headerData.Codec, ok = codec.(string)
if !ok {
d.Fatalf("avro.codec is not a string")
}
} else {
headerData.Codec = "null"
}
headerData.Sync, ok = headerRecord["sync"].([]byte)
if !ok {
d.Fatalf("header.sync is not a byte array")
}
return headerData
}
func decodeBlockCodec(d *decode.D, dataSize int64, codec string) *bytes.Buffer {
bb := &bytes.Buffer{}
if codec == "deflate" {
br := d.FieldRawLen("compressed", dataSize*8)
d.MustCopy(bb, flate.NewReader(bitio.NewIOReader(br)))
} else if codec == "snappy" {
// Everything but last 4 bytes which are the checksum
n := dataSize - 4
br := d.FieldRawLen("compressed", n*8)
// This could be simplified to be similar to deflate, however snappy's reader only works for streaming frames,
// not block data. See https://github.com/google/snappy/blob/main/framing_format.txt for details.
compressed := make([]byte, n)
if _, err := bitio.ReadFull(br, compressed, n*8); err != nil {
d.Fatalf("failed reading compressed data %v", err)
}
decompressed, err := snappy.Decode(nil, compressed)
if err != nil {
d.Fatalf("failed decompressing data: %v", err)
}
d.MustCopy(bb, bytes.NewReader(decompressed))
// Check the checksum
crc32W := crc32.NewIEEE()
d.MustCopy(crc32W, bytes.NewReader(bb.Bytes()))
d.FieldU32("crc", d.ValidateUBytes(crc32W.Sum(nil)), scalar.Hex)
} else {
// Unknown codec, just dump the compressed data.
d.FieldRawLen("compressed", dataSize*8, scalar.Description(codec+" encoded"))
return nil
}
return bb
}
func decodeAvroOCF(d *decode.D, in interface{}) interface{} {
header := decodeHeader(d)
decodeFn, err := decoders.DecodeFnForSchema(header.Schema)
if err != nil {
d.Fatalf("unable to create codec: %v", err)
}
d.FieldStructArrayLoop("blocks", "block", func() bool { return d.NotEnd() }, func(d *decode.D) {
count := d.FieldSFn("count", decoders.VarZigZag)
if count <= 0 {
return
}
size := d.FieldSFn("size", decoders.VarZigZag)
i := int64(0)
if header.Codec != "null" {
if bb := decodeBlockCodec(d, size, header.Codec); bb != nil {
d.FieldArrayRootBitBufFn("data", bitio.NewBitReader(bb.Bytes(), -1), func(d *decode.D) {
for ; i < count; i++ {
decodeFn("data", d)
}
})
}
} else {
d.FieldArrayLoop("data", func() bool { return i < count }, func(d *decode.D) {
decodeFn("datum", d)
i++
})
}
d.FieldRawLen("sync", 16*8, d.AssertBitBuf(header.Sync))
})
return nil
}

View File

@ -0,0 +1,226 @@
package schema
import (
"encoding/json"
"errors"
"fmt"
)
const (
ARRAY = "array"
BOOLEAN = "boolean"
BYTES = "bytes"
DOUBLE = "double"
ENUM = "enum"
FIXED = "fixed"
FLOAT = "float"
INT = "int"
LONG = "long"
MAP = "map"
NULL = "null"
RECORD = "record"
STRING = "string"
UNION = "union" // avro spec doesn't treat unions like this, but makes it easier for us
)
type SimplifiedSchema struct {
Type string `json:"type"`
Name string `json:"name"`
LogicalType string `json:"logicalType,omitempty"`
Size int `json:"size,omitempty"`
Scale int `json:"scale,omitempty"`
Precision int `json:"precision,omitempty"`
Items *SimplifiedSchema `json:"items,omitempty"`
Fields []Field `json:"fields,omitempty"`
Symbols []string `json:"symbols,omitempty"`
Values *SimplifiedSchema `json:"values,omitempty"`
UnionTypes []SimplifiedSchema
// Choosing not to handle Default as it adds a lot of complexity and this is used for showing the binary
// representation of the data, not fully parsing it. See https://github.com/linkedin/goavro/blob/master/record.go
// for how it could be handled.
}
type Field struct {
Name string
Type SimplifiedSchema
}
func FromSchemaString(schemaString string) (SimplifiedSchema, error) {
var jsonSchema interface{}
if err := json.Unmarshal([]byte(schemaString), &jsonSchema); err != nil {
return SimplifiedSchema{}, fmt.Errorf("failed to unmarshal header schema: %w", err)
}
return From(jsonSchema)
}
func From(schema interface{}) (SimplifiedSchema, error) {
if schema == nil {
return SimplifiedSchema{}, errors.New("schema cannot be nil")
}
var s SimplifiedSchema
switch v := schema.(type) {
case []interface{}:
s.Type = UNION
for _, i := range v {
unionType, err := From(i)
if err != nil {
return s, fmt.Errorf("failed parsing union type: %w", err)
}
if unionType.Type == UNION {
return s, errors.New("sub-unions are not supported")
}
s.UnionTypes = append(s.UnionTypes, unionType)
}
case string:
s.Type = v
case map[string]interface{}:
var err error
if s.Type, err = getString(v, "type", true); err != nil {
return s, err
}
if s.Name, err = getString(v, "name", false); err != nil {
return s, err
}
if s.LogicalType, err = getString(v, "logicalType", false); err != nil {
return s, err
}
if s.Scale, err = getInt(v, "scale", false); err != nil {
return s, err
}
if s.Precision, err = getInt(v, "precision", false); err != nil {
return s, err
}
if s.Size, err = getInt(v, "size", false); err != nil {
return s, err
}
if s.Type == RECORD {
if s.Fields, err = getFields(v); err != nil {
return s, fmt.Errorf("failed parsing fields: %w", err)
}
} else if s.Type == ENUM {
if s.Symbols, err = getSymbols(v); err != nil {
return s, fmt.Errorf("failed parsing symbols: %w", err)
}
} else if s.Type == ARRAY {
if s.Items, err = getSchema(v, "items"); err != nil {
return s, fmt.Errorf("failed parsing items: %w", err)
}
} else if s.Type == MAP {
if s.Values, err = getSchema(v, "values"); err != nil {
return s, fmt.Errorf("failed parsing values: %w", err)
}
}
default:
return s, errors.New("unknown schema")
}
return s, nil
}
func getSchema(m map[string]interface{}, key string) (*SimplifiedSchema, error) {
vI, ok := m[key]
if !ok {
return nil, fmt.Errorf("%s not found", key)
}
v, err := From(vI)
if err != nil {
return nil, fmt.Errorf("failed parsing %s: %w", key, err)
}
return &v, nil
}
func getSymbols(m map[string]interface{}) ([]string, error) {
vI, ok := m["symbols"]
if !ok {
return nil, errors.New("symbols required for enum")
}
vA, ok := vI.([]interface{})
if !ok {
return nil, errors.New("symbols must be an array")
}
symbols := make([]string, len(vA))
for i, entry := range vA {
v, ok := entry.(string)
if !ok {
return nil, errors.New("symbols must be an array of strings")
}
symbols[i] = v
}
return symbols, nil
}
func getFields(m map[string]interface{}) ([]Field, error) {
var fields []Field
var err error
fieldsI, ok := m["fields"]
if !ok {
return fields, errors.New("no fields")
}
fieldsAI, ok := fieldsI.([]interface{})
if !ok {
return fields, errors.New("fields is not an array")
}
for _, fieldI := range fieldsAI {
field, ok := fieldI.(map[string]interface{})
if !ok {
return fields, errors.New("field is not a json object")
}
var f Field
f.Name, err = getString(field, "name", true)
if err != nil {
return fields, fmt.Errorf("failed parsing field name: %w", err)
}
t, ok := field["type"]
if !ok {
return fields, errors.New("field type must be a object")
}
if f.Type, err = From(t); err != nil {
return fields, fmt.Errorf("failed parsing field %s type: %w", f.Name, err)
}
fields = append(fields, f)
}
return fields, nil
}
func getString(m map[string]interface{}, key string, required bool) (string, error) {
v, ok := m[key]
if !ok {
if required {
return "", fmt.Errorf("%s is required", key)
}
return "", nil
}
s, ok := v.(string)
if !ok {
return "", fmt.Errorf("%s must be a string", key)
}
return s, nil
}
func getInt(m map[string]interface{}, key string, required bool) (int, error) {
v, ok := m[key]
if !ok {
if required {
return 0, fmt.Errorf("%s is required", key)
}
return 0, nil
}
switch v := v.(type) {
case int:
return v, nil
case int32:
return int(v), nil
case int64:
return int(v), nil
case float32:
return int(v), nil
case float64:
return int(v), nil
default:
return 0, fmt.Errorf("%s must be a int", key)
}
}

BIN
format/avro/testdata/allDataTypes.avro vendored Normal file

Binary file not shown.

680
format/avro/testdata/allDataTypes.fqtest vendored Normal file
View File

@ -0,0 +1,680 @@
# Generated using https://gist.github.com/xentripetal/c0f1645ee1abd4d25f71896c8d650543
$ fq dv allDataTypes.avro
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: allDataTypes.avro (avro_ocf) 0x0-0x738.7 (1849)
0x000|4f 62 6a 01 |Obj. | magic: raw bits (valid) 0x0-0x3.7 (4)
| | | header{}: 0x4-0x41d.7 (1050)
| | | meta[0:2]: 0x4-0x40d.7 (1034)
| | | [0]{}: block 0x4-0x40c.7 (1033)
0x000| 04 | . | count: 2 0x4-0x4.7 (1)
| | | data[0:2]: 0x5-0x40c.7 (1032)
| | | [0]{}: entry 0x5-0x3fc.7 (1016)
| | | key{}: 0x5-0x10.7 (12)
0x000| 16 | . | length: 11 0x5-0x5.7 (1)
0x000| 61 76 72 6f 2e 73 63 68 65 6d| avro.schem| data: "avro.schema" 0x6-0x10.7 (11)
0x010|61 |a |
| | | value{}: 0x11-0x3fc.7 (1004)
0x010| d4 0f | .. | length: 1002 0x11-0x12.7 (2)
0x010| 7b 22 66 69 65 6c 64 73 22 3a 5b 7b 22| {"fields":[{"| data: "{\"fields\":[{\"name\":\"null\",\"type\":\"null\"},{\"name\":\""... 0x13-0x3fc.7 (1002)
0x020|6e 61 6d 65 22 3a 22 6e 75 6c 6c 22 2c 22 74 79|name":"null","ty|
* |until 0x3fc.7 (1002) | |
| | | [1]{}: entry 0x3fd-0x40c.7 (16)
| | | key{}: 0x3fd-0x407.7 (11)
0x3f0| 14 | . | length: 10 0x3fd-0x3fd.7 (1)
0x3f0| 61 76| av| data: "avro.codec" 0x3fe-0x407.7 (10)
0x400|72 6f 2e 63 6f 64 65 63 |ro.codec |
| | | value{}: 0x408-0x40c.7 (5)
0x400| 08 | . | length: 4 0x408-0x408.7 (1)
0x400| 6e 75 6c 6c | null | data: "null" 0x409-0x40c.7 (4)
| | | [1]{}: block 0x40d-0x40d.7 (1)
0x400| 00 | . | count: 0 0x40d-0x40d.7 (1)
| | | data[0:0]: 0x40e-NA (0)
0x400| d3 c3| ..| sync: raw bits 0x40e-0x41d.7 (16)
0x410|7b dd 09 d4 11 0f ab 81 70 3e 70 78 9e a0 |{.......p>px.. |
| | | blocks[0:1]: 0x41e-0x738.7 (795)
| | | [0]{}: block 0x41e-0x738.7 (795)
0x410| 14 | . | count: 10 0x41e-0x41e.7 (1)
0x410| 90| .| size: 776 0x41f-0x420.7 (2)
0x420|0c |. |
| | | data[0:10]: 0x421-0x728.7 (776)
| | | [0]{}: datum 0x421-0x46b.7 (75)
| | | null: null 0x421-NA (0)
0x420| 01 | . | boolean: true 0x421-0x421.7 (1)
0x420| 0e | . | int: 7 0x422-0x422.7 (1)
0x420| 42 | B | long: 33 0x423-0x423.7 (1)
0x420| 00 00 00 00 | .... | float: 0 0x424-0x427.7 (4)
0x420| 92 24 49 92 24 49 f2 3f| .$I.$I.?| double: -2.8062043420318885e-221 0x428-0x42f.7 (8)
| | | bytes{}: 0x430-0x431.7 (2)
0x430|02 |. | length: 1 0x430-0x430.7 (1)
0x430| 39 | 9 | data: raw bits 0x431-0x431.7 (1)
| | | string{}: 0x432-0x434.7 (3)
0x430| 04 | . | length: 2 0x432-0x432.7 (1)
0x430| 31 30 | 10 | data: "10" 0x433-0x434.7 (2)
0x430| 00 | . | enum: "A" (0) 0x435-0x435.7 (1)
| | | array[0:1]: 0x436-0x436.7 (1)
| | | [0]{}: block 0x436-0x436.7 (1)
0x430| 00 | . | count: 0 0x436-0x436.7 (1)
| | | data[0:0]: 0x437-NA (0)
| | | map[0:2]: 0x437-0x444.7 (14)
| | | [0]{}: block 0x437-0x443.7 (13)
0x430| 06 | . | count: 3 0x437-0x437.7 (1)
| | | data[0:3]: 0x438-0x443.7 (12)
| | | [0]{}: entry 0x438-0x43b.7 (4)
| | | key{}: 0x438-0x439.7 (2)
0x430| 02 | . | length: 1 0x438-0x438.7 (1)
0x430| 61 | a | data: "a" 0x439-0x439.7 (1)
| | | value{}: 0x43a-0x43b.7 (2)
0x430| 02 | . | length: 1 0x43a-0x43a.7 (1)
0x430| 41 | A | data: "A" 0x43b-0x43b.7 (1)
| | | [1]{}: entry 0x43c-0x43f.7 (4)
| | | key{}: 0x43c-0x43d.7 (2)
0x430| 02 | . | length: 1 0x43c-0x43c.7 (1)
0x430| 62 | b | data: "b" 0x43d-0x43d.7 (1)
| | | value{}: 0x43e-0x43f.7 (2)
0x430| 02 | . | length: 1 0x43e-0x43e.7 (1)
0x430| 42| B| data: "B" 0x43f-0x43f.7 (1)
| | | [2]{}: entry 0x440-0x443.7 (4)
| | | key{}: 0x440-0x441.7 (2)
0x440|02 |. | length: 1 0x440-0x440.7 (1)
0x440| 63 | c | data: "c" 0x441-0x441.7 (1)
| | | value{}: 0x442-0x443.7 (2)
0x440| 02 | . | length: 1 0x442-0x442.7 (1)
0x440| 43 | C | data: "C" 0x443-0x443.7 (1)
| | | [1]{}: block 0x444-0x444.7 (1)
0x440| 00 | . | count: 0 0x444-0x444.7 (1)
| | | data[0:0]: 0x445-NA (0)
| | | union{}: 0x445-0x447.7 (3)
0x440| 02 | . | type: 1 0x445-0x445.7 (1)
| | | value{}: 0x446-0x447.7 (2)
0x440| 02 | . | length: 1 0x446-0x446.7 (1)
0x440| 30 | 0 | data: "0" 0x447-0x447.7 (1)
0x440| 00 01 02 03 04 05 06 07| ........| fixed: raw bits 0x448-0x457.7 (16)
0x450|08 09 0a 0b 0c 0d 0e 0f |........ |
0x450| 0c | . | date: "1970-01-07" (6) 0x458-0x458.7 (1)
0x450| c0 a9 07 | ... | timeMillis: "00:01:00.000" (60000) 0x459-0x45b.7 (3)
0x450| e0 5d | .] | timeMicros: "00:00:00.006000" (6000) 0x45c-0x45d.7 (2)
0x450| c0 d9| ..| timestampMillis: "2000-01-01T00:01:00Z" (946684860000) 0x45e-0x463.7 (6)
0x460|84 ad 8d 37 |...7 |
0x460| e0 dd bf b3 a7 c0 ae 03 | ........ | timestampMicros: "2000-01-01T00:00:00.006Z" (946684800006000) 0x464-0x46b.7 (8)
| | | [1]{}: datum 0x46c-0x4b9.7 (78)
| | | null: null 0x46c-NA (0)
0x460| 00 | . | boolean: false 0x46c-0x46c.7 (1)
0x460| 0c | . | int: 6 0x46d-0x46d.7 (1)
0x460| 40 | @ | long: 32 0x46e-0x46e.7 (1)
0x460| ab| .| float: -1.2126478207002966e-12 0x46f-0x472.7 (4)
0x470|aa aa 3e |..> |
0x470| 25 49 92 24 49 92 f4 3f | %I.$I..? | double: 4.61123556404525e-129 0x473-0x47a.7 (8)
| | | bytes{}: 0x47b-0x47c.7 (2)
0x470| 02 | . | length: 1 0x47b-0x47b.7 (1)
0x470| 38 | 8 | data: raw bits 0x47c-0x47c.7 (1)
| | | string{}: 0x47d-0x47f.7 (3)
0x470| 04 | . | length: 2 0x47d-0x47d.7 (1)
0x470| 31 31| 11| data: "11" 0x47e-0x47f.7 (2)
0x480|02 |. | enum: "B" (1) 0x480-0x480.7 (1)
| | | array[0:2]: 0x481-0x484.7 (4)
| | | [0]{}: block 0x481-0x483.7 (3)
0x480| 02 | . | count: 1 0x481-0x481.7 (1)
| | | data[0:1]: 0x482-0x483.7 (2)
| | | [0]{}: entry 0x482-0x483.7 (2)
0x480| 02 | . | length: 1 0x482-0x482.7 (1)
0x480| 61 | a | data: "a" 0x483-0x483.7 (1)
| | | [1]{}: block 0x484-0x484.7 (1)
0x480| 00 | . | count: 0 0x484-0x484.7 (1)
| | | data[0:0]: 0x485-NA (0)
| | | map[0:2]: 0x485-0x492.7 (14)
| | | [0]{}: block 0x485-0x491.7 (13)
0x480| 06 | . | count: 3 0x485-0x485.7 (1)
| | | data[0:3]: 0x486-0x491.7 (12)
| | | [0]{}: entry 0x486-0x489.7 (4)
| | | key{}: 0x486-0x487.7 (2)
0x480| 02 | . | length: 1 0x486-0x486.7 (1)
0x480| 61 | a | data: "a" 0x487-0x487.7 (1)
| | | value{}: 0x488-0x489.7 (2)
0x480| 02 | . | length: 1 0x488-0x488.7 (1)
0x480| 41 | A | data: "A" 0x489-0x489.7 (1)
| | | [1]{}: entry 0x48a-0x48d.7 (4)
| | | key{}: 0x48a-0x48b.7 (2)
0x480| 02 | . | length: 1 0x48a-0x48a.7 (1)
0x480| 62 | b | data: "b" 0x48b-0x48b.7 (1)
| | | value{}: 0x48c-0x48d.7 (2)
0x480| 02 | . | length: 1 0x48c-0x48c.7 (1)
0x480| 42 | B | data: "B" 0x48d-0x48d.7 (1)
| | | [2]{}: entry 0x48e-0x491.7 (4)
| | | key{}: 0x48e-0x48f.7 (2)
0x480| 02 | . | length: 1 0x48e-0x48e.7 (1)
0x480| 63| c| data: "c" 0x48f-0x48f.7 (1)
| | | value{}: 0x490-0x491.7 (2)
0x490|02 |. | length: 1 0x490-0x490.7 (1)
0x490| 43 | C | data: "C" 0x491-0x491.7 (1)
| | | [1]{}: block 0x492-0x492.7 (1)
0x490| 00 | . | count: 0 0x492-0x492.7 (1)
| | | data[0:0]: 0x493-NA (0)
| | | union{}: 0x493-0x495.7 (3)
0x490| 02 | . | type: 1 0x493-0x493.7 (1)
| | | value{}: 0x494-0x495.7 (2)
0x490| 02 | . | length: 1 0x494-0x494.7 (1)
0x490| 31 | 1 | data: "1" 0x495-0x495.7 (1)
0x490| 00 01 02 03 04 05 06 07 08 09| ..........| fixed: raw bits 0x496-0x4a5.7 (16)
0x4a0|0a 0b 0c 0d 0e 0f |...... |
0x4a0| 0e | . | date: "1970-01-08" (7) 0x4a6-0x4a6.7 (1)
0x4a0| c2 a9 07 | ... | timeMillis: "00:01:00.001" (60001) 0x4a7-0x4a9.7 (3)
0x4a0| dd 5d | .] | timeMicros: "23:59:59.994001" (-5999) 0x4aa-0x4ab.7 (2)
0x4a0| c2 c9 b7 ff| ....| timestampMillis: "2000-01-02T00:01:00.001Z" (946771260001) 0x4ac-0x4b1.7 (6)
0x4b0|8d 37 |.7 |
0x4b0| a2 a2 f9 90 ab c5 ae 03 | ........ | timestampMicros: "2000-01-01T23:59:59.994001Z" (946771199994001) 0x4b2-0x4b9.7 (8)
| | | [2]{}: datum 0x4ba-0x509.7 (80)
| | | null: null 0x4ba-NA (0)
0x4b0| 01 | . | boolean: true 0x4ba-0x4ba.7 (1)
0x4b0| 0a | . | int: 5 0x4bb-0x4bb.7 (1)
0x4b0| 46 | F | long: 35 0x4bc-0x4bc.7 (1)
0x4b0| ab aa 2a| ..*| float: -1.2090952154417134e-12 0x4bd-0x4c0.7 (4)
0x4c0|3f |? |
0x4c0| b7 6d db b6 6d db f6 3f | .m..m..? | double: -1.071112274748446e-41 0x4c1-0x4c8.7 (8)
| | | bytes{}: 0x4c9-0x4cb.7 (3)
0x4c0| 04 | . | length: 2 0x4c9-0x4c9.7 (1)
0x4c0| 31 31 | 11 | data: raw bits 0x4ca-0x4cb.7 (2)
| | | string{}: 0x4cc-0x4cd.7 (2)
0x4c0| 02 | . | length: 1 0x4cc-0x4cc.7 (1)
0x4c0| 38 | 8 | data: "8" 0x4cd-0x4cd.7 (1)
0x4c0| 04 | . | enum: "C" (2) 0x4ce-0x4ce.7 (1)
| | | array[0:2]: 0x4cf-0x4d4.7 (6)
| | | [0]{}: block 0x4cf-0x4d3.7 (5)
0x4c0| 04| .| count: 2 0x4cf-0x4cf.7 (1)
| | | data[0:2]: 0x4d0-0x4d3.7 (4)
| | | [0]{}: entry 0x4d0-0x4d1.7 (2)
0x4d0|02 |. | length: 1 0x4d0-0x4d0.7 (1)
0x4d0| 61 | a | data: "a" 0x4d1-0x4d1.7 (1)
| | | [1]{}: entry 0x4d2-0x4d3.7 (2)
0x4d0| 02 | . | length: 1 0x4d2-0x4d2.7 (1)
0x4d0| 62 | b | data: "b" 0x4d3-0x4d3.7 (1)
| | | [1]{}: block 0x4d4-0x4d4.7 (1)
0x4d0| 00 | . | count: 0 0x4d4-0x4d4.7 (1)
| | | data[0:0]: 0x4d5-NA (0)
| | | map[0:2]: 0x4d5-0x4e2.7 (14)
| | | [0]{}: block 0x4d5-0x4e1.7 (13)
0x4d0| 06 | . | count: 3 0x4d5-0x4d5.7 (1)
| | | data[0:3]: 0x4d6-0x4e1.7 (12)
| | | [0]{}: entry 0x4d6-0x4d9.7 (4)
| | | key{}: 0x4d6-0x4d7.7 (2)
0x4d0| 02 | . | length: 1 0x4d6-0x4d6.7 (1)
0x4d0| 63 | c | data: "c" 0x4d7-0x4d7.7 (1)
| | | value{}: 0x4d8-0x4d9.7 (2)
0x4d0| 02 | . | length: 1 0x4d8-0x4d8.7 (1)
0x4d0| 43 | C | data: "C" 0x4d9-0x4d9.7 (1)
| | | [1]{}: entry 0x4da-0x4dd.7 (4)
| | | key{}: 0x4da-0x4db.7 (2)
0x4d0| 02 | . | length: 1 0x4da-0x4da.7 (1)
0x4d0| 61 | a | data: "a" 0x4db-0x4db.7 (1)
| | | value{}: 0x4dc-0x4dd.7 (2)
0x4d0| 02 | . | length: 1 0x4dc-0x4dc.7 (1)
0x4d0| 41 | A | data: "A" 0x4dd-0x4dd.7 (1)
| | | [2]{}: entry 0x4de-0x4e1.7 (4)
| | | key{}: 0x4de-0x4df.7 (2)
0x4d0| 02 | . | length: 1 0x4de-0x4de.7 (1)
0x4d0| 62| b| data: "b" 0x4df-0x4df.7 (1)
| | | value{}: 0x4e0-0x4e1.7 (2)
0x4e0|02 |. | length: 1 0x4e0-0x4e0.7 (1)
0x4e0| 42 | B | data: "B" 0x4e1-0x4e1.7 (1)
| | | [1]{}: block 0x4e2-0x4e2.7 (1)
0x4e0| 00 | . | count: 0 0x4e2-0x4e2.7 (1)
| | | data[0:0]: 0x4e3-NA (0)
| | | union{}: 0x4e3-0x4e5.7 (3)
0x4e0| 02 | . | type: 1 0x4e3-0x4e3.7 (1)
| | | value{}: 0x4e4-0x4e5.7 (2)
0x4e0| 02 | . | length: 1 0x4e4-0x4e4.7 (1)
0x4e0| 32 | 2 | data: "2" 0x4e5-0x4e5.7 (1)
0x4e0| 00 01 02 03 04 05 06 07 08 09| ..........| fixed: raw bits 0x4e6-0x4f5.7 (16)
0x4f0|0a 0b 0c 0d 0e 0f |...... |
0x4f0| 08 | . | date: "1970-01-05" (4) 0x4f6-0x4f6.7 (1)
0x4f0| c4 a9 07 | ... | timeMillis: "00:01:00.002" (60002) 0x4f7-0x4f9.7 (3)
0x4f0| e4 5d | .] | timeMicros: "00:00:00.006002" (6002) 0x4fa-0x4fb.7 (2)
0x4f0| c4 b9 ea d1| ....| timestampMillis: "2000-01-03T00:01:00.002Z" (946857660002) 0x4fc-0x501.7 (6)
0x500|8e 37 |.7 |
0x500| e4 dd b5 ee ae ca ae 03 | ........ | timestampMicros: "2000-01-03T00:00:00.006002Z" (946857600006002) 0x502-0x509.7 (8)
| | | [3]{}: datum 0x50a-0x554.7 (75)
| | | null: null 0x50a-NA (0)
0x500| 00 | . | boolean: false 0x50a-0x50a.7 (1)
0x500| 08 | . | int: 4 0x50b-0x50b.7 (1)
0x500| 44 | D | long: 34 0x50c-0x50c.7 (1)
0x500| 00 00 80| ...| float: 4.600602988224807e-41 0x50d-0x510.7 (4)
0x510|3f |? |
0x510| 49 92 24 49 92 24 f9 3f | I.$I.$.? | double: 2.5892767407305293e+46 0x511-0x518.7 (8)
| | | bytes{}: 0x519-0x51b.7 (3)
0x510| 04 | . | length: 2 0x519-0x519.7 (1)
0x510| 31 30 | 10 | data: raw bits 0x51a-0x51b.7 (2)
| | | string{}: 0x51c-0x51d.7 (2)
0x510| 02 | . | length: 1 0x51c-0x51c.7 (1)
0x510| 39 | 9 | data: "9" 0x51d-0x51d.7 (1)
0x510| 00 | . | enum: "A" (0) 0x51e-0x51e.7 (1)
| | | array[0:1]: 0x51f-0x51f.7 (1)
| | | [0]{}: block 0x51f-0x51f.7 (1)
0x510| 00| .| count: 0 0x51f-0x51f.7 (1)
| | | data[0:0]: 0x520-NA (0)
| | | map[0:2]: 0x520-0x52d.7 (14)
| | | [0]{}: block 0x520-0x52c.7 (13)
0x520|06 |. | count: 3 0x520-0x520.7 (1)
| | | data[0:3]: 0x521-0x52c.7 (12)
| | | [0]{}: entry 0x521-0x524.7 (4)
| | | key{}: 0x521-0x522.7 (2)
0x520| 02 | . | length: 1 0x521-0x521.7 (1)
0x520| 62 | b | data: "b" 0x522-0x522.7 (1)
| | | value{}: 0x523-0x524.7 (2)
0x520| 02 | . | length: 1 0x523-0x523.7 (1)
0x520| 42 | B | data: "B" 0x524-0x524.7 (1)
| | | [1]{}: entry 0x525-0x528.7 (4)
| | | key{}: 0x525-0x526.7 (2)
0x520| 02 | . | length: 1 0x525-0x525.7 (1)
0x520| 63 | c | data: "c" 0x526-0x526.7 (1)
| | | value{}: 0x527-0x528.7 (2)
0x520| 02 | . | length: 1 0x527-0x527.7 (1)
0x520| 43 | C | data: "C" 0x528-0x528.7 (1)
| | | [2]{}: entry 0x529-0x52c.7 (4)
| | | key{}: 0x529-0x52a.7 (2)
0x520| 02 | . | length: 1 0x529-0x529.7 (1)
0x520| 61 | a | data: "a" 0x52a-0x52a.7 (1)
| | | value{}: 0x52b-0x52c.7 (2)
0x520| 02 | . | length: 1 0x52b-0x52b.7 (1)
0x520| 41 | A | data: "A" 0x52c-0x52c.7 (1)
| | | [1]{}: block 0x52d-0x52d.7 (1)
0x520| 00 | . | count: 0 0x52d-0x52d.7 (1)
| | | data[0:0]: 0x52e-NA (0)
| | | union{}: 0x52e-0x530.7 (3)
0x520| 02 | . | type: 1 0x52e-0x52e.7 (1)
| | | value{}: 0x52f-0x530.7 (2)
0x520| 02| .| length: 1 0x52f-0x52f.7 (1)
0x530|33 |3 | data: "3" 0x530-0x530.7 (1)
0x530| 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e| ...............| fixed: raw bits 0x531-0x540.7 (16)
0x540|0f |. |
0x540| 0a | . | date: "1970-01-06" (5) 0x541-0x541.7 (1)
0x540| c6 a9 07 | ... | timeMillis: "00:01:00.003" (60003) 0x542-0x544.7 (3)
0x540| d9 5d | .] | timeMicros: "23:59:59.994003" (-5997) 0x545-0x546.7 (2)
0x540| c6 a9 9d a4 8f 37 | .....7 | timestampMillis: "2000-01-04T00:01:00.003Z" (946944060003) 0x547-0x54c.7 (6)
0x540| a6 a2 ef| ...| timestampMicros: "2000-01-03T23:59:59.994003Z" (946943999994003) 0x54d-0x554.7 (8)
0x550|cb b2 cf ae 03 |..... |
| | | [4]{}: datum 0x555-0x5a3.7 (79)
| | | null: null 0x555-NA (0)
0x550| 01 | . | boolean: true 0x555-0x555.7 (1)
0x550| 06 | . | int: 3 0x556-0x556.7 (1)
0x550| 4a | J | long: 37 0x557-0x557.7 (1)
0x550| ab aa aa 3f | ...? | float: -1.2126479291205139e-12 0x558-0x55b.7 (4)
0x550| db b6 6d db| ..m.| double: -6.368110545752354e+133 0x55c-0x563.7 (8)
0x560|b6 6d fb 3f |.m.? |
| | | bytes{}: 0x564-0x566.7 (3)
0x560| 04 | . | length: 2 0x564-0x564.7 (1)
0x560| 31 33 | 13 | data: raw bits 0x565-0x566.7 (2)
| | | string{}: 0x567-0x569.7 (3)
0x560| 04 | . | length: 2 0x567-0x567.7 (1)
0x560| 31 34 | 14 | data: "14" 0x568-0x569.7 (2)
0x560| 02 | . | enum: "B" (1) 0x56a-0x56a.7 (1)
| | | array[0:2]: 0x56b-0x56e.7 (4)
| | | [0]{}: block 0x56b-0x56d.7 (3)
0x560| 02 | . | count: 1 0x56b-0x56b.7 (1)
| | | data[0:1]: 0x56c-0x56d.7 (2)
| | | [0]{}: entry 0x56c-0x56d.7 (2)
0x560| 02 | . | length: 1 0x56c-0x56c.7 (1)
0x560| 61 | a | data: "a" 0x56d-0x56d.7 (1)
| | | [1]{}: block 0x56e-0x56e.7 (1)
0x560| 00 | . | count: 0 0x56e-0x56e.7 (1)
| | | data[0:0]: 0x56f-NA (0)
| | | map[0:2]: 0x56f-0x57c.7 (14)
| | | [0]{}: block 0x56f-0x57b.7 (13)
0x560| 06| .| count: 3 0x56f-0x56f.7 (1)
| | | data[0:3]: 0x570-0x57b.7 (12)
| | | [0]{}: entry 0x570-0x573.7 (4)
| | | key{}: 0x570-0x571.7 (2)
0x570|02 |. | length: 1 0x570-0x570.7 (1)
0x570| 61 | a | data: "a" 0x571-0x571.7 (1)
| | | value{}: 0x572-0x573.7 (2)
0x570| 02 | . | length: 1 0x572-0x572.7 (1)
0x570| 41 | A | data: "A" 0x573-0x573.7 (1)
| | | [1]{}: entry 0x574-0x577.7 (4)
| | | key{}: 0x574-0x575.7 (2)
0x570| 02 | . | length: 1 0x574-0x574.7 (1)
0x570| 62 | b | data: "b" 0x575-0x575.7 (1)
| | | value{}: 0x576-0x577.7 (2)
0x570| 02 | . | length: 1 0x576-0x576.7 (1)
0x570| 42 | B | data: "B" 0x577-0x577.7 (1)
| | | [2]{}: entry 0x578-0x57b.7 (4)
| | | key{}: 0x578-0x579.7 (2)
0x570| 02 | . | length: 1 0x578-0x578.7 (1)
0x570| 63 | c | data: "c" 0x579-0x579.7 (1)
| | | value{}: 0x57a-0x57b.7 (2)
0x570| 02 | . | length: 1 0x57a-0x57a.7 (1)
0x570| 43 | C | data: "C" 0x57b-0x57b.7 (1)
| | | [1]{}: block 0x57c-0x57c.7 (1)
0x570| 00 | . | count: 0 0x57c-0x57c.7 (1)
| | | data[0:0]: 0x57d-NA (0)
| | | union{}: 0x57d-0x57f.7 (3)
0x570| 02 | . | type: 1 0x57d-0x57d.7 (1)
| | | value{}: 0x57e-0x57f.7 (2)
0x570| 02 | . | length: 1 0x57e-0x57e.7 (1)
0x570| 34| 4| data: "4" 0x57f-0x57f.7 (1)
0x580|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|................| fixed: raw bits 0x580-0x58f.7 (16)
0x590|04 |. | date: "1970-01-03" (2) 0x590-0x590.7 (1)
0x590| c8 a9 07 | ... | timeMillis: "00:01:00.004" (60004) 0x591-0x593.7 (3)
0x590| e8 5d | .] | timeMicros: "00:00:00.006004" (6004) 0x594-0x595.7 (2)
0x590| c8 99 d0 f6 8f 37 | .....7 | timestampMillis: "2000-01-05T00:01:00.004Z" (947030460004) 0x596-0x59b.7 (6)
0x590| e8 dd ab a9| ....| timestampMicros: "2000-01-05T00:00:00.006004Z" (947030400006004) 0x59c-0x5a3.7 (8)
0x5a0|b6 d4 ae 03 |.... |
| | | [5]{}: datum 0x5a4-0x5f4.7 (81)
| | | null: null 0x5a4-NA (0)
0x5a0| 00 | . | boolean: false 0x5a4-0x5a4.7 (1)
0x5a0| 04 | . | int: 2 0x5a5-0x5a5.7 (1)
0x5a0| 48 | H | long: 36 0x5a6-0x5a6.7 (1)
0x5a0| 55 55 d5 3f | UU.? | float: 1.4694491357184e+13 0x5a7-0x5aa.7 (4)
0x5a0| 6e db b6 6d db| n..m.| double: 1.0257800654339733e+226 0x5ab-0x5b2.7 (8)
0x5b0|b6 fd 3f |..? |
| | | bytes{}: 0x5b3-0x5b5.7 (3)
0x5b0| 04 | . | length: 2 0x5b3-0x5b3.7 (1)
0x5b0| 31 32 | 12 | data: raw bits 0x5b4-0x5b5.7 (2)
| | | string{}: 0x5b6-0x5b8.7 (3)
0x5b0| 04 | . | length: 2 0x5b6-0x5b6.7 (1)
0x5b0| 31 35 | 15 | data: "15" 0x5b7-0x5b8.7 (2)
0x5b0| 04 | . | enum: "C" (2) 0x5b9-0x5b9.7 (1)
| | | array[0:2]: 0x5ba-0x5bf.7 (6)
| | | [0]{}: block 0x5ba-0x5be.7 (5)
0x5b0| 04 | . | count: 2 0x5ba-0x5ba.7 (1)
| | | data[0:2]: 0x5bb-0x5be.7 (4)
| | | [0]{}: entry 0x5bb-0x5bc.7 (2)
0x5b0| 02 | . | length: 1 0x5bb-0x5bb.7 (1)
0x5b0| 61 | a | data: "a" 0x5bc-0x5bc.7 (1)
| | | [1]{}: entry 0x5bd-0x5be.7 (2)
0x5b0| 02 | . | length: 1 0x5bd-0x5bd.7 (1)
0x5b0| 62 | b | data: "b" 0x5be-0x5be.7 (1)
| | | [1]{}: block 0x5bf-0x5bf.7 (1)
0x5b0| 00| .| count: 0 0x5bf-0x5bf.7 (1)
| | | data[0:0]: 0x5c0-NA (0)
| | | map[0:2]: 0x5c0-0x5cd.7 (14)
| | | [0]{}: block 0x5c0-0x5cc.7 (13)
0x5c0|06 |. | count: 3 0x5c0-0x5c0.7 (1)
| | | data[0:3]: 0x5c1-0x5cc.7 (12)
| | | [0]{}: entry 0x5c1-0x5c4.7 (4)
| | | key{}: 0x5c1-0x5c2.7 (2)
0x5c0| 02 | . | length: 1 0x5c1-0x5c1.7 (1)
0x5c0| 61 | a | data: "a" 0x5c2-0x5c2.7 (1)
| | | value{}: 0x5c3-0x5c4.7 (2)
0x5c0| 02 | . | length: 1 0x5c3-0x5c3.7 (1)
0x5c0| 41 | A | data: "A" 0x5c4-0x5c4.7 (1)
| | | [1]{}: entry 0x5c5-0x5c8.7 (4)
| | | key{}: 0x5c5-0x5c6.7 (2)
0x5c0| 02 | . | length: 1 0x5c5-0x5c5.7 (1)
0x5c0| 62 | b | data: "b" 0x5c6-0x5c6.7 (1)
| | | value{}: 0x5c7-0x5c8.7 (2)
0x5c0| 02 | . | length: 1 0x5c7-0x5c7.7 (1)
0x5c0| 42 | B | data: "B" 0x5c8-0x5c8.7 (1)
| | | [2]{}: entry 0x5c9-0x5cc.7 (4)
| | | key{}: 0x5c9-0x5ca.7 (2)
0x5c0| 02 | . | length: 1 0x5c9-0x5c9.7 (1)
0x5c0| 63 | c | data: "c" 0x5ca-0x5ca.7 (1)
| | | value{}: 0x5cb-0x5cc.7 (2)
0x5c0| 02 | . | length: 1 0x5cb-0x5cb.7 (1)
0x5c0| 43 | C | data: "C" 0x5cc-0x5cc.7 (1)
| | | [1]{}: block 0x5cd-0x5cd.7 (1)
0x5c0| 00 | . | count: 0 0x5cd-0x5cd.7 (1)
| | | data[0:0]: 0x5ce-NA (0)
| | | union{}: 0x5ce-0x5d0.7 (3)
0x5c0| 02 | . | type: 1 0x5ce-0x5ce.7 (1)
| | | value{}: 0x5cf-0x5d0.7 (2)
0x5c0| 02| .| length: 1 0x5cf-0x5cf.7 (1)
0x5d0|35 |5 | data: "5" 0x5d0-0x5d0.7 (1)
0x5d0| 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e| ...............| fixed: raw bits 0x5d1-0x5e0.7 (16)
0x5e0|0f |. |
0x5e0| 06 | . | date: "1970-01-04" (3) 0x5e1-0x5e1.7 (1)
0x5e0| ca a9 07 | ... | timeMillis: "00:01:00.005" (60005) 0x5e2-0x5e4.7 (3)
0x5e0| d5 5d | .] | timeMicros: "23:59:59.994005" (-5995) 0x5e5-0x5e6.7 (2)
0x5e0| ca 89 83 c9 90 37 | .....7 | timestampMillis: "2000-01-06T00:01:00.005Z" (947116860005) 0x5e7-0x5ec.7 (6)
0x5e0| aa a2 e5| ...| timestampMicros: "2000-01-05T23:59:59.994005Z" (947116799994005) 0x5ed-0x5f4.7 (8)
0x5f0|86 ba d9 ae 03 |..... |
| | | [6]{}: datum 0x5f5-0x640.7 (76)
| | | null: null 0x5f5-NA (0)
0x5f0| 01 | . | boolean: true 0x5f5-0x5f5.7 (1)
0x5f0| 02 | . | int: 1 0x5f6-0x5f6.7 (1)
0x5f0| 4e | N | long: 39 0x5f7-0x5f7.7 (1)
0x5f0| 00 00 00 40 | ...@ | float: 8.96831017167883e-44 0x5f8-0x5fb.7 (4)
0x5f0| 00 00 00 00| ....| double: 3.16e-322 0x5fc-0x603.7 (8)
0x600|00 00 00 40 |...@ |
| | | bytes{}: 0x604-0x606.7 (3)
0x600| 04 | . | length: 2 0x604-0x604.7 (1)
0x600| 31 35 | 15 | data: raw bits 0x605-0x606.7 (2)
| | | string{}: 0x607-0x609.7 (3)
0x600| 04 | . | length: 2 0x607-0x607.7 (1)
0x600| 31 32 | 12 | data: "12" 0x608-0x609.7 (2)
0x600| 00 | . | enum: "A" (0) 0x60a-0x60a.7 (1)
| | | array[0:1]: 0x60b-0x60b.7 (1)
| | | [0]{}: block 0x60b-0x60b.7 (1)
0x600| 00 | . | count: 0 0x60b-0x60b.7 (1)
| | | data[0:0]: 0x60c-NA (0)
| | | map[0:2]: 0x60c-0x619.7 (14)
| | | [0]{}: block 0x60c-0x618.7 (13)
0x600| 06 | . | count: 3 0x60c-0x60c.7 (1)
| | | data[0:3]: 0x60d-0x618.7 (12)
| | | [0]{}: entry 0x60d-0x610.7 (4)
| | | key{}: 0x60d-0x60e.7 (2)
0x600| 02 | . | length: 1 0x60d-0x60d.7 (1)
0x600| 61 | a | data: "a" 0x60e-0x60e.7 (1)
| | | value{}: 0x60f-0x610.7 (2)
0x600| 02| .| length: 1 0x60f-0x60f.7 (1)
0x610|41 |A | data: "A" 0x610-0x610.7 (1)
| | | [1]{}: entry 0x611-0x614.7 (4)
| | | key{}: 0x611-0x612.7 (2)
0x610| 02 | . | length: 1 0x611-0x611.7 (1)
0x610| 62 | b | data: "b" 0x612-0x612.7 (1)
| | | value{}: 0x613-0x614.7 (2)
0x610| 02 | . | length: 1 0x613-0x613.7 (1)
0x610| 42 | B | data: "B" 0x614-0x614.7 (1)
| | | [2]{}: entry 0x615-0x618.7 (4)
| | | key{}: 0x615-0x616.7 (2)
0x610| 02 | . | length: 1 0x615-0x615.7 (1)
0x610| 63 | c | data: "c" 0x616-0x616.7 (1)
| | | value{}: 0x617-0x618.7 (2)
0x610| 02 | . | length: 1 0x617-0x617.7 (1)
0x610| 43 | C | data: "C" 0x618-0x618.7 (1)
| | | [1]{}: block 0x619-0x619.7 (1)
0x610| 00 | . | count: 0 0x619-0x619.7 (1)
| | | data[0:0]: 0x61a-NA (0)
| | | union{}: 0x61a-0x61c.7 (3)
0x610| 02 | . | type: 1 0x61a-0x61a.7 (1)
| | | value{}: 0x61b-0x61c.7 (2)
0x610| 02 | . | length: 1 0x61b-0x61b.7 (1)
0x610| 36 | 6 | data: "6" 0x61c-0x61c.7 (1)
0x610| 00 01 02| ...| fixed: raw bits 0x61d-0x62c.7 (16)
0x620|03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |............. |
0x620| 00 | . | date: "1970-01-01" (0) 0x62d-0x62d.7 (1)
0x620| cc a9| ..| timeMillis: "00:01:00.006" (60006) 0x62e-0x630.7 (3)
0x630|07 |. |
0x630| ec 5d | .] | timeMicros: "00:00:00.006006" (6006) 0x631-0x632.7 (2)
0x630| cc f9 b5 9b 91 37 | .....7 | timestampMillis: "2000-01-07T00:01:00.006Z" (947203260006) 0x633-0x638.7 (6)
0x630| ec dd a1 e4 bd de ae| .......| timestampMicros: "2000-01-07T00:00:00.006006Z" (947203200006006) 0x639-0x640.7 (8)
0x640|03 |. |
| | | [7]{}: datum 0x641-0x68f.7 (79)
| | | null: null 0x641-NA (0)
0x640| 00 | . | boolean: false 0x641-0x641.7 (1)
0x640| 00 | . | int: 0 0x642-0x642.7 (1)
0x640| 4c | L | long: 38 0x643-0x643.7 (1)
0x640| 55 55 15 40 | UU.@ | float: 1.4642952798208e+13 0x644-0x647.7 (4)
0x640| 49 92 24 49 92 24 01 40| I.$I.$.@| double: 2.5892767406983375e+46 0x648-0x64f.7 (8)
| | | bytes{}: 0x650-0x652.7 (3)
0x650|04 |. | length: 2 0x650-0x650.7 (1)
0x650| 31 34 | 14 | data: raw bits 0x651-0x652.7 (2)
| | | string{}: 0x653-0x655.7 (3)
0x650| 04 | . | length: 2 0x653-0x653.7 (1)
0x650| 31 33 | 13 | data: "13" 0x654-0x655.7 (2)
0x650| 02 | . | enum: "B" (1) 0x656-0x656.7 (1)
| | | array[0:2]: 0x657-0x65a.7 (4)
| | | [0]{}: block 0x657-0x659.7 (3)
0x650| 02 | . | count: 1 0x657-0x657.7 (1)
| | | data[0:1]: 0x658-0x659.7 (2)
| | | [0]{}: entry 0x658-0x659.7 (2)
0x650| 02 | . | length: 1 0x658-0x658.7 (1)
0x650| 61 | a | data: "a" 0x659-0x659.7 (1)
| | | [1]{}: block 0x65a-0x65a.7 (1)
0x650| 00 | . | count: 0 0x65a-0x65a.7 (1)
| | | data[0:0]: 0x65b-NA (0)
| | | map[0:2]: 0x65b-0x668.7 (14)
| | | [0]{}: block 0x65b-0x667.7 (13)
0x650| 06 | . | count: 3 0x65b-0x65b.7 (1)
| | | data[0:3]: 0x65c-0x667.7 (12)
| | | [0]{}: entry 0x65c-0x65f.7 (4)
| | | key{}: 0x65c-0x65d.7 (2)
0x650| 02 | . | length: 1 0x65c-0x65c.7 (1)
0x650| 61 | a | data: "a" 0x65d-0x65d.7 (1)
| | | value{}: 0x65e-0x65f.7 (2)
0x650| 02 | . | length: 1 0x65e-0x65e.7 (1)
0x650| 41| A| data: "A" 0x65f-0x65f.7 (1)
| | | [1]{}: entry 0x660-0x663.7 (4)
| | | key{}: 0x660-0x661.7 (2)
0x660|02 |. | length: 1 0x660-0x660.7 (1)
0x660| 62 | b | data: "b" 0x661-0x661.7 (1)
| | | value{}: 0x662-0x663.7 (2)
0x660| 02 | . | length: 1 0x662-0x662.7 (1)
0x660| 42 | B | data: "B" 0x663-0x663.7 (1)
| | | [2]{}: entry 0x664-0x667.7 (4)
| | | key{}: 0x664-0x665.7 (2)
0x660| 02 | . | length: 1 0x664-0x664.7 (1)
0x660| 63 | c | data: "c" 0x665-0x665.7 (1)
| | | value{}: 0x666-0x667.7 (2)
0x660| 02 | . | length: 1 0x666-0x666.7 (1)
0x660| 43 | C | data: "C" 0x667-0x667.7 (1)
| | | [1]{}: block 0x668-0x668.7 (1)
0x660| 00 | . | count: 0 0x668-0x668.7 (1)
| | | data[0:0]: 0x669-NA (0)
| | | union{}: 0x669-0x66b.7 (3)
0x660| 02 | . | type: 1 0x669-0x669.7 (1)
| | | value{}: 0x66a-0x66b.7 (2)
0x660| 02 | . | length: 1 0x66a-0x66a.7 (1)
0x660| 37 | 7 | data: "7" 0x66b-0x66b.7 (1)
0x660| 00 01 02 03| ....| fixed: raw bits 0x66c-0x67b.7 (16)
0x670|04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |............ |
0x670| 02 | . | date: "1970-01-02" (1) 0x67c-0x67c.7 (1)
0x670| ce a9 07| ...| timeMillis: "00:01:00.007" (60007) 0x67d-0x67f.7 (3)
0x680|d1 5d |.] | timeMicros: "23:59:59.994007" (-5993) 0x680-0x681.7 (2)
0x680| ce e9 e8 ed 91 37 | .....7 | timestampMillis: "2000-01-08T00:01:00.007Z" (947289660007) 0x682-0x687.7 (6)
0x680| ae a2 db c1 c1 e3 ae 03| ........| timestampMicros: "2000-01-07T23:59:59.994007Z" (947289599994007) 0x688-0x68f.7 (8)
| | | [8]{}: datum 0x690-0x6de.7 (79)
| | | null: null 0x690-NA (0)
0x690|01 |. | boolean: true 0x690-0x690.7 (1)
0x690| 1e | . | int: 15 0x691-0x691.7 (1)
0x690| 52 | R | long: 41 0x692-0x692.7 (1)
0x690| ab aa 2a 40 | ..*@ | float: -1.2090953238619306e-12 0x693-0x696.7 (4)
0x690| 00 00 00 00 00 00 00 00 | ........ | double: 0 0x697-0x69e.7 (8)
| | | bytes{}: 0x69f-0x6a0.7 (2)
0x690| 02| .| length: 1 0x69f-0x69f.7 (1)
0x6a0|31 |1 | data: raw bits 0x6a0-0x6a0.7 (1)
| | | string{}: 0x6a1-0x6a2.7 (2)
0x6a0| 02 | . | length: 1 0x6a1-0x6a1.7 (1)
0x6a0| 32 | 2 | data: "2" 0x6a2-0x6a2.7 (1)
0x6a0| 04 | . | enum: "C" (2) 0x6a3-0x6a3.7 (1)
| | | array[0:2]: 0x6a4-0x6a9.7 (6)
| | | [0]{}: block 0x6a4-0x6a8.7 (5)
0x6a0| 04 | . | count: 2 0x6a4-0x6a4.7 (1)
| | | data[0:2]: 0x6a5-0x6a8.7 (4)
| | | [0]{}: entry 0x6a5-0x6a6.7 (2)
0x6a0| 02 | . | length: 1 0x6a5-0x6a5.7 (1)
0x6a0| 61 | a | data: "a" 0x6a6-0x6a6.7 (1)
| | | [1]{}: entry 0x6a7-0x6a8.7 (2)
0x6a0| 02 | . | length: 1 0x6a7-0x6a7.7 (1)
0x6a0| 62 | b | data: "b" 0x6a8-0x6a8.7 (1)
| | | [1]{}: block 0x6a9-0x6a9.7 (1)
0x6a0| 00 | . | count: 0 0x6a9-0x6a9.7 (1)
| | | data[0:0]: 0x6aa-NA (0)
| | | map[0:2]: 0x6aa-0x6b7.7 (14)
| | | [0]{}: block 0x6aa-0x6b6.7 (13)
0x6a0| 06 | . | count: 3 0x6aa-0x6aa.7 (1)
| | | data[0:3]: 0x6ab-0x6b6.7 (12)
| | | [0]{}: entry 0x6ab-0x6ae.7 (4)
| | | key{}: 0x6ab-0x6ac.7 (2)
0x6a0| 02 | . | length: 1 0x6ab-0x6ab.7 (1)
0x6a0| 63 | c | data: "c" 0x6ac-0x6ac.7 (1)
| | | value{}: 0x6ad-0x6ae.7 (2)
0x6a0| 02 | . | length: 1 0x6ad-0x6ad.7 (1)
0x6a0| 43 | C | data: "C" 0x6ae-0x6ae.7 (1)
| | | [1]{}: entry 0x6af-0x6b2.7 (4)
| | | key{}: 0x6af-0x6b0.7 (2)
0x6a0| 02| .| length: 1 0x6af-0x6af.7 (1)
0x6b0|61 |a | data: "a" 0x6b0-0x6b0.7 (1)
| | | value{}: 0x6b1-0x6b2.7 (2)
0x6b0| 02 | . | length: 1 0x6b1-0x6b1.7 (1)
0x6b0| 41 | A | data: "A" 0x6b2-0x6b2.7 (1)
| | | [2]{}: entry 0x6b3-0x6b6.7 (4)
| | | key{}: 0x6b3-0x6b4.7 (2)
0x6b0| 02 | . | length: 1 0x6b3-0x6b3.7 (1)
0x6b0| 62 | b | data: "b" 0x6b4-0x6b4.7 (1)
| | | value{}: 0x6b5-0x6b6.7 (2)
0x6b0| 02 | . | length: 1 0x6b5-0x6b5.7 (1)
0x6b0| 42 | B | data: "B" 0x6b6-0x6b6.7 (1)
| | | [1]{}: block 0x6b7-0x6b7.7 (1)
0x6b0| 00 | . | count: 0 0x6b7-0x6b7.7 (1)
| | | data[0:0]: 0x6b8-NA (0)
| | | union{}: 0x6b8-0x6ba.7 (3)
0x6b0| 02 | . | type: 1 0x6b8-0x6b8.7 (1)
| | | value{}: 0x6b9-0x6ba.7 (2)
0x6b0| 02 | . | length: 1 0x6b9-0x6b9.7 (1)
0x6b0| 38 | 8 | data: "8" 0x6ba-0x6ba.7 (1)
0x6b0| 00 01 02 03 04| .....| fixed: raw bits 0x6bb-0x6ca.7 (16)
0x6c0|05 06 07 08 09 0a 0b 0c 0d 0e 0f |........... |
0x6c0| 1c | . | date: "1970-01-15" (14) 0x6cb-0x6cb.7 (1)
0x6c0| d0 a9 07 | ... | timeMillis: "00:01:00.008" (60008) 0x6cc-0x6ce.7 (3)
0x6c0| f0| .| timeMicros: "00:00:00.006008" (6008) 0x6cf-0x6d0.7 (2)
0x6d0|5d |] |
0x6d0| d0 d9 9b c0 92 37 | .....7 | timestampMillis: "2000-01-09T00:01:00.008Z" (947376060008) 0x6d1-0x6d6.7 (6)
0x6d0| f0 dd 97 9f c5 e8 ae 03 | ........ | timestampMicros: "2000-01-09T00:00:00.006008Z" (947376000006008) 0x6d7-0x6de.7 (8)
| | | [9]{}: datum 0x6df-0x728.7 (74)
| | | null: null 0x6df-NA (0)
0x6d0| 00| .| boolean: false 0x6df-0x6df.7 (1)
0x6e0|1c |. | int: 14 0x6e0-0x6e0.7 (1)
0x6e0| 50 | P | long: 40 0x6e1-0x6e1.7 (1)
0x6e0| 00 00 40 40 | ..@@ | float: 2.304855714121459e-41 0x6e2-0x6e5.7 (4)
0x6e0| 92 24 49 92 24 49 c2 3f | .$I.$I.? | double: -2.80620434202585e-221 0x6e6-0x6ed.7 (8)
| | | bytes{}: 0x6ee-0x6ef.7 (2)
0x6e0| 02 | . | length: 1 0x6ee-0x6ee.7 (1)
0x6e0| 30| 0| data: raw bits 0x6ef-0x6ef.7 (1)
| | | string{}: 0x6f0-0x6f1.7 (2)
0x6f0|02 |. | length: 1 0x6f0-0x6f0.7 (1)
0x6f0| 33 | 3 | data: "3" 0x6f1-0x6f1.7 (1)
0x6f0| 00 | . | enum: "A" (0) 0x6f2-0x6f2.7 (1)
| | | array[0:1]: 0x6f3-0x6f3.7 (1)
| | | [0]{}: block 0x6f3-0x6f3.7 (1)
0x6f0| 00 | . | count: 0 0x6f3-0x6f3.7 (1)
| | | data[0:0]: 0x6f4-NA (0)
| | | map[0:2]: 0x6f4-0x701.7 (14)
| | | [0]{}: block 0x6f4-0x700.7 (13)
0x6f0| 06 | . | count: 3 0x6f4-0x6f4.7 (1)
| | | data[0:3]: 0x6f5-0x700.7 (12)
| | | [0]{}: entry 0x6f5-0x6f8.7 (4)
| | | key{}: 0x6f5-0x6f6.7 (2)
0x6f0| 02 | . | length: 1 0x6f5-0x6f5.7 (1)
0x6f0| 61 | a | data: "a" 0x6f6-0x6f6.7 (1)
| | | value{}: 0x6f7-0x6f8.7 (2)
0x6f0| 02 | . | length: 1 0x6f7-0x6f7.7 (1)
0x6f0| 41 | A | data: "A" 0x6f8-0x6f8.7 (1)
| | | [1]{}: entry 0x6f9-0x6fc.7 (4)
| | | key{}: 0x6f9-0x6fa.7 (2)
0x6f0| 02 | . | length: 1 0x6f9-0x6f9.7 (1)
0x6f0| 62 | b | data: "b" 0x6fa-0x6fa.7 (1)
| | | value{}: 0x6fb-0x6fc.7 (2)
0x6f0| 02 | . | length: 1 0x6fb-0x6fb.7 (1)
0x6f0| 42 | B | data: "B" 0x6fc-0x6fc.7 (1)
| | | [2]{}: entry 0x6fd-0x700.7 (4)
| | | key{}: 0x6fd-0x6fe.7 (2)
0x6f0| 02 | . | length: 1 0x6fd-0x6fd.7 (1)
0x6f0| 63 | c | data: "c" 0x6fe-0x6fe.7 (1)
| | | value{}: 0x6ff-0x700.7 (2)
0x6f0| 02| .| length: 1 0x6ff-0x6ff.7 (1)
0x700|43 |C | data: "C" 0x700-0x700.7 (1)
| | | [1]{}: block 0x701-0x701.7 (1)
0x700| 00 | . | count: 0 0x701-0x701.7 (1)
| | | data[0:0]: 0x702-NA (0)
| | | union{}: 0x702-0x704.7 (3)
0x700| 02 | . | type: 1 0x702-0x702.7 (1)
| | | value{}: 0x703-0x704.7 (2)
0x700| 02 | . | length: 1 0x703-0x703.7 (1)
0x700| 39 | 9 | data: "9" 0x704-0x704.7 (1)
0x700| 00 01 02 03 04 05 06 07 08 09 0a| ...........| fixed: raw bits 0x705-0x714.7 (16)
0x710|0b 0c 0d 0e 0f |..... |
0x710| 1e | . | date: "1970-01-16" (15) 0x715-0x715.7 (1)
0x710| d2 a9 07 | ... | timeMillis: "00:01:00.009" (60009) 0x716-0x718.7 (3)
0x710| cd 5d | .] | timeMicros: "23:59:59.994009" (-5991) 0x719-0x71a.7 (2)
0x710| d2 c9 ce 92 93| .....| timestampMillis: "2000-01-10T00:01:00.009Z" (947462460009) 0x71b-0x720.7 (6)
0x720|37 |7 |
0x720| b2 a2 d1 fc c8 ed ae 03 | ........ | timestampMicros: "2000-01-09T23:59:59.994009Z" (947462399994009) 0x721-0x728.7 (8)
0x720| d3 c3 7b dd 09 d4 11| ..{....| sync: raw bits (valid) 0x729-0x738.7 (16)
0x730|0f ab 81 70 3e 70 78 9e a0| |...p>px..| |

Binary file not shown.

View File

@ -0,0 +1,26 @@
# Testcase taken from linkedin/goavro https://github.com/linkedin/goavro
$ fq dv firstBlockCountNotGreaterThanZero.avro
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: firstBlockCountNotGreaterThanZero.avro (avro_ocf) 0x0-0x32.7 (51)
0x00|4f 62 6a 01 |Obj. | magic: raw bits (valid) 0x0-0x3.7 (4)
| | | header{}: 0x4-0x31.7 (46)
| | | meta[0:2]: 0x4-0x21.7 (30)
| | | [0]{}: block 0x4-0x20.7 (29)
0x00| 02 | . | count: 1 0x4-0x4.7 (1)
| | | data[0:1]: 0x5-0x20.7 (28)
| | | [0]{}: entry 0x5-0x20.7 (28)
| | | key{}: 0x5-0x10.7 (12)
0x00| 16 | . | length: 11 0x5-0x5.7 (1)
0x00| 61 76 72 6f 2e 73 63 68 65 6d| avro.schem| data: "avro.schema" 0x6-0x10.7 (11)
0x10|61 |a |
| | | value{}: 0x11-0x20.7 (16)
0x10| 1e | . | length: 15 0x11-0x11.7 (1)
0x10| 7b 22 74 79 70 65 22 3a 22 6c 6f 6e 67 22| {"type":"long"| data: "{\"type\":\"long\"}" 0x12-0x20.7 (15)
0x20|7d |} |
| | | [1]{}: block 0x21-0x21.7 (1)
0x20| 00 | . | count: 0 0x21-0x21.7 (1)
| | | data[0:0]: 0x22-NA (0)
0x20| 30 31 32 33 34 35 36 37 38 39 61 62 63 64| 0123456789abcd| sync: raw bits 0x22-0x31.7 (16)
0x30|65 66 |ef |
| | | blocks[0:1]: 0x32-0x32.7 (1)
| | | [0]{}: block 0x32-0x32.7 (1)
0x30| 00| | .| | count: 0 0x32-0x32.7 (1)

Binary file not shown.

View File

@ -0,0 +1,412 @@
# Testcase taken from linkedin/goavro https://github.com/linkedin/goavro
$ fq 'dv({array_truncate: 5})' quickstop-deflate.avro
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: quickstop-deflate.avro (avro_ocf) 0x0-0x5835.7 (22582)
0x00000|4f 62 6a 01 |Obj. | magic: raw bits (valid) 0x0-0x3.7 (4)
| | | header{}: 0x4-0x129.7 (294)
| | | meta[0:2]: 0x4-0x119.7 (278)
| | | [0]{}: block 0x4-0x118.7 (277)
0x00000| 04 | . | count: 2 0x4-0x4.7 (1)
| | | data[0:2]: 0x5-0x118.7 (276)
| | | [0]{}: entry 0x5-0x17.7 (19)
| | | key{}: 0x5-0xf.7 (11)
0x00000| 14 | . | length: 10 0x5-0x5.7 (1)
0x00000| 61 76 72 6f 2e 63 6f 64 65 63| avro.codec| data: "avro.codec" 0x6-0xf.7 (10)
| | | value{}: 0x10-0x17.7 (8)
0x00010|0e |. | length: 7 0x10-0x10.7 (1)
0x00010| 64 65 66 6c 61 74 65 | deflate | data: "deflate" 0x11-0x17.7 (7)
| | | [1]{}: entry 0x18-0x118.7 (257)
| | | key{}: 0x18-0x23.7 (12)
0x00010| 16 | . | length: 11 0x18-0x18.7 (1)
0x00010| 61 76 72 6f 2e 73 63| avro.sc| data: "avro.schema" 0x19-0x23.7 (11)
0x00020|68 65 6d 61 |hema |
| | | value{}: 0x24-0x118.7 (245)
0x00020| e6 03 | .. | length: 243 0x24-0x25.7 (2)
0x00020| 7b 22 74 79 70 65 22 3a 22 72| {"type":"r| data: "{\"type\":\"record\",\"name\":\"Person\",\"fields\":[{\"name\""... 0x26-0x118.7 (243)
0x00030|65 63 6f 72 64 22 2c 22 6e 61 6d 65 22 3a 22 50|ecord","name":"P|
* |until 0x118.7 (243) | |
| | | [1]{}: block 0x119-0x119.7 (1)
0x00110| 00 | . | count: 0 0x119-0x119.7 (1)
| | | data[0:0]: 0x11a-NA (0)
0x00110| 93 e7 87 9e 02 95| ......| sync: raw bits 0x11a-0x129.7 (16)
0x00120|d5 9e 4f 58 37 ad b2 a2 ce cd |..OX7..... |
| | | blocks[0:12]: 0x12a-0x5835.7 (22284)
| | | [0]{}: block 0x12a-0x9dc.7 (2227)
| | | data[0:602]: 0x0-0x3ff1.7 (16370)
| | | [0]{}: data 0x0-0x11.7 (18)
0x0000|02 |. | ID: 1 0x0-0x0.7 (1)
| | | First{}: 0x1-0x6.7 (6)
0x0000| 0a | . | length: 5 0x1-0x1.7 (1)
0x0000| 44 61 6e 74 65 | Dante | data: "Dante" 0x2-0x6.7 (5)
| | | Last{}: 0x7-0xc.7 (6)
0x0000| 0a | . | length: 5 0x7-0x7.7 (1)
0x0000| 48 69 63 6b 73 | Hicks | data: "Hicks" 0x8-0xc.7 (5)
| | | Phone{}: 0xd-0x10.7 (4)
0x0000| 06 | . | length: 3 0xd-0xd.7 (1)
0x0000| 28 30| (0| data: "(0)" 0xe-0x10.7 (3)
0x0010|29 |) |
0x0010| 40 | @ | Age: 32 0x11-0x11.7 (1)
| | | [1]{}: data 0x12-0x30.7 (31)
0x0010| 04 | . | ID: 2 0x12-0x12.7 (1)
| | | First{}: 0x13-0x19.7 (7)
0x0010| 0c | . | length: 6 0x13-0x13.7 (1)
0x0010| 52 61 6e 64 61 6c | Randal | data: "Randal" 0x14-0x19.7 (6)
| | | Last{}: 0x1a-0x20.7 (7)
0x0010| 0c | . | length: 6 0x1a-0x1a.7 (1)
0x0010| 47 72 61 76 65| Grave| data: "Graves" 0x1b-0x20.7 (6)
0x0020|73 |s |
| | | Phone{}: 0x21-0x2f.7 (15)
0x0020| 1c | . | length: 14 0x21-0x21.7 (1)
0x0020| 28 35 35 35 29 20 31 32 33 2d 35 36 37 38| (555) 123-5678| data: "(555) 123-5678" 0x22-0x2f.7 (14)
0x0030|3c |< | Age: 30 0x30-0x30.7 (1)
| | | [2]{}: data 0x31-0x53.7 (35)
0x0030| 06 | . | ID: 3 0x31-0x31.7 (1)
| | | First{}: 0x32-0x3a.7 (9)
0x0030| 10 | . | length: 8 0x32-0x32.7 (1)
0x0030| 56 65 72 6f 6e 69 63 61 | Veronica | data: "Veronica" 0x33-0x3a.7 (8)
| | | Last{}: 0x3b-0x43.7 (9)
0x0030| 10 | . | length: 8 0x3b-0x3b.7 (1)
0x0030| 4c 6f 75 67| Loug| data: "Loughran" 0x3c-0x43.7 (8)
0x0040|68 72 61 6e |hran |
| | | Phone{}: 0x44-0x52.7 (15)
0x0040| 1c | . | length: 14 0x44-0x44.7 (1)
0x0040| 28 35 35 35 29 20 31 32 33 2d 30| (555) 123-0| data: "(555) 123-0987" 0x45-0x52.7 (14)
0x0050|39 38 37 |987 |
0x0050| 38 | 8 | Age: 28 0x53-0x53.7 (1)
| | | [3]{}: data 0x54-0x71.7 (30)
0x0050| 08 | . | ID: 4 0x54-0x54.7 (1)
| | | First{}: 0x55-0x5c.7 (8)
0x0050| 0e | . | length: 7 0x55-0x55.7 (1)
0x0050| 43 61 69 74 6c 69 6e | Caitlin | data: "Caitlin" 0x56-0x5c.7 (7)
| | | Last{}: 0x5d-0x61.7 (5)
0x0050| 08 | . | length: 4 0x5d-0x5d.7 (1)
0x0050| 42 72| Br| data: "Bree" 0x5e-0x61.7 (4)
0x0060|65 65 |ee |
| | | Phone{}: 0x62-0x70.7 (15)
0x0060| 1c | . | length: 14 0x62-0x62.7 (1)
0x0060| 28 35 35 35 29 20 31 32 33 2d 32 33 32| (555) 123-232| data: "(555) 123-2323" 0x63-0x70.7 (14)
0x0070|33 |3 |
0x0070| 36 | 6 | Age: 27 0x71-0x71.7 (1)
| | | [4]{}: data 0x72-0x8d.7 (28)
0x0070| 0a | . | ID: 5 0x72-0x72.7 (1)
| | | First{}: 0x73-0x76.7 (4)
0x0070| 06 | . | length: 3 0x73-0x73.7 (1)
0x0070| 42 6f 62 | Bob | data: "Bob" 0x74-0x76.7 (3)
| | | Last{}: 0x77-0x7d.7 (7)
0x0070| 0c | . | length: 6 0x77-0x77.7 (1)
0x0070| 53 69 6c 65 6e 74 | Silent | data: "Silent" 0x78-0x7d.7 (6)
| | | Phone{}: 0x7e-0x8c.7 (15)
0x0070| 1c | . | length: 14 0x7e-0x7e.7 (1)
0x0070| 28| (| data: "(555) 123-6422" 0x7f-0x8c.7 (14)
0x0080|35 35 35 29 20 31 32 33 2d 36 34 32 32 |555) 123-6422 |
0x0080| 3a | : | Age: 29 0x8d-0x8d.7 (1)
| | | [5:602]: ...
0x00120| b4 09 | .. | count: 602 0x12a-0x12b.7 (2)
0x00120| be 22 | ." | size: 2207 0x12c-0x12d.7 (2)
0x00120| 8d db| ..| compressed: raw bits 0x12e-0x9cc.7 (2207)
0x00130|6f 64 ac f9 19 c6 71 f9 37 49 8e 63 1d 55 55 b5|od....q.7I.c.UU.|
* |until 0x9cc.7 (2207) | |
0x009c0| 93 e7 87| ...| sync: raw bits (valid) 0x9cd-0x9dc.7 (16)
0x009d0|9e 02 95 d5 9e 4f 58 37 ad b2 a2 ce cd |.....OX7..... |
| | | [1]{}: block 0x9dd-0x1257.7 (2171)
| | | data[0:592]: 0x0-0x3ffc.7 (16381)
| | | [0]{}: data 0x0-0x23.7 (36)
0x0000|b6 09 |.. | ID: 603 0x0-0x1.7 (2)
| | | First{}: 0x2-0xa.7 (9)
0x0000| 10 | . | length: 8 0x2-0x2.7 (1)
0x0000| 56 65 72 6f 6e 69 63 61 | Veronica | data: "Veronica" 0x3-0xa.7 (8)
| | | Last{}: 0xb-0x13.7 (9)
0x0000| 10 | . | length: 8 0xb-0xb.7 (1)
0x0000| 4c 6f 75 67| Loug| data: "Loughran" 0xc-0x13.7 (8)
0x0010|68 72 61 6e |hran |
| | | Phone{}: 0x14-0x22.7 (15)
0x0010| 1c | . | length: 14 0x14-0x14.7 (1)
0x0010| 28 35 35 35 29 20 31 32 33 2d 30| (555) 123-0| data: "(555) 123-0987" 0x15-0x22.7 (14)
0x0020|39 38 37 |987 |
0x0020| 38 | 8 | Age: 28 0x23-0x23.7 (1)
| | | [1]{}: data 0x24-0x42.7 (31)
0x0020| b8 09 | .. | ID: 604 0x24-0x25.7 (2)
| | | First{}: 0x26-0x2d.7 (8)
0x0020| 0e | . | length: 7 0x26-0x26.7 (1)
0x0020| 43 61 69 74 6c 69 6e | Caitlin | data: "Caitlin" 0x27-0x2d.7 (7)
| | | Last{}: 0x2e-0x32.7 (5)
0x0020| 08 | . | length: 4 0x2e-0x2e.7 (1)
0x0020| 42| B| data: "Bree" 0x2f-0x32.7 (4)
0x0030|72 65 65 |ree |
| | | Phone{}: 0x33-0x41.7 (15)
0x0030| 1c | . | length: 14 0x33-0x33.7 (1)
0x0030| 28 35 35 35 29 20 31 32 33 2d 32 33| (555) 123-23| data: "(555) 123-2323" 0x34-0x41.7 (14)
0x0040|32 33 |23 |
0x0040| 36 | 6 | Age: 27 0x42-0x42.7 (1)
| | | [2]{}: data 0x43-0x5f.7 (29)
0x0040| ba 09 | .. | ID: 605 0x43-0x44.7 (2)
| | | First{}: 0x45-0x48.7 (4)
0x0040| 06 | . | length: 3 0x45-0x45.7 (1)
0x0040| 42 6f 62 | Bob | data: "Bob" 0x46-0x48.7 (3)
| | | Last{}: 0x49-0x4f.7 (7)
0x0040| 0c | . | length: 6 0x49-0x49.7 (1)
0x0040| 53 69 6c 65 6e 74| Silent| data: "Silent" 0x4a-0x4f.7 (6)
| | | Phone{}: 0x50-0x5e.7 (15)
0x0050|1c |. | length: 14 0x50-0x50.7 (1)
0x0050| 28 35 35 35 29 20 31 32 33 2d 36 34 32 32 | (555) 123-6422 | data: "(555) 123-6422" 0x51-0x5e.7 (14)
0x0050| 3a| :| Age: 29 0x5f-0x5f.7 (1)
| | | [3]{}: data 0x60-0x70.7 (17)
0x0060|bc 09 |.. | ID: 606 0x60-0x61.7 (2)
| | | First{}: 0x62-0x65.7 (4)
0x0060| 06 | . | length: 3 0x62-0x62.7 (1)
0x0060| 4a 61 79 | Jay | data: "Jay" 0x63-0x65.7 (3)
| | | Last{}: 0x66-0x69.7 (4)
0x0060| 06 | . | length: 3 0x66-0x66.7 (1)
0x0060| 3f 3f 3f | ??? | data: "???" 0x67-0x69.7 (3)
| | | Phone{}: 0x6a-0x6f.7 (6)
0x0060| 0a | . | length: 5 0x6a-0x6a.7 (1)
0x0060| 28 31 30 30 29| (100)| data: "(100)" 0x6b-0x6f.7 (5)
0x0070|34 |4 | Age: 26 0x70-0x70.7 (1)
| | | [4]{}: data 0x71-0x85.7 (21)
0x0070| be 09 | .. | ID: 607 0x71-0x72.7 (2)
| | | First{}: 0x73-0x78.7 (6)
0x0070| 0a | . | length: 5 0x73-0x73.7 (1)
0x0070| 44 61 6e 74 65 | Dante | data: "Dante" 0x74-0x78.7 (5)
| | | Last{}: 0x79-0x7e.7 (6)
0x0070| 0a | . | length: 5 0x79-0x79.7 (1)
0x0070| 48 69 63 6b 73 | Hicks | data: "Hicks" 0x7a-0x7e.7 (5)
| | | Phone{}: 0x7f-0x84.7 (6)
0x0070| 0a| .| length: 5 0x7f-0x7f.7 (1)
0x0080|28 31 30 31 29 |(101) | data: "(101)" 0x80-0x84.7 (5)
0x0080| 40 | @ | Age: 32 0x85-0x85.7 (1)
| | | [5:592]: ...
0x009d0| a0 09 | .. | count: 592 0x9dd-0x9de.7 (2)
0x009d0| ce| .| size: 2151 0x9df-0x9e0.7 (2)
0x009e0|21 |! |
0x009e0| 8d d8 5f 44 fc 7b 1e c7 f1 bb 9f d3 ff 3f d7| .._D.{.......?.| compressed: raw bits 0x9e1-0x1247.7 (2151)
0x009f0|7b b1 97 e7 7b 71 f8 55 df fe fc d6 f2 1b e7 2c|{...{q.U.......,|
* |until 0x1247.7 (2151) | |
0x01240| 93 e7 87 9e 02 95 d5 9e| ........| sync: raw bits (valid) 0x1248-0x1257.7 (16)
0x01250|4f 58 37 ad b2 a2 ce cd |OX7..... |
| | | [2]{}: block 0x1258-0x1ad5.7 (2174)
| | | data[0:591]: 0x0-0x3fe4.7 (16357)
| | | [0]{}: data 0x0-0x14.7 (21)
0x0000|d6 12 |.. | ID: 1195 0x0-0x1.7 (2)
| | | First{}: 0x2-0x7.7 (6)
0x0000| 0a | . | length: 5 0x2-0x2.7 (1)
0x0000| 44 61 6e 74 65 | Dante | data: "Dante" 0x3-0x7.7 (5)
| | | Last{}: 0x8-0xd.7 (6)
0x0000| 0a | . | length: 5 0x8-0x8.7 (1)
0x0000| 48 69 63 6b 73 | Hicks | data: "Hicks" 0x9-0xd.7 (5)
| | | Phone{}: 0xe-0x13.7 (6)
0x0000| 0a | . | length: 5 0xe-0xe.7 (1)
0x0000| 28| (| data: "(199)" 0xf-0x13.7 (5)
0x0010|31 39 39 29 |199) |
0x0010| 40 | @ | Age: 32 0x14-0x14.7 (1)
| | | [1]{}: data 0x15-0x34.7 (32)
0x0010| d8 12 | .. | ID: 1196 0x15-0x16.7 (2)
| | | First{}: 0x17-0x1d.7 (7)
0x0010| 0c | . | length: 6 0x17-0x17.7 (1)
0x0010| 52 61 6e 64 61 6c | Randal | data: "Randal" 0x18-0x1d.7 (6)
| | | Last{}: 0x1e-0x24.7 (7)
0x0010| 0c | . | length: 6 0x1e-0x1e.7 (1)
0x0010| 47| G| data: "Graves" 0x1f-0x24.7 (6)
0x0020|72 61 76 65 73 |raves |
| | | Phone{}: 0x25-0x33.7 (15)
0x0020| 1c | . | length: 14 0x25-0x25.7 (1)
0x0020| 28 35 35 35 29 20 31 32 33 2d| (555) 123-| data: "(555) 123-5678" 0x26-0x33.7 (14)
0x0030|35 36 37 38 |5678 |
0x0030| 3c | < | Age: 30 0x34-0x34.7 (1)
| | | [2]{}: data 0x35-0x58.7 (36)
0x0030| da 12 | .. | ID: 1197 0x35-0x36.7 (2)
| | | First{}: 0x37-0x3f.7 (9)
0x0030| 10 | . | length: 8 0x37-0x37.7 (1)
0x0030| 56 65 72 6f 6e 69 63 61| Veronica| data: "Veronica" 0x38-0x3f.7 (8)
| | | Last{}: 0x40-0x48.7 (9)
0x0040|10 |. | length: 8 0x40-0x40.7 (1)
0x0040| 4c 6f 75 67 68 72 61 6e | Loughran | data: "Loughran" 0x41-0x48.7 (8)
| | | Phone{}: 0x49-0x57.7 (15)
0x0040| 1c | . | length: 14 0x49-0x49.7 (1)
0x0040| 28 35 35 35 29 20| (555) | data: "(555) 123-0987" 0x4a-0x57.7 (14)
0x0050|31 32 33 2d 30 39 38 37 |123-0987 |
0x0050| 38 | 8 | Age: 28 0x58-0x58.7 (1)
| | | [3]{}: data 0x59-0x77.7 (31)
0x0050| dc 12 | .. | ID: 1198 0x59-0x5a.7 (2)
| | | First{}: 0x5b-0x62.7 (8)
0x0050| 0e | . | length: 7 0x5b-0x5b.7 (1)
0x0050| 43 61 69 74| Cait| data: "Caitlin" 0x5c-0x62.7 (7)
0x0060|6c 69 6e |lin |
| | | Last{}: 0x63-0x67.7 (5)
0x0060| 08 | . | length: 4 0x63-0x63.7 (1)
0x0060| 42 72 65 65 | Bree | data: "Bree" 0x64-0x67.7 (4)
| | | Phone{}: 0x68-0x76.7 (15)
0x0060| 1c | . | length: 14 0x68-0x68.7 (1)
0x0060| 28 35 35 35 29 20 31| (555) 1| data: "(555) 123-2323" 0x69-0x76.7 (14)
0x0070|32 33 2d 32 33 32 33 |23-2323 |
0x0070| 36 | 6 | Age: 27 0x77-0x77.7 (1)
| | | [4]{}: data 0x78-0x94.7 (29)
0x0070| de 12 | .. | ID: 1199 0x78-0x79.7 (2)
| | | First{}: 0x7a-0x7d.7 (4)
0x0070| 06 | . | length: 3 0x7a-0x7a.7 (1)
0x0070| 42 6f 62 | Bob | data: "Bob" 0x7b-0x7d.7 (3)
| | | Last{}: 0x7e-0x84.7 (7)
0x0070| 0c | . | length: 6 0x7e-0x7e.7 (1)
0x0070| 53| S| data: "Silent" 0x7f-0x84.7 (6)
0x0080|69 6c 65 6e 74 |ilent |
| | | Phone{}: 0x85-0x93.7 (15)
0x0080| 1c | . | length: 14 0x85-0x85.7 (1)
0x0080| 28 35 35 35 29 20 31 32 33 2d| (555) 123-| data: "(555) 123-6422" 0x86-0x93.7 (14)
0x0090|36 34 32 32 |6422 |
0x0090| 3a | : | Age: 29 0x94-0x94.7 (1)
| | | [5:591]: ...
0x01250| 9e 09 | .. | count: 591 0x1258-0x1259.7 (2)
0x01250| d4 21 | .! | size: 2154 0x125a-0x125b.7 (2)
0x01250| 8d d8 5f 44| .._D| compressed: raw bits 0x125c-0x1ac5.7 (2154)
0x01260|ec 0d 1e c7 f1 bb 63 1d c7 7a f4 ff cf 5e ec e5|......c..z...^..|
* |until 0x1ac5.7 (2154) | |
0x01ac0| 93 e7 87 9e 02 95 d5 9e 4f 58| ........OX| sync: raw bits (valid) 0x1ac6-0x1ad5.7 (16)
0x01ad0|37 ad b2 a2 ce cd |7..... |
| | | [3]{}: block 0x1ad6-0x235f.7 (2186)
| | | data[0:592]: 0x0-0x3fed.7 (16366)
| | | [0]{}: data 0x0-0x1e.7 (31)
0x0000|f4 1b |.. | ID: 1786 0x0-0x1.7 (2)
| | | First{}: 0x2-0x9.7 (8)
0x0000| 0e | . | length: 7 0x2-0x2.7 (1)
0x0000| 43 61 69 74 6c 69 6e | Caitlin | data: "Caitlin" 0x3-0x9.7 (7)
| | | Last{}: 0xa-0xe.7 (5)
0x0000| 08 | . | length: 4 0xa-0xa.7 (1)
0x0000| 42 72 65 65 | Bree | data: "Bree" 0xb-0xe.7 (4)
| | | Phone{}: 0xf-0x1d.7 (15)
0x0000| 1c| .| length: 14 0xf-0xf.7 (1)
0x0010|28 35 35 35 29 20 31 32 33 2d 32 33 32 33 |(555) 123-2323 | data: "(555) 123-2323" 0x10-0x1d.7 (14)
0x0010| 36 | 6 | Age: 27 0x1e-0x1e.7 (1)
| | | [1]{}: data 0x1f-0x3b.7 (29)
0x0010| f6| .| ID: 1787 0x1f-0x20.7 (2)
0x0020|1b |. |
| | | First{}: 0x21-0x24.7 (4)
0x0020| 06 | . | length: 3 0x21-0x21.7 (1)
0x0020| 42 6f 62 | Bob | data: "Bob" 0x22-0x24.7 (3)
| | | Last{}: 0x25-0x2b.7 (7)
0x0020| 0c | . | length: 6 0x25-0x25.7 (1)
0x0020| 53 69 6c 65 6e 74 | Silent | data: "Silent" 0x26-0x2b.7 (6)
| | | Phone{}: 0x2c-0x3a.7 (15)
0x0020| 1c | . | length: 14 0x2c-0x2c.7 (1)
0x0020| 28 35 35| (55| data: "(555) 123-6422" 0x2d-0x3a.7 (14)
0x0030|35 29 20 31 32 33 2d 36 34 32 32 |5) 123-6422 |
0x0030| 3a | : | Age: 29 0x3b-0x3b.7 (1)
| | | [2]{}: data 0x3c-0x4c.7 (17)
0x0030| f8 1b | .. | ID: 1788 0x3c-0x3d.7 (2)
| | | First{}: 0x3e-0x41.7 (4)
0x0030| 06 | . | length: 3 0x3e-0x3e.7 (1)
0x0030| 4a| J| data: "Jay" 0x3f-0x41.7 (3)
0x0040|61 79 |ay |
| | | Last{}: 0x42-0x45.7 (4)
0x0040| 06 | . | length: 3 0x42-0x42.7 (1)
0x0040| 3f 3f 3f | ??? | data: "???" 0x43-0x45.7 (3)
| | | Phone{}: 0x46-0x4b.7 (6)
0x0040| 0a | . | length: 5 0x46-0x46.7 (1)
0x0040| 28 32 39 37 29 | (297) | data: "(297)" 0x47-0x4b.7 (5)
0x0040| 34 | 4 | Age: 26 0x4c-0x4c.7 (1)
| | | [3]{}: data 0x4d-0x61.7 (21)
0x0040| fa 1b | .. | ID: 1789 0x4d-0x4e.7 (2)
| | | First{}: 0x4f-0x54.7 (6)
0x0040| 0a| .| length: 5 0x4f-0x4f.7 (1)
0x0050|44 61 6e 74 65 |Dante | data: "Dante" 0x50-0x54.7 (5)
| | | Last{}: 0x55-0x5a.7 (6)
0x0050| 0a | . | length: 5 0x55-0x55.7 (1)
0x0050| 48 69 63 6b 73 | Hicks | data: "Hicks" 0x56-0x5a.7 (5)
| | | Phone{}: 0x5b-0x60.7 (6)
0x0050| 0a | . | length: 5 0x5b-0x5b.7 (1)
0x0050| 28 32 39 38| (298| data: "(298)" 0x5c-0x60.7 (5)
0x0060|29 |) |
0x0060| 40 | @ | Age: 32 0x61-0x61.7 (1)
| | | [4]{}: data 0x62-0x81.7 (32)
0x0060| fc 1b | .. | ID: 1790 0x62-0x63.7 (2)
| | | First{}: 0x64-0x6a.7 (7)
0x0060| 0c | . | length: 6 0x64-0x64.7 (1)
0x0060| 52 61 6e 64 61 6c | Randal | data: "Randal" 0x65-0x6a.7 (6)
| | | Last{}: 0x6b-0x71.7 (7)
0x0060| 0c | . | length: 6 0x6b-0x6b.7 (1)
0x0060| 47 72 61 76| Grav| data: "Graves" 0x6c-0x71.7 (6)
0x0070|65 73 |es |
| | | Phone{}: 0x72-0x80.7 (15)
0x0070| 1c | . | length: 14 0x72-0x72.7 (1)
0x0070| 28 35 35 35 29 20 31 32 33 2d 35 36 37| (555) 123-567| data: "(555) 123-5678" 0x73-0x80.7 (14)
0x0080|38 |8 |
0x0080| 3c | < | Age: 30 0x81-0x81.7 (1)
| | | [5:592]: ...
0x01ad0| a0 09 | .. | count: 592 0x1ad6-0x1ad7.7 (2)
0x01ad0| ec 21 | .! | size: 2166 0x1ad8-0x1ad9.7 (2)
0x01ad0| 8d d8 7f 44 ec 7b| ...D.{| compressed: raw bits 0x1ada-0x234f.7 (2166)
0x01ae0|1e c7 f1 ff 8e 75 1c d7 fd bf df bf b8 df 3f 96|.....u........?.|
* |until 0x234f.7 (2166) | |
0x02350|93 e7 87 9e 02 95 d5 9e 4f 58 37 ad b2 a2 ce cd|........OX7.....| sync: raw bits (valid) 0x2350-0x235f.7 (16)
| | | [4]{}: block 0x2360-0x2bda.7 (2171)
| | | data[0:591]: 0x0-0x3fee.7 (16367)
| | | [0]{}: data 0x0-0x1f.7 (32)
0x0000|94 25 |.% | ID: 2378 0x0-0x1.7 (2)
| | | First{}: 0x2-0x8.7 (7)
0x0000| 0c | . | length: 6 0x2-0x2.7 (1)
0x0000| 52 61 6e 64 61 6c | Randal | data: "Randal" 0x3-0x8.7 (6)
| | | Last{}: 0x9-0xf.7 (7)
0x0000| 0c | . | length: 6 0x9-0x9.7 (1)
0x0000| 47 72 61 76 65 73| Graves| data: "Graves" 0xa-0xf.7 (6)
| | | Phone{}: 0x10-0x1e.7 (15)
0x0010|1c |. | length: 14 0x10-0x10.7 (1)
0x0010| 28 35 35 35 29 20 31 32 33 2d 35 36 37 38 | (555) 123-5678 | data: "(555) 123-5678" 0x11-0x1e.7 (14)
0x0010| 3c| <| Age: 30 0x1f-0x1f.7 (1)
| | | [1]{}: data 0x20-0x43.7 (36)
0x0020|96 25 |.% | ID: 2379 0x20-0x21.7 (2)
| | | First{}: 0x22-0x2a.7 (9)
0x0020| 10 | . | length: 8 0x22-0x22.7 (1)
0x0020| 56 65 72 6f 6e 69 63 61 | Veronica | data: "Veronica" 0x23-0x2a.7 (8)
| | | Last{}: 0x2b-0x33.7 (9)
0x0020| 10 | . | length: 8 0x2b-0x2b.7 (1)
0x0020| 4c 6f 75 67| Loug| data: "Loughran" 0x2c-0x33.7 (8)
0x0030|68 72 61 6e |hran |
| | | Phone{}: 0x34-0x42.7 (15)
0x0030| 1c | . | length: 14 0x34-0x34.7 (1)
0x0030| 28 35 35 35 29 20 31 32 33 2d 30| (555) 123-0| data: "(555) 123-0987" 0x35-0x42.7 (14)
0x0040|39 38 37 |987 |
0x0040| 38 | 8 | Age: 28 0x43-0x43.7 (1)
| | | [2]{}: data 0x44-0x62.7 (31)
0x0040| 98 25 | .% | ID: 2380 0x44-0x45.7 (2)
| | | First{}: 0x46-0x4d.7 (8)
0x0040| 0e | . | length: 7 0x46-0x46.7 (1)
0x0040| 43 61 69 74 6c 69 6e | Caitlin | data: "Caitlin" 0x47-0x4d.7 (7)
| | | Last{}: 0x4e-0x52.7 (5)
0x0040| 08 | . | length: 4 0x4e-0x4e.7 (1)
0x0040| 42| B| data: "Bree" 0x4f-0x52.7 (4)
0x0050|72 65 65 |ree |
| | | Phone{}: 0x53-0x61.7 (15)
0x0050| 1c | . | length: 14 0x53-0x53.7 (1)
0x0050| 28 35 35 35 29 20 31 32 33 2d 32 33| (555) 123-23| data: "(555) 123-2323" 0x54-0x61.7 (14)
0x0060|32 33 |23 |
0x0060| 36 | 6 | Age: 27 0x62-0x62.7 (1)
| | | [3]{}: data 0x63-0x7f.7 (29)
0x0060| 9a 25 | .% | ID: 2381 0x63-0x64.7 (2)
| | | First{}: 0x65-0x68.7 (4)
0x0060| 06 | . | length: 3 0x65-0x65.7 (1)
0x0060| 42 6f 62 | Bob | data: "Bob" 0x66-0x68.7 (3)
| | | Last{}: 0x69-0x6f.7 (7)
0x0060| 0c | . | length: 6 0x69-0x69.7 (1)
0x0060| 53 69 6c 65 6e 74| Silent| data: "Silent" 0x6a-0x6f.7 (6)
| | | Phone{}: 0x70-0x7e.7 (15)
0x0070|1c |. | length: 14 0x70-0x70.7 (1)
0x0070| 28 35 35 35 29 20 31 32 33 2d 36 34 32 32 | (555) 123-6422 | data: "(555) 123-6422" 0x71-0x7e.7 (14)
0x0070| 3a| :| Age: 29 0x7f-0x7f.7 (1)
| | | [4]{}: data 0x80-0x90.7 (17)
0x0080|9c 25 |.% | ID: 2382 0x80-0x81.7 (2)
| | | First{}: 0x82-0x85.7 (4)
0x0080| 06 | . | length: 3 0x82-0x82.7 (1)
0x0080| 4a 61 79 | Jay | data: "Jay" 0x83-0x85.7 (3)
| | | Last{}: 0x86-0x89.7 (4)
0x0080| 06 | . | length: 3 0x86-0x86.7 (1)
0x0080| 3f 3f 3f | ??? | data: "???" 0x87-0x89.7 (3)
| | | Phone{}: 0x8a-0x8f.7 (6)
0x0080| 0a | . | length: 5 0x8a-0x8a.7 (1)
0x0080| 28 33 39 36 29| (396)| data: "(396)" 0x8b-0x8f.7 (5)
0x0090|34 |4 | Age: 26 0x90-0x90.7 (1)
| | | [5:591]: ...
0x02360|9e 09 |.. | count: 591 0x2360-0x2361.7 (2)
0x02360| ce 21 | .! | size: 2151 0x2362-0x2363.7 (2)
0x02360| 8d d8 df 47 ec fb 1e c7 f1 bb 65 5b| ...G......e[| compressed: raw bits 0x2364-0x2bca.7 (2151)
0x02370|96 6d ff 01 e7 e2 dc f4 e3 db 2f 6b d5 b7 5f c7|.m......../k.._.|
* |until 0x2bca.7 (2151) | |
0x02bc0| 93 e7 87 9e 02| .....| sync: raw bits (valid) 0x2bcb-0x2bda.7 (16)
0x02bd0|95 d5 9e 4f 58 37 ad b2 a2 ce cd |...OX7..... |
| | | [5:12]: ...

BIN
format/avro/testdata/snappy.avro vendored Normal file

Binary file not shown.

676
format/avro/testdata/snappy.fqtest vendored Normal file
View File

@ -0,0 +1,676 @@
# Generated using https://gist.github.com/xentripetal/c0f1645ee1abd4d25f71896c8d650543
$ fq 'dv({array_truncate: 25})' snappy.avro
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: snappy.avro (avro_ocf) 0x0-0x638.7 (1593)
0x0000|4f 62 6a 01 |Obj. | magic: raw bits (valid) 0x0-0x3.7 (4)
| | | header{}: 0x4-0x41f.7 (1052)
| | | meta[0:2]: 0x4-0x40f.7 (1036)
| | | [0]{}: block 0x4-0x40e.7 (1035)
0x0000| 04 | . | count: 2 0x4-0x4.7 (1)
| | | data[0:2]: 0x5-0x40e.7 (1034)
| | | [0]{}: entry 0x5-0x3fc.7 (1016)
| | | key{}: 0x5-0x10.7 (12)
0x0000| 16 | . | length: 11 0x5-0x5.7 (1)
0x0000| 61 76 72 6f 2e 73 63 68 65 6d| avro.schem| data: "avro.schema" 0x6-0x10.7 (11)
0x0010|61 |a |
| | | value{}: 0x11-0x3fc.7 (1004)
0x0010| d4 0f | .. | length: 1002 0x11-0x12.7 (2)
0x0010| 7b 22 66 69 65 6c 64 73 22 3a 5b 7b 22| {"fields":[{"| data: "{\"fields\":[{\"name\":\"null\",\"type\":\"null\"},{\"name\":\""... 0x13-0x3fc.7 (1002)
0x0020|6e 61 6d 65 22 3a 22 6e 75 6c 6c 22 2c 22 74 79|name":"null","ty|
* |until 0x3fc.7 (1002) | |
| | | [1]{}: entry 0x3fd-0x40e.7 (18)
| | | key{}: 0x3fd-0x407.7 (11)
0x03f0| 14 | . | length: 10 0x3fd-0x3fd.7 (1)
0x03f0| 61 76| av| data: "avro.codec" 0x3fe-0x407.7 (10)
0x0400|72 6f 2e 63 6f 64 65 63 |ro.codec |
| | | value{}: 0x408-0x40e.7 (7)
0x0400| 0c | . | length: 6 0x408-0x408.7 (1)
0x0400| 73 6e 61 70 70 79 | snappy | data: "snappy" 0x409-0x40e.7 (6)
| | | [1]{}: block 0x40f-0x40f.7 (1)
0x0400| 00| .| count: 0 0x40f-0x40f.7 (1)
| | | data[0:0]: 0x410-NA (0)
0x0410|cc cc 61 31 fd 14 d0 61 16 b6 0f 9d 30 f4 1b f0|..a1...a....0...| sync: raw bits 0x410-0x41f.7 (16)
| | | blocks[0:1]: 0x420-0x638.7 (537)
| | | [0]{}: block 0x420-0x638.7 (537)
| | | data[0:10]: 0x0-0x307.7 (776)
| | | [0]{}: data 0x0-0x4a.7 (75)
| | | null: null 0x0-NA (0)
0x000|01 |. | boolean: true 0x0-0x0.7 (1)
0x000| 0e | . | int: 7 0x1-0x1.7 (1)
0x000| 42 | B | long: 33 0x2-0x2.7 (1)
0x000| 00 00 00 00 | .... | float: 0 0x3-0x6.7 (4)
0x000| 92 24 49 92 24 49 f2 3f | .$I.$I.? | double: -2.8062043420318885e-221 0x7-0xe.7 (8)
| | | bytes{}: 0xf-0x10.7 (2)
0x000| 02| .| length: 1 0xf-0xf.7 (1)
0x010|39 |9 | data: raw bits 0x10-0x10.7 (1)
| | | string{}: 0x11-0x13.7 (3)
0x010| 04 | . | length: 2 0x11-0x11.7 (1)
0x010| 31 30 | 10 | data: "10" 0x12-0x13.7 (2)
0x010| 00 | . | enum: "A" (0) 0x14-0x14.7 (1)
| | | array[0:1]: 0x15-0x15.7 (1)
| | | [0]{}: block 0x15-0x15.7 (1)
0x010| 00 | . | count: 0 0x15-0x15.7 (1)
| | | data[0:0]: 0x16-NA (0)
| | | map[0:2]: 0x16-0x23.7 (14)
| | | [0]{}: block 0x16-0x22.7 (13)
0x010| 06 | . | count: 3 0x16-0x16.7 (1)
| | | data[0:3]: 0x17-0x22.7 (12)
| | | [0]{}: entry 0x17-0x1a.7 (4)
| | | key{}: 0x17-0x18.7 (2)
0x010| 02 | . | length: 1 0x17-0x17.7 (1)
0x010| 61 | a | data: "a" 0x18-0x18.7 (1)
| | | value{}: 0x19-0x1a.7 (2)
0x010| 02 | . | length: 1 0x19-0x19.7 (1)
0x010| 41 | A | data: "A" 0x1a-0x1a.7 (1)
| | | [1]{}: entry 0x1b-0x1e.7 (4)
| | | key{}: 0x1b-0x1c.7 (2)
0x010| 02 | . | length: 1 0x1b-0x1b.7 (1)
0x010| 62 | b | data: "b" 0x1c-0x1c.7 (1)
| | | value{}: 0x1d-0x1e.7 (2)
0x010| 02 | . | length: 1 0x1d-0x1d.7 (1)
0x010| 42 | B | data: "B" 0x1e-0x1e.7 (1)
| | | [2]{}: entry 0x1f-0x22.7 (4)
| | | key{}: 0x1f-0x20.7 (2)
0x010| 02| .| length: 1 0x1f-0x1f.7 (1)
0x020|63 |c | data: "c" 0x20-0x20.7 (1)
| | | value{}: 0x21-0x22.7 (2)
0x020| 02 | . | length: 1 0x21-0x21.7 (1)
0x020| 43 | C | data: "C" 0x22-0x22.7 (1)
| | | [1]{}: block 0x23-0x23.7 (1)
0x020| 00 | . | count: 0 0x23-0x23.7 (1)
| | | data[0:0]: 0x24-NA (0)
| | | union{}: 0x24-0x26.7 (3)
0x020| 02 | . | type: 1 0x24-0x24.7 (1)
| | | value{}: 0x25-0x26.7 (2)
0x020| 02 | . | length: 1 0x25-0x25.7 (1)
0x020| 30 | 0 | data: "0" 0x26-0x26.7 (1)
0x020| 00 01 02 03 04 05 06 07 08| .........| fixed: raw bits 0x27-0x36.7 (16)
0x030|09 0a 0b 0c 0d 0e 0f |....... |
0x030| 0c | . | date: "1970-01-07" (6) 0x37-0x37.7 (1)
0x030| c0 a9 07 | ... | timeMillis: "00:01:00.000" (60000) 0x38-0x3a.7 (3)
0x030| e0 5d | .] | timeMicros: "00:00:00.006000" (6000) 0x3b-0x3c.7 (2)
0x030| c0 d9 84| ...| timestampMillis: "2000-01-01T00:01:00Z" (946684860000) 0x3d-0x42.7 (6)
0x040|ad 8d 37 |..7 |
0x040| e0 dd bf b3 a7 c0 ae 03 | ........ | timestampMicros: "2000-01-01T00:00:00.006Z" (946684800006000) 0x43-0x4a.7 (8)
| | | [1]{}: data 0x4b-0x98.7 (78)
| | | null: null 0x4b-NA (0)
0x040| 00 | . | boolean: false 0x4b-0x4b.7 (1)
0x040| 0c | . | int: 6 0x4c-0x4c.7 (1)
0x040| 40 | @ | long: 32 0x4d-0x4d.7 (1)
0x040| ab aa| ..| float: -1.2126478207002966e-12 0x4e-0x51.7 (4)
0x050|aa 3e |.> |
0x050| 25 49 92 24 49 92 f4 3f | %I.$I..? | double: 4.61123556404525e-129 0x52-0x59.7 (8)
| | | bytes{}: 0x5a-0x5b.7 (2)
0x050| 02 | . | length: 1 0x5a-0x5a.7 (1)
0x050| 38 | 8 | data: raw bits 0x5b-0x5b.7 (1)
| | | string{}: 0x5c-0x5e.7 (3)
0x050| 04 | . | length: 2 0x5c-0x5c.7 (1)
0x050| 31 31 | 11 | data: "11" 0x5d-0x5e.7 (2)
0x050| 02| .| enum: "B" (1) 0x5f-0x5f.7 (1)
| | | array[0:2]: 0x60-0x63.7 (4)
| | | [0]{}: block 0x60-0x62.7 (3)
0x060|02 |. | count: 1 0x60-0x60.7 (1)
| | | data[0:1]: 0x61-0x62.7 (2)
| | | [0]{}: entry 0x61-0x62.7 (2)
0x060| 02 | . | length: 1 0x61-0x61.7 (1)
0x060| 61 | a | data: "a" 0x62-0x62.7 (1)
| | | [1]{}: block 0x63-0x63.7 (1)
0x060| 00 | . | count: 0 0x63-0x63.7 (1)
| | | data[0:0]: 0x64-NA (0)
| | | map[0:2]: 0x64-0x71.7 (14)
| | | [0]{}: block 0x64-0x70.7 (13)
0x060| 06 | . | count: 3 0x64-0x64.7 (1)
| | | data[0:3]: 0x65-0x70.7 (12)
| | | [0]{}: entry 0x65-0x68.7 (4)
| | | key{}: 0x65-0x66.7 (2)
0x060| 02 | . | length: 1 0x65-0x65.7 (1)
0x060| 61 | a | data: "a" 0x66-0x66.7 (1)
| | | value{}: 0x67-0x68.7 (2)
0x060| 02 | . | length: 1 0x67-0x67.7 (1)
0x060| 41 | A | data: "A" 0x68-0x68.7 (1)
| | | [1]{}: entry 0x69-0x6c.7 (4)
| | | key{}: 0x69-0x6a.7 (2)
0x060| 02 | . | length: 1 0x69-0x69.7 (1)
0x060| 62 | b | data: "b" 0x6a-0x6a.7 (1)
| | | value{}: 0x6b-0x6c.7 (2)
0x060| 02 | . | length: 1 0x6b-0x6b.7 (1)
0x060| 42 | B | data: "B" 0x6c-0x6c.7 (1)
| | | [2]{}: entry 0x6d-0x70.7 (4)
| | | key{}: 0x6d-0x6e.7 (2)
0x060| 02 | . | length: 1 0x6d-0x6d.7 (1)
0x060| 63 | c | data: "c" 0x6e-0x6e.7 (1)
| | | value{}: 0x6f-0x70.7 (2)
0x060| 02| .| length: 1 0x6f-0x6f.7 (1)
0x070|43 |C | data: "C" 0x70-0x70.7 (1)
| | | [1]{}: block 0x71-0x71.7 (1)
0x070| 00 | . | count: 0 0x71-0x71.7 (1)
| | | data[0:0]: 0x72-NA (0)
| | | union{}: 0x72-0x74.7 (3)
0x070| 02 | . | type: 1 0x72-0x72.7 (1)
| | | value{}: 0x73-0x74.7 (2)
0x070| 02 | . | length: 1 0x73-0x73.7 (1)
0x070| 31 | 1 | data: "1" 0x74-0x74.7 (1)
0x070| 00 01 02 03 04 05 06 07 08 09 0a| ...........| fixed: raw bits 0x75-0x84.7 (16)
0x080|0b 0c 0d 0e 0f |..... |
0x080| 0e | . | date: "1970-01-08" (7) 0x85-0x85.7 (1)
0x080| c2 a9 07 | ... | timeMillis: "00:01:00.001" (60001) 0x86-0x88.7 (3)
0x080| dd 5d | .] | timeMicros: "23:59:59.994001" (-5999) 0x89-0x8a.7 (2)
0x080| c2 c9 b7 ff 8d| .....| timestampMillis: "2000-01-02T00:01:00.001Z" (946771260001) 0x8b-0x90.7 (6)
0x090|37 |7 |
0x090| a2 a2 f9 90 ab c5 ae 03 | ........ | timestampMicros: "2000-01-01T23:59:59.994001Z" (946771199994001) 0x91-0x98.7 (8)
| | | [2]{}: data 0x99-0xe8.7 (80)
| | | null: null 0x99-NA (0)
0x090| 01 | . | boolean: true 0x99-0x99.7 (1)
0x090| 0a | . | int: 5 0x9a-0x9a.7 (1)
0x090| 46 | F | long: 35 0x9b-0x9b.7 (1)
0x090| ab aa 2a 3f| ..*?| float: -1.2090952154417134e-12 0x9c-0x9f.7 (4)
0x0a0|b7 6d db b6 6d db f6 3f |.m..m..? | double: -1.071112274748446e-41 0xa0-0xa7.7 (8)
| | | bytes{}: 0xa8-0xaa.7 (3)
0x0a0| 04 | . | length: 2 0xa8-0xa8.7 (1)
0x0a0| 31 31 | 11 | data: raw bits 0xa9-0xaa.7 (2)
| | | string{}: 0xab-0xac.7 (2)
0x0a0| 02 | . | length: 1 0xab-0xab.7 (1)
0x0a0| 38 | 8 | data: "8" 0xac-0xac.7 (1)
0x0a0| 04 | . | enum: "C" (2) 0xad-0xad.7 (1)
| | | array[0:2]: 0xae-0xb3.7 (6)
| | | [0]{}: block 0xae-0xb2.7 (5)
0x0a0| 04 | . | count: 2 0xae-0xae.7 (1)
| | | data[0:2]: 0xaf-0xb2.7 (4)
| | | [0]{}: entry 0xaf-0xb0.7 (2)
0x0a0| 02| .| length: 1 0xaf-0xaf.7 (1)
0x0b0|61 |a | data: "a" 0xb0-0xb0.7 (1)
| | | [1]{}: entry 0xb1-0xb2.7 (2)
0x0b0| 02 | . | length: 1 0xb1-0xb1.7 (1)
0x0b0| 62 | b | data: "b" 0xb2-0xb2.7 (1)
| | | [1]{}: block 0xb3-0xb3.7 (1)
0x0b0| 00 | . | count: 0 0xb3-0xb3.7 (1)
| | | data[0:0]: 0xb4-NA (0)
| | | map[0:2]: 0xb4-0xc1.7 (14)
| | | [0]{}: block 0xb4-0xc0.7 (13)
0x0b0| 06 | . | count: 3 0xb4-0xb4.7 (1)
| | | data[0:3]: 0xb5-0xc0.7 (12)
| | | [0]{}: entry 0xb5-0xb8.7 (4)
| | | key{}: 0xb5-0xb6.7 (2)
0x0b0| 02 | . | length: 1 0xb5-0xb5.7 (1)
0x0b0| 61 | a | data: "a" 0xb6-0xb6.7 (1)
| | | value{}: 0xb7-0xb8.7 (2)
0x0b0| 02 | . | length: 1 0xb7-0xb7.7 (1)
0x0b0| 41 | A | data: "A" 0xb8-0xb8.7 (1)
| | | [1]{}: entry 0xb9-0xbc.7 (4)
| | | key{}: 0xb9-0xba.7 (2)
0x0b0| 02 | . | length: 1 0xb9-0xb9.7 (1)
0x0b0| 62 | b | data: "b" 0xba-0xba.7 (1)
| | | value{}: 0xbb-0xbc.7 (2)
0x0b0| 02 | . | length: 1 0xbb-0xbb.7 (1)
0x0b0| 42 | B | data: "B" 0xbc-0xbc.7 (1)
| | | [2]{}: entry 0xbd-0xc0.7 (4)
| | | key{}: 0xbd-0xbe.7 (2)
0x0b0| 02 | . | length: 1 0xbd-0xbd.7 (1)
0x0b0| 63 | c | data: "c" 0xbe-0xbe.7 (1)
| | | value{}: 0xbf-0xc0.7 (2)
0x0b0| 02| .| length: 1 0xbf-0xbf.7 (1)
0x0c0|43 |C | data: "C" 0xc0-0xc0.7 (1)
| | | [1]{}: block 0xc1-0xc1.7 (1)
0x0c0| 00 | . | count: 0 0xc1-0xc1.7 (1)
| | | data[0:0]: 0xc2-NA (0)
| | | union{}: 0xc2-0xc4.7 (3)
0x0c0| 02 | . | type: 1 0xc2-0xc2.7 (1)
| | | value{}: 0xc3-0xc4.7 (2)
0x0c0| 02 | . | length: 1 0xc3-0xc3.7 (1)
0x0c0| 32 | 2 | data: "2" 0xc4-0xc4.7 (1)
0x0c0| 00 01 02 03 04 05 06 07 08 09 0a| ...........| fixed: raw bits 0xc5-0xd4.7 (16)
0x0d0|0b 0c 0d 0e 0f |..... |
0x0d0| 08 | . | date: "1970-01-05" (4) 0xd5-0xd5.7 (1)
0x0d0| c4 a9 07 | ... | timeMillis: "00:01:00.002" (60002) 0xd6-0xd8.7 (3)
0x0d0| e4 5d | .] | timeMicros: "00:00:00.006002" (6002) 0xd9-0xda.7 (2)
0x0d0| c4 b9 ea d1 8e| .....| timestampMillis: "2000-01-03T00:01:00.002Z" (946857660002) 0xdb-0xe0.7 (6)
0x0e0|37 |7 |
0x0e0| e4 dd b5 ee ae ca ae 03 | ........ | timestampMicros: "2000-01-03T00:00:00.006002Z" (946857600006002) 0xe1-0xe8.7 (8)
| | | [3]{}: data 0xe9-0x133.7 (75)
| | | null: null 0xe9-NA (0)
0x0e0| 00 | . | boolean: false 0xe9-0xe9.7 (1)
0x0e0| 08 | . | int: 4 0xea-0xea.7 (1)
0x0e0| 44 | D | long: 34 0xeb-0xeb.7 (1)
0x0e0| 00 00 80 3f| ...?| float: 4.600602988224807e-41 0xec-0xef.7 (4)
0x0f0|49 92 24 49 92 24 f9 3f |I.$I.$.? | double: 2.5892767407305293e+46 0xf0-0xf7.7 (8)
| | | bytes{}: 0xf8-0xfa.7 (3)
0x0f0| 04 | . | length: 2 0xf8-0xf8.7 (1)
0x0f0| 31 30 | 10 | data: raw bits 0xf9-0xfa.7 (2)
| | | string{}: 0xfb-0xfc.7 (2)
0x0f0| 02 | . | length: 1 0xfb-0xfb.7 (1)
0x0f0| 39 | 9 | data: "9" 0xfc-0xfc.7 (1)
0x0f0| 00 | . | enum: "A" (0) 0xfd-0xfd.7 (1)
| | | array[0:1]: 0xfe-0xfe.7 (1)
| | | [0]{}: block 0xfe-0xfe.7 (1)
0x0f0| 00 | . | count: 0 0xfe-0xfe.7 (1)
| | | data[0:0]: 0xff-NA (0)
| | | map[0:2]: 0xff-0x10c.7 (14)
| | | [0]{}: block 0xff-0x10b.7 (13)
0x0f0| 06| .| count: 3 0xff-0xff.7 (1)
| | | data[0:3]: 0x100-0x10b.7 (12)
| | | [0]{}: entry 0x100-0x103.7 (4)
| | | key{}: 0x100-0x101.7 (2)
0x100|02 |. | length: 1 0x100-0x100.7 (1)
0x100| 61 | a | data: "a" 0x101-0x101.7 (1)
| | | value{}: 0x102-0x103.7 (2)
0x100| 02 | . | length: 1 0x102-0x102.7 (1)
0x100| 41 | A | data: "A" 0x103-0x103.7 (1)
| | | [1]{}: entry 0x104-0x107.7 (4)
| | | key{}: 0x104-0x105.7 (2)
0x100| 02 | . | length: 1 0x104-0x104.7 (1)
0x100| 62 | b | data: "b" 0x105-0x105.7 (1)
| | | value{}: 0x106-0x107.7 (2)
0x100| 02 | . | length: 1 0x106-0x106.7 (1)
0x100| 42 | B | data: "B" 0x107-0x107.7 (1)
| | | [2]{}: entry 0x108-0x10b.7 (4)
| | | key{}: 0x108-0x109.7 (2)
0x100| 02 | . | length: 1 0x108-0x108.7 (1)
0x100| 63 | c | data: "c" 0x109-0x109.7 (1)
| | | value{}: 0x10a-0x10b.7 (2)
0x100| 02 | . | length: 1 0x10a-0x10a.7 (1)
0x100| 43 | C | data: "C" 0x10b-0x10b.7 (1)
| | | [1]{}: block 0x10c-0x10c.7 (1)
0x100| 00 | . | count: 0 0x10c-0x10c.7 (1)
| | | data[0:0]: 0x10d-NA (0)
| | | union{}: 0x10d-0x10f.7 (3)
0x100| 02 | . | type: 1 0x10d-0x10d.7 (1)
| | | value{}: 0x10e-0x10f.7 (2)
0x100| 02 | . | length: 1 0x10e-0x10e.7 (1)
0x100| 33| 3| data: "3" 0x10f-0x10f.7 (1)
0x110|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|................| fixed: raw bits 0x110-0x11f.7 (16)
0x120|0a |. | date: "1970-01-06" (5) 0x120-0x120.7 (1)
0x120| c6 a9 07 | ... | timeMillis: "00:01:00.003" (60003) 0x121-0x123.7 (3)
0x120| d9 5d | .] | timeMicros: "23:59:59.994003" (-5997) 0x124-0x125.7 (2)
0x120| c6 a9 9d a4 8f 37 | .....7 | timestampMillis: "2000-01-04T00:01:00.003Z" (946944060003) 0x126-0x12b.7 (6)
0x120| a6 a2 ef cb| ....| timestampMicros: "2000-01-03T23:59:59.994003Z" (946943999994003) 0x12c-0x133.7 (8)
0x130|b2 cf ae 03 |.... |
| | | [4]{}: data 0x134-0x182.7 (79)
| | | null: null 0x134-NA (0)
0x130| 01 | . | boolean: true 0x134-0x134.7 (1)
0x130| 06 | . | int: 3 0x135-0x135.7 (1)
0x130| 4a | J | long: 37 0x136-0x136.7 (1)
0x130| ab aa aa 3f | ...? | float: -1.2126479291205139e-12 0x137-0x13a.7 (4)
0x130| db b6 6d db b6| ..m..| double: -6.368110545752354e+133 0x13b-0x142.7 (8)
0x140|6d fb 3f |m.? |
| | | bytes{}: 0x143-0x145.7 (3)
0x140| 04 | . | length: 2 0x143-0x143.7 (1)
0x140| 31 33 | 13 | data: raw bits 0x144-0x145.7 (2)
| | | string{}: 0x146-0x148.7 (3)
0x140| 04 | . | length: 2 0x146-0x146.7 (1)
0x140| 31 34 | 14 | data: "14" 0x147-0x148.7 (2)
0x140| 02 | . | enum: "B" (1) 0x149-0x149.7 (1)
| | | array[0:2]: 0x14a-0x14d.7 (4)
| | | [0]{}: block 0x14a-0x14c.7 (3)
0x140| 02 | . | count: 1 0x14a-0x14a.7 (1)
| | | data[0:1]: 0x14b-0x14c.7 (2)
| | | [0]{}: entry 0x14b-0x14c.7 (2)
0x140| 02 | . | length: 1 0x14b-0x14b.7 (1)
0x140| 61 | a | data: "a" 0x14c-0x14c.7 (1)
| | | [1]{}: block 0x14d-0x14d.7 (1)
0x140| 00 | . | count: 0 0x14d-0x14d.7 (1)
| | | data[0:0]: 0x14e-NA (0)
| | | map[0:2]: 0x14e-0x15b.7 (14)
| | | [0]{}: block 0x14e-0x15a.7 (13)
0x140| 06 | . | count: 3 0x14e-0x14e.7 (1)
| | | data[0:3]: 0x14f-0x15a.7 (12)
| | | [0]{}: entry 0x14f-0x152.7 (4)
| | | key{}: 0x14f-0x150.7 (2)
0x140| 02| .| length: 1 0x14f-0x14f.7 (1)
0x150|61 |a | data: "a" 0x150-0x150.7 (1)
| | | value{}: 0x151-0x152.7 (2)
0x150| 02 | . | length: 1 0x151-0x151.7 (1)
0x150| 41 | A | data: "A" 0x152-0x152.7 (1)
| | | [1]{}: entry 0x153-0x156.7 (4)
| | | key{}: 0x153-0x154.7 (2)
0x150| 02 | . | length: 1 0x153-0x153.7 (1)
0x150| 62 | b | data: "b" 0x154-0x154.7 (1)
| | | value{}: 0x155-0x156.7 (2)
0x150| 02 | . | length: 1 0x155-0x155.7 (1)
0x150| 42 | B | data: "B" 0x156-0x156.7 (1)
| | | [2]{}: entry 0x157-0x15a.7 (4)
| | | key{}: 0x157-0x158.7 (2)
0x150| 02 | . | length: 1 0x157-0x157.7 (1)
0x150| 63 | c | data: "c" 0x158-0x158.7 (1)
| | | value{}: 0x159-0x15a.7 (2)
0x150| 02 | . | length: 1 0x159-0x159.7 (1)
0x150| 43 | C | data: "C" 0x15a-0x15a.7 (1)
| | | [1]{}: block 0x15b-0x15b.7 (1)
0x150| 00 | . | count: 0 0x15b-0x15b.7 (1)
| | | data[0:0]: 0x15c-NA (0)
| | | union{}: 0x15c-0x15e.7 (3)
0x150| 02 | . | type: 1 0x15c-0x15c.7 (1)
| | | value{}: 0x15d-0x15e.7 (2)
0x150| 02 | . | length: 1 0x15d-0x15d.7 (1)
0x150| 34 | 4 | data: "4" 0x15e-0x15e.7 (1)
0x150| 00| .| fixed: raw bits 0x15f-0x16e.7 (16)
0x160|01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |............... |
0x160| 04| .| date: "1970-01-03" (2) 0x16f-0x16f.7 (1)
0x170|c8 a9 07 |... | timeMillis: "00:01:00.004" (60004) 0x170-0x172.7 (3)
0x170| e8 5d | .] | timeMicros: "00:00:00.006004" (6004) 0x173-0x174.7 (2)
0x170| c8 99 d0 f6 8f 37 | .....7 | timestampMillis: "2000-01-05T00:01:00.004Z" (947030460004) 0x175-0x17a.7 (6)
0x170| e8 dd ab a9 b6| .....| timestampMicros: "2000-01-05T00:00:00.006004Z" (947030400006004) 0x17b-0x182.7 (8)
0x180|d4 ae 03 |... |
| | | [5]{}: data 0x183-0x1d3.7 (81)
| | | null: null 0x183-NA (0)
0x180| 00 | . | boolean: false 0x183-0x183.7 (1)
0x180| 04 | . | int: 2 0x184-0x184.7 (1)
0x180| 48 | H | long: 36 0x185-0x185.7 (1)
0x180| 55 55 d5 3f | UU.? | float: 1.4694491357184e+13 0x186-0x189.7 (4)
0x180| 6e db b6 6d db b6| n..m..| double: 1.0257800654339733e+226 0x18a-0x191.7 (8)
0x190|fd 3f |.? |
| | | bytes{}: 0x192-0x194.7 (3)
0x190| 04 | . | length: 2 0x192-0x192.7 (1)
0x190| 31 32 | 12 | data: raw bits 0x193-0x194.7 (2)
| | | string{}: 0x195-0x197.7 (3)
0x190| 04 | . | length: 2 0x195-0x195.7 (1)
0x190| 31 35 | 15 | data: "15" 0x196-0x197.7 (2)
0x190| 04 | . | enum: "C" (2) 0x198-0x198.7 (1)
| | | array[0:2]: 0x199-0x19e.7 (6)
| | | [0]{}: block 0x199-0x19d.7 (5)
0x190| 04 | . | count: 2 0x199-0x199.7 (1)
| | | data[0:2]: 0x19a-0x19d.7 (4)
| | | [0]{}: entry 0x19a-0x19b.7 (2)
0x190| 02 | . | length: 1 0x19a-0x19a.7 (1)
0x190| 61 | a | data: "a" 0x19b-0x19b.7 (1)
| | | [1]{}: entry 0x19c-0x19d.7 (2)
0x190| 02 | . | length: 1 0x19c-0x19c.7 (1)
0x190| 62 | b | data: "b" 0x19d-0x19d.7 (1)
| | | [1]{}: block 0x19e-0x19e.7 (1)
0x190| 00 | . | count: 0 0x19e-0x19e.7 (1)
| | | data[0:0]: 0x19f-NA (0)
| | | map[0:2]: 0x19f-0x1ac.7 (14)
| | | [0]{}: block 0x19f-0x1ab.7 (13)
0x190| 06| .| count: 3 0x19f-0x19f.7 (1)
| | | data[0:3]: 0x1a0-0x1ab.7 (12)
| | | [0]{}: entry 0x1a0-0x1a3.7 (4)
| | | key{}: 0x1a0-0x1a1.7 (2)
0x1a0|02 |. | length: 1 0x1a0-0x1a0.7 (1)
0x1a0| 61 | a | data: "a" 0x1a1-0x1a1.7 (1)
| | | value{}: 0x1a2-0x1a3.7 (2)
0x1a0| 02 | . | length: 1 0x1a2-0x1a2.7 (1)
0x1a0| 41 | A | data: "A" 0x1a3-0x1a3.7 (1)
| | | [1]{}: entry 0x1a4-0x1a7.7 (4)
| | | key{}: 0x1a4-0x1a5.7 (2)
0x1a0| 02 | . | length: 1 0x1a4-0x1a4.7 (1)
0x1a0| 62 | b | data: "b" 0x1a5-0x1a5.7 (1)
| | | value{}: 0x1a6-0x1a7.7 (2)
0x1a0| 02 | . | length: 1 0x1a6-0x1a6.7 (1)
0x1a0| 42 | B | data: "B" 0x1a7-0x1a7.7 (1)
| | | [2]{}: entry 0x1a8-0x1ab.7 (4)
| | | key{}: 0x1a8-0x1a9.7 (2)
0x1a0| 02 | . | length: 1 0x1a8-0x1a8.7 (1)
0x1a0| 63 | c | data: "c" 0x1a9-0x1a9.7 (1)
| | | value{}: 0x1aa-0x1ab.7 (2)
0x1a0| 02 | . | length: 1 0x1aa-0x1aa.7 (1)
0x1a0| 43 | C | data: "C" 0x1ab-0x1ab.7 (1)
| | | [1]{}: block 0x1ac-0x1ac.7 (1)
0x1a0| 00 | . | count: 0 0x1ac-0x1ac.7 (1)
| | | data[0:0]: 0x1ad-NA (0)
| | | union{}: 0x1ad-0x1af.7 (3)
0x1a0| 02 | . | type: 1 0x1ad-0x1ad.7 (1)
| | | value{}: 0x1ae-0x1af.7 (2)
0x1a0| 02 | . | length: 1 0x1ae-0x1ae.7 (1)
0x1a0| 35| 5| data: "5" 0x1af-0x1af.7 (1)
0x1b0|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|................| fixed: raw bits 0x1b0-0x1bf.7 (16)
0x1c0|06 |. | date: "1970-01-04" (3) 0x1c0-0x1c0.7 (1)
0x1c0| ca a9 07 | ... | timeMillis: "00:01:00.005" (60005) 0x1c1-0x1c3.7 (3)
0x1c0| d5 5d | .] | timeMicros: "23:59:59.994005" (-5995) 0x1c4-0x1c5.7 (2)
0x1c0| ca 89 83 c9 90 37 | .....7 | timestampMillis: "2000-01-06T00:01:00.005Z" (947116860005) 0x1c6-0x1cb.7 (6)
0x1c0| aa a2 e5 86| ....| timestampMicros: "2000-01-05T23:59:59.994005Z" (947116799994005) 0x1cc-0x1d3.7 (8)
0x1d0|ba d9 ae 03 |.... |
| | | [6]{}: data 0x1d4-0x21f.7 (76)
| | | null: null 0x1d4-NA (0)
0x1d0| 01 | . | boolean: true 0x1d4-0x1d4.7 (1)
0x1d0| 02 | . | int: 1 0x1d5-0x1d5.7 (1)
0x1d0| 4e | N | long: 39 0x1d6-0x1d6.7 (1)
0x1d0| 00 00 00 40 | ...@ | float: 8.96831017167883e-44 0x1d7-0x1da.7 (4)
0x1d0| 00 00 00 00 00| .....| double: 3.16e-322 0x1db-0x1e2.7 (8)
0x1e0|00 00 40 |..@ |
| | | bytes{}: 0x1e3-0x1e5.7 (3)
0x1e0| 04 | . | length: 2 0x1e3-0x1e3.7 (1)
0x1e0| 31 35 | 15 | data: raw bits 0x1e4-0x1e5.7 (2)
| | | string{}: 0x1e6-0x1e8.7 (3)
0x1e0| 04 | . | length: 2 0x1e6-0x1e6.7 (1)
0x1e0| 31 32 | 12 | data: "12" 0x1e7-0x1e8.7 (2)
0x1e0| 00 | . | enum: "A" (0) 0x1e9-0x1e9.7 (1)
| | | array[0:1]: 0x1ea-0x1ea.7 (1)
| | | [0]{}: block 0x1ea-0x1ea.7 (1)
0x1e0| 00 | . | count: 0 0x1ea-0x1ea.7 (1)
| | | data[0:0]: 0x1eb-NA (0)
| | | map[0:2]: 0x1eb-0x1f8.7 (14)
| | | [0]{}: block 0x1eb-0x1f7.7 (13)
0x1e0| 06 | . | count: 3 0x1eb-0x1eb.7 (1)
| | | data[0:3]: 0x1ec-0x1f7.7 (12)
| | | [0]{}: entry 0x1ec-0x1ef.7 (4)
| | | key{}: 0x1ec-0x1ed.7 (2)
0x1e0| 02 | . | length: 1 0x1ec-0x1ec.7 (1)
0x1e0| 61 | a | data: "a" 0x1ed-0x1ed.7 (1)
| | | value{}: 0x1ee-0x1ef.7 (2)
0x1e0| 02 | . | length: 1 0x1ee-0x1ee.7 (1)
0x1e0| 41| A| data: "A" 0x1ef-0x1ef.7 (1)
| | | [1]{}: entry 0x1f0-0x1f3.7 (4)
| | | key{}: 0x1f0-0x1f1.7 (2)
0x1f0|02 |. | length: 1 0x1f0-0x1f0.7 (1)
0x1f0| 62 | b | data: "b" 0x1f1-0x1f1.7 (1)
| | | value{}: 0x1f2-0x1f3.7 (2)
0x1f0| 02 | . | length: 1 0x1f2-0x1f2.7 (1)
0x1f0| 42 | B | data: "B" 0x1f3-0x1f3.7 (1)
| | | [2]{}: entry 0x1f4-0x1f7.7 (4)
| | | key{}: 0x1f4-0x1f5.7 (2)
0x1f0| 02 | . | length: 1 0x1f4-0x1f4.7 (1)
0x1f0| 63 | c | data: "c" 0x1f5-0x1f5.7 (1)
| | | value{}: 0x1f6-0x1f7.7 (2)
0x1f0| 02 | . | length: 1 0x1f6-0x1f6.7 (1)
0x1f0| 43 | C | data: "C" 0x1f7-0x1f7.7 (1)
| | | [1]{}: block 0x1f8-0x1f8.7 (1)
0x1f0| 00 | . | count: 0 0x1f8-0x1f8.7 (1)
| | | data[0:0]: 0x1f9-NA (0)
| | | union{}: 0x1f9-0x1fb.7 (3)
0x1f0| 02 | . | type: 1 0x1f9-0x1f9.7 (1)
| | | value{}: 0x1fa-0x1fb.7 (2)
0x1f0| 02 | . | length: 1 0x1fa-0x1fa.7 (1)
0x1f0| 36 | 6 | data: "6" 0x1fb-0x1fb.7 (1)
0x1f0| 00 01 02 03| ....| fixed: raw bits 0x1fc-0x20b.7 (16)
0x200|04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |............ |
0x200| 00 | . | date: "1970-01-01" (0) 0x20c-0x20c.7 (1)
0x200| cc a9 07| ...| timeMillis: "00:01:00.006" (60006) 0x20d-0x20f.7 (3)
0x210|ec 5d |.] | timeMicros: "00:00:00.006006" (6006) 0x210-0x211.7 (2)
0x210| cc f9 b5 9b 91 37 | .....7 | timestampMillis: "2000-01-07T00:01:00.006Z" (947203260006) 0x212-0x217.7 (6)
0x210| ec dd a1 e4 bd de ae 03| ........| timestampMicros: "2000-01-07T00:00:00.006006Z" (947203200006006) 0x218-0x21f.7 (8)
| | | [7]{}: data 0x220-0x26e.7 (79)
| | | null: null 0x220-NA (0)
0x220|00 |. | boolean: false 0x220-0x220.7 (1)
0x220| 00 | . | int: 0 0x221-0x221.7 (1)
0x220| 4c | L | long: 38 0x222-0x222.7 (1)
0x220| 55 55 15 40 | UU.@ | float: 1.4642952798208e+13 0x223-0x226.7 (4)
0x220| 49 92 24 49 92 24 01 40 | I.$I.$.@ | double: 2.5892767406983375e+46 0x227-0x22e.7 (8)
| | | bytes{}: 0x22f-0x231.7 (3)
0x220| 04| .| length: 2 0x22f-0x22f.7 (1)
0x230|31 34 |14 | data: raw bits 0x230-0x231.7 (2)
| | | string{}: 0x232-0x234.7 (3)
0x230| 04 | . | length: 2 0x232-0x232.7 (1)
0x230| 31 33 | 13 | data: "13" 0x233-0x234.7 (2)
0x230| 02 | . | enum: "B" (1) 0x235-0x235.7 (1)
| | | array[0:2]: 0x236-0x239.7 (4)
| | | [0]{}: block 0x236-0x238.7 (3)
0x230| 02 | . | count: 1 0x236-0x236.7 (1)
| | | data[0:1]: 0x237-0x238.7 (2)
| | | [0]{}: entry 0x237-0x238.7 (2)
0x230| 02 | . | length: 1 0x237-0x237.7 (1)
0x230| 61 | a | data: "a" 0x238-0x238.7 (1)
| | | [1]{}: block 0x239-0x239.7 (1)
0x230| 00 | . | count: 0 0x239-0x239.7 (1)
| | | data[0:0]: 0x23a-NA (0)
| | | map[0:2]: 0x23a-0x247.7 (14)
| | | [0]{}: block 0x23a-0x246.7 (13)
0x230| 06 | . | count: 3 0x23a-0x23a.7 (1)
| | | data[0:3]: 0x23b-0x246.7 (12)
| | | [0]{}: entry 0x23b-0x23e.7 (4)
| | | key{}: 0x23b-0x23c.7 (2)
0x230| 02 | . | length: 1 0x23b-0x23b.7 (1)
0x230| 61 | a | data: "a" 0x23c-0x23c.7 (1)
| | | value{}: 0x23d-0x23e.7 (2)
0x230| 02 | . | length: 1 0x23d-0x23d.7 (1)
0x230| 41 | A | data: "A" 0x23e-0x23e.7 (1)
| | | [1]{}: entry 0x23f-0x242.7 (4)
| | | key{}: 0x23f-0x240.7 (2)
0x230| 02| .| length: 1 0x23f-0x23f.7 (1)
0x240|62 |b | data: "b" 0x240-0x240.7 (1)
| | | value{}: 0x241-0x242.7 (2)
0x240| 02 | . | length: 1 0x241-0x241.7 (1)
0x240| 42 | B | data: "B" 0x242-0x242.7 (1)
| | | [2]{}: entry 0x243-0x246.7 (4)
| | | key{}: 0x243-0x244.7 (2)
0x240| 02 | . | length: 1 0x243-0x243.7 (1)
0x240| 63 | c | data: "c" 0x244-0x244.7 (1)
| | | value{}: 0x245-0x246.7 (2)
0x240| 02 | . | length: 1 0x245-0x245.7 (1)
0x240| 43 | C | data: "C" 0x246-0x246.7 (1)
| | | [1]{}: block 0x247-0x247.7 (1)
0x240| 00 | . | count: 0 0x247-0x247.7 (1)
| | | data[0:0]: 0x248-NA (0)
| | | union{}: 0x248-0x24a.7 (3)
0x240| 02 | . | type: 1 0x248-0x248.7 (1)
| | | value{}: 0x249-0x24a.7 (2)
0x240| 02 | . | length: 1 0x249-0x249.7 (1)
0x240| 37 | 7 | data: "7" 0x24a-0x24a.7 (1)
0x240| 00 01 02 03 04| .....| fixed: raw bits 0x24b-0x25a.7 (16)
0x250|05 06 07 08 09 0a 0b 0c 0d 0e 0f |........... |
0x250| 02 | . | date: "1970-01-02" (1) 0x25b-0x25b.7 (1)
0x250| ce a9 07 | ... | timeMillis: "00:01:00.007" (60007) 0x25c-0x25e.7 (3)
0x250| d1| .| timeMicros: "23:59:59.994007" (-5993) 0x25f-0x260.7 (2)
0x260|5d |] |
0x260| ce e9 e8 ed 91 37 | .....7 | timestampMillis: "2000-01-08T00:01:00.007Z" (947289660007) 0x261-0x266.7 (6)
0x260| ae a2 db c1 c1 e3 ae 03 | ........ | timestampMicros: "2000-01-07T23:59:59.994007Z" (947289599994007) 0x267-0x26e.7 (8)
| | | [8]{}: data 0x26f-0x2bd.7 (79)
| | | null: null 0x26f-NA (0)
0x260| 01| .| boolean: true 0x26f-0x26f.7 (1)
0x270|1e |. | int: 15 0x270-0x270.7 (1)
0x270| 52 | R | long: 41 0x271-0x271.7 (1)
0x270| ab aa 2a 40 | ..*@ | float: -1.2090953238619306e-12 0x272-0x275.7 (4)
0x270| 00 00 00 00 00 00 00 00 | ........ | double: 0 0x276-0x27d.7 (8)
| | | bytes{}: 0x27e-0x27f.7 (2)
0x270| 02 | . | length: 1 0x27e-0x27e.7 (1)
0x270| 31| 1| data: raw bits 0x27f-0x27f.7 (1)
| | | string{}: 0x280-0x281.7 (2)
0x280|02 |. | length: 1 0x280-0x280.7 (1)
0x280| 32 | 2 | data: "2" 0x281-0x281.7 (1)
0x280| 04 | . | enum: "C" (2) 0x282-0x282.7 (1)
| | | array[0:2]: 0x283-0x288.7 (6)
| | | [0]{}: block 0x283-0x287.7 (5)
0x280| 04 | . | count: 2 0x283-0x283.7 (1)
| | | data[0:2]: 0x284-0x287.7 (4)
| | | [0]{}: entry 0x284-0x285.7 (2)
0x280| 02 | . | length: 1 0x284-0x284.7 (1)
0x280| 61 | a | data: "a" 0x285-0x285.7 (1)
| | | [1]{}: entry 0x286-0x287.7 (2)
0x280| 02 | . | length: 1 0x286-0x286.7 (1)
0x280| 62 | b | data: "b" 0x287-0x287.7 (1)
| | | [1]{}: block 0x288-0x288.7 (1)
0x280| 00 | . | count: 0 0x288-0x288.7 (1)
| | | data[0:0]: 0x289-NA (0)
| | | map[0:2]: 0x289-0x296.7 (14)
| | | [0]{}: block 0x289-0x295.7 (13)
0x280| 06 | . | count: 3 0x289-0x289.7 (1)
| | | data[0:3]: 0x28a-0x295.7 (12)
| | | [0]{}: entry 0x28a-0x28d.7 (4)
| | | key{}: 0x28a-0x28b.7 (2)
0x280| 02 | . | length: 1 0x28a-0x28a.7 (1)
0x280| 61 | a | data: "a" 0x28b-0x28b.7 (1)
| | | value{}: 0x28c-0x28d.7 (2)
0x280| 02 | . | length: 1 0x28c-0x28c.7 (1)
0x280| 41 | A | data: "A" 0x28d-0x28d.7 (1)
| | | [1]{}: entry 0x28e-0x291.7 (4)
| | | key{}: 0x28e-0x28f.7 (2)
0x280| 02 | . | length: 1 0x28e-0x28e.7 (1)
0x280| 62| b| data: "b" 0x28f-0x28f.7 (1)
| | | value{}: 0x290-0x291.7 (2)
0x290|02 |. | length: 1 0x290-0x290.7 (1)
0x290| 42 | B | data: "B" 0x291-0x291.7 (1)
| | | [2]{}: entry 0x292-0x295.7 (4)
| | | key{}: 0x292-0x293.7 (2)
0x290| 02 | . | length: 1 0x292-0x292.7 (1)
0x290| 63 | c | data: "c" 0x293-0x293.7 (1)
| | | value{}: 0x294-0x295.7 (2)
0x290| 02 | . | length: 1 0x294-0x294.7 (1)
0x290| 43 | C | data: "C" 0x295-0x295.7 (1)
| | | [1]{}: block 0x296-0x296.7 (1)
0x290| 00 | . | count: 0 0x296-0x296.7 (1)
| | | data[0:0]: 0x297-NA (0)
| | | union{}: 0x297-0x299.7 (3)
0x290| 02 | . | type: 1 0x297-0x297.7 (1)
| | | value{}: 0x298-0x299.7 (2)
0x290| 02 | . | length: 1 0x298-0x298.7 (1)
0x290| 38 | 8 | data: "8" 0x299-0x299.7 (1)
0x290| 00 01 02 03 04 05| ......| fixed: raw bits 0x29a-0x2a9.7 (16)
0x2a0|06 07 08 09 0a 0b 0c 0d 0e 0f |.......... |
0x2a0| 1c | . | date: "1970-01-15" (14) 0x2aa-0x2aa.7 (1)
0x2a0| d0 a9 07 | ... | timeMillis: "00:01:00.008" (60008) 0x2ab-0x2ad.7 (3)
0x2a0| f0 5d| .]| timeMicros: "00:00:00.006008" (6008) 0x2ae-0x2af.7 (2)
0x2b0|d0 d9 9b c0 92 37 |.....7 | timestampMillis: "2000-01-09T00:01:00.008Z" (947376060008) 0x2b0-0x2b5.7 (6)
0x2b0| f0 dd 97 9f c5 e8 ae 03 | ........ | timestampMicros: "2000-01-09T00:00:00.006008Z" (947376000006008) 0x2b6-0x2bd.7 (8)
| | | [9]{}: data 0x2be-0x307.7 (74)
| | | null: null 0x2be-NA (0)
0x2b0| 00 | . | boolean: false 0x2be-0x2be.7 (1)
0x2b0| 1c| .| int: 14 0x2bf-0x2bf.7 (1)
0x2c0|50 |P | long: 40 0x2c0-0x2c0.7 (1)
0x2c0| 00 00 40 40 | ..@@ | float: 2.304855714121459e-41 0x2c1-0x2c4.7 (4)
0x2c0| 92 24 49 92 24 49 c2 3f | .$I.$I.? | double: -2.80620434202585e-221 0x2c5-0x2cc.7 (8)
| | | bytes{}: 0x2cd-0x2ce.7 (2)
0x2c0| 02 | . | length: 1 0x2cd-0x2cd.7 (1)
0x2c0| 30 | 0 | data: raw bits 0x2ce-0x2ce.7 (1)
| | | string{}: 0x2cf-0x2d0.7 (2)
0x2c0| 02| .| length: 1 0x2cf-0x2cf.7 (1)
0x2d0|33 |3 | data: "3" 0x2d0-0x2d0.7 (1)
0x2d0| 00 | . | enum: "A" (0) 0x2d1-0x2d1.7 (1)
| | | array[0:1]: 0x2d2-0x2d2.7 (1)
| | | [0]{}: block 0x2d2-0x2d2.7 (1)
0x2d0| 00 | . | count: 0 0x2d2-0x2d2.7 (1)
| | | data[0:0]: 0x2d3-NA (0)
| | | map[0:2]: 0x2d3-0x2e0.7 (14)
| | | [0]{}: block 0x2d3-0x2df.7 (13)
0x2d0| 06 | . | count: 3 0x2d3-0x2d3.7 (1)
| | | data[0:3]: 0x2d4-0x2df.7 (12)
| | | [0]{}: entry 0x2d4-0x2d7.7 (4)
| | | key{}: 0x2d4-0x2d5.7 (2)
0x2d0| 02 | . | length: 1 0x2d4-0x2d4.7 (1)
0x2d0| 61 | a | data: "a" 0x2d5-0x2d5.7 (1)
| | | value{}: 0x2d6-0x2d7.7 (2)
0x2d0| 02 | . | length: 1 0x2d6-0x2d6.7 (1)
0x2d0| 41 | A | data: "A" 0x2d7-0x2d7.7 (1)
| | | [1]{}: entry 0x2d8-0x2db.7 (4)
| | | key{}: 0x2d8-0x2d9.7 (2)
0x2d0| 02 | . | length: 1 0x2d8-0x2d8.7 (1)
0x2d0| 62 | b | data: "b" 0x2d9-0x2d9.7 (1)
| | | value{}: 0x2da-0x2db.7 (2)
0x2d0| 02 | . | length: 1 0x2da-0x2da.7 (1)
0x2d0| 42 | B | data: "B" 0x2db-0x2db.7 (1)
| | | [2]{}: entry 0x2dc-0x2df.7 (4)
| | | key{}: 0x2dc-0x2dd.7 (2)
0x2d0| 02 | . | length: 1 0x2dc-0x2dc.7 (1)
0x2d0| 63 | c | data: "c" 0x2dd-0x2dd.7 (1)
| | | value{}: 0x2de-0x2df.7 (2)
0x2d0| 02 | . | length: 1 0x2de-0x2de.7 (1)
0x2d0| 43| C| data: "C" 0x2df-0x2df.7 (1)
| | | [1]{}: block 0x2e0-0x2e0.7 (1)
0x2e0|00 |. | count: 0 0x2e0-0x2e0.7 (1)
| | | data[0:0]: 0x2e1-NA (0)
| | | union{}: 0x2e1-0x2e3.7 (3)
0x2e0| 02 | . | type: 1 0x2e1-0x2e1.7 (1)
| | | value{}: 0x2e2-0x2e3.7 (2)
0x2e0| 02 | . | length: 1 0x2e2-0x2e2.7 (1)
0x2e0| 39 | 9 | data: "9" 0x2e3-0x2e3.7 (1)
0x2e0| 00 01 02 03 04 05 06 07 08 09 0a 0b| ............| fixed: raw bits 0x2e4-0x2f3.7 (16)
0x2f0|0c 0d 0e 0f |.... |
0x2f0| 1e | . | date: "1970-01-16" (15) 0x2f4-0x2f4.7 (1)
0x2f0| d2 a9 07 | ... | timeMillis: "00:01:00.009" (60009) 0x2f5-0x2f7.7 (3)
0x2f0| cd 5d | .] | timeMicros: "23:59:59.994009" (-5991) 0x2f8-0x2f9.7 (2)
0x2f0| d2 c9 ce 92 93 37| .....7| timestampMillis: "2000-01-10T00:01:00.009Z" (947462460009) 0x2fa-0x2ff.7 (6)
0x300|b2 a2 d1 fc c8 ed ae 03| |........| | timestampMicros: "2000-01-09T23:59:59.994009Z" (947462399994009) 0x300-0x307.7 (8)
0x0420|14 |. | count: 10 0x420-0x420.7 (1)
0x0420| 8c 08 | .. | size: 518 0x421-0x422.7 (2)
0x0420| 88 06 f0 52 01 0e 42 00 00 00 00 92 24| ...R..B.....$| compressed: raw bits 0x423-0x624.7 (514)
0x0430|49 92 24 49 f2 3f 02 39 04 31 30 00 00 06 02 61|I.$I.?.9.10....a|
* |until 0x624.7 (514) | |
0x0620| 87 b8 fe b6 | .... | crc: 0x87b8feb6 (valid) 0x625-0x628.7 (4)
0x0620| cc cc 61 31 fd 14 d0| ..a1...| sync: raw bits (valid) 0x629-0x638.7 (16)
0x0630|61 16 b6 0f 9d 30 f4 1b f0| |a....0...| |

BIN
format/avro/testdata/twitter.avro vendored Normal file

Binary file not shown.

61
format/avro/testdata/twitter.fqtest vendored Normal file
View File

@ -0,0 +1,61 @@
# avro file taken from https://github.com/miguno/avro-cli-examples
$ fq dv twitter.avro
|00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f|0123456789abcdef|.{}: twitter.avro (avro_ocf) 0x0-0x21e.7 (543)
0x000|4f 62 6a 01 |Obj. | magic: raw bits (valid) 0x0-0x3.7 (4)
| | | header{}: 0x4-0x1a7.7 (420)
| | | meta[0:2]: 0x4-0x197.7 (404)
| | | [0]{}: block 0x4-0x196.7 (403)
0x000| 04 | . | count: 2 0x4-0x4.7 (1)
| | | data[0:2]: 0x5-0x196.7 (402)
| | | [0]{}: entry 0x5-0x186.7 (386)
| | | key{}: 0x5-0x10.7 (12)
0x000| 16 | . | length: 11 0x5-0x5.7 (1)
0x000| 61 76 72 6f 2e 73 63 68 65 6d| avro.schem| data: "avro.schema" 0x6-0x10.7 (11)
0x010|61 |a |
| | | value{}: 0x11-0x186.7 (374)
0x010| e8 05 | .. | length: 372 0x11-0x12.7 (2)
0x010| 7b 22 74 79 70 65 22 3a 22 72 65 63 6f| {"type":"reco| data: "{\"type\":\"record\",\"name\":\"twitter_schema\",\"namespac"... 0x13-0x186.7 (372)
0x020|72 64 22 2c 22 6e 61 6d 65 22 3a 22 74 77 69 74|rd","name":"twit|
* |until 0x186.7 (372) | |
| | | [1]{}: entry 0x187-0x196.7 (16)
| | | key{}: 0x187-0x191.7 (11)
0x180| 14 | . | length: 10 0x187-0x187.7 (1)
0x180| 61 76 72 6f 2e 63 6f 64| avro.cod| data: "avro.codec" 0x188-0x191.7 (10)
0x190|65 63 |ec |
| | | value{}: 0x192-0x196.7 (5)
0x190| 08 | . | length: 4 0x192-0x192.7 (1)
0x190| 6e 75 6c 6c | null | data: "null" 0x193-0x196.7 (4)
| | | [1]{}: block 0x197-0x197.7 (1)
0x190| 00 | . | count: 0 0x197-0x197.7 (1)
| | | data[0:0]: 0x198-NA (0)
0x190| 67 c7 35 29 73 ef df 94| g.5)s...| sync: raw bits 0x198-0x1a7.7 (16)
0x1a0|ad d3 00 7e 9e eb ff ae |...~.... |
| | | blocks[0:1]: 0x1a8-0x21e.7 (119)
| | | [0]{}: block 0x1a8-0x21e.7 (119)
0x1a0| 04 | . | count: 2 0x1a8-0x1a8.7 (1)
0x1a0| c8 01 | .. | size: 100 0x1a9-0x1aa.7 (2)
| | | data[0:2]: 0x1ab-0x20e.7 (100)
| | | [0]{}: datum 0x1ab-0x1da.7 (48)
| | | username{}: 0x1ab-0x1b1.7 (7)
0x1a0| 0c | . | length: 6 0x1ab-0x1ab.7 (1)
0x1a0| 6d 69 67 75| migu| data: "miguno" 0x1ac-0x1b1.7 (6)
0x1b0|6e 6f |no |
| | | tweet{}: 0x1b2-0x1d5.7 (36)
0x1b0| 46 | F | length: 35 0x1b2-0x1b2.7 (1)
0x1b0| 52 6f 63 6b 3a 20 4e 65 72 66 20 70 61| Rock: Nerf pa| data: "Rock: Nerf paper, scissors is fine." 0x1b3-0x1d5.7 (35)
0x1c0|70 65 72 2c 20 73 63 69 73 73 6f 72 73 20 69 73|per, scissors is|
0x1d0|20 66 69 6e 65 2e | fine. |
0x1d0| b2 b8 ee 96 0a | ..... | timestamp: 1366150681 0x1d6-0x1da.7 (5)
| | | [1]{}: datum 0x1db-0x20e.7 (52)
| | | username{}: 0x1db-0x1e5.7 (11)
0x1d0| 14 | . | length: 10 0x1db-0x1db.7 (1)
0x1d0| 42 6c 69 7a| Bliz| data: "BlizzardCS" 0x1dc-0x1e5.7 (10)
0x1e0|7a 61 72 64 43 53 |zardCS |
| | | tweet{}: 0x1e6-0x209.7 (36)
0x1e0| 46 | F | length: 35 0x1e6-0x1e6.7 (1)
0x1e0| 57 6f 72 6b 73 20 61 73 20| Works as | data: "Works as intended. Terran is IMBA." 0x1e7-0x209.7 (35)
0x1f0|69 6e 74 65 6e 64 65 64 2e 20 20 54 65 72 72 61|intended. Terra|
0x200|6e 20 69 73 20 49 4d 42 41 2e |n is IMBA. |
0x200| e2 f3 ee 96 0a | ..... | timestamp: 1366154481 0x20a-0x20e.7 (5)
0x200| 67| g| sync: raw bits (valid) 0x20f-0x21e.7 (16)
0x210|c7 35 29 73 ef df 94 ad d3 00 7e 9e eb ff ae| |.5)s......~....||

View File

@ -26,6 +26,7 @@ const (
AVC_PPS = "avc_pps"
AVC_SEI = "avc_sei"
AVC_SPS = "avc_sps"
AVRO_OCF = "avro_ocf"
BENCODE = "bencode"
BSD_LOOPBACK_FRAME = "bsd_loopback_frame"
BSON = "bson"

2
go.mod
View File

@ -28,6 +28,8 @@ require (
github.com/wader/readline v0.0.0-20220117233529-692d84ca36e2
)
require github.com/golang/snappy v0.0.4
require (
github.com/itchyny/timefmt-go v0.1.3 // indirect
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881 // indirect

2
go.sum
View File

@ -1,3 +1,5 @@
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8=
github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo=

View File

@ -75,6 +75,7 @@ avc_nalu H.264/AVC Network Access Layer Unit
avc_pps H.264/AVC Picture Parameter Set
avc_sei H.264/AVC Supplemental Enhancement Information
avc_sps H.264/AVC Sequence Parameter Set
avro_ocf Avro object container file
bencode BitTorrent bencoding
bsd_loopback_frame BSD loopback frame
bson Binary JSON