pragma abicoder               v2;
contract C {
    struct S { uint a; T[] sub; bytes b; }
    struct T { uint[2] x; }
    event E(T t, S s);
}
// ----
//     :C
// [
//   {
//     "anonymous": false,
//     "inputs":
//     [
//       {
//         "components":
//         [
//           {
//             "internalType": "uint256[2]",
//             "name": "x",
//             "type": "uint256[2]"
//           }
//         ],
//         "indexed": false,
//         "internalType": "struct C.T",
//         "name": "t",
//         "type": "tuple"
//       },
//       {
//         "components":
//         [
//           {
//             "internalType": "uint256",
//             "name": "a",
//             "type": "uint256"
//           },
//           {
//             "components":
//             [
//               {
//                 "internalType": "uint256[2]",
//                 "name": "x",
//                 "type": "uint256[2]"
//               }
//             ],
//             "internalType": "struct C.T[]",
//             "name": "sub",
//             "type": "tuple[]"
//           },
//           {
//             "internalType": "bytes",
//             "name": "b",
//             "type": "bytes"
//           }
//         ],
//         "indexed": false,
//         "internalType": "struct C.S",
//         "name": "s",
//         "type": "tuple"
//       }
//     ],
//     "name": "E",
//     "type": "event"
//   }
// ]
