pdl: Define exhaustive array tests

Add test constructs for all possible array types
based on the combination of type (byte, scalar, enum,
static struct, dynamic struct) and size (constant,
with size field, with count field, undefined)

Test: atest --host pdl_python_generator_test
(cherry picked from https://android-review.googlesource.com/q/commit:81c0b910eb885b335c259b9018dd78554a062f29)
Merged-In: Ide5f90fa18e7be17660f3c45c4d6972662556127
Change-Id: Ide5f90fa18e7be17660f3c45c4d6972662556127
diff --git a/tools/pdl/scripts/generate_python_backend.py b/tools/pdl/scripts/generate_python_backend.py
index d903af6..30ea7f3 100755
--- a/tools/pdl/scripts/generate_python_backend.py
+++ b/tools/pdl/scripts/generate_python_backend.py
@@ -310,6 +310,8 @@
             self.append_(f"fields['{field.id}'] = {field.id}")
             if size is not None:
                 self.append_(f"span = span[{size}:]")
+            else:
+                self.append_(f"span = bytes()")
 
         # Drop the padding
         if padded_size:
@@ -631,17 +633,20 @@
                 size_modifier = f' + {value_field.size_modifier}'
 
             if isinstance(value_field, (ast.PayloadField, ast.BodyField)):
-                self.append_(f"_size = len(payload or self.payload or []){size_modifier}")
-                self.append_(f"if _size > {max_size}:")
+                self.append_(f"_payload_size = len(payload or self.payload or []){size_modifier}")
+                self.append_(f"if _payload_size > {max_size}:")
                 self.append_(f"    print(f\"Invalid length for payload field:" +
-                             f"  {{_size}} > {max_size}; the packet cannot be generated\")")
+                             f"  {{_payload_size}} > {max_size}; the packet cannot be generated\")")
                 self.append_(f"    raise Exception(\"Invalid payload length\")")
-                array_size = "_size"
+                array_size = "_payload_size"
             elif isinstance(value_field, ast.ArrayField) and value_field.width:
                 array_size = f"(len(self.{value_field.id}) * {int(value_field.width / 8)}{size_modifier})"
+            elif isinstance(value_field, ast.ArrayField) and isinstance(value_field.type, ast.EnumDeclaration):
+                array_size = f"(len(self.{value_field.id}) * {int(value_field.type.width / 8)}{size_modifier})"
             elif isinstance(value_field, ast.ArrayField):
-                self.append_(f"_size = sum([elt.size for elt in self.{value_field.id}]){size_modifier}")
-                array_size = "_size"
+                self.append_(
+                    f"_{value_field.id}_size = sum([elt.size for elt in self.{value_field.id}]){size_modifier}")
+                array_size = f"_{value_field.id}_size"
             else:
                 raise Exception("Unsupported field type")
             self.value.append(f"({array_size} << {shift})")
diff --git a/tools/pdl/tests/canonical/be_test_file.pdl b/tools/pdl/tests/canonical/be_test_file.pdl
index 41c16b2..bfbdfe5 100644
--- a/tools/pdl/tests/canonical/be_test_file.pdl
+++ b/tools/pdl/tests/canonical/be_test_file.pdl
@@ -218,76 +218,113 @@
     a: UnsizedCustomField,
 }
 
-// Array fields
-// Array element types
+// Array field configurations.
+// Add constructs for all configurations of type, size, and padding:
+//
+// - type: u8, u16, enum, struct with static size, struct with dynamic size
+// - size: constant, with size field, with count field, unspecified
+//
+// The type u8 is tested separately since it is likely to be handled
+// idiomatically by the specific language generators.
 
-// Array with scalar elements.
-packet Packet_Array_Field_ScalarElement {
+packet Packet_Array_Field_ByteElement_ConstantSize {
+    array: 8[4],
+}
+
+packet Packet_Array_Field_ByteElement_VariableSize {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: 8[],
+}
+
+packet Packet_Array_Field_ByteElement_VariableCount {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: 8[],
+}
+
+packet Packet_Array_Field_ByteElement_UnknownSize {
+    array: 8[],
+}
+
+packet Packet_Array_Field_ScalarElement_ConstantSize {
     array: 16[4],
 }
 
-// Array with enum elements.
-packet Packet_Array_Field_EnumElement {
-    array: Enum16[4],
-}
-
-// Array with sized structure elements.
-packet Packet_Array_Field_SizedStructElement {
-    array: SizedStruct[4],
-}
-
-// Array with variable sized structure elements.
-packet Packet_Array_Field_UnsizedStructElement {
-    array: UnsizedStruct[4],
-}
-
-// Array configurations
-
-// Array with sized elements, and a variable count.
-// The parser must extract as many elements as specified by the count from
-// the remaining span. The parser should generate a dynamic array size guard.
-packet Packet_Array_Field_SizedElement_VariableCount {
-    _count_(array) : 4,
-    _reserved_: 4,
-    array: 16[],
-}
-
-// The parser must extract as many elements as possible from
-// the span with the specified size. The parser should generate a
-// dynamic array size guard.
-packet Packet_Array_Field_SizedElement_VariableSize {
+packet Packet_Array_Field_ScalarElement_VariableSize {
     _size_(array) : 4,
     _reserved_: 4,
     array: 16[],
 }
 
-// The parser must extract as many elements as specified by the
-// static array count. The parser should generate a static array size guard.
-packet Packet_Array_Field_SizedElement_ConstantSize {
-    array: 16[8],
-}
-
-// The parser must extract as many elements as specified by the count from
-// the remaining span. No size guard possible.
-packet Packet_Array_Field_UnsizedElement_VariableCount {
+packet Packet_Array_Field_ScalarElement_VariableCount {
     _count_(array) : 4,
     _reserved_: 4,
-    array: UnsizedStruct[],
+    array: 16[],
 }
 
-// The parser must extract as many elements as possible from
-// the span with the specified size. The parser should generate a
-// dynamic array size guard.
+packet Packet_Array_Field_ScalarElement_UnknownSize {
+    array: 16[],
+}
+
+packet Packet_Array_Field_EnumElement_ConstantSize {
+    array: Enum16[4],
+}
+
+packet Packet_Array_Field_EnumElement_VariableSize {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: Enum16[],
+}
+
+packet Packet_Array_Field_EnumElement_VariableCount {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: Enum16[],
+}
+
+packet Packet_Array_Field_EnumElement_UnknownSize {
+    array: Enum16[],
+}
+
+packet Packet_Array_Field_SizedElement_ConstantSize {
+    array: SizedStruct[4],
+}
+
+packet Packet_Array_Field_SizedElement_VariableSize {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: SizedStruct[],
+}
+
+packet Packet_Array_Field_SizedElement_VariableCount {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: SizedStruct[],
+}
+
+packet Packet_Array_Field_SizedElement_UnknownSize {
+    array: SizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_ConstantSize {
+    array: UnsizedStruct[4],
+}
+
 packet Packet_Array_Field_UnsizedElement_VariableSize {
     _size_(array) : 4,
     _reserved_: 4,
     array: UnsizedStruct[],
 }
 
-// The parser must extract as many elements as specified by the
-// static array count. No size guard possible.
-packet Packet_Array_Field_UnsizedElement_ConstantSize {
-    array: UnsizedStruct[8],
+packet Packet_Array_Field_UnsizedElement_VariableCount {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: UnsizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_UnknownSize {
+    array: UnsizedStruct[],
 }
 
 // The parser must support complex size modifiers on arrays whose size is
@@ -497,90 +534,150 @@
     s: Struct_Custom_Field_VariableSize_,
 }
 
-// Array fields
-// Array element types
+// Array field configurations.
+// Add constructs for all configurations of type, size, and padding:
+//
+// - type: u8, u16, enum, struct with static size, struct with dynamic size
+// - size: constant, with size field, with count field, unspecified
+//
+// The type u8 is tested separately since it is likely to be handled
+// idiomatically by the specific language generators.
 
-// Array with scalar elements.
-struct Struct_Array_Field_ScalarElement_ {
-    array: 16[4],
+struct Struct_Array_Field_ByteElement_ConstantSize_ {
+    array: 8[4],
 }
-packet Struct_Array_Field_ScalarElement {
-    s: Struct_Array_Field_ScalarElement_,
+packet Struct_Array_Field_ByteElement_ConstantSize {
+    s: Struct_Array_Field_ByteElement_ConstantSize_,
 }
 
-// Array with enum elements.
-struct Struct_Array_Field_EnumElement_ {
-    array: Enum16[4],
+struct Struct_Array_Field_ByteElement_VariableSize_ {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: 8[],
 }
-packet Struct_Array_Field_EnumElement {
-    s: Struct_Array_Field_EnumElement_,
+packet Struct_Array_Field_ByteElement_VariableSize {
+    s: Struct_Array_Field_ByteElement_VariableSize_,
 }
 
-// Array with sized structure elements.
-struct Struct_Array_Field_SizedStructElement_ {
-    array: SizedStruct[4],
-}
-packet Struct_Array_Field_SizedStructElement {
-    s: Struct_Array_Field_SizedStructElement_,
-}
-
-// Array with variable sized structure elements.
-struct Struct_Array_Field_UnsizedStructElement_ {
-    array: UnsizedStruct[4],
-}
-packet Struct_Array_Field_UnsizedStructElement {
-    s: Struct_Array_Field_UnsizedStructElement_,
-}
-
-// Array configurations
-
-// Array with sized elements, and a variable count.
-// The parser must extract as many elements as specified by the count from
-// the remaining span. The parser should generate a dynamic array size guard.
-struct Struct_Array_Field_SizedElement_VariableCount_ {
+struct Struct_Array_Field_ByteElement_VariableCount_ {
     _count_(array) : 4,
     _reserved_: 4,
-    array: 16[],
+    array: 8[],
 }
-packet Struct_Array_Field_SizedElement_VariableCount {
-    s: Struct_Array_Field_SizedElement_VariableCount_,
+packet Struct_Array_Field_ByteElement_VariableCount {
+    s: Struct_Array_Field_ByteElement_VariableCount_,
 }
 
-// The parser must extract as many elements as possible from
-// the span with the specified size. The parser should generate a
-// dynamic array size guard.
-struct Struct_Array_Field_SizedElement_VariableSize_ {
+struct Struct_Array_Field_ByteElement_UnknownSize_ {
+    array: 8[],
+}
+packet Struct_Array_Field_ByteElement_UnknownSize {
+    s: Struct_Array_Field_ByteElement_UnknownSize_,
+}
+
+struct Struct_Array_Field_ScalarElement_ConstantSize_ {
+    array: 16[4],
+}
+packet Struct_Array_Field_ScalarElement_ConstantSize {
+    s: Struct_Array_Field_ScalarElement_ConstantSize_,
+}
+
+struct Struct_Array_Field_ScalarElement_VariableSize_ {
     _size_(array) : 4,
     _reserved_: 4,
     array: 16[],
 }
-packet Struct_Array_Field_SizedElement_VariableSize {
-    s: Struct_Array_Field_SizedElement_VariableSize_,
+packet Struct_Array_Field_ScalarElement_VariableSize {
+    s: Struct_Array_Field_ScalarElement_VariableSize_,
 }
 
-// The parser must extract as many elements as specified by the
-// static array count. The parser should generate a static array size guard.
+struct Struct_Array_Field_ScalarElement_VariableCount_ {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: 16[],
+}
+packet Struct_Array_Field_ScalarElement_VariableCount {
+    s: Struct_Array_Field_ScalarElement_VariableCount_,
+}
+
+struct Struct_Array_Field_ScalarElement_UnknownSize_ {
+    array: 16[],
+}
+packet Struct_Array_Field_ScalarElement_UnknownSize {
+    s: Struct_Array_Field_ScalarElement_UnknownSize_,
+}
+
+struct Struct_Array_Field_EnumElement_ConstantSize_ {
+    array: Enum16[4],
+}
+packet Struct_Array_Field_EnumElement_ConstantSize {
+    s: Struct_Array_Field_EnumElement_ConstantSize_,
+}
+
+struct Struct_Array_Field_EnumElement_VariableSize_ {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: Enum16[],
+}
+packet Struct_Array_Field_EnumElement_VariableSize {
+    s: Struct_Array_Field_EnumElement_VariableSize_,
+}
+
+struct Struct_Array_Field_EnumElement_VariableCount_ {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: Enum16[],
+}
+packet Struct_Array_Field_EnumElement_VariableCount {
+    s: Struct_Array_Field_EnumElement_VariableCount_,
+}
+
+struct Struct_Array_Field_EnumElement_UnknownSize_ {
+    array: Enum16[],
+}
+packet Struct_Array_Field_EnumElement_UnknownSize {
+    s: Struct_Array_Field_EnumElement_UnknownSize_,
+}
+
 struct Struct_Array_Field_SizedElement_ConstantSize_ {
-    array: 16[8],
+    array: SizedStruct[4],
 }
 packet Struct_Array_Field_SizedElement_ConstantSize {
     s: Struct_Array_Field_SizedElement_ConstantSize_,
 }
 
-// The parser must extract as many elements as specified by the count from
-// the remaining span. No size guard possible.
-struct Struct_Array_Field_UnsizedElement_VariableCount_ {
-    _count_(array) : 4,
+struct Struct_Array_Field_SizedElement_VariableSize_ {
+    _size_(array) : 4,
     _reserved_: 4,
-    array: UnsizedStruct[],
+    array: SizedStruct[],
 }
-packet Struct_Array_Field_UnsizedElement_VariableCount {
-    s: Struct_Array_Field_UnsizedElement_VariableCount_,
+packet Struct_Array_Field_SizedElement_VariableSize {
+    s: Struct_Array_Field_SizedElement_VariableSize_,
 }
 
-// The parser must extract as many elements as possible from
-// the span with the specified size. The parser should generate a
-// dynamic array size guard.
+struct Struct_Array_Field_SizedElement_VariableCount_ {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: SizedStruct[],
+}
+packet Struct_Array_Field_SizedElement_VariableCount {
+    s: Struct_Array_Field_SizedElement_VariableCount_,
+}
+
+struct Struct_Array_Field_SizedElement_UnknownSize_ {
+    array: SizedStruct[],
+}
+packet Struct_Array_Field_SizedElement_UnknownSize {
+    s: Struct_Array_Field_SizedElement_UnknownSize_,
+}
+
+struct Struct_Array_Field_UnsizedElement_ConstantSize_ {
+    array: UnsizedStruct[4],
+}
+packet Struct_Array_Field_UnsizedElement_ConstantSize {
+    s: Struct_Array_Field_UnsizedElement_ConstantSize_,
+}
+
 struct Struct_Array_Field_UnsizedElement_VariableSize_ {
     _size_(array) : 4,
     _reserved_: 4,
@@ -590,13 +687,20 @@
     s: Struct_Array_Field_UnsizedElement_VariableSize_,
 }
 
-// The parser must extract as many elements as specified by the
-// static array count. No size guard possible.
-struct Struct_Array_Field_UnsizedElement_ConstantSize_ {
-    array: UnsizedStruct[8],
+struct Struct_Array_Field_UnsizedElement_VariableCount_ {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: UnsizedStruct[],
 }
-packet Struct_Array_Field_UnsizedElement_ConstantSize {
-    s: Struct_Array_Field_UnsizedElement_ConstantSize_,
+packet Struct_Array_Field_UnsizedElement_VariableCount {
+    s: Struct_Array_Field_UnsizedElement_VariableCount_,
+}
+
+struct Struct_Array_Field_UnsizedElement_UnknownSize_ {
+    array: UnsizedStruct[],
+}
+packet Struct_Array_Field_UnsizedElement_UnknownSize {
+    s: Struct_Array_Field_UnsizedElement_UnknownSize_,
 }
 
 // The parser must support complex size modifiers on arrays whose size is
diff --git a/tools/pdl/tests/canonical/be_test_vectors.json b/tools/pdl/tests/canonical/be_test_vectors.json
index c0ba1b2..e03357e 100644
--- a/tools/pdl/tests/canonical/be_test_vectors.json
+++ b/tools/pdl/tests/canonical/be_test_vectors.json
@@ -1103,23 +1103,205 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_ScalarElement",
+    "packet": "Packet_Array_Field_ByteElement_ConstantSize",
     "tests": [
       {
-        "packed": "841c842e84388c4a",
+        "packed": "83848586",
         "unpacked": {
           "array": [
-            33820,
-            33838,
-            33848,
-            35914
+            131,
+            132,
+            133,
+            134
           ]
         }
       }
     ]
   },
   {
-    "packet": "Packet_Array_Field_EnumElement",
+    "packet": "Packet_Array_Field_ByteElement_VariableSize",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0f8780898a8b8c8d8e8f889192939495",
+        "unpacked": {
+          "array": [
+            135,
+            128,
+            137,
+            138,
+            139,
+            140,
+            141,
+            142,
+            143,
+            136,
+            145,
+            146,
+            147,
+            148,
+            149
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ByteElement_VariableCount",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0f969790999a9b9c9d9e9f98a1a2a3a4",
+        "unpacked": {
+          "array": [
+            150,
+            151,
+            144,
+            153,
+            154,
+            155,
+            156,
+            157,
+            158,
+            159,
+            152,
+            161,
+            162,
+            163,
+            164
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ByteElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "a5a6a7",
+        "unpacked": {
+          "array": [
+            165,
+            166,
+            167
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ScalarElement_ConstantSize",
+    "tests": [
+      {
+        "packed": "a541ad53ad65ad77",
+        "unpacked": {
+          "array": [
+            42305,
+            44371,
+            44389,
+            44407
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ScalarElement_VariableSize",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0ead81b593b5a5b5b7b5c1bdd3bde5",
+        "unpacked": {
+          "array": [
+            44417,
+            46483,
+            46501,
+            46519,
+            46529,
+            48595,
+            48613
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ScalarElement_VariableCount",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0fbdf7be01c613c625c637c641ce53ce65ce77ce81d693d6a5d6b7d6c1ded3",
+        "unpacked": {
+          "array": [
+            48631,
+            48641,
+            50707,
+            50725,
+            50743,
+            50753,
+            52819,
+            52837,
+            52855,
+            52865,
+            54931,
+            54949,
+            54967,
+            54977,
+            57043
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ScalarElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "dee5def7df01",
+        "unpacked": {
+          "array": [
+            57061,
+            57079,
+            57089
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_EnumElement_ConstantSize",
     "tests": [
       {
         "packed": "aabbccddaabbccdd",
@@ -1135,10 +1317,118 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_SizedStructElement",
+    "packet": "Packet_Array_Field_EnumElement_VariableSize",
     "tests": [
       {
-        "packed": "00ff8b00",
+        "packed": "0eaabbccddaabbccddaabbccddaabb",
+        "unpacked": {
+          "array": [
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707
+          ]
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_EnumElement_VariableCount",
+    "tests": [
+      {
+        "packed": "0faabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabb",
+        "unpacked": {
+          "array": [
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707
+          ]
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_EnumElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "aabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccdd",
+        "unpacked": {
+          "array": [
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445
+          ]
+        }
+      },
+      {
+        "packed": "",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_SizedElement_ConstantSize",
+    "tests": [
+      {
+        "packed": "00ffe200",
         "unpacked": {
           "array": [
             {
@@ -1148,7 +1438,7 @@
               "a": 255
             },
             {
-              "a": 139
+              "a": 226
             },
             {
               "a": 0
@@ -1159,34 +1449,65 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_UnsizedStructElement",
+    "packet": "Packet_Array_Field_SizedElement_VariableSize",
     "tests": [
       {
-        "packed": "00038d8e8f0003889192",
+        "packed": "0f00ffe400ffe500ffe600ffe700ffe0",
         "unpacked": {
           "array": [
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                141,
-                142,
-                143
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 228
             },
             {
-              "array": [
-                136,
-                145,
-                146
-              ]
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 229
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 230
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 231
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 224
             }
           ]
         }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
       }
     ]
   },
@@ -1194,159 +1515,53 @@
     "packet": "Packet_Array_Field_SizedElement_VariableCount",
     "tests": [
       {
-        "packed": "00",
-        "unpacked": {
-          "array": []
-        }
-      },
-      {
-        "packed": "0f94b794c19cd39ce59cf79d01a513a525a537a541ad53ad65ad77ad81b593",
-        "unpacked": {
-          "array": [
-            38071,
-            38081,
-            40147,
-            40165,
-            40183,
-            40193,
-            42259,
-            42277,
-            42295,
-            42305,
-            44371,
-            44389,
-            44407,
-            44417,
-            46483
-          ]
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Packet_Array_Field_SizedElement_VariableSize",
-    "tests": [
-      {
-        "packed": "00",
-        "unpacked": {
-          "array": []
-        }
-      },
-      {
-        "packed": "0eb5a5b5b7b5c1bdd3bde5bdf7be01",
-        "unpacked": {
-          "array": [
-            46501,
-            46519,
-            46529,
-            48595,
-            48613,
-            48631,
-            48641
-          ]
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Packet_Array_Field_SizedElement_ConstantSize",
-    "tests": [
-      {
-        "packed": "c613c625c637c641ce53ce65ce77ce81",
-        "unpacked": {
-          "array": [
-            50707,
-            50725,
-            50743,
-            50753,
-            52819,
-            52837,
-            52855,
-            52865
-          ]
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Packet_Array_Field_UnsizedElement_VariableCount",
-    "tests": [
-      {
-        "packed": "0f0003d2d3d40003d5d6d70003d0d9da0003dbdcdd0003dedfd80003e1e2e30003e4e5e600",
+        "packed": "0f00ffea00ffeb00ffec00ffed00ffee",
         "unpacked": {
           "array": [
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                210,
-                211,
-                212
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 234
             },
             {
-              "array": [
-                213,
-                214,
-                215
-              ]
+              "a": 0
             },
             {
-              "array": []
+              "a": 255
             },
             {
-              "array": [
-                208,
-                217,
-                218
-              ]
+              "a": 235
             },
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                219,
-                220,
-                221
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 236
             },
             {
-              "array": [
-                222,
-                223,
-                216
-              ]
+              "a": 0
             },
             {
-              "array": []
+              "a": 255
             },
             {
-              "array": [
-                225,
-                226,
-                227
-              ]
+              "a": 237
             },
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                228,
-                229,
-                230
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 238
             }
           ]
         }
@@ -1360,47 +1575,113 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_UnsizedElement_VariableSize",
+    "packet": "Packet_Array_Field_SizedElement_UnknownSize",
     "tests": [
       {
-        "packed": "0f0003eaebec0003edeeef0003e8f1f2",
+        "packed": "00ffe800fff100fff200fff300fff400fff500fff600fff700fff000fff900ff",
         "unpacked": {
           "array": [
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                234,
-                235,
-                236
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 232
             },
             {
-              "array": [
-                237,
-                238,
-                239
-              ]
+              "a": 0
             },
             {
-              "array": []
+              "a": 255
             },
             {
-              "array": [
-                232,
-                241,
-                242
-              ]
+              "a": 241
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 242
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 243
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 244
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 245
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 246
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 247
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 240
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 249
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
             }
           ]
         }
       },
       {
-        "packed": "00",
+        "packed": "",
         "unpacked": {
           "array": []
         }
@@ -1411,7 +1692,7 @@
     "packet": "Packet_Array_Field_UnsizedElement_ConstantSize",
     "tests": [
       {
-        "packed": "0003f6f7f00003f9fafb0003fcfdfe0003f80102",
+        "packed": "0003fbfcfd0003fef801",
         "unpacked": {
           "array": [
             {
@@ -1419,29 +1700,9 @@
             },
             {
               "array": [
-                246,
-                247,
-                240
-              ]
-            },
-            {
-              "array": []
-            },
-            {
-              "array": [
-                249,
-                250,
-                251
-              ]
-            },
-            {
-              "array": []
-            },
-            {
-              "array": [
+                251,
                 252,
-                253,
-                254
+                253
               ]
             },
             {
@@ -1449,9 +1710,9 @@
             },
             {
               "array": [
+                254,
                 248,
-                1,
-                2
+                1
               ]
             }
           ]
@@ -1460,10 +1721,10 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_UnsizedElement_SizeModifier",
+    "packet": "Packet_Array_Field_UnsizedElement_VariableSize",
     "tests": [
       {
-        "packed": "0d00030607000003090a0b00",
+        "packed": "0f0003050607000300090a00030b0c0d",
         "unpacked": {
           "array": [
             {
@@ -1471,9 +1732,9 @@
             },
             {
               "array": [
+                5,
                 6,
-                7,
-                0
+                7
               ]
             },
             {
@@ -1481,19 +1742,26 @@
             },
             {
               "array": [
+                0,
                 9,
-                10,
-                11
+                10
               ]
             },
             {
               "array": []
+            },
+            {
+              "array": [
+                11,
+                12,
+                13
+              ]
             }
           ]
         }
       },
       {
-        "packed": "02",
+        "packed": "00",
         "unpacked": {
           "array": []
         }
@@ -1501,37 +1769,52 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_SizedElement_VariableSize_Padded",
+    "packet": "Packet_Array_Field_UnsizedElement_VariableCount",
     "tests": [
       {
-        "packed": "0000000000000000000000000000000000",
-        "unpacked": {
-          "array": []
-        }
-      },
-      {
-        "packed": "0e0878108a109c10ae10b818ca18dc0000",
+        "packed": "0f00031112130003141516000317101900031a1b1c00031d1e1f0003182122000323242500",
         "unpacked": {
           "array": [
-            2168,
-            4234,
-            4252,
-            4270,
-            4280,
-            6346,
-            6364
-          ]
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Packet_Array_Field_UnsizedElement_VariableCount_Padded",
-    "tests": [
-      {
-        "packed": "0700031d1e1f0003182122000323242500",
-        "unpacked": {
-          "array": [
+            {
+              "array": []
+            },
+            {
+              "array": [
+                17,
+                18,
+                19
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                20,
+                21,
+                22
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                23,
+                16,
+                25
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                26,
+                27,
+                28
+              ]
+            },
             {
               "array": []
             },
@@ -1569,6 +1852,301 @@
         }
       },
       {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_UnsizedElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "0003292a2b00032c2d2e00032f283100033233340003353637000330393a00033b3c3d00033e3f3800034142430003444546000347404900034a4b4c00034d4e4f000348515200035354550003565750",
+        "unpacked": {
+          "array": [
+            {
+              "array": []
+            },
+            {
+              "array": [
+                41,
+                42,
+                43
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                44,
+                45,
+                46
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                47,
+                40,
+                49
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                50,
+                51,
+                52
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                53,
+                54,
+                55
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                48,
+                57,
+                58
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                59,
+                60,
+                61
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                62,
+                63,
+                56
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                65,
+                66,
+                67
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                68,
+                69,
+                70
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                71,
+                64,
+                73
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                74,
+                75,
+                76
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                77,
+                78,
+                79
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                72,
+                81,
+                82
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                83,
+                84,
+                85
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                86,
+                87,
+                80
+              ]
+            }
+          ]
+        }
+      },
+      {
+        "packed": "",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_UnsizedElement_SizeModifier",
+    "tests": [
+      {
+        "packed": "0d00035c5d5e00035f586100",
+        "unpacked": {
+          "array": [
+            {
+              "array": []
+            },
+            {
+              "array": [
+                92,
+                93,
+                94
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                95,
+                88,
+                97
+              ]
+            },
+            {
+              "array": []
+            }
+          ]
+        }
+      },
+      {
+        "packed": "02",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_SizedElement_VariableSize_Padded",
+    "tests": [
+      {
+        "packed": "0000000000000000000000000000000000",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0e632e63386b4a6b5c6b6e6b78738a0000",
+        "unpacked": {
+          "array": [
+            25390,
+            25400,
+            27466,
+            27484,
+            27502,
+            27512,
+            29578
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_UnsizedElement_VariableCount_Padded",
+    "tests": [
+      {
+        "packed": "07000373747500037677700003797a7b00",
+        "unpacked": {
+          "array": [
+            {
+              "array": []
+            },
+            {
+              "array": [
+                115,
+                116,
+                117
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                118,
+                119,
+                112
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                121,
+                122,
+                123
+              ]
+            },
+            {
+              "array": []
+            }
+          ]
+        }
+      },
+      {
         "packed": "0000000000000000000000000000000000",
         "unpacked": {
           "array": []
@@ -1596,10 +2174,10 @@
         "packet": "ScalarChild_A"
       },
       {
-        "packed": "000129",
+        "packed": "00017f",
         "unpacked": {
           "a": 0,
-          "b": 41
+          "b": 127
         },
         "packet": "ScalarChild_A"
       },
@@ -1620,10 +2198,10 @@
         "packet": "ScalarChild_B"
       },
       {
-        "packed": "01022953",
+        "packed": "01027c01",
         "unpacked": {
           "a": 1,
-          "c": 10579
+          "c": 31745
         },
         "packet": "ScalarChild_B"
       },
@@ -1644,10 +2222,10 @@
         "packet": "AliasedChild_A"
       },
       {
-        "packed": "02012f",
+        "packed": "020185",
         "unpacked": {
           "a": 2,
-          "b": 47
+          "b": 133
         },
         "packet": "AliasedChild_A"
       },
@@ -1668,10 +2246,10 @@
         "packet": "AliasedChild_B"
       },
       {
-        "packed": "03022981",
+        "packed": "03028437",
         "unpacked": {
           "a": 3,
-          "c": 10625
+          "c": 33847
         },
         "packet": "AliasedChild_B"
       }
@@ -1697,10 +2275,10 @@
         "packet": "EnumChild_A"
       },
       {
-        "packed": "aabb012c",
+        "packed": "aabb0182",
         "unpacked": {
           "a": 43707,
-          "b": 44
+          "b": 130
         },
         "packet": "EnumChild_A"
       },
@@ -1721,10 +2299,10 @@
         "packet": "EnumChild_B"
       },
       {
-        "packed": "ccdd02296e",
+        "packed": "ccdd02841c",
         "unpacked": {
           "a": 52445,
-          "c": 10606
+          "c": 33820
         },
         "packet": "EnumChild_B"
       }
@@ -1752,11 +2330,11 @@
         }
       },
       {
-        "packed": "319199a1a9b1bc01",
+        "packed": "84444c545c646f01",
         "unpacked": {
           "s": {
             "a": 1,
-            "c": 27904725774197624
+            "c": 74459583098702046
           }
         }
       },
@@ -1779,11 +2357,11 @@
         }
       },
       {
-        "packed": "319199a1a9b1bc02",
+        "packed": "84444c545c646f02",
         "unpacked": {
           "s": {
             "a": 2,
-            "c": 27904725774197624
+            "c": 74459583098702046
           }
         }
       }
@@ -1811,11 +2389,11 @@
         }
       },
       {
-        "packed": "39d1d9e1e9f1f800",
+        "packed": "8c848c949ca4ac00",
         "unpacked": {
           "s": {
             "a": 0,
-            "c": 8137403700410620
+            "c": 19776118031536726
           }
         }
       },
@@ -1838,38 +2416,38 @@
         }
       },
       {
-        "packed": "39d1d9e1e9f1f87f",
+        "packed": "8c848c949ca4ac7f",
         "unpacked": {
           "s": {
             "a": 127,
-            "c": 8137403700410620
+            "c": 19776118031536726
           }
         }
       },
       {
-        "packed": "0000000000000019",
+        "packed": "0000000000000047",
         "unpacked": {
           "s": {
-            "a": 25,
+            "a": 71,
             "c": 0
           }
         }
       },
       {
-        "packed": "fffffffffffffe19",
+        "packed": "fffffffffffffe47",
         "unpacked": {
           "s": {
-            "a": 25,
+            "a": 71,
             "c": 36028797018963967
           }
         }
       },
       {
-        "packed": "39d1d9e1e9f1f819",
+        "packed": "8c848c949ca4ac47",
         "unpacked": {
           "s": {
-            "a": 25,
-            "c": 8137403700410620
+            "a": 71,
+            "c": 19776118031536726
           }
         }
       }
@@ -1888,18 +2466,18 @@
         }
       },
       {
-        "packed": "000000000000000748494a4b4c4d4e",
+        "packed": "00000000000000079e9fa0a1a2a3a4",
         "unpacked": {
           "s": {
             "a": 0,
             "b": [
-              72,
-              73,
-              74,
-              75,
-              76,
-              77,
-              78
+              158,
+              159,
+              160,
+              161,
+              162,
+              163,
+              164
             ]
           }
         }
@@ -1914,44 +2492,44 @@
         }
       },
       {
-        "packed": "ffffffffffffffff48494a4b4c4d4e",
+        "packed": "ffffffffffffffff9e9fa0a1a2a3a4",
         "unpacked": {
           "s": {
             "a": 2305843009213693951,
             "b": [
-              72,
-              73,
-              74,
-              75,
-              76,
-              77,
-              78
+              158,
+              159,
+              160,
+              161,
+              162,
+              163,
+              164
             ]
           }
         }
       },
       {
-        "packed": "4105090d11151a38",
+        "packed": "965e62666a6e70e8",
         "unpacked": {
           "s": {
-            "a": 585645117384336199,
+            "a": 1354400743188975133,
             "b": []
           }
         }
       },
       {
-        "packed": "4105090d11151a3f48494a4b4c4d4e",
+        "packed": "965e62666a6e70ef9e9fa0a1a2a3a4",
         "unpacked": {
           "s": {
-            "a": 585645117384336199,
+            "a": 1354400743188975133,
             "b": [
-              72,
-              73,
-              74,
-              75,
-              76,
-              77,
-              78
+              158,
+              159,
+              160,
+              161,
+              162,
+              163,
+              164
             ]
           }
         }
@@ -1971,18 +2549,18 @@
         }
       },
       {
-        "packed": "00000000000000075758595a5b5c5d",
+        "packed": "0000000000000007adaeafa0b1b2b3",
         "unpacked": {
           "s": {
             "a": 0,
             "b": [
-              87,
-              88,
-              89,
-              90,
-              91,
-              92,
-              93
+              173,
+              174,
+              175,
+              160,
+              177,
+              178,
+              179
             ]
           }
         }
@@ -1997,44 +2575,44 @@
         }
       },
       {
-        "packed": "ffffffffffffffff5758595a5b5c5d",
+        "packed": "ffffffffffffffffadaeafa0b1b2b3",
         "unpacked": {
           "s": {
             "a": 2305843009213693951,
             "b": [
-              87,
-              88,
-              89,
-              90,
-              91,
-              92,
-              93
+              173,
+              174,
+              175,
+              160,
+              177,
+              178,
+              179
             ]
           }
         }
       },
       {
-        "packed": "27a828a929aa2ab0",
+        "packed": "d2d353d454d555e0",
         "unpacked": {
           "s": {
-            "a": 357197333822522710,
+            "a": 1898947267434031804,
             "b": []
           }
         }
       },
       {
-        "packed": "27a828a929aa2ab75758595a5b5c5d",
+        "packed": "d2d353d454d555e7adaeafa0b1b2b3",
         "unpacked": {
           "s": {
-            "a": 357197333822522710,
+            "a": 1898947267434031804,
             "b": [
-              87,
-              88,
-              89,
-              90,
-              91,
-              92,
-              93
+              173,
+              174,
+              175,
+              160,
+              177,
+              178,
+              179
             ]
           }
         }
@@ -2061,10 +2639,10 @@
         }
       },
       {
-        "packed": "55e5f60616263207",
+        "packed": "bb4b5b6b7b8b9d07",
         "unpacked": {
           "s": {
-            "b": 48356435694472292
+            "b": 105437353324517178
           }
         }
       }
@@ -2090,10 +2668,10 @@
         }
       },
       {
-        "packed": "6caccced0d2d5581",
+        "packed": "b77797b7d7f80081",
         "unpacked": {
           "s": {
-            "b": 61178587270240939
+            "b": 103282828492402689
           }
         }
       }
@@ -2145,12 +2723,12 @@
         }
       },
       {
-        "packed": "00005baf0a",
+        "packed": "0000f105f6",
         "unpacked": {
           "s": {
             "a": 0,
-            "b": 23471,
-            "crc": 10
+            "b": 61701,
+            "crc": 246
           }
         }
       },
@@ -2175,42 +2753,42 @@
         }
       },
       {
-        "packed": "ffff5baf08",
+        "packed": "fffff105f4",
         "unpacked": {
           "s": {
             "a": 65535,
-            "b": 23471,
-            "crc": 8
+            "b": 61701,
+            "crc": 244
           }
         }
       },
       {
-        "packed": "5b2d000088",
+        "packed": "f083000073",
         "unpacked": {
           "s": {
-            "a": 23341,
+            "a": 61571,
             "b": 0,
-            "crc": 136
+            "crc": 115
           }
         }
       },
       {
-        "packed": "5b2dffff86",
+        "packed": "f083ffff71",
         "unpacked": {
           "s": {
-            "a": 23341,
+            "a": 61571,
             "b": 65535,
-            "crc": 134
+            "crc": 113
           }
         }
       },
       {
-        "packed": "5b2d5baf92",
+        "packed": "f083f10569",
         "unpacked": {
           "s": {
-            "a": 23341,
-            "b": 23471,
-            "crc": 146
+            "a": 61571,
+            "b": 61701,
+            "crc": 105
           }
         }
       }
@@ -2242,13 +2820,13 @@
         }
       },
       {
-        "packed": "0000005df8",
+        "packed": "000000f34e",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
             "a": 0,
-            "b": 24056
+            "b": 62286
           }
         }
       },
@@ -2275,199 +2853,199 @@
         }
       },
       {
-        "packed": "00ffff5df8",
+        "packed": "00fffff34e",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
             "a": 65535,
-            "b": 24056
+            "b": 62286
           }
         }
       },
       {
-        "packed": "005d760000",
+        "packed": "00f2cc0000",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
-            "a": 23926,
+            "a": 62156,
             "b": 0
           }
         }
       },
       {
-        "packed": "005d76ffff",
+        "packed": "00f2ccffff",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
-            "a": 23926,
+            "a": 62156,
             "b": 65535
           }
         }
       },
       {
-        "packed": "005d765df8",
+        "packed": "00f2ccf34e",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
-            "a": 23926,
-            "b": 24056
+            "a": 62156,
+            "b": 62286
           }
         }
       },
       {
-        "packed": "70717273743a00000000",
+        "packed": "c6c7c8c9cae800000000",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
+            "crc": 232,
             "a": 0,
             "b": 0
           }
         }
       },
       {
-        "packed": "70717273743a0000ffff",
+        "packed": "c6c7c8c9cae80000ffff",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
+            "crc": 232,
             "a": 0,
             "b": 65535
           }
         }
       },
       {
-        "packed": "70717273743a00005df8",
+        "packed": "c6c7c8c9cae80000f34e",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
+            "crc": 232,
             "a": 0,
-            "b": 24056
+            "b": 62286
           }
         }
       },
       {
-        "packed": "70717273743affff0000",
+        "packed": "c6c7c8c9cae8ffff0000",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
+            "crc": 232,
             "a": 65535,
             "b": 0
           }
         }
       },
       {
-        "packed": "70717273743affffffff",
+        "packed": "c6c7c8c9cae8ffffffff",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
+            "crc": 232,
             "a": 65535,
             "b": 65535
           }
         }
       },
       {
-        "packed": "70717273743affff5df8",
+        "packed": "c6c7c8c9cae8fffff34e",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
+            "crc": 232,
             "a": 65535,
-            "b": 24056
+            "b": 62286
           }
         }
       },
       {
-        "packed": "70717273743a5d760000",
+        "packed": "c6c7c8c9cae8f2cc0000",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
-            "a": 23926,
+            "crc": 232,
+            "a": 62156,
             "b": 0
           }
         }
       },
       {
-        "packed": "70717273743a5d76ffff",
+        "packed": "c6c7c8c9cae8f2ccffff",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
-            "a": 23926,
+            "crc": 232,
+            "a": 62156,
             "b": 65535
           }
         }
       },
       {
-        "packed": "70717273743a5d765df8",
+        "packed": "c6c7c8c9cae8f2ccf34e",
         "unpacked": {
           "s": {
             "payload": [
-              112,
-              113,
-              114,
-              115,
-              116
+              198,
+              199,
+              200,
+              201,
+              202
             ],
-            "crc": 58,
-            "a": 23926,
-            "b": 24056
+            "crc": 232,
+            "a": 62156,
+            "b": 62286
           }
         }
       }
@@ -2488,16 +3066,16 @@
         }
       },
       {
-        "packed": "00037a7b7c",
+        "packed": "0003d0d1d2",
         "unpacked": {
           "a": {
             "a": 0
           },
           "b": {
             "array": [
-              122,
-              123,
-              124
+              208,
+              209,
+              210
             ]
           }
         }
@@ -2514,25 +3092,25 @@
         }
       },
       {
-        "packed": "ff037a7b7c",
+        "packed": "ff03d0d1d2",
         "unpacked": {
           "a": {
             "a": 255
           },
           "b": {
             "array": [
-              122,
-              123,
-              124
+              208,
+              209,
+              210
             ]
           }
         }
       },
       {
-        "packed": "7900",
+        "packed": "cf00",
         "unpacked": {
           "a": {
-            "a": 121
+            "a": 207
           },
           "b": {
             "array": []
@@ -2540,16 +3118,16 @@
         }
       },
       {
-        "packed": "79037a7b7c",
+        "packed": "cf03d0d1d2",
         "unpacked": {
           "a": {
-            "a": 121
+            "a": 207
           },
           "b": {
             "array": [
-              122,
-              123,
-              124
+              208,
+              209,
+              210
             ]
           }
         }
@@ -2557,17 +3135,17 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_ScalarElement",
+    "packet": "Struct_Array_Field_ByteElement_ConstantSize",
     "tests": [
       {
-        "packed": "5f7e5fc0a042a0c4",
+        "packed": "d3d4d5d6",
         "unpacked": {
           "s": {
             "array": [
-              24446,
-              24512,
-              41026,
-              41156
+              211,
+              212,
+              213,
+              214
             ]
           }
         }
@@ -2575,7 +3153,215 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_EnumElement",
+    "packet": "Struct_Array_Field_ByteElement_VariableSize",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0fd7d8d9dadbdcdddedfe0e1e2e3e4e5",
+        "unpacked": {
+          "s": {
+            "array": [
+              215,
+              216,
+              217,
+              218,
+              219,
+              220,
+              221,
+              222,
+              223,
+              224,
+              225,
+              226,
+              227,
+              228,
+              229
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ByteElement_VariableCount",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0fe6e7e8e9eaebecedeeeff0f1f2f3f4",
+        "unpacked": {
+          "s": {
+            "array": [
+              230,
+              231,
+              232,
+              233,
+              234,
+              235,
+              236,
+              237,
+              238,
+              239,
+              240,
+              241,
+              242,
+              243,
+              244
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ByteElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "f5f6f7",
+        "unpacked": {
+          "s": {
+            "array": [
+              245,
+              246,
+              247
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ScalarElement_ConstantSize",
+    "tests": [
+      {
+        "packed": "fe39febbff3dff80",
+        "unpacked": {
+          "s": {
+            "array": [
+              65081,
+              65211,
+              65341,
+              65408
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ScalarElement_VariableSize",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0e004200c4014601c8024a02cc034e",
+        "unpacked": {
+          "s": {
+            "array": [
+              66,
+              196,
+              326,
+              456,
+              586,
+              716,
+              846
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ScalarElement_VariableCount",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0f03d0045204d4055605d8065a06dc075e07e0086208e4096609e80a6a0aec",
+        "unpacked": {
+          "s": {
+            "array": [
+              976,
+              1106,
+              1236,
+              1366,
+              1496,
+              1626,
+              1756,
+              1886,
+              2016,
+              2146,
+              2276,
+              2406,
+              2536,
+              2666,
+              2796
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ScalarElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0b6e0bf00c72",
+        "unpacked": {
+          "s": {
+            "array": [
+              2926,
+              3056,
+              3186
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_EnumElement_ConstantSize",
     "tests": [
       {
         "packed": "aabbccddaabbccdd",
@@ -2593,10 +3379,130 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_SizedStructElement",
+    "packet": "Struct_Array_Field_EnumElement_VariableSize",
     "tests": [
       {
-        "packed": "00ff8500",
+        "packed": "0eaabbccddaabbccddaabbccddaabb",
+        "unpacked": {
+          "s": {
+            "array": [
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707
+            ]
+          }
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_EnumElement_VariableCount",
+    "tests": [
+      {
+        "packed": "0faabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabb",
+        "unpacked": {
+          "s": {
+            "array": [
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707
+            ]
+          }
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_EnumElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "aabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccddaabbccdd",
+        "unpacked": {
+          "s": {
+            "array": [
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445
+            ]
+          }
+        }
+      },
+      {
+        "packed": "",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_SizedElement_ConstantSize",
+    "tests": [
+      {
+        "packed": "00ff3300",
         "unpacked": {
           "s": {
             "array": [
@@ -2607,7 +3513,7 @@
                 "a": 255
               },
               {
-                "a": 133
+                "a": 51
               },
               {
                 "a": 0
@@ -2619,36 +3525,69 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_UnsizedStructElement",
+    "packet": "Struct_Array_Field_SizedElement_VariableSize",
     "tests": [
       {
-        "packed": "000387888900038a8b8c",
+        "packed": "0f00ff3500ff3600ff3700ff3800ff39",
         "unpacked": {
           "s": {
             "array": [
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  135,
-                  136,
-                  137
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 53
               },
               {
-                "array": [
-                  138,
-                  139,
-                  140
-                ]
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 54
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 55
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 56
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 57
               }
             ]
           }
         }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
       }
     ]
   },
@@ -2656,170 +3595,54 @@
     "packet": "Struct_Array_Field_SizedElement_VariableCount",
     "tests": [
       {
-        "packed": "00",
-        "unpacked": {
-          "s": {
-            "array": []
-          }
-        }
-      },
-      {
-        "packed": "0fa411a493a515a597a619a69ba71da79fa821a8a3a925a9a7aa29aaabab2d",
-        "unpacked": {
-          "s": {
-            "array": [
-              42001,
-              42131,
-              42261,
-              42391,
-              42521,
-              42651,
-              42781,
-              42911,
-              43041,
-              43171,
-              43301,
-              43431,
-              43561,
-              43691,
-              43821
-            ]
-          }
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Struct_Array_Field_SizedElement_VariableSize",
-    "tests": [
-      {
-        "packed": "00",
-        "unpacked": {
-          "s": {
-            "array": []
-          }
-        }
-      },
-      {
-        "packed": "0eabafac31acb3ad35adb7ae39aebb",
-        "unpacked": {
-          "s": {
-            "array": [
-              43951,
-              44081,
-              44211,
-              44341,
-              44471,
-              44601,
-              44731
-            ]
-          }
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Struct_Array_Field_SizedElement_ConstantSize",
-    "tests": [
-      {
-        "packed": "af3dafbfb001f083f105f187f209f28b",
-        "unpacked": {
-          "s": {
-            "array": [
-              44861,
-              44991,
-              45057,
-              61571,
-              61701,
-              61831,
-              61961,
-              62091
-            ]
-          }
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Struct_Array_Field_UnsizedElement_VariableCount",
-    "tests": [
-      {
-        "packed": "0f0003cccdce0003cfd0d10003d2d3d40003d5d6d70003d8d9da0003dbdcdd0003dedfe000",
+        "packed": "0f00ff3b00ff3c00ff3d00ff3e00ff3f",
         "unpacked": {
           "s": {
             "array": [
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  204,
-                  205,
-                  206
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 59
               },
               {
-                "array": [
-                  207,
-                  208,
-                  209
-                ]
+                "a": 0
               },
               {
-                "array": []
+                "a": 255
               },
               {
-                "array": [
-                  210,
-                  211,
-                  212
-                ]
+                "a": 60
               },
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  213,
-                  214,
-                  215
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 61
               },
               {
-                "array": [
-                  216,
-                  217,
-                  218
-                ]
+                "a": 0
               },
               {
-                "array": []
+                "a": 255
               },
               {
-                "array": [
-                  219,
-                  220,
-                  221
-                ]
+                "a": 62
               },
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  222,
-                  223,
-                  224
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 63
               }
             ]
           }
@@ -2836,49 +3659,115 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_UnsizedElement_VariableSize",
+    "packet": "Struct_Array_Field_SizedElement_UnknownSize",
     "tests": [
       {
-        "packed": "0f0003e4e5e60003e7e8e90003eaebec",
+        "packed": "00ff4100ff4200ff4300ff4400ff4500ff4600ff4700ff4800ff4900ff4a00ff",
         "unpacked": {
           "s": {
             "array": [
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  228,
-                  229,
-                  230
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 65
               },
               {
-                "array": [
-                  231,
-                  232,
-                  233
-                ]
+                "a": 0
               },
               {
-                "array": []
+                "a": 255
               },
               {
-                "array": [
-                  234,
-                  235,
-                  236
-                ]
+                "a": 66
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 67
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 68
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 69
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 70
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 71
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 72
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 73
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 74
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
               }
             ]
           }
         }
       },
       {
-        "packed": "00",
+        "packed": "",
         "unpacked": {
           "s": {
             "array": []
@@ -2891,7 +3780,7 @@
     "packet": "Struct_Array_Field_UnsizedElement_ConstantSize",
     "tests": [
       {
-        "packed": "0003f0f1f20003f3f4f50003f6f7f80003f9fafb",
+        "packed": "00034c4d4e00034f5051",
         "unpacked": {
           "s": {
             "array": [
@@ -2900,9 +3789,9 @@
               },
               {
                 "array": [
-                  240,
-                  241,
-                  242
+                  76,
+                  77,
+                  78
                 ]
               },
               {
@@ -2910,29 +3799,9 @@
               },
               {
                 "array": [
-                  243,
-                  244,
-                  245
-                ]
-              },
-              {
-                "array": []
-              },
-              {
-                "array": [
-                  246,
-                  247,
-                  248
-                ]
-              },
-              {
-                "array": []
-              },
-              {
-                "array": [
-                  249,
-                  250,
-                  251
+                  79,
+                  80,
+                  81
                 ]
               }
             ]
@@ -2942,10 +3811,10 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_UnsizedElement_SizeModifier",
+    "packet": "Struct_Array_Field_UnsizedElement_VariableSize",
     "tests": [
       {
-        "packed": "0d0003c00102000303040500",
+        "packed": "0f0003555657000358595a00035b5c5d",
         "unpacked": {
           "s": {
             "array": [
@@ -2954,9 +3823,9 @@
               },
               {
                 "array": [
-                  192,
-                  1,
-                  2
+                  85,
+                  86,
+                  87
                 ]
               },
               {
@@ -2964,9 +3833,338 @@
               },
               {
                 "array": [
-                  3,
-                  4,
-                  5
+                  88,
+                  89,
+                  90
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  91,
+                  92,
+                  93
+                ]
+              }
+            ]
+          }
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_UnsizedElement_VariableCount",
+    "tests": [
+      {
+        "packed": "0f00036162630003646566000367686900036a6b6c00036d6e6f0003707172000373747500",
+        "unpacked": {
+          "s": {
+            "array": [
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  97,
+                  98,
+                  99
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  100,
+                  101,
+                  102
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  103,
+                  104,
+                  105
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  106,
+                  107,
+                  108
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  109,
+                  110,
+                  111
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  112,
+                  113,
+                  114
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  115,
+                  116,
+                  117
+                ]
+              },
+              {
+                "array": []
+              }
+            ]
+          }
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_UnsizedElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "0003797a7b00037c7d7e00037f408100038283840003858687000388898a00038b8c8d00038e8f9000039192930003949596000397989900039a9b9c00039d9e9f0003a0a1a20003a3a4a50003a6a7a8",
+        "unpacked": {
+          "s": {
+            "array": [
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  121,
+                  122,
+                  123
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  124,
+                  125,
+                  126
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  127,
+                  64,
+                  129
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  130,
+                  131,
+                  132
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  133,
+                  134,
+                  135
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  136,
+                  137,
+                  138
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  139,
+                  140,
+                  141
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  142,
+                  143,
+                  144
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  145,
+                  146,
+                  147
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  148,
+                  149,
+                  150
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  151,
+                  152,
+                  153
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  154,
+                  155,
+                  156
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  157,
+                  158,
+                  159
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  160,
+                  161,
+                  162
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  163,
+                  164,
+                  165
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  166,
+                  167,
+                  168
+                ]
+              }
+            ]
+          }
+        }
+      },
+      {
+        "packed": "",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_UnsizedElement_SizeModifier",
+    "tests": [
+      {
+        "packed": "0d0003acadae0003afb0b100",
+        "unpacked": {
+          "s": {
+            "array": [
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  172,
+                  173,
+                  174
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  175,
+                  176,
+                  177
                 ]
               },
               {
@@ -2998,17 +4196,17 @@
         }
       },
       {
-        "packed": "0e024a02cc034e03d0045204d405560000",
+        "packed": "0ead76adf8ae7aaefcaf7eafc0f0420000",
         "unpacked": {
           "s": {
             "array": [
-              586,
-              716,
-              846,
-              976,
-              1106,
-              1236,
-              1366
+              44406,
+              44536,
+              44666,
+              44796,
+              44926,
+              44992,
+              61506
             ]
           }
         }
@@ -3019,7 +4217,7 @@
     "packet": "Struct_Array_Field_UnsizedElement_VariableCount_Padded",
     "tests": [
       {
-        "packed": "07000317181900031a1b1c00031d1e1f00",
+        "packed": "070003c3c4c50003c6c7c80003c9cacb00",
         "unpacked": {
           "s": {
             "array": [
@@ -3028,9 +4226,9 @@
               },
               {
                 "array": [
-                  23,
-                  24,
-                  25
+                  195,
+                  196,
+                  197
                 ]
               },
               {
@@ -3038,9 +4236,9 @@
               },
               {
                 "array": [
-                  26,
-                  27,
-                  28
+                  198,
+                  199,
+                  200
                 ]
               },
               {
@@ -3048,9 +4246,9 @@
               },
               {
                 "array": [
-                  29,
-                  30,
-                  31
+                  201,
+                  202,
+                  203
                 ]
               },
               {
diff --git a/tools/pdl/tests/canonical/le_test_file.pdl b/tools/pdl/tests/canonical/le_test_file.pdl
index fa06829..a6c7610 100644
--- a/tools/pdl/tests/canonical/le_test_file.pdl
+++ b/tools/pdl/tests/canonical/le_test_file.pdl
@@ -228,76 +228,113 @@
     a: UnsizedCustomField,
 }
 
-// Array fields
-// Array element types
+// Array field configurations.
+// Add constructs for all configurations of type, size, and padding:
+//
+// - type: u8, u16, enum, struct with static size, struct with dynamic size
+// - size: constant, with size field, with count field, unspecified
+//
+// The type u8 is tested separately since it is likely to be handled
+// idiomatically by the specific language generators.
 
-// Array with scalar elements.
-packet Packet_Array_Field_ScalarElement {
+packet Packet_Array_Field_ByteElement_ConstantSize {
+    array: 8[4],
+}
+
+packet Packet_Array_Field_ByteElement_VariableSize {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: 8[],
+}
+
+packet Packet_Array_Field_ByteElement_VariableCount {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: 8[],
+}
+
+packet Packet_Array_Field_ByteElement_UnknownSize {
+    array: 8[],
+}
+
+packet Packet_Array_Field_ScalarElement_ConstantSize {
     array: 16[4],
 }
 
-// Array with enum elements.
-packet Packet_Array_Field_EnumElement {
-    array: Enum16[4],
-}
-
-// Array with sized structure elements.
-packet Packet_Array_Field_SizedStructElement {
-    array: SizedStruct[4],
-}
-
-// Array with variable sized structure elements.
-packet Packet_Array_Field_UnsizedStructElement {
-    array: UnsizedStruct[4],
-}
-
-// Array configurations
-
-// Array with sized elements, and a variable count.
-// The parser must extract as many elements as specified by the count from
-// the remaining span. The parser should generate a dynamic array size guard.
-packet Packet_Array_Field_SizedElement_VariableCount {
-    _count_(array) : 4,
-    _reserved_: 4,
-    array: 16[],
-}
-
-// The parser must extract as many elements as possible from
-// the span with the specified size. The parser should generate a
-// dynamic array size guard.
-packet Packet_Array_Field_SizedElement_VariableSize {
+packet Packet_Array_Field_ScalarElement_VariableSize {
     _size_(array) : 4,
     _reserved_: 4,
     array: 16[],
 }
 
-// The parser must extract as many elements as specified by the
-// static array count. The parser should generate a static array size guard.
-packet Packet_Array_Field_SizedElement_ConstantSize {
-    array: 16[8],
-}
-
-// The parser must extract as many elements as specified by the count from
-// the remaining span. No size guard possible.
-packet Packet_Array_Field_UnsizedElement_VariableCount {
+packet Packet_Array_Field_ScalarElement_VariableCount {
     _count_(array) : 4,
     _reserved_: 4,
-    array: UnsizedStruct[],
+    array: 16[],
 }
 
-// The parser must extract as many elements as possible from
-// the span with the specified size. The parser should generate a
-// dynamic array size guard.
+packet Packet_Array_Field_ScalarElement_UnknownSize {
+    array: 16[],
+}
+
+packet Packet_Array_Field_EnumElement_ConstantSize {
+    array: Enum16[4],
+}
+
+packet Packet_Array_Field_EnumElement_VariableSize {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: Enum16[],
+}
+
+packet Packet_Array_Field_EnumElement_VariableCount {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: Enum16[],
+}
+
+packet Packet_Array_Field_EnumElement_UnknownSize {
+    array: Enum16[],
+}
+
+packet Packet_Array_Field_SizedElement_ConstantSize {
+    array: SizedStruct[4],
+}
+
+packet Packet_Array_Field_SizedElement_VariableSize {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: SizedStruct[],
+}
+
+packet Packet_Array_Field_SizedElement_VariableCount {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: SizedStruct[],
+}
+
+packet Packet_Array_Field_SizedElement_UnknownSize {
+    array: SizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_ConstantSize {
+    array: UnsizedStruct[4],
+}
+
 packet Packet_Array_Field_UnsizedElement_VariableSize {
     _size_(array) : 4,
     _reserved_: 4,
     array: UnsizedStruct[],
 }
 
-// The parser must extract as many elements as specified by the
-// static array count. No size guard possible.
-packet Packet_Array_Field_UnsizedElement_ConstantSize {
-    array: UnsizedStruct[8],
+packet Packet_Array_Field_UnsizedElement_VariableCount {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: UnsizedStruct[],
+}
+
+packet Packet_Array_Field_UnsizedElement_UnknownSize {
+    array: UnsizedStruct[],
 }
 
 // The parser must support complex size modifiers on arrays whose size is
@@ -535,90 +572,150 @@
     s: Struct_Custom_Field_VariableSize_,
 }
 
-// Array fields
-// Array element types
+// Array field configurations.
+// Add constructs for all configurations of type, size, and padding:
+//
+// - type: u8, u16, enum, struct with static size, struct with dynamic size
+// - size: constant, with size field, with count field, unspecified
+//
+// The type u8 is tested separately since it is likely to be handled
+// idiomatically by the specific language generators.
 
-// Array with scalar elements.
-struct Struct_Array_Field_ScalarElement_ {
-    array: 16[4],
+struct Struct_Array_Field_ByteElement_ConstantSize_ {
+    array: 8[4],
 }
-packet Struct_Array_Field_ScalarElement {
-    s: Struct_Array_Field_ScalarElement_,
+packet Struct_Array_Field_ByteElement_ConstantSize {
+    s: Struct_Array_Field_ByteElement_ConstantSize_,
 }
 
-// Array with enum elements.
-struct Struct_Array_Field_EnumElement_ {
-    array: Enum16[4],
+struct Struct_Array_Field_ByteElement_VariableSize_ {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: 8[],
 }
-packet Struct_Array_Field_EnumElement {
-    s: Struct_Array_Field_EnumElement_,
+packet Struct_Array_Field_ByteElement_VariableSize {
+    s: Struct_Array_Field_ByteElement_VariableSize_,
 }
 
-// Array with sized structure elements.
-struct Struct_Array_Field_SizedStructElement_ {
-    array: SizedStruct[4],
-}
-packet Struct_Array_Field_SizedStructElement {
-    s: Struct_Array_Field_SizedStructElement_,
-}
-
-// Array with variable sized structure elements.
-struct Struct_Array_Field_UnsizedStructElement_ {
-    array: UnsizedStruct[4],
-}
-packet Struct_Array_Field_UnsizedStructElement {
-    s: Struct_Array_Field_UnsizedStructElement_,
-}
-
-// Array configurations
-
-// Array with sized elements, and a variable count.
-// The parser must extract as many elements as specified by the count from
-// the remaining span. The parser should generate a dynamic array size guard.
-struct Struct_Array_Field_SizedElement_VariableCount_ {
+struct Struct_Array_Field_ByteElement_VariableCount_ {
     _count_(array) : 4,
     _reserved_: 4,
-    array: 16[],
+    array: 8[],
 }
-packet Struct_Array_Field_SizedElement_VariableCount {
-    s: Struct_Array_Field_SizedElement_VariableCount_,
+packet Struct_Array_Field_ByteElement_VariableCount {
+    s: Struct_Array_Field_ByteElement_VariableCount_,
 }
 
-// The parser must extract as many elements as possible from
-// the span with the specified size. The parser should generate a
-// dynamic array size guard.
-struct Struct_Array_Field_SizedElement_VariableSize_ {
+struct Struct_Array_Field_ByteElement_UnknownSize_ {
+    array: 8[],
+}
+packet Struct_Array_Field_ByteElement_UnknownSize {
+    s: Struct_Array_Field_ByteElement_UnknownSize_,
+}
+
+struct Struct_Array_Field_ScalarElement_ConstantSize_ {
+    array: 16[4],
+}
+packet Struct_Array_Field_ScalarElement_ConstantSize {
+    s: Struct_Array_Field_ScalarElement_ConstantSize_,
+}
+
+struct Struct_Array_Field_ScalarElement_VariableSize_ {
     _size_(array) : 4,
     _reserved_: 4,
     array: 16[],
 }
-packet Struct_Array_Field_SizedElement_VariableSize {
-    s: Struct_Array_Field_SizedElement_VariableSize_,
+packet Struct_Array_Field_ScalarElement_VariableSize {
+    s: Struct_Array_Field_ScalarElement_VariableSize_,
 }
 
-// The parser must extract as many elements as specified by the
-// static array count. The parser should generate a static array size guard.
+struct Struct_Array_Field_ScalarElement_VariableCount_ {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: 16[],
+}
+packet Struct_Array_Field_ScalarElement_VariableCount {
+    s: Struct_Array_Field_ScalarElement_VariableCount_,
+}
+
+struct Struct_Array_Field_ScalarElement_UnknownSize_ {
+    array: 16[],
+}
+packet Struct_Array_Field_ScalarElement_UnknownSize {
+    s: Struct_Array_Field_ScalarElement_UnknownSize_,
+}
+
+struct Struct_Array_Field_EnumElement_ConstantSize_ {
+    array: Enum16[4],
+}
+packet Struct_Array_Field_EnumElement_ConstantSize {
+    s: Struct_Array_Field_EnumElement_ConstantSize_,
+}
+
+struct Struct_Array_Field_EnumElement_VariableSize_ {
+    _size_(array) : 4,
+    _reserved_: 4,
+    array: Enum16[],
+}
+packet Struct_Array_Field_EnumElement_VariableSize {
+    s: Struct_Array_Field_EnumElement_VariableSize_,
+}
+
+struct Struct_Array_Field_EnumElement_VariableCount_ {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: Enum16[],
+}
+packet Struct_Array_Field_EnumElement_VariableCount {
+    s: Struct_Array_Field_EnumElement_VariableCount_,
+}
+
+struct Struct_Array_Field_EnumElement_UnknownSize_ {
+    array: Enum16[],
+}
+packet Struct_Array_Field_EnumElement_UnknownSize {
+    s: Struct_Array_Field_EnumElement_UnknownSize_,
+}
+
 struct Struct_Array_Field_SizedElement_ConstantSize_ {
-    array: 16[8],
+    array: SizedStruct[4],
 }
 packet Struct_Array_Field_SizedElement_ConstantSize {
     s: Struct_Array_Field_SizedElement_ConstantSize_,
 }
 
-// The parser must extract as many elements as specified by the count from
-// the remaining span. No size guard possible.
-struct Struct_Array_Field_UnsizedElement_VariableCount_ {
-    _count_(array) : 4,
+struct Struct_Array_Field_SizedElement_VariableSize_ {
+    _size_(array) : 4,
     _reserved_: 4,
-    array: UnsizedStruct[],
+    array: SizedStruct[],
 }
-packet Struct_Array_Field_UnsizedElement_VariableCount {
-    s: Struct_Array_Field_UnsizedElement_VariableCount_,
+packet Struct_Array_Field_SizedElement_VariableSize {
+    s: Struct_Array_Field_SizedElement_VariableSize_,
 }
 
-// The parser must extract as many elements as possible from
-// the span with the specified size. The parser should generate a
-// dynamic array size guard.
+struct Struct_Array_Field_SizedElement_VariableCount_ {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: SizedStruct[],
+}
+packet Struct_Array_Field_SizedElement_VariableCount {
+    s: Struct_Array_Field_SizedElement_VariableCount_,
+}
+
+struct Struct_Array_Field_SizedElement_UnknownSize_ {
+    array: SizedStruct[],
+}
+packet Struct_Array_Field_SizedElement_UnknownSize {
+    s: Struct_Array_Field_SizedElement_UnknownSize_,
+}
+
+struct Struct_Array_Field_UnsizedElement_ConstantSize_ {
+    array: UnsizedStruct[4],
+}
+packet Struct_Array_Field_UnsizedElement_ConstantSize {
+    s: Struct_Array_Field_UnsizedElement_ConstantSize_,
+}
+
 struct Struct_Array_Field_UnsizedElement_VariableSize_ {
     _size_(array) : 4,
     _reserved_: 4,
@@ -628,13 +725,20 @@
     s: Struct_Array_Field_UnsizedElement_VariableSize_,
 }
 
-// The parser must extract as many elements as specified by the
-// static array count. No size guard possible.
-struct Struct_Array_Field_UnsizedElement_ConstantSize_ {
-    array: UnsizedStruct[8],
+struct Struct_Array_Field_UnsizedElement_VariableCount_ {
+    _count_(array) : 4,
+    _reserved_: 4,
+    array: UnsizedStruct[],
 }
-packet Struct_Array_Field_UnsizedElement_ConstantSize {
-    s: Struct_Array_Field_UnsizedElement_ConstantSize_,
+packet Struct_Array_Field_UnsizedElement_VariableCount {
+    s: Struct_Array_Field_UnsizedElement_VariableCount_,
+}
+
+struct Struct_Array_Field_UnsizedElement_UnknownSize_ {
+    array: UnsizedStruct[],
+}
+packet Struct_Array_Field_UnsizedElement_UnknownSize {
+    s: Struct_Array_Field_UnsizedElement_UnknownSize_,
 }
 
 // The parser must support complex size modifiers on arrays whose size is
diff --git a/tools/pdl/tests/canonical/le_test_vectors.json b/tools/pdl/tests/canonical/le_test_vectors.json
index 1598e90..243952c 100644
--- a/tools/pdl/tests/canonical/le_test_vectors.json
+++ b/tools/pdl/tests/canonical/le_test_vectors.json
@@ -1103,23 +1103,205 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_ScalarElement",
+    "packet": "Packet_Array_Field_ByteElement_ConstantSize",
     "tests": [
       {
-        "packed": "1c842e8438844a8c",
+        "packed": "83848586",
         "unpacked": {
           "array": [
-            33820,
-            33838,
-            33848,
-            35914
+            131,
+            132,
+            133,
+            134
           ]
         }
       }
     ]
   },
   {
-    "packet": "Packet_Array_Field_EnumElement",
+    "packet": "Packet_Array_Field_ByteElement_VariableSize",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0f8780898a8b8c8d8e8f889192939495",
+        "unpacked": {
+          "array": [
+            135,
+            128,
+            137,
+            138,
+            139,
+            140,
+            141,
+            142,
+            143,
+            136,
+            145,
+            146,
+            147,
+            148,
+            149
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ByteElement_VariableCount",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0f969790999a9b9c9d9e9f98a1a2a3a4",
+        "unpacked": {
+          "array": [
+            150,
+            151,
+            144,
+            153,
+            154,
+            155,
+            156,
+            157,
+            158,
+            159,
+            152,
+            161,
+            162,
+            163,
+            164
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ByteElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "a5a6a7",
+        "unpacked": {
+          "array": [
+            165,
+            166,
+            167
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ScalarElement_ConstantSize",
+    "tests": [
+      {
+        "packed": "41a553ad65ad77ad",
+        "unpacked": {
+          "array": [
+            42305,
+            44371,
+            44389,
+            44407
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ScalarElement_VariableSize",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0e81ad93b5a5b5b7b5c1b5d3bde5bd",
+        "unpacked": {
+          "array": [
+            44417,
+            46483,
+            46501,
+            46519,
+            46529,
+            48595,
+            48613
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ScalarElement_VariableCount",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0ff7bd01be13c625c637c641c653ce65ce77ce81ce93d6a5d6b7d6c1d6d3de",
+        "unpacked": {
+          "array": [
+            48631,
+            48641,
+            50707,
+            50725,
+            50743,
+            50753,
+            52819,
+            52837,
+            52855,
+            52865,
+            54931,
+            54949,
+            54967,
+            54977,
+            57043
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_ScalarElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "e5def7de01df",
+        "unpacked": {
+          "array": [
+            57061,
+            57079,
+            57089
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_EnumElement_ConstantSize",
     "tests": [
       {
         "packed": "bbaaddccbbaaddcc",
@@ -1135,10 +1317,118 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_SizedStructElement",
+    "packet": "Packet_Array_Field_EnumElement_VariableSize",
     "tests": [
       {
-        "packed": "00ff8b00",
+        "packed": "0ebbaaddccbbaaddccbbaaddccbbaa",
+        "unpacked": {
+          "array": [
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707
+          ]
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_EnumElement_VariableCount",
+    "tests": [
+      {
+        "packed": "0fbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaa",
+        "unpacked": {
+          "array": [
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707
+          ]
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_EnumElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "bbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddcc",
+        "unpacked": {
+          "array": [
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445,
+            43707,
+            52445
+          ]
+        }
+      },
+      {
+        "packed": "",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_SizedElement_ConstantSize",
+    "tests": [
+      {
+        "packed": "00ffe200",
         "unpacked": {
           "array": [
             {
@@ -1148,7 +1438,7 @@
               "a": 255
             },
             {
-              "a": 139
+              "a": 226
             },
             {
               "a": 0
@@ -1159,34 +1449,65 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_UnsizedStructElement",
+    "packet": "Packet_Array_Field_SizedElement_VariableSize",
     "tests": [
       {
-        "packed": "00038d8e8f0003889192",
+        "packed": "0f00ffe400ffe500ffe600ffe700ffe0",
         "unpacked": {
           "array": [
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                141,
-                142,
-                143
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 228
             },
             {
-              "array": [
-                136,
-                145,
-                146
-              ]
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 229
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 230
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 231
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 224
             }
           ]
         }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
       }
     ]
   },
@@ -1194,159 +1515,53 @@
     "packet": "Packet_Array_Field_SizedElement_VariableCount",
     "tests": [
       {
-        "packed": "00",
-        "unpacked": {
-          "array": []
-        }
-      },
-      {
-        "packed": "0fb794c194d39ce59cf79c019d13a525a537a541a553ad65ad77ad81ad93b5",
-        "unpacked": {
-          "array": [
-            38071,
-            38081,
-            40147,
-            40165,
-            40183,
-            40193,
-            42259,
-            42277,
-            42295,
-            42305,
-            44371,
-            44389,
-            44407,
-            44417,
-            46483
-          ]
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Packet_Array_Field_SizedElement_VariableSize",
-    "tests": [
-      {
-        "packed": "00",
-        "unpacked": {
-          "array": []
-        }
-      },
-      {
-        "packed": "0ea5b5b7b5c1b5d3bde5bdf7bd01be",
-        "unpacked": {
-          "array": [
-            46501,
-            46519,
-            46529,
-            48595,
-            48613,
-            48631,
-            48641
-          ]
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Packet_Array_Field_SizedElement_ConstantSize",
-    "tests": [
-      {
-        "packed": "13c625c637c641c653ce65ce77ce81ce",
-        "unpacked": {
-          "array": [
-            50707,
-            50725,
-            50743,
-            50753,
-            52819,
-            52837,
-            52855,
-            52865
-          ]
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Packet_Array_Field_UnsizedElement_VariableCount",
-    "tests": [
-      {
-        "packed": "0f0003d2d3d40003d5d6d70003d0d9da0003dbdcdd0003dedfd80003e1e2e30003e4e5e600",
+        "packed": "0f00ffea00ffeb00ffec00ffed00ffee",
         "unpacked": {
           "array": [
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                210,
-                211,
-                212
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 234
             },
             {
-              "array": [
-                213,
-                214,
-                215
-              ]
+              "a": 0
             },
             {
-              "array": []
+              "a": 255
             },
             {
-              "array": [
-                208,
-                217,
-                218
-              ]
+              "a": 235
             },
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                219,
-                220,
-                221
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 236
             },
             {
-              "array": [
-                222,
-                223,
-                216
-              ]
+              "a": 0
             },
             {
-              "array": []
+              "a": 255
             },
             {
-              "array": [
-                225,
-                226,
-                227
-              ]
+              "a": 237
             },
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                228,
-                229,
-                230
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 238
             }
           ]
         }
@@ -1360,47 +1575,113 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_UnsizedElement_VariableSize",
+    "packet": "Packet_Array_Field_SizedElement_UnknownSize",
     "tests": [
       {
-        "packed": "0f0003eaebec0003edeeef0003e8f1f2",
+        "packed": "00ffe800fff100fff200fff300fff400fff500fff600fff700fff000fff900ff",
         "unpacked": {
           "array": [
             {
-              "array": []
+              "a": 0
             },
             {
-              "array": [
-                234,
-                235,
-                236
-              ]
+              "a": 255
             },
             {
-              "array": []
+              "a": 232
             },
             {
-              "array": [
-                237,
-                238,
-                239
-              ]
+              "a": 0
             },
             {
-              "array": []
+              "a": 255
             },
             {
-              "array": [
-                232,
-                241,
-                242
-              ]
+              "a": 241
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 242
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 243
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 244
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 245
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 246
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 247
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 240
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
+            },
+            {
+              "a": 249
+            },
+            {
+              "a": 0
+            },
+            {
+              "a": 255
             }
           ]
         }
       },
       {
-        "packed": "00",
+        "packed": "",
         "unpacked": {
           "array": []
         }
@@ -1411,7 +1692,7 @@
     "packet": "Packet_Array_Field_UnsizedElement_ConstantSize",
     "tests": [
       {
-        "packed": "0003f6f7f00003f9fafb0003fcfdfe0003f80102",
+        "packed": "0003fbfcfd0003fef801",
         "unpacked": {
           "array": [
             {
@@ -1419,29 +1700,9 @@
             },
             {
               "array": [
-                246,
-                247,
-                240
-              ]
-            },
-            {
-              "array": []
-            },
-            {
-              "array": [
-                249,
-                250,
-                251
-              ]
-            },
-            {
-              "array": []
-            },
-            {
-              "array": [
+                251,
                 252,
-                253,
-                254
+                253
               ]
             },
             {
@@ -1449,9 +1710,9 @@
             },
             {
               "array": [
+                254,
                 248,
-                1,
-                2
+                1
               ]
             }
           ]
@@ -1460,10 +1721,10 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_UnsizedElement_SizeModifier",
+    "packet": "Packet_Array_Field_UnsizedElement_VariableSize",
     "tests": [
       {
-        "packed": "0d00030607000003090a0b00",
+        "packed": "0f0003050607000300090a00030b0c0d",
         "unpacked": {
           "array": [
             {
@@ -1471,9 +1732,9 @@
             },
             {
               "array": [
+                5,
                 6,
-                7,
-                0
+                7
               ]
             },
             {
@@ -1481,19 +1742,26 @@
             },
             {
               "array": [
+                0,
                 9,
-                10,
-                11
+                10
               ]
             },
             {
               "array": []
+            },
+            {
+              "array": [
+                11,
+                12,
+                13
+              ]
             }
           ]
         }
       },
       {
-        "packed": "02",
+        "packed": "00",
         "unpacked": {
           "array": []
         }
@@ -1501,37 +1769,52 @@
     ]
   },
   {
-    "packet": "Packet_Array_Field_SizedElement_VariableSize_Padded",
+    "packet": "Packet_Array_Field_UnsizedElement_VariableCount",
     "tests": [
       {
-        "packed": "0000000000000000000000000000000000",
-        "unpacked": {
-          "array": []
-        }
-      },
-      {
-        "packed": "0e78088a109c10ae10b810ca18dc180000",
+        "packed": "0f00031112130003141516000317101900031a1b1c00031d1e1f0003182122000323242500",
         "unpacked": {
           "array": [
-            2168,
-            4234,
-            4252,
-            4270,
-            4280,
-            6346,
-            6364
-          ]
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Packet_Array_Field_UnsizedElement_VariableCount_Padded",
-    "tests": [
-      {
-        "packed": "0700031d1e1f0003182122000323242500",
-        "unpacked": {
-          "array": [
+            {
+              "array": []
+            },
+            {
+              "array": [
+                17,
+                18,
+                19
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                20,
+                21,
+                22
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                23,
+                16,
+                25
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                26,
+                27,
+                28
+              ]
+            },
             {
               "array": []
             },
@@ -1569,6 +1852,301 @@
         }
       },
       {
+        "packed": "00",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_UnsizedElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "0003292a2b00032c2d2e00032f283100033233340003353637000330393a00033b3c3d00033e3f3800034142430003444546000347404900034a4b4c00034d4e4f000348515200035354550003565750",
+        "unpacked": {
+          "array": [
+            {
+              "array": []
+            },
+            {
+              "array": [
+                41,
+                42,
+                43
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                44,
+                45,
+                46
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                47,
+                40,
+                49
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                50,
+                51,
+                52
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                53,
+                54,
+                55
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                48,
+                57,
+                58
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                59,
+                60,
+                61
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                62,
+                63,
+                56
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                65,
+                66,
+                67
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                68,
+                69,
+                70
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                71,
+                64,
+                73
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                74,
+                75,
+                76
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                77,
+                78,
+                79
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                72,
+                81,
+                82
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                83,
+                84,
+                85
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                86,
+                87,
+                80
+              ]
+            }
+          ]
+        }
+      },
+      {
+        "packed": "",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_UnsizedElement_SizeModifier",
+    "tests": [
+      {
+        "packed": "0d00035c5d5e00035f586100",
+        "unpacked": {
+          "array": [
+            {
+              "array": []
+            },
+            {
+              "array": [
+                92,
+                93,
+                94
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                95,
+                88,
+                97
+              ]
+            },
+            {
+              "array": []
+            }
+          ]
+        }
+      },
+      {
+        "packed": "02",
+        "unpacked": {
+          "array": []
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_SizedElement_VariableSize_Padded",
+    "tests": [
+      {
+        "packed": "0000000000000000000000000000000000",
+        "unpacked": {
+          "array": []
+        }
+      },
+      {
+        "packed": "0e2e6338634a6b5c6b6e6b786b8a730000",
+        "unpacked": {
+          "array": [
+            25390,
+            25400,
+            27466,
+            27484,
+            27502,
+            27512,
+            29578
+          ]
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Packet_Array_Field_UnsizedElement_VariableCount_Padded",
+    "tests": [
+      {
+        "packed": "07000373747500037677700003797a7b00",
+        "unpacked": {
+          "array": [
+            {
+              "array": []
+            },
+            {
+              "array": [
+                115,
+                116,
+                117
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                118,
+                119,
+                112
+              ]
+            },
+            {
+              "array": []
+            },
+            {
+              "array": [
+                121,
+                122,
+                123
+              ]
+            },
+            {
+              "array": []
+            }
+          ]
+        }
+      },
+      {
         "packed": "0000000000000000000000000000000000",
         "unpacked": {
           "array": []
@@ -1596,10 +2174,10 @@
         "packet": "ScalarChild_A"
       },
       {
-        "packed": "000129",
+        "packed": "00017f",
         "unpacked": {
           "a": 0,
-          "b": 41
+          "b": 127
         },
         "packet": "ScalarChild_A"
       },
@@ -1620,10 +2198,10 @@
         "packet": "ScalarChild_B"
       },
       {
-        "packed": "01025329",
+        "packed": "0102017c",
         "unpacked": {
           "a": 1,
-          "c": 10579
+          "c": 31745
         },
         "packet": "ScalarChild_B"
       },
@@ -1644,10 +2222,10 @@
         "packet": "AliasedChild_A"
       },
       {
-        "packed": "02012f",
+        "packed": "020185",
         "unpacked": {
           "a": 2,
-          "b": 47
+          "b": 133
         },
         "packet": "AliasedChild_A"
       },
@@ -1668,10 +2246,10 @@
         "packet": "AliasedChild_B"
       },
       {
-        "packed": "03028129",
+        "packed": "03023784",
         "unpacked": {
           "a": 3,
-          "c": 10625
+          "c": 33847
         },
         "packet": "AliasedChild_B"
       }
@@ -1697,10 +2275,10 @@
         "packet": "EnumChild_A"
       },
       {
-        "packed": "bbaa012c",
+        "packed": "bbaa0182",
         "unpacked": {
           "a": 43707,
-          "b": 44
+          "b": 130
         },
         "packet": "EnumChild_A"
       },
@@ -1721,10 +2299,10 @@
         "packet": "EnumChild_B"
       },
       {
-        "packed": "ddcc026e29",
+        "packed": "ddcc021c84",
         "unpacked": {
           "a": 52445,
-          "c": 10606
+          "c": 33820
         },
         "packet": "EnumChild_B"
       }
@@ -1750,10 +2328,10 @@
         "packet": "PartialChild5_A"
       },
       {
-        "packed": "4036",
+        "packed": "0081",
         "unpacked": {
           "a": 0,
-          "b": 434
+          "b": 1032
         },
         "packet": "PartialChild5_A"
       },
@@ -1774,10 +2352,10 @@
         "packet": "PartialChild5_B"
       },
       {
-        "packed": "410dcd0c",
+        "packed": "c1a262a2",
         "unpacked": {
           "a": 1,
-          "c": 6711402
+          "c": 85136662
         },
         "packet": "PartialChild5_B"
       }
@@ -1803,10 +2381,10 @@
         "packet": "PartialChild12_A"
       },
       {
-        "packed": "02b0",
+        "packed": "0260",
         "unpacked": {
           "a": 2,
-          "d": 11
+          "d": 6
         },
         "packet": "PartialChild12_A"
       },
@@ -1827,10 +2405,10 @@
         "packet": "PartialChild12_B"
       },
       {
-        "packed": "0310e726",
+        "packed": "03d0b191",
         "unpacked": {
           "a": 3,
-          "e": 159345
+          "e": 596765
         },
         "packet": "PartialChild12_B"
       }
@@ -1858,11 +2436,11 @@
         }
       },
       {
-        "packed": "017e7c7a78767438",
+        "packed": "012b29272523218f",
         "unpacked": {
           "s": {
             "a": 1,
-            "c": 31781301744105724
+            "c": 80574713001038422
           }
         }
       },
@@ -1885,11 +2463,11 @@
         }
       },
       {
-        "packed": "027e7c7a78767438",
+        "packed": "022b29272523218f",
         "unpacked": {
           "s": {
             "a": 2,
-            "c": 31781301744105724
+            "c": 80574713001038422
           }
         }
       }
@@ -1917,11 +2495,11 @@
         }
       },
       {
-        "packed": "008e8c8a88868440",
+        "packed": "003a393735333197",
         "unpacked": {
           "s": {
             "a": 0,
-            "c": 9080055930373703
+            "c": 21278408744606877
           }
         }
       },
@@ -1944,38 +2522,38 @@
         }
       },
       {
-        "packed": "7f8e8c8a88868440",
+        "packed": "7f3a393735333197",
         "unpacked": {
           "s": {
             "a": 127,
-            "c": 9080055930373703
+            "c": 21278408744606877
           }
         }
       },
       {
-        "packed": "2100000000000000",
+        "packed": "4b00000000000000",
         "unpacked": {
           "s": {
-            "a": 33,
+            "a": 75,
             "c": 0
           }
         }
       },
       {
-        "packed": "21feffffffffffff",
+        "packed": "4bfeffffffffffff",
         "unpacked": {
           "s": {
-            "a": 33,
+            "a": 75,
             "c": 36028797018963967
           }
         }
       },
       {
-        "packed": "218e8c8a88868440",
+        "packed": "4b3a393735333197",
         "unpacked": {
           "s": {
-            "a": 33,
-            "c": 9080055930373703
+            "a": 75,
+            "c": 21278408744606877
           }
         }
       }
@@ -1994,18 +2572,18 @@
         }
       },
       {
-        "packed": "070000000000000050515253545556",
+        "packed": "0700000000000000a6a7a8a9aaabac",
         "unpacked": {
           "s": {
             "a": 0,
             "b": [
-              80,
-              81,
-              82,
-              83,
-              84,
-              85,
-              86
+              166,
+              167,
+              168,
+              169,
+              170,
+              171,
+              172
             ]
           }
         }
@@ -2020,44 +2598,44 @@
         }
       },
       {
-        "packed": "ffffffffffffffff50515253545556",
+        "packed": "ffffffffffffffffa6a7a8a9aaabac",
         "unpacked": {
           "s": {
             "a": 2305843009213693951,
             "b": [
-              80,
-              81,
-              82,
-              83,
-              84,
-              85,
-              86
+              166,
+              167,
+              168,
+              169,
+              170,
+              171,
+              172
             ]
           }
         }
       },
       {
-        "packed": "784e4d4c4b4a4948",
+        "packed": "28a4a3a2a1a09f9e",
         "unpacked": {
           "s": {
-            "a": 651097016411728335,
+            "a": 1428753874421052549,
             "b": []
           }
         }
       },
       {
-        "packed": "7f4e4d4c4b4a494850515253545556",
+        "packed": "2fa4a3a2a1a09f9ea6a7a8a9aaabac",
         "unpacked": {
           "s": {
-            "a": 651097016411728335,
+            "a": 1428753874421052549,
             "b": [
-              80,
-              81,
-              82,
-              83,
-              84,
-              85,
-              86
+              166,
+              167,
+              168,
+              169,
+              170,
+              171,
+              172
             ]
           }
         }
@@ -2077,18 +2655,18 @@
         }
       },
       {
-        "packed": "07000000000000005f5c6162636065",
+        "packed": "0700000000000000b5b6b7b4b9babb",
         "unpacked": {
           "s": {
             "a": 0,
             "b": [
-              95,
-              92,
-              97,
-              98,
-              99,
-              96,
-              101
+              181,
+              182,
+              183,
+              180,
+              185,
+              186,
+              187
             ]
           }
         }
@@ -2103,44 +2681,44 @@
         }
       },
       {
-        "packed": "ffffffffffffffff5f5c6162636065",
+        "packed": "ffffffffffffffffb5b6b7b4b9babb",
         "unpacked": {
           "s": {
             "a": 2305843009213693951,
             "b": [
-              95,
-              92,
-              97,
-              98,
-              99,
-              96,
-              101
+              181,
+              182,
+              183,
+              180,
+              185,
+              186,
+              187
             ]
           }
         }
       },
       {
-        "packed": "b08b6b4b2b0beb4a",
+        "packed": "60563616f6d5b5b5",
         "unpacked": {
           "s": {
-            "a": 674802607363813750,
+            "a": 1636700843070114508,
             "b": []
           }
         }
       },
       {
-        "packed": "b78b6b4b2b0beb4a5f5c6162636065",
+        "packed": "67563616f6d5b5b5b5b6b7b4b9babb",
         "unpacked": {
           "s": {
-            "a": 674802607363813750,
+            "a": 1636700843070114508,
             "b": [
-              95,
-              92,
-              97,
-              98,
-              99,
-              96,
-              101
+              181,
+              182,
+              183,
+              180,
+              185,
+              186,
+              187
             ]
           }
         }
@@ -2167,10 +2745,10 @@
         }
       },
       {
-        "packed": "07aea9a5a19d9965",
+        "packed": "070503fffaf6f2ba",
         "unpacked": {
           "s": {
-            "b": 57195749897360220
+            "b": 105242976510150154
           }
         }
       }
@@ -2196,10 +2774,10 @@
         }
       },
       {
-        "packed": "81918b837b736b6b",
+        "packed": "81443e362e261ec6",
         "unpacked": {
           "s": {
-            "b": 60471932491339555
+            "b": 111530389443214473
           }
         }
       }
@@ -2251,12 +2829,12 @@
         }
       },
       {
-        "packed": "00006777de",
+        "packed": "0000cdcc99",
         "unpacked": {
           "s": {
             "a": 0,
-            "b": 30567,
-            "crc": 222
+            "b": 52429,
+            "crc": 153
           }
         }
       },
@@ -2281,42 +2859,42 @@
         }
       },
       {
-        "packed": "ffff6777dc",
+        "packed": "ffffcdcc97",
         "unpacked": {
           "s": {
             "a": 65535,
-            "b": 30567,
-            "crc": 220
+            "b": 52429,
+            "crc": 151
           }
         }
       },
       {
-        "packed": "45770000bc",
+        "packed": "abcc000077",
         "unpacked": {
           "s": {
-            "a": 30533,
+            "a": 52395,
             "b": 0,
-            "crc": 188
+            "crc": 119
           }
         }
       },
       {
-        "packed": "4577ffffba",
+        "packed": "abccffff75",
         "unpacked": {
           "s": {
-            "a": 30533,
+            "a": 52395,
             "b": 65535,
-            "crc": 186
+            "crc": 117
           }
         }
       },
       {
-        "packed": "457767779a",
+        "packed": "abcccdcc10",
         "unpacked": {
           "s": {
-            "a": 30533,
-            "b": 30567,
-            "crc": 154
+            "a": 52395,
+            "b": 52429,
+            "crc": 16
           }
         }
       }
@@ -2348,13 +2926,13 @@
         }
       },
       {
-        "packed": "000000f077",
+        "packed": "00000056dd",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
             "a": 0,
-            "b": 30704
+            "b": 56662
           }
         }
       },
@@ -2381,199 +2959,199 @@
         }
       },
       {
-        "packed": "00fffff077",
+        "packed": "00ffff56dd",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
             "a": 65535,
-            "b": 30704
+            "b": 56662
           }
         }
       },
       {
-        "packed": "00de770000",
+        "packed": "0034dd0000",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
-            "a": 30686,
+            "a": 56628,
             "b": 0
           }
         }
       },
       {
-        "packed": "00de77ffff",
+        "packed": "0034ddffff",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
-            "a": 30686,
+            "a": 56628,
             "b": 65535
           }
         }
       },
       {
-        "packed": "00de77f077",
+        "packed": "0034dd56dd",
         "unpacked": {
           "s": {
             "payload": [],
             "crc": 0,
-            "a": 30686,
-            "b": 30704
+            "a": 56628,
+            "b": 56662
           }
         }
       },
       {
-        "packed": "78797a7b7c6200000000",
+        "packed": "cecfc0d1d20000000000",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
+            "crc": 0,
             "a": 0,
             "b": 0
           }
         }
       },
       {
-        "packed": "78797a7b7c620000ffff",
+        "packed": "cecfc0d1d2000000ffff",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
+            "crc": 0,
             "a": 0,
             "b": 65535
           }
         }
       },
       {
-        "packed": "78797a7b7c620000f077",
+        "packed": "cecfc0d1d200000056dd",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
+            "crc": 0,
             "a": 0,
-            "b": 30704
+            "b": 56662
           }
         }
       },
       {
-        "packed": "78797a7b7c62ffff0000",
+        "packed": "cecfc0d1d200ffff0000",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
+            "crc": 0,
             "a": 65535,
             "b": 0
           }
         }
       },
       {
-        "packed": "78797a7b7c62ffffffff",
+        "packed": "cecfc0d1d200ffffffff",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
+            "crc": 0,
             "a": 65535,
             "b": 65535
           }
         }
       },
       {
-        "packed": "78797a7b7c62fffff077",
+        "packed": "cecfc0d1d200ffff56dd",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
+            "crc": 0,
             "a": 65535,
-            "b": 30704
+            "b": 56662
           }
         }
       },
       {
-        "packed": "78797a7b7c62de770000",
+        "packed": "cecfc0d1d20034dd0000",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
-            "a": 30686,
+            "crc": 0,
+            "a": 56628,
             "b": 0
           }
         }
       },
       {
-        "packed": "78797a7b7c62de77ffff",
+        "packed": "cecfc0d1d20034ddffff",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
-            "a": 30686,
+            "crc": 0,
+            "a": 56628,
             "b": 65535
           }
         }
       },
       {
-        "packed": "78797a7b7c62de77f077",
+        "packed": "cecfc0d1d20034dd56dd",
         "unpacked": {
           "s": {
             "payload": [
-              120,
-              121,
-              122,
-              123,
-              124
+              206,
+              207,
+              192,
+              209,
+              210
             ],
-            "crc": 98,
-            "a": 30686,
-            "b": 30704
+            "crc": 0,
+            "a": 56628,
+            "b": 56662
           }
         }
       }
@@ -2594,16 +3172,16 @@
         }
       },
       {
-        "packed": "0003828384",
+        "packed": "0003d8d9da",
         "unpacked": {
           "a": {
             "a": 0
           },
           "b": {
             "array": [
-              130,
-              131,
-              132
+              216,
+              217,
+              218
             ]
           }
         }
@@ -2620,25 +3198,25 @@
         }
       },
       {
-        "packed": "ff03828384",
+        "packed": "ff03d8d9da",
         "unpacked": {
           "a": {
             "a": 255
           },
           "b": {
             "array": [
-              130,
-              131,
-              132
+              216,
+              217,
+              218
             ]
           }
         }
       },
       {
-        "packed": "8100",
+        "packed": "d700",
         "unpacked": {
           "a": {
-            "a": 129
+            "a": 215
           },
           "b": {
             "array": []
@@ -2646,16 +3224,16 @@
         }
       },
       {
-        "packed": "8103828384",
+        "packed": "d703d8d9da",
         "unpacked": {
           "a": {
-            "a": 129
+            "a": 215
           },
           "b": {
             "array": [
-              130,
-              131,
-              132
+              216,
+              217,
+              218
             ]
           }
         }
@@ -2663,17 +3241,17 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_ScalarElement",
+    "packet": "Struct_Array_Field_ByteElement_ConstantSize",
     "tests": [
       {
-        "packed": "568878889a88bc88",
+        "packed": "dbdcddde",
         "unpacked": {
           "s": {
             "array": [
-              34902,
-              34936,
-              34970,
-              35004
+              219,
+              220,
+              221,
+              222
             ]
           }
         }
@@ -2681,7 +3259,215 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_EnumElement",
+    "packet": "Struct_Array_Field_ByteElement_VariableSize",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0fdfd0e1e2e3e4e5e6e7e8e9eaebeced",
+        "unpacked": {
+          "s": {
+            "array": [
+              223,
+              208,
+              225,
+              226,
+              227,
+              228,
+              229,
+              230,
+              231,
+              232,
+              233,
+              234,
+              235,
+              236,
+              237
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ByteElement_VariableCount",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0feeefe0f1f2f3f4f5f6f7f8f9fafbfc",
+        "unpacked": {
+          "s": {
+            "array": [
+              238,
+              239,
+              224,
+              241,
+              242,
+              243,
+              244,
+              245,
+              246,
+              247,
+              248,
+              249,
+              250,
+              251,
+              252
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ByteElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "fdfef0",
+        "unpacked": {
+          "s": {
+            "array": [
+              253,
+              254,
+              240
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ScalarElement_ConstantSize",
+    "tests": [
+      {
+        "packed": "1200340056007800",
+        "unpacked": {
+          "s": {
+            "array": [
+              18,
+              52,
+              86,
+              120
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ScalarElement_VariableSize",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0e9a00bc00de00f000121134115611",
+        "unpacked": {
+          "s": {
+            "array": [
+              154,
+              188,
+              222,
+              240,
+              4370,
+              4404,
+              4438
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ScalarElement_VariableCount",
+    "tests": [
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "0f78119a11bc11de11f01112223422562278229a22bc22de22f02212333433",
+        "unpacked": {
+          "s": {
+            "array": [
+              4472,
+              4506,
+              4540,
+              4574,
+              4592,
+              8722,
+              8756,
+              8790,
+              8824,
+              8858,
+              8892,
+              8926,
+              8944,
+              13074,
+              13108
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_ScalarElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      },
+      {
+        "packed": "563378339a33",
+        "unpacked": {
+          "s": {
+            "array": [
+              13142,
+              13176,
+              13210
+            ]
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_EnumElement_ConstantSize",
     "tests": [
       {
         "packed": "bbaaddccbbaaddcc",
@@ -2699,10 +3485,130 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_SizedStructElement",
+    "packet": "Struct_Array_Field_EnumElement_VariableSize",
     "tests": [
       {
-        "packed": "00ff8d00",
+        "packed": "0ebbaaddccbbaaddccbbaaddccbbaa",
+        "unpacked": {
+          "s": {
+            "array": [
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707
+            ]
+          }
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_EnumElement_VariableCount",
+    "tests": [
+      {
+        "packed": "0fbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaa",
+        "unpacked": {
+          "s": {
+            "array": [
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707
+            ]
+          }
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_EnumElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "bbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddccbbaaddcc",
+        "unpacked": {
+          "s": {
+            "array": [
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445,
+              43707,
+              52445
+            ]
+          }
+        }
+      },
+      {
+        "packed": "",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_SizedElement_ConstantSize",
+    "tests": [
+      {
+        "packed": "00ff3b00",
         "unpacked": {
           "s": {
             "array": [
@@ -2713,7 +3619,7 @@
                 "a": 255
               },
               {
-                "a": 141
+                "a": 59
               },
               {
                 "a": 0
@@ -2725,36 +3631,69 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_UnsizedStructElement",
+    "packet": "Struct_Array_Field_SizedElement_VariableSize",
     "tests": [
       {
-        "packed": "00038f80910003929394",
+        "packed": "0f00ff3d00ff3e00ff3f00ff3000ff41",
         "unpacked": {
           "s": {
             "array": [
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  143,
-                  128,
-                  145
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 61
               },
               {
-                "array": [
-                  146,
-                  147,
-                  148
-                ]
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 62
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 63
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 48
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 65
               }
             ]
           }
         }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
       }
     ]
   },
@@ -2762,170 +3701,54 @@
     "packet": "Struct_Array_Field_SizedElement_VariableCount",
     "tests": [
       {
-        "packed": "00",
-        "unpacked": {
-          "s": {
-            "array": []
-          }
-        }
-      },
-      {
-        "packed": "0f8999ab99cd99ef99019a23aa45aa67aa89aaabaacdaaefaa01ab23bb45bb",
-        "unpacked": {
-          "s": {
-            "array": [
-              39305,
-              39339,
-              39373,
-              39407,
-              39425,
-              43555,
-              43589,
-              43623,
-              43657,
-              43691,
-              43725,
-              43759,
-              43777,
-              47907,
-              47941
-            ]
-          }
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Struct_Array_Field_SizedElement_VariableSize",
-    "tests": [
-      {
-        "packed": "00",
-        "unpacked": {
-          "s": {
-            "array": []
-          }
-        }
-      },
-      {
-        "packed": "0e67bb89bbabbbcdbbefbb01bc23cc",
-        "unpacked": {
-          "s": {
-            "array": [
-              47975,
-              48009,
-              48043,
-              48077,
-              48111,
-              48129,
-              52259
-            ]
-          }
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Struct_Array_Field_SizedElement_ConstantSize",
-    "tests": [
-      {
-        "packed": "45cc67cc89ccabcccdccefcc01cd23dd",
-        "unpacked": {
-          "s": {
-            "array": [
-              52293,
-              52327,
-              52361,
-              52395,
-              52429,
-              52463,
-              52481,
-              56611
-            ]
-          }
-        }
-      }
-    ]
-  },
-  {
-    "packet": "Struct_Array_Field_UnsizedElement_VariableCount",
-    "tests": [
-      {
-        "packed": "0f0003d4d5d60003d7d8d90003dadbdc0003dddedf0003d0e1e20003e3e4e50003e6e7e800",
+        "packed": "0f00ff4300ff4400ff4500ff4600ff47",
         "unpacked": {
           "s": {
             "array": [
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  212,
-                  213,
-                  214
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 67
               },
               {
-                "array": [
-                  215,
-                  216,
-                  217
-                ]
+                "a": 0
               },
               {
-                "array": []
+                "a": 255
               },
               {
-                "array": [
-                  218,
-                  219,
-                  220
-                ]
+                "a": 68
               },
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  221,
-                  222,
-                  223
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 69
               },
               {
-                "array": [
-                  208,
-                  225,
-                  226
-                ]
+                "a": 0
               },
               {
-                "array": []
+                "a": 255
               },
               {
-                "array": [
-                  227,
-                  228,
-                  229
-                ]
+                "a": 70
               },
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  230,
-                  231,
-                  232
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 71
               }
             ]
           }
@@ -2942,49 +3765,115 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_UnsizedElement_VariableSize",
+    "packet": "Struct_Array_Field_SizedElement_UnknownSize",
     "tests": [
       {
-        "packed": "0f0003ecedee0003efe0f10003f2f3f4",
+        "packed": "00ff4900ff4a00ff4b00ff4c00ff4d00ff4e00ff4f00ff4000ff5100ff5200ff",
         "unpacked": {
           "s": {
             "array": [
               {
-                "array": []
+                "a": 0
               },
               {
-                "array": [
-                  236,
-                  237,
-                  238
-                ]
+                "a": 255
               },
               {
-                "array": []
+                "a": 73
               },
               {
-                "array": [
-                  239,
-                  224,
-                  241
-                ]
+                "a": 0
               },
               {
-                "array": []
+                "a": 255
               },
               {
-                "array": [
-                  242,
-                  243,
-                  244
-                ]
+                "a": 74
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 75
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 76
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 77
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 78
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 79
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 64
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 81
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
+              },
+              {
+                "a": 82
+              },
+              {
+                "a": 0
+              },
+              {
+                "a": 255
               }
             ]
           }
         }
       },
       {
-        "packed": "00",
+        "packed": "",
         "unpacked": {
           "s": {
             "array": []
@@ -2997,7 +3886,7 @@
     "packet": "Struct_Array_Field_UnsizedElement_ConstantSize",
     "tests": [
       {
-        "packed": "0003f8f9fa0003fbfcfd0003fef0010003020304",
+        "packed": "00035455560003575859",
         "unpacked": {
           "s": {
             "array": [
@@ -3006,9 +3895,9 @@
               },
               {
                 "array": [
-                  248,
-                  249,
-                  250
+                  84,
+                  85,
+                  86
                 ]
               },
               {
@@ -3016,29 +3905,9 @@
               },
               {
                 "array": [
-                  251,
-                  252,
-                  253
-                ]
-              },
-              {
-                "array": []
-              },
-              {
-                "array": [
-                  254,
-                  240,
-                  1
-                ]
-              },
-              {
-                "array": []
-              },
-              {
-                "array": [
-                  2,
-                  3,
-                  4
+                  87,
+                  88,
+                  89
                 ]
               }
             ]
@@ -3048,10 +3917,10 @@
     ]
   },
   {
-    "packet": "Struct_Array_Field_UnsizedElement_SizeModifier",
+    "packet": "Struct_Array_Field_UnsizedElement_VariableSize",
     "tests": [
       {
-        "packed": "0d000308090a00030b0c0d00",
+        "packed": "0f00035d5e5f00035061620003636465",
         "unpacked": {
           "s": {
             "array": [
@@ -3060,9 +3929,9 @@
               },
               {
                 "array": [
-                  8,
-                  9,
-                  10
+                  93,
+                  94,
+                  95
                 ]
               },
               {
@@ -3070,9 +3939,338 @@
               },
               {
                 "array": [
-                  11,
-                  12,
-                  13
+                  80,
+                  97,
+                  98
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  99,
+                  100,
+                  101
+                ]
+              }
+            ]
+          }
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_UnsizedElement_VariableCount",
+    "tests": [
+      {
+        "packed": "0f0003696a6b00036c6d6e00036f607100037273740003757677000378797a00037b7c7d00",
+        "unpacked": {
+          "s": {
+            "array": [
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  105,
+                  106,
+                  107
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  108,
+                  109,
+                  110
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  111,
+                  96,
+                  113
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  114,
+                  115,
+                  116
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  117,
+                  118,
+                  119
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  120,
+                  121,
+                  122
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  123,
+                  124,
+                  125
+                ]
+              },
+              {
+                "array": []
+              }
+            ]
+          }
+        }
+      },
+      {
+        "packed": "00",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_UnsizedElement_UnknownSize",
+    "tests": [
+      {
+        "packed": "00038182830003848586000387888900038a8b8c00038d8e8f0003809192000393949500039697980003999a9b00039c9d9e00039f90a10003a2a3a40003a5a6a70003a8a9aa0003abacad0003aeafa0",
+        "unpacked": {
+          "s": {
+            "array": [
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  129,
+                  130,
+                  131
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  132,
+                  133,
+                  134
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  135,
+                  136,
+                  137
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  138,
+                  139,
+                  140
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  141,
+                  142,
+                  143
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  128,
+                  145,
+                  146
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  147,
+                  148,
+                  149
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  150,
+                  151,
+                  152
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  153,
+                  154,
+                  155
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  156,
+                  157,
+                  158
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  159,
+                  144,
+                  161
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  162,
+                  163,
+                  164
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  165,
+                  166,
+                  167
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  168,
+                  169,
+                  170
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  171,
+                  172,
+                  173
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  174,
+                  175,
+                  160
+                ]
+              }
+            ]
+          }
+        }
+      },
+      {
+        "packed": "",
+        "unpacked": {
+          "s": {
+            "array": []
+          }
+        }
+      }
+    ]
+  },
+  {
+    "packet": "Struct_Array_Field_UnsizedElement_SizeModifier",
+    "tests": [
+      {
+        "packed": "0d0003b4b5b60003b7b8b900",
+        "unpacked": {
+          "s": {
+            "array": [
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  180,
+                  181,
+                  182
+                ]
+              },
+              {
+                "array": []
+              },
+              {
+                "array": [
+                  183,
+                  184,
+                  185
                 ]
               },
               {
@@ -3104,17 +4302,17 @@
         }
       },
       {
-        "packed": "0e12113411561178119a11bc11de110000",
+        "packed": "0edebbf0bb12cc34cc56cc78cc9acc0000",
         "unpacked": {
           "s": {
             "array": [
-              4370,
-              4404,
-              4438,
-              4472,
-              4506,
-              4540,
-              4574
+              48094,
+              48112,
+              52242,
+              52276,
+              52310,
+              52344,
+              52378
             ]
           }
         }
@@ -3125,7 +4323,7 @@
     "packet": "Struct_Array_Field_UnsizedElement_VariableCount_Padded",
     "tests": [
       {
-        "packed": "0700031f10210003222324000325262700",
+        "packed": "070003cbcccd0003cecfc00003d1d2d300",
         "unpacked": {
           "s": {
             "array": [
@@ -3134,9 +4332,9 @@
               },
               {
                 "array": [
-                  31,
-                  16,
-                  33
+                  203,
+                  204,
+                  205
                 ]
               },
               {
@@ -3144,9 +4342,9 @@
               },
               {
                 "array": [
-                  34,
-                  35,
-                  36
+                  206,
+                  207,
+                  192
                 ]
               },
               {
@@ -3154,9 +4352,9 @@
               },
               {
                 "array": [
-                  37,
-                  38,
-                  39
+                  209,
+                  210,
+                  211
                 ]
               },
               {
@@ -3176,4 +4374,4 @@
       }
     ]
   }
-]
+]
\ No newline at end of file