DPDK patches and discussions
 help / color / mirror / Atom feed
* [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
@ 2024-01-12 13:48 madhuker.mythri
  2024-01-12 16:40 ` Stephen Hemminger
                   ` (6 more replies)
  0 siblings, 7 replies; 18+ messages in thread
From: madhuker.mythri @ 2024-01-12 13:48 UTC (permalink / raw)
  To: stephen; +Cc: dev, ferruh.yigit, Madhuker Mythri

From: Madhuker Mythri <madhuker.mythri@oracle.com>

When multiple queues configured, internally RSS will be enabled and thus TAP BPF RSS byte-code will be loaded on to the Kernel using BPF system calls.

Here, the problem is loading the existing BPF byte-code to the Kernel-5.15 and above versions throws errors, i.e: Kernel BPF verifier not accepted this existing BPF byte-code and system calls return error code "-7" as follows:
------------------------
rss_add_actions(): Failed to load BPF section l3_l4 (7): Argument list too long
------------------------

RCA:  These errors started coming after from the Kernel-5.15 version, in which lots of new BPF verification restrictions were added for safe execution of byte-code on to the Kernel, due to which existing BPF program verification does not pass.
Here are the major BPF verifier restrictions observed:
1) Need to use new BPF maps structure.
2) Kernel SKB data pointer access not allowed, instead use the BPF helper functions.
3) Undefined loops were not allowed(which are bounded by a variable value).
4) unreachable instructions(like: undefined array access).

After addressing all these Kernel BPF verifier restrictions able to load the BPF byte-code onto the Kernel successfully.

Verified with the latest DPDK-23.11 code, using the python extracted
BPF instructions able to load sucessfully on to the Kernel tap device.

Bugzilla Id: 1329

Signed-off-by: Madhuker Mythri <madhuker.mythri@oracle.com>
---
 drivers/net/tap/bpf/Makefile          |    6 +-
 drivers/net/tap/bpf/bpf_api.h         |  276 ---
 drivers/net/tap/bpf/bpf_elf.h         |   53 -
 drivers/net/tap/bpf/tap_bpf_program.c |  233 +--
 drivers/net/tap/tap_bpf_api.c         |    5 +-
 drivers/net/tap/tap_bpf_insns.h       | 2300 ++++++++++++++-----------
 6 files changed, 1416 insertions(+), 1457 deletions(-)
 delete mode 100644 drivers/net/tap/bpf/bpf_api.h
 delete mode 100644 drivers/net/tap/bpf/bpf_elf.h

diff --git a/drivers/net/tap/bpf/Makefile b/drivers/net/tap/bpf/Makefile
index 9efeeb1bc7..218aeaac45 100644
--- a/drivers/net/tap/bpf/Makefile
+++ b/drivers/net/tap/bpf/Makefile
@@ -6,14 +6,16 @@ CLANG=clang
 CLANG_OPTS=-O2
 TARGET=../tap_bpf_insns.h
 
+CLANG_BPF_SYS_INCLUDES ?= $(shell $(CLANG) -v -E - </dev/null 2>&1 \
+	| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }')
+
 all: $(TARGET)
 
 clean:
 	rm tap_bpf_program.o $(TARGET)
 
 tap_bpf_program.o: tap_bpf_program.c
-	$(CLANG) $(CLANG_OPTS) -emit-llvm -c $< -o - | \
-	llc -march=bpf -filetype=obj -o $@
+	$(CLANG) $(CLANG_OPTS) $(CLANG_BPF_SYS_INCLUDES) -target bpf -c $< -g -o $@
 
 $(TARGET): tap_bpf_program.o
 	python3 bpf_extract.py -stap_bpf_program.c -o $@ $<
diff --git a/drivers/net/tap/bpf/bpf_api.h b/drivers/net/tap/bpf/bpf_api.h
deleted file mode 100644
index 2638a8a4ac..0000000000
--- a/drivers/net/tap/bpf/bpf_api.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
-
-#ifndef __BPF_API__
-#define __BPF_API__
-
-/* Note:
- *
- * This file can be included into eBPF kernel programs. It contains
- * a couple of useful helper functions, map/section ABI (bpf_elf.h),
- * misc macros and some eBPF specific LLVM built-ins.
- */
-
-#include <stdint.h>
-
-#include <linux/pkt_cls.h>
-#include <linux/bpf.h>
-#include <linux/filter.h>
-
-#include <asm/byteorder.h>
-
-#include "bpf_elf.h"
-
-/** libbpf pin type. */
-enum libbpf_pin_type {
-	LIBBPF_PIN_NONE,
-	/* PIN_BY_NAME: pin maps by name (in /sys/fs/bpf by default) */
-	LIBBPF_PIN_BY_NAME,
-};
-
-/** Type helper macros. */
-
-#define __uint(name, val) int (*name)[val]
-#define __type(name, val) typeof(val) *name
-#define __array(name, val) typeof(val) *name[]
-
-/** Misc macros. */
-
-#ifndef __stringify
-# define __stringify(X)		#X
-#endif
-
-#ifndef __maybe_unused
-# define __maybe_unused		__attribute__((__unused__))
-#endif
-
-#ifndef offsetof
-# define offsetof(TYPE, MEMBER)	__builtin_offsetof(TYPE, MEMBER)
-#endif
-
-#ifndef likely
-# define likely(X)		__builtin_expect(!!(X), 1)
-#endif
-
-#ifndef unlikely
-# define unlikely(X)		__builtin_expect(!!(X), 0)
-#endif
-
-#ifndef htons
-# define htons(X)		__constant_htons((X))
-#endif
-
-#ifndef ntohs
-# define ntohs(X)		__constant_ntohs((X))
-#endif
-
-#ifndef htonl
-# define htonl(X)		__constant_htonl((X))
-#endif
-
-#ifndef ntohl
-# define ntohl(X)		__constant_ntohl((X))
-#endif
-
-#ifndef __inline__
-# define __inline__		__attribute__((always_inline))
-#endif
-
-/** Section helper macros. */
-
-#ifndef __section
-# define __section(NAME)						\
-	__attribute__((section(NAME), used))
-#endif
-
-#ifndef __section_tail
-# define __section_tail(ID, KEY)					\
-	__section(__stringify(ID) "/" __stringify(KEY))
-#endif
-
-#ifndef __section_xdp_entry
-# define __section_xdp_entry						\
-	__section(ELF_SECTION_PROG)
-#endif
-
-#ifndef __section_cls_entry
-# define __section_cls_entry						\
-	__section(ELF_SECTION_CLASSIFIER)
-#endif
-
-#ifndef __section_act_entry
-# define __section_act_entry						\
-	__section(ELF_SECTION_ACTION)
-#endif
-
-#ifndef __section_lwt_entry
-# define __section_lwt_entry						\
-	__section(ELF_SECTION_PROG)
-#endif
-
-#ifndef __section_license
-# define __section_license						\
-	__section(ELF_SECTION_LICENSE)
-#endif
-
-#ifndef __section_maps
-# define __section_maps							\
-	__section(ELF_SECTION_MAPS)
-#endif
-
-/** Declaration helper macros. */
-
-#ifndef BPF_LICENSE
-# define BPF_LICENSE(NAME)						\
-	char ____license[] __section_license = NAME
-#endif
-
-/** Classifier helper */
-
-#ifndef BPF_H_DEFAULT
-# define BPF_H_DEFAULT	-1
-#endif
-
-/** BPF helper functions for tc. Individual flags are in linux/bpf.h */
-
-#ifndef __BPF_FUNC
-# define __BPF_FUNC(NAME, ...)						\
-	(* NAME)(__VA_ARGS__) __maybe_unused
-#endif
-
-#ifndef BPF_FUNC
-# define BPF_FUNC(NAME, ...)						\
-	__BPF_FUNC(NAME, __VA_ARGS__) = (void *) BPF_FUNC_##NAME
-#endif
-
-/* Map access/manipulation */
-static void *BPF_FUNC(map_lookup_elem, void *map, const void *key);
-static int BPF_FUNC(map_update_elem, void *map, const void *key,
-		    const void *value, uint32_t flags);
-static int BPF_FUNC(map_delete_elem, void *map, const void *key);
-
-/* Time access */
-static uint64_t BPF_FUNC(ktime_get_ns);
-
-/* Debugging */
-
-/* FIXME: __attribute__ ((format(printf, 1, 3))) not possible unless
- * llvm bug https://llvm.org/bugs/show_bug.cgi?id=26243 gets resolved.
- * It would require ____fmt to be made const, which generates a reloc
- * entry (non-map).
- */
-static void BPF_FUNC(trace_printk, const char *fmt, int fmt_size, ...);
-
-#ifndef printt
-# define printt(fmt, ...)						\
-	({								\
-		char ____fmt[] = fmt;					\
-		trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__);	\
-	})
-#endif
-
-/* Random numbers */
-static uint32_t BPF_FUNC(get_prandom_u32);
-
-/* Tail calls */
-static void BPF_FUNC(tail_call, struct __sk_buff *skb, void *map,
-		     uint32_t index);
-
-/* System helpers */
-static uint32_t BPF_FUNC(get_smp_processor_id);
-static uint32_t BPF_FUNC(get_numa_node_id);
-
-/* Packet misc meta data */
-static uint32_t BPF_FUNC(get_cgroup_classid, struct __sk_buff *skb);
-static int BPF_FUNC(skb_under_cgroup, void *map, uint32_t index);
-
-static uint32_t BPF_FUNC(get_route_realm, struct __sk_buff *skb);
-static uint32_t BPF_FUNC(get_hash_recalc, struct __sk_buff *skb);
-static uint32_t BPF_FUNC(set_hash_invalid, struct __sk_buff *skb);
-
-/* Packet redirection */
-static int BPF_FUNC(redirect, int ifindex, uint32_t flags);
-static int BPF_FUNC(clone_redirect, struct __sk_buff *skb, int ifindex,
-		    uint32_t flags);
-
-/* Packet manipulation */
-static int BPF_FUNC(skb_load_bytes, struct __sk_buff *skb, uint32_t off,
-		    void *to, uint32_t len);
-static int BPF_FUNC(skb_store_bytes, struct __sk_buff *skb, uint32_t off,
-		    const void *from, uint32_t len, uint32_t flags);
-
-static int BPF_FUNC(l3_csum_replace, struct __sk_buff *skb, uint32_t off,
-		    uint32_t from, uint32_t to, uint32_t flags);
-static int BPF_FUNC(l4_csum_replace, struct __sk_buff *skb, uint32_t off,
-		    uint32_t from, uint32_t to, uint32_t flags);
-static int BPF_FUNC(csum_diff, const void *from, uint32_t from_size,
-		    const void *to, uint32_t to_size, uint32_t seed);
-static int BPF_FUNC(csum_update, struct __sk_buff *skb, uint32_t wsum);
-
-static int BPF_FUNC(skb_change_type, struct __sk_buff *skb, uint32_t type);
-static int BPF_FUNC(skb_change_proto, struct __sk_buff *skb, uint32_t proto,
-		    uint32_t flags);
-static int BPF_FUNC(skb_change_tail, struct __sk_buff *skb, uint32_t nlen,
-		    uint32_t flags);
-
-static int BPF_FUNC(skb_pull_data, struct __sk_buff *skb, uint32_t len);
-
-/* Event notification */
-static int __BPF_FUNC(skb_event_output, struct __sk_buff *skb, void *map,
-		      uint64_t index, const void *data, uint32_t size) =
-		      (void *) BPF_FUNC_perf_event_output;
-
-/* Packet vlan encap/decap */
-static int BPF_FUNC(skb_vlan_push, struct __sk_buff *skb, uint16_t proto,
-		    uint16_t vlan_tci);
-static int BPF_FUNC(skb_vlan_pop, struct __sk_buff *skb);
-
-/* Packet tunnel encap/decap */
-static int BPF_FUNC(skb_get_tunnel_key, struct __sk_buff *skb,
-		    struct bpf_tunnel_key *to, uint32_t size, uint32_t flags);
-static int BPF_FUNC(skb_set_tunnel_key, struct __sk_buff *skb,
-		    const struct bpf_tunnel_key *from, uint32_t size,
-		    uint32_t flags);
-
-static int BPF_FUNC(skb_get_tunnel_opt, struct __sk_buff *skb,
-		    void *to, uint32_t size);
-static int BPF_FUNC(skb_set_tunnel_opt, struct __sk_buff *skb,
-		    const void *from, uint32_t size);
-
-/** LLVM built-ins, mem*() routines work for constant size */
-
-#ifndef lock_xadd
-# define lock_xadd(ptr, val)	((void) __sync_fetch_and_add(ptr, val))
-#endif
-
-#ifndef memset
-# define memset(s, c, n)	__builtin_memset((s), (c), (n))
-#endif
-
-#ifndef memcpy
-# define memcpy(d, s, n)	__builtin_memcpy((d), (s), (n))
-#endif
-
-#ifndef memmove
-# define memmove(d, s, n)	__builtin_memmove((d), (s), (n))
-#endif
-
-/* FIXME: __builtin_memcmp() is not yet fully usable unless llvm bug
- * https://llvm.org/bugs/show_bug.cgi?id=26218 gets resolved. Also
- * this one would generate a reloc entry (non-map), otherwise.
- */
-#if 0
-#ifndef memcmp
-# define memcmp(a, b, n)	__builtin_memcmp((a), (b), (n))
-#endif
-#endif
-
-unsigned long long load_byte(void *skb, unsigned long long off)
-	asm ("llvm.bpf.load.byte");
-
-unsigned long long load_half(void *skb, unsigned long long off)
-	asm ("llvm.bpf.load.half");
-
-unsigned long long load_word(void *skb, unsigned long long off)
-	asm ("llvm.bpf.load.word");
-
-#endif /* __BPF_API__ */
diff --git a/drivers/net/tap/bpf/bpf_elf.h b/drivers/net/tap/bpf/bpf_elf.h
deleted file mode 100644
index ea8a11c95c..0000000000
--- a/drivers/net/tap/bpf/bpf_elf.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
-#ifndef __BPF_ELF__
-#define __BPF_ELF__
-
-#include <asm/types.h>
-
-/* Note:
- *
- * Below ELF section names and bpf_elf_map structure definition
- * are not (!) kernel ABI. It's rather a "contract" between the
- * application and the BPF loader in tc. For compatibility, the
- * section names should stay as-is. Introduction of aliases, if
- * needed, are a possibility, though.
- */
-
-/* ELF section names, etc */
-#define ELF_SECTION_LICENSE	"license"
-#define ELF_SECTION_MAPS	"maps"
-#define ELF_SECTION_PROG	"prog"
-#define ELF_SECTION_CLASSIFIER	"classifier"
-#define ELF_SECTION_ACTION	"action"
-
-#define ELF_MAX_MAPS		64
-#define ELF_MAX_LICENSE_LEN	128
-
-/* Object pinning settings */
-#define PIN_NONE		0
-#define PIN_OBJECT_NS		1
-#define PIN_GLOBAL_NS		2
-
-/* ELF map definition */
-struct bpf_elf_map {
-	__u32 type;
-	__u32 size_key;
-	__u32 size_value;
-	__u32 max_elem;
-	__u32 flags;
-	__u32 id;
-	__u32 pinning;
-	__u32 inner_id;
-	__u32 inner_idx;
-};
-
-#define BPF_ANNOTATE_KV_PAIR(name, type_key, type_val)		\
-	struct ____btf_map_##name {				\
-		type_key key;					\
-		type_val value;					\
-	};							\
-	struct ____btf_map_##name				\
-	    __attribute__ ((section(".maps." #name), used))	\
-	    ____btf_map_##name = { }
-
-#endif /* __BPF_ELF__ */
diff --git a/drivers/net/tap/bpf/tap_bpf_program.c b/drivers/net/tap/bpf/tap_bpf_program.c
index f05aed021c..00f224f734 100644
--- a/drivers/net/tap/bpf/tap_bpf_program.c
+++ b/drivers/net/tap/bpf/tap_bpf_program.c
@@ -2,67 +2,42 @@
  * Copyright 2017 Mellanox Technologies, Ltd
  */
 
-#include <stdint.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <asm/types.h>
 #include <linux/in.h>
-#include <linux/if.h>
 #include <linux/if_ether.h>
 #include <linux/ip.h>
 #include <linux/ipv6.h>
-#include <linux/if_tunnel.h>
-#include <linux/filter.h>
-
-#include "bpf_api.h"
-#include "bpf_elf.h"
+#include <linux/udp.h>
+#include <linux/bpf.h>
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_endian.h>
+#include <linux/pkt_cls.h>
 #include "../tap_rss.h"
 
-/** Create IPv4 address */
-#define IPv4(a, b, c, d) ((__u32)(((a) & 0xff) << 24) | \
-		(((b) & 0xff) << 16) | \
-		(((c) & 0xff) << 8)  | \
-		((d) & 0xff))
-
-#define PORT(a, b) ((__u16)(((a) & 0xff) << 8) | \
-		((b) & 0xff))
-
 /*
  * The queue number is offset by a unique QUEUE_OFFSET, to distinguish
  * packets that have gone through this rule (skb->cb[1] != 0) from others.
  */
 #define QUEUE_OFFSET		0x7cafe800
-#define PIN_GLOBAL_NS		2
 
-#define KEY_IDX			0
-#define BPF_MAP_ID_KEY	1
+#define IP_MF		0x2000		/** IP header Flags **/
+#define IP_OFFSET	0x1FFF		/** IP header fragment offset **/
 
-struct vlan_hdr {
-	__be16 proto;
-	__be16 tci;
-};
 
-struct bpf_elf_map __attribute__((section("maps"), used))
-map_keys = {
-	.type           =       BPF_MAP_TYPE_HASH,
-	.id             =       BPF_MAP_ID_KEY,
-	.size_key       =       sizeof(__u32),
-	.size_value     =       sizeof(struct rss_key),
-	.max_elem       =       256,
-	.pinning        =       PIN_GLOBAL_NS,
-};
+struct  {
+	__uint(type,       BPF_MAP_TYPE_HASH);
+	__type(key,  __u32);
+	__type(value,     struct rss_key);
+	__uint(max_entries,      256);
+} map_keys SEC(".maps");
 
-__section("cls_q") int
-match_q(struct __sk_buff *skb)
+SEC("cls_q")
+int match_q(struct __sk_buff *skb)
 {
 	__u32 queue = skb->cb[1];
-	/* queue is set by tap_flow_bpf_cls_q() before load */
 	volatile __u32 q = 0xdeadbeef;
 	__u32 match_queue = QUEUE_OFFSET + q;
 
-	/* printt("match_q$i() queue = %d\n", queue); */
-
 	if (queue != match_queue)
 		return TC_ACT_OK;
 
@@ -71,7 +46,6 @@ match_q(struct __sk_buff *skb)
 	return TC_ACT_UNSPEC;
 }
 
-
 struct ipv4_l3_l4_tuple {
 	__u32    src_addr;
 	__u32    dst_addr;
@@ -86,6 +60,16 @@ struct ipv6_l3_l4_tuple {
 	__u16       sport;
 } __attribute__((packed));
 
+struct neth {
+	struct iphdr iph;
+	struct udphdr udph;
+} __attribute__((packed));
+
+struct net6h {
+	struct ipv6hdr ip6h;
+	struct udphdr udph;
+} __attribute__((packed));
+
 static const __u8 def_rss_key[TAP_RSS_HASH_KEY_SIZE] = {
 	0xd1, 0x81, 0xc6, 0x2c,
 	0xf7, 0xf4, 0xdb, 0x5b,
@@ -99,18 +83,18 @@ static const __u8 def_rss_key[TAP_RSS_HASH_KEY_SIZE] = {
 	0x2a, 0xdc, 0x1f, 0xfc,
 };
 
-static __u32  __attribute__((always_inline))
-rte_softrss_be(const __u32 *input_tuple, const uint8_t *rss_key,
-		__u8 input_len)
+static __u64  __attribute__((always_inline))
+rte_softrss_be(const __u32 *input_tuple, __u8 input_len)
 {
-	__u32 i, j, hash = 0;
-#pragma unroll
+	__u32 i, j;
+	__u64 hash = 0;
+#pragma clang loop unroll(full)
 	for (j = 0; j < input_len; j++) {
-#pragma unroll
+#pragma clang loop unroll(full)
 		for (i = 0; i < 32; i++) {
 			if (input_tuple[j] & (1U << (31 - i))) {
 				hash ^= ((const __u32 *)def_rss_key)[j] << i |
-				(__u32)((uint64_t)
+				(__u32)((__u64)
 				(((const __u32 *)def_rss_key)[j + 1])
 					>> (32 - i));
 			}
@@ -119,137 +103,76 @@ rte_softrss_be(const __u32 *input_tuple, const uint8_t *rss_key,
 	return hash;
 }
 
-static int __attribute__((always_inline))
+SEC("l3_l4")
+int __attribute__((always_inline))
 rss_l3_l4(struct __sk_buff *skb)
 {
-	void *data_end = (void *)(long)skb->data_end;
-	void *data = (void *)(long)skb->data;
-	__u16 proto = (__u16)skb->protocol;
+	struct neth nh;
+	struct net6h n6h;
 	__u32 key_idx = 0xdeadbeef;
-	__u32 hash;
+	__u64 hash;
 	struct rss_key *rsskey;
-	__u64 off = ETH_HLEN;
-	int j;
-	__u8 *key = 0;
+	int j, k, ret;
 	__u32 len;
 	__u32 queue = 0;
-	bool mf = 0;
-	__u16 frag_off = 0;
 
-	rsskey = map_lookup_elem(&map_keys, &key_idx);
-	if (!rsskey) {
-		printt("hash(): rss key is not configured\n");
+	rsskey = bpf_map_lookup_elem(&map_keys, &key_idx);
+	if (rsskey == NULL) {
 		return TC_ACT_OK;
 	}
-	key = (__u8 *)rsskey->key;
 
-	/* Get correct proto for 802.1ad */
-	if (skb->vlan_present && skb->vlan_proto == htons(ETH_P_8021AD)) {
-		if (data + ETH_ALEN * 2 + sizeof(struct vlan_hdr) +
-		    sizeof(proto) > data_end)
-			return TC_ACT_OK;
-		proto = *(__u16 *)(data + ETH_ALEN * 2 +
-				   sizeof(struct vlan_hdr));
-		off += sizeof(struct vlan_hdr);
-	}
-
-	if (proto == htons(ETH_P_IP)) {
-		if (data + off + sizeof(struct iphdr) + sizeof(__u32)
-			> data_end)
-			return TC_ACT_OK;
-
-		__u8 *src_dst_addr = data + off + offsetof(struct iphdr, saddr);
-		__u8 *frag_off_addr = data + off + offsetof(struct iphdr, frag_off);
-		__u8 *prot_addr = data + off + offsetof(struct iphdr, protocol);
-		__u8 *src_dst_port = data + off + sizeof(struct iphdr);
+	if (bpf_skb_load_bytes_relative(skb, 0, &nh, sizeof(nh), BPF_HDR_START_NET))
+		return TC_ACT_OK;
+	if (nh.iph.version == 4) {
 		struct ipv4_l3_l4_tuple v4_tuple = {
-			.src_addr = IPv4(*(src_dst_addr + 0),
-					*(src_dst_addr + 1),
-					*(src_dst_addr + 2),
-					*(src_dst_addr + 3)),
-			.dst_addr = IPv4(*(src_dst_addr + 4),
-					*(src_dst_addr + 5),
-					*(src_dst_addr + 6),
-					*(src_dst_addr + 7)),
+			.src_addr = bpf_ntohl(nh.iph.saddr),
+			.dst_addr = bpf_ntohl(nh.iph.daddr),
 			.sport = 0,
 			.dport = 0,
 		};
-		/** Fetch the L4-payer port numbers only in-case of TCP/UDP
-		 ** and also if the packet is not fragmented. Since fragmented
-		 ** chunks do not have L4 TCP/UDP header.
-		 **/
-		if (*prot_addr == IPPROTO_UDP || *prot_addr == IPPROTO_TCP) {
-			frag_off = PORT(*(frag_off_addr + 0),
-					*(frag_off_addr + 1));
-			mf = frag_off & 0x2000;
-			frag_off = frag_off & 0x1fff;
-			if (mf == 0 && frag_off == 0) {
-				v4_tuple.sport = PORT(*(src_dst_port + 0),
-						*(src_dst_port + 1));
-				v4_tuple.dport = PORT(*(src_dst_port + 2),
-						*(src_dst_port + 3));
+		if (nh.iph.protocol == IPPROTO_UDP || nh.iph.protocol == IPPROTO_TCP) {
+			/** Is IP fragmented **/
+			if ((nh.iph.frag_off & bpf_htons(IP_MF | IP_OFFSET)) == 0) {
+				v4_tuple.sport = bpf_ntohs(nh.udph.source);
+				v4_tuple.dport = bpf_ntohs(nh.udph.dest);
 			}
 		}
-		__u8 input_len = sizeof(v4_tuple) / sizeof(__u32);
-		if (rsskey->hash_fields & (1 << HASH_FIELD_IPV4_L3))
-			input_len--;
-		hash = rte_softrss_be((__u32 *)&v4_tuple, key, 3);
-	} else if (proto == htons(ETH_P_IPV6)) {
-		if (data + off + sizeof(struct ipv6hdr) +
-					sizeof(__u32) > data_end)
-			return TC_ACT_OK;
-		__u8 *src_dst_addr = data + off +
-					offsetof(struct ipv6hdr, saddr);
-		__u8 *src_dst_port = data + off +
-					sizeof(struct ipv6hdr);
-		__u8 *next_hdr = data + off +
-					offsetof(struct ipv6hdr, nexthdr);
-
+		hash = rte_softrss_be((__u32 *)&v4_tuple, 3);
+	} else if (nh.iph.version == 6) {
 		struct ipv6_l3_l4_tuple v6_tuple;
-		for (j = 0; j < 4; j++)
-			*((uint32_t *)&v6_tuple.src_addr + j) =
-				__builtin_bswap32(*((uint32_t *)
-						src_dst_addr + j));
-		for (j = 0; j < 4; j++)
-			*((uint32_t *)&v6_tuple.dst_addr + j) =
-				__builtin_bswap32(*((uint32_t *)
-						src_dst_addr + 4 + j));
-
-		/** Fetch the L4 header port-numbers only if next-header
-		 * is TCP/UDP **/
-		if (*next_hdr == IPPROTO_UDP || *next_hdr == IPPROTO_TCP) {
-			v6_tuple.sport = PORT(*(src_dst_port + 0),
-				      *(src_dst_port + 1));
-			v6_tuple.dport = PORT(*(src_dst_port + 2),
-				      *(src_dst_port + 3));
-		} else {
+		if (bpf_skb_load_bytes_relative(skb, 0, &n6h, sizeof(n6h), BPF_HDR_START_NET))
+			return TC_ACT_OK;
+#pragma clang loop unroll(full)
+		for (j = 0; j < 4; j++) {
+			*((__u32 *)&v6_tuple.src_addr + j) =
+							bpf_ntohl(n6h.ip6h.saddr.in6_u.u6_addr32[j]);
+			*((__u32 *)&v6_tuple.dst_addr + j) =
+							bpf_ntohl(n6h.ip6h.daddr.in6_u.u6_addr32[j]);
+		}
+		if (n6h.ip6h.nexthdr == IPPROTO_UDP || n6h.ip6h.nexthdr == IPPROTO_UDP) {
+			v6_tuple.sport = bpf_ntohs(n6h.udph.source);
+			v6_tuple.dport = bpf_ntohs(n6h.udph.dest);
+		}
+		else {
 			v6_tuple.sport = 0;
 			v6_tuple.dport = 0;
 		}
-
-		__u8 input_len = sizeof(v6_tuple) / sizeof(__u32);
-		if (rsskey->hash_fields & (1 << HASH_FIELD_IPV6_L3))
-			input_len--;
-		hash = rte_softrss_be((__u32 *)&v6_tuple, key, 9);
+		hash = rte_softrss_be((__u32 *)&v6_tuple, 9);
 	} else {
 		return TC_ACT_PIPE;
 	}
 
-	queue = rsskey->queues[(hash % rsskey->nb_queues) &
-				       (TAP_MAX_QUEUES - 1)];
-	skb->cb[1] = QUEUE_OFFSET + queue;
-	/* printt(">>>>> rss_l3_l4 hash=0x%x queue=%u\n", hash, queue); */
+	hash = (hash % rsskey->nb_queues) & (TAP_MAX_QUEUES - 1);
+#pragma clang loop unroll(full)
+	for (k = 0; k < TAP_MAX_QUEUES; k++) {
+		if(k == hash)
+			queue = rsskey->queues[k];
+	}
 
-	return TC_ACT_RECLASSIFY;
-}
+	skb->cb[1] = (__u32)(QUEUE_OFFSET + queue);
 
-#define RSS(L)						\
-	__section(#L) int				\
-		L ## _hash(struct __sk_buff *skb)	\
-	{						\
-		return rss_ ## L (skb);			\
-	}
+	return TC_ACT_RECLASSIFY;
 
-RSS(l3_l4)
+}
 
-BPF_LICENSE("Dual BSD/GPL");
+char _license[] SEC("license") = "Dual BSD/GPL";
diff --git a/drivers/net/tap/tap_bpf_api.c b/drivers/net/tap/tap_bpf_api.c
index 15283f8917..7e13d4b8b6 100644
--- a/drivers/net/tap/tap_bpf_api.c
+++ b/drivers/net/tap/tap_bpf_api.c
@@ -48,8 +48,9 @@ int tap_flow_bpf_cls_q(__u32 queue_idx)
  */
 int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd)
 {
-	l3_l4_hash_insns[4].imm = key_idx;
-	l3_l4_hash_insns[9].imm = map_fd;
+	l3_l4_hash_insns[1].imm = key_idx;
+	l3_l4_hash_insns[6].imm = map_fd;
+	l3_l4_hash_insns[6].src_reg = 1;
 
 	return bpf_load(BPF_PROG_TYPE_SCHED_ACT,
 		(struct bpf_insn *)l3_l4_hash_insns,
diff --git a/drivers/net/tap/tap_bpf_insns.h b/drivers/net/tap/tap_bpf_insns.h
index 53fa76c4e6..523dfe7656 100644
--- a/drivers/net/tap/tap_bpf_insns.h
+++ b/drivers/net/tap/tap_bpf_insns.h
@@ -24,395 +24,411 @@ static struct bpf_insn cls_q_insns[] = {
 };
 
 static struct bpf_insn l3_l4_hash_insns[] = {
-	{0xbf,    7,    1,        0, 0x00000000},
-	{0x61,    6,    7,       16, 0x00000000},
-	{0x61,    8,    7,       76, 0x00000000},
-	{0x61,    9,    7,       80, 0x00000000},
+	{0xbf,    6,    1,        0, 0x00000000},
 	{0x18,    1,    0,        0, 0xdeadbeef},
 	{0x00,    0,    0,        0, 0x00000000},
-	{0x63,   10,    1,       -4, 0x00000000},
+	{0x63,   10,    1,      -84, 0x00000000},
 	{0xbf,    2,   10,        0, 0x00000000},
-	{0x07,    2,    0,        0, 0xfffffffc},
+	{0x07,    2,    0,        0, 0xffffffac},
 	{0x18,    1,    0,        0, 0x00000000},
 	{0x00,    0,    0,        0, 0x00000000},
 	{0x85,    0,    0,        0, 0x00000001},
-	{0x55,    0,    0,       21, 0x00000000},
-	{0xb7,    1,    0,        0, 0x00000a64},
-	{0x6b,   10,    1,      -16, 0x00000000},
-	{0x18,    1,    0,        0, 0x69666e6f},
-	{0x00,    0,    0,        0, 0x65727567},
-	{0x7b,   10,    1,      -24, 0x00000000},
-	{0x18,    1,    0,        0, 0x6e207369},
-	{0x00,    0,    0,        0, 0x6320746f},
-	{0x7b,   10,    1,      -32, 0x00000000},
-	{0x18,    1,    0,        0, 0x20737372},
-	{0x00,    0,    0,        0, 0x2079656b},
-	{0x7b,   10,    1,      -40, 0x00000000},
-	{0x18,    1,    0,        0, 0x68736168},
-	{0x00,    0,    0,        0, 0x203a2928},
-	{0x7b,   10,    1,      -48, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000000},
-	{0x73,   10,    7,      -14, 0x00000000},
-	{0xbf,    1,   10,        0, 0x00000000},
-	{0x07,    1,    0,        0, 0xffffffd0},
-	{0xb7,    2,    0,        0, 0x00000023},
-	{0x85,    0,    0,        0, 0x00000006},
-	{0x05,    0,    0,     1680, 0x00000000},
-	{0xb7,    1,    0,        0, 0x0000000e},
-	{0x61,    2,    7,       20, 0x00000000},
-	{0x15,    2,    0,       10, 0x00000000},
-	{0x61,    2,    7,       28, 0x00000000},
-	{0x55,    2,    0,        8, 0x0000a888},
-	{0xbf,    2,    7,        0, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000000},
-	{0xbf,    1,    8,        0, 0x00000000},
-	{0x07,    1,    0,        0, 0x00000012},
-	{0x2d,    1,    9,     1670, 0x00000000},
-	{0xb7,    1,    0,        0, 0x00000012},
-	{0x69,    6,    8,       16, 0x00000000},
-	{0xbf,    7,    2,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x0000ffff},
-	{0x7b,   10,    7,      -56, 0x00000000},
-	{0x15,    6,    0,      443, 0x0000dd86},
-	{0xb7,    7,    0,        0, 0x00000003},
-	{0x55,    6,    0,     1662, 0x00000008},
-	{0x0f,    8,    1,        0, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000000},
-	{0xbf,    1,    8,        0, 0x00000000},
-	{0x07,    1,    0,        0, 0x00000018},
-	{0x2d,    1,    9,     1657, 0x00000000},
+	{0xbf,    7,    0,        0, 0x00000000},
+	{0xb7,    8,    0,        0, 0x00000000},
+	{0x15,    7,    0,     2064, 0x00000000},
+	{0xbf,    3,   10,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0xffffffe0},
+	{0xbf,    1,    6,        0, 0x00000000},
+	{0xb7,    2,    0,        0, 0x00000000},
+	{0xb7,    4,    0,        0, 0x0000001c},
+	{0xb7,    5,    0,        0, 0x00000001},
+	{0x85,    0,    0,        0, 0x00000044},
+	{0x55,    0,    0,     2056, 0x00000000},
+	{0x71,    1,   10,      -32, 0x00000000},
+	{0x77,    1,    0,        0, 0x00000004},
+	{0x15,    1,    0,      503, 0x00000006},
+	{0xb7,    8,    0,        0, 0x00000003},
+	{0x55,    1,    0,     2051, 0x00000004},
 	{0xb7,    1,    0,        0, 0x00000000},
-	{0x71,    3,    8,       12, 0x00000000},
-	{0x71,    2,    8,        9, 0x00000000},
+	{0x61,    4,   10,      -20, 0x00000000},
+	{0xdc,    4,    0,        0, 0x00000040},
+	{0xc7,    4,    0,        0, 0x00000020},
+	{0x71,    2,   10,      -23, 0x00000000},
 	{0x15,    2,    0,        1, 0x00000011},
-	{0x55,    2,    0,       21, 0x00000006},
-	{0x71,    2,    8,        7, 0x00000000},
-	{0x71,    4,    8,        6, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x67,    5,    0,        0, 0x00000008},
-	{0x57,    5,    0,        0, 0x00001f00},
-	{0x4f,    5,    2,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000020},
-	{0x4f,    4,    5,        0, 0x00000000},
-	{0x55,    4,    0,       12, 0x00000000},
-	{0xbf,    2,    8,        0, 0x00000000},
-	{0x07,    2,    0,        0, 0x00000014},
-	{0x71,    4,    2,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000018},
-	{0x71,    1,    2,        1, 0x00000000},
-	{0x67,    1,    0,        0, 0x00000010},
-	{0x4f,    1,    4,        0, 0x00000000},
-	{0x71,    4,    2,        3, 0x00000000},
-	{0x4f,    1,    4,        0, 0x00000000},
-	{0x71,    2,    2,        2, 0x00000000},
-	{0x67,    2,    0,        0, 0x00000008},
-	{0x4f,    1,    2,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000038},
-	{0xc7,    4,    0,        0, 0x00000038},
+	{0x55,    2,    0,        5, 0x00000006},
+	{0x69,    2,   10,      -26, 0x00000000},
+	{0x57,    2,    0,        0, 0x0000ff3f},
+	{0x55,    2,    0,        2, 0x00000000},
+	{0x61,    1,   10,      -12, 0x00000000},
+	{0xdc,    1,    0,        0, 0x00000020},
 	{0xb7,    2,    0,        0, 0x00000000},
+	{0xb7,    5,    0,        0, 0x00000000},
 	{0x65,    4,    0,        1, 0xffffffff},
-	{0xb7,    7,    0,        0, 0x2cc681d1},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x598d03a2},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb31a0745},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x66340e8a},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xcc681d15},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000004},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x98d03a2b},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000002},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x31a07456},
-	{0x71,    4,    8,       13, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000001},
+	{0xb7,    5,    0,        0, 0x2cc681d1},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x40000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6340e8ad},
+	{0xa7,    5,    0,        0, 0x598d03a2},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000038},
-	{0xc7,    3,    0,        0, 0x00000038},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0xc681d15b},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x20000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xb31a0745},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
+	{0x57,    3,    0,        0, 0x10000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8d03a2b7},
+	{0xa7,    5,    0,        0, 0x66340e8a},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
+	{0x57,    3,    0,        0, 0x08000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xcc681d15},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x04000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x98d03a2b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x02000000},
+	{0x15,    3,    0,        1, 0x00000000},
+	{0xa7,    5,    0,        0, 0x31a07456},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x01000000},
+	{0x15,    3,    0,        1, 0x00000000},
+	{0xa7,    5,    0,        0, 0x6340e8ad},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00800000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xc681d15b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00400000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x8d03a2b7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00200000},
 	{0x15,    3,    0,        1, 0x00000000},
 	{0xa7,    5,    0,        0, 0x1a07456f},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
+	{0x57,    3,    0,        0, 0x00100000},
 	{0x15,    3,    0,        1, 0x00000000},
 	{0xa7,    5,    0,        0, 0x340e8ade},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
+	{0x57,    3,    0,        0, 0x00080000},
 	{0x15,    3,    0,        1, 0x00000000},
 	{0xa7,    5,    0,        0, 0x681d15bd},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000004},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd03a2b7b},
+	{0x57,    3,    0,        0, 0x00040000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd03a2b7b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000002},
+	{0x57,    3,    0,        0, 0x00020000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xa07456f6},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00010000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa07456f6},
-	{0x71,    3,    8,       14, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
 	{0xa7,    5,    0,        0, 0x40e8aded},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000038},
-	{0xc7,    4,    0,        0, 0x00000038},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0x81d15bdb},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x03a2b7b7},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x07456f6f},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x0e8adedf},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x1d15bdbf},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000004},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x3a2b7b7e},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000002},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x7456f6fd},
-	{0x71,    4,    8,       15, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe8adedfa},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000038},
-	{0xc7,    3,    0,        0, 0x00000038},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd15bdbf4},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00008000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x81d15bdb},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
+	{0x57,    3,    0,        0, 0x00004000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa2b7b7e9},
+	{0xa7,    5,    0,        0, 0x03a2b7b7},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
+	{0x57,    3,    0,        0, 0x00002000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x456f6fd3},
+	{0xa7,    5,    0,        0, 0x07456f6f},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
+	{0x57,    3,    0,        0, 0x00001000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8adedfa7},
+	{0xa7,    5,    0,        0, 0x0e8adedf},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
+	{0x57,    3,    0,        0, 0x00000800},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x15bdbf4f},
+	{0xa7,    5,    0,        0, 0x1d15bdbf},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000004},
+	{0x57,    3,    0,        0, 0x00000400},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x2b7b7e9e},
+	{0xa7,    5,    0,        0, 0x3a2b7b7e},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000002},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x56f6fd3d},
-	{0x71,    3,    8,       16, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xadedfa7b},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000038},
-	{0xc7,    4,    0,        0, 0x00000038},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0x5bdbf4f7},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb7b7e9ef},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6f6fd3df},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xdedfa7bf},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xbdbf4f7f},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000004},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x7b7e9eff},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000002},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf6fd3dff},
-	{0x71,    4,    8,       17, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000001},
+	{0x57,    3,    0,        0, 0x00000200},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xedfa7bfe},
+	{0xa7,    5,    0,        0, 0x7456f6fd},
 	{0xbf,    3,    4,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000038},
-	{0xc7,    3,    0,        0, 0x00000038},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdbf4f7fc},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000100},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xe8adedfa},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000080},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd15bdbf4},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb7e9eff9},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xa2b7b7e9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000020},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6fd3dff2},
+	{0xa7,    5,    0,        0, 0x456f6fd3},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdfa7bfe5},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x8adedfa7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000008},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xbf4f7fca},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000004},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7e9eff94},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000002},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfd3dff28},
-	{0x71,    3,    8,       18, 0x00000000},
+	{0xa7,    5,    0,        0, 0x15bdbf4f},
+	{0x61,    3,   10,      -16, 0x00000000},
+	{0xbf,    0,    4,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000004},
+	{0x15,    0,    0,        1, 0x00000000},
+	{0xa7,    5,    0,        0, 0x2b7b7e9e},
+	{0xdc,    3,    0,        0, 0x00000040},
+	{0xbf,    0,    4,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000002},
+	{0x15,    0,    0,        1, 0x00000000},
+	{0xa7,    5,    0,        0, 0x56f6fd3d},
+	{0xc7,    3,    0,        0, 0x00000020},
 	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfa7bfe51},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x67,    6,    0,        0, 0x00000038},
-	{0xc7,    6,    0,        0, 0x00000038},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xadedfa7b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    5,        0, 0x00000000},
-	{0xa7,    4,    0,        0, 0xf4f7fca2},
-	{0x6d,    2,    6,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x5bdbf4f7},
+	{0x6d,    2,    3,        1, 0x00000000},
 	{0xbf,    4,    5,        0, 0x00000000},
 	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000040},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xb7b7e9ef},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xe9eff945},
+	{0xa7,    4,    0,        0, 0x6f6fd3df},
 	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000020},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xdedfa7bf},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xbdbf4f7f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd3dff28a},
+	{0xa7,    4,    0,        0, 0x7b7e9eff},
 	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000010},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xf6fd3dff},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x01000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xedfa7bfe},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xdbf4f7fc},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xb7e9eff9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xa7bfe514},
+	{0xa7,    4,    0,        0, 0x6fd3dff2},
 	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000008},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xdfa7bfe5},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xbf4f7fca},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x4f7fca28},
+	{0xa7,    4,    0,        0, 0x7e9eff94},
 	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xfd3dff28},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xfa7bfe51},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xf4f7fca2},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xe9eff945},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xd3dff28a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xa7bfe514},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x9eff9450},
+	{0xa7,    4,    0,        0, 0x4f7fca28},
 	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0x9eff9450},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
 	{0x15,    5,    0,        1, 0x00000000},
 	{0xa7,    4,    0,        0, 0x3dff28a0},
-	{0x71,    5,    8,       19, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x15,    5,    0,        1, 0x00000000},
 	{0xa7,    4,    0,        0, 0x7bfe5141},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000038},
-	{0xc7,    3,    0,        0, 0x00000038},
-	{0xbf,    7,    4,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf7fca283},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    7,    4,        0, 0x00000000},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xeff94506},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xdff28a0c},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xbfe51418},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x7fca2831},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000004},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xff945063},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000002},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xff28a0c6},
-	{0x57,    5,    0,        0, 0x00000001},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xf7fca283},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xeff94506},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xdff28a0c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xbfe51418},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xfe51418c},
-	{0xbf,    4,    1,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000020},
-	{0xc7,    4,    0,        0, 0x00000020},
-	{0xbf,    3,    7,        0, 0x00000000},
-	{0xa7,    3,    0,        0, 0xfca28319},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    3,    7,        0, 0x00000000},
+	{0xa7,    4,    0,        0, 0x7fca2831},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xff945063},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xff28a0c6},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000001},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xfe51418c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    3,        0, 0x00000000},
+	{0xbf,    5,    1,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x18,    0,    0,        0, 0xfca28319},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0xaf,    3,    0,        0, 0x00000000},
+	{0x6d,    2,    5,        1, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x40000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf9450633},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xf9450633},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x20000000},
-	{0x79,    6,   10,      -56, 0x00000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf28a0c67},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xf28a0c67},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x10000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xe51418ce},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xe51418ce},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x08000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xca28319d},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xca28319d},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x04000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x9450633b},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x9450633b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x02000000},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -423,16 +439,20 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x51418ced},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00800000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xa28319db},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xa28319db},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00400000},
 	{0x15,    2,    0,        1, 0x00000000},
 	{0xa7,    3,    0,        0, 0x450633b6},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00200000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x8a0c676c},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x8a0c676c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00100000},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -447,16 +467,20 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x50633b63},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00020000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xa0c676c6},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xa0c676c6},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00010000},
 	{0x15,    2,    0,        1, 0x00000000},
 	{0xa7,    3,    0,        0, 0x418ced8d},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00008000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x8319db1a},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x8319db1a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00004000},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -479,12 +503,16 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x633b6347},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000200},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xc676c68f},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xc676c68f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000100},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x8ced8d1f},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x8ced8d1f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000080},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -499,12 +527,16 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x676c68fa},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000010},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xced8d1f4},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xced8d1f4},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000008},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x9db1a3e9},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x9db1a3e9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000004},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -514,1078 +546,1336 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0x15,    2,    0,        1, 0x00000000},
 	{0xa7,    3,    0,        0, 0x76c68fa5},
 	{0x57,    1,    0,        0, 0x00000001},
-	{0x15,    1,    0,     1194, 0x00000000},
-	{0xa7,    3,    0,        0, 0xed8d1f4a},
-	{0x05,    0,    0,     1192, 0x00000000},
-	{0x0f,    8,    1,        0, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000000},
-	{0xbf,    1,    8,        0, 0x00000000},
-	{0x07,    1,    0,        0, 0x0000002c},
-	{0x2d,    1,    9,     1216, 0x00000000},
-	{0x61,    2,    8,        8, 0x00000000},
-	{0xdc,    2,    0,        0, 0x00000040},
-	{0xc7,    2,    0,        0, 0x00000020},
-	{0x71,    3,    8,        6, 0x00000000},
-	{0x15,    3,    0,        2, 0x00000011},
+	{0x15,    1,    0,     1482, 0x00000000},
+	{0x18,    1,    0,        0, 0xed8d1f4a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0x05,    0,    0,     1478, 0x00000000},
+	{0xbf,    3,   10,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0xffffffb0},
+	{0xbf,    1,    6,        0, 0x00000000},
+	{0xb7,    2,    0,        0, 0x00000000},
+	{0xb7,    4,    0,        0, 0x00000030},
+	{0xb7,    5,    0,        0, 0x00000001},
+	{0x85,    0,    0,        0, 0x00000044},
+	{0x55,    0,    0,     1542, 0x00000000},
+	{0xb7,    2,    0,        0, 0x00000000},
+	{0x61,    4,   10,      -72, 0x00000000},
+	{0xdc,    4,    0,        0, 0x00000040},
+	{0xc7,    4,    0,        0, 0x00000020},
+	{0x71,    3,   10,      -74, 0x00000000},
 	{0xb7,    1,    0,        0, 0x00000000},
-	{0x55,    3,    0,       12, 0x00000006},
-	{0xbf,    3,    8,        0, 0x00000000},
-	{0x07,    3,    0,        0, 0x00000028},
-	{0x71,    4,    3,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000018},
-	{0x71,    1,    3,        1, 0x00000000},
-	{0x67,    1,    0,        0, 0x00000010},
-	{0x4f,    1,    4,        0, 0x00000000},
-	{0x71,    4,    3,        3, 0x00000000},
-	{0x4f,    1,    4,        0, 0x00000000},
-	{0x71,    3,    3,        2, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000008},
-	{0x4f,    1,    3,        0, 0x00000000},
-	{0xbf,    4,    2,        0, 0x00000000},
-	{0x77,    4,    0,        0, 0x0000001f},
-	{0x57,    4,    0,        0, 0x2cc681d1},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x55,    3,    0,        2, 0x00000011},
+	{0x61,    1,   10,      -40, 0x00000000},
+	{0xdc,    1,    0,        0, 0x00000020},
+	{0xb7,    5,    0,        0, 0x00000000},
+	{0x65,    4,    0,        1, 0xffffffff},
+	{0xb7,    5,    0,        0, 0x2cc681d1},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x40000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x598d03a2},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x598d03a2},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x20000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xb31a0745},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xb31a0745},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x10000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x66340e8a},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x66340e8a},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x08000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xcc681d15},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xcc681d15},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x04000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x98d03a2b},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x98d03a2b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x02000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x31a07456},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x31a07456},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x01000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x6340e8ad},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x6340e8ad},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00800000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xc681d15b},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xc681d15b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00400000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x8d03a2b7},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x8d03a2b7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00200000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x1a07456f},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x1a07456f},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00100000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x340e8ade},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x340e8ade},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00080000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x681d15bd},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x681d15bd},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00040000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd03a2b7b},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd03a2b7b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00020000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xa07456f6},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xa07456f6},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00010000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x40e8aded},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x40e8aded},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00008000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x81d15bdb},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x81d15bdb},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00004000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x03a2b7b7},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x03a2b7b7},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00002000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x07456f6f},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x07456f6f},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00001000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x0e8adedf},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x0e8adedf},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000800},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x1d15bdbf},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x1d15bdbf},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000400},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x3a2b7b7e},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x3a2b7b7e},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000200},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x7456f6fd},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x7456f6fd},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000100},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xe8adedfa},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xe8adedfa},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000080},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd15bdbf4},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd15bdbf4},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xa2b7b7e9},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xa2b7b7e9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000020},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x456f6fd3},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x456f6fd3},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x8adedfa7},
-	{0xbf,    3,    2,        0, 0x00000000},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x8adedfa7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000008},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x15bdbf4f},
-	{0x61,    3,    8,       12, 0x00000000},
-	{0xbf,    5,    2,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x2b7b7e9e},
+	{0xa7,    5,    0,        0, 0x15bdbf4f},
+	{0x61,    3,   10,      -68, 0x00000000},
+	{0xbf,    0,    4,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000004},
+	{0x15,    0,    0,        1, 0x00000000},
+	{0xa7,    5,    0,        0, 0x2b7b7e9e},
 	{0xdc,    3,    0,        0, 0x00000040},
-	{0xbf,    5,    2,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x56f6fd3d},
+	{0xbf,    0,    4,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000002},
+	{0x15,    0,    0,        1, 0x00000000},
+	{0xa7,    5,    0,        0, 0x56f6fd3d},
 	{0xc7,    3,    0,        0, 0x00000020},
-	{0x57,    2,    0,        0, 0x00000001},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xadedfa7b},
-	{0xb7,    2,    0,        0, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0x5bdbf4f7},
+	{0x57,    4,    0,        0, 0x00000001},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xadedfa7b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
+	{0xa7,    4,    0,        0, 0x5bdbf4f7},
 	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xb7b7e9ef},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x15,    5,    0,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x6f6fd3df},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xdedfa7bf},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xbdbf4f7f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x15,    5,    0,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x7b7e9eff},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xf6fd3dff},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x01000000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xedfa7bfe},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xdbf4f7fc},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xb7e9eff9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x15,    5,    0,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x6fd3dff2},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xdfa7bfe5},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xbf4f7fca},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x15,    5,    0,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x7e9eff94},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xfd3dff28},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xfa7bfe51},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xf4f7fca2},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xe9eff945},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xd3dff28a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xa7bfe514},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x15,    5,    0,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x4f7fca28},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0x9eff9450},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x15,    5,    0,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x3dff28a0},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x15,    5,    0,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x7bfe5141},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xf7fca283},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xeff94506},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xdff28a0c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xbfe51418},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    3,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x15,    5,    0,        1, 0x00000000},
+	{0xa7,    4,    0,        0, 0x7fca2831},
+	{0x61,    5,   10,      -64, 0x00000000},
+	{0xbf,    0,    3,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000004},
+	{0x15,    0,    0,        3, 0x00000000},
+	{0x18,    0,    0,        0, 0xff945063},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    0,        0, 0x00000000},
+	{0xdc,    5,    0,        0, 0x00000040},
+	{0xbf,    0,    3,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000002},
+	{0x15,    0,    0,        3, 0x00000000},
+	{0x18,    0,    0,        0, 0xff28a0c6},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    0,        0, 0x00000000},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x57,    3,    0,        0, 0x00000001},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xfe51418c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    4,    3,        0, 0x00000000},
+	{0x18,    0,    0,        0, 0xfca28319},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0xaf,    3,    0,        0, 0x00000000},
+	{0x6d,    2,    5,        1, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x40000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb7b7e9ef},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xf9450633},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x20000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6f6fd3df},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xf28a0c67},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x10000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdedfa7bf},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xe51418ce},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x08000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xbdbf4f7f},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xca28319d},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x04000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7b7e9eff},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x9450633b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x02000000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf6fd3dff},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x28a0c676},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x01000000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xedfa7bfe},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x51418ced},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00800000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdbf4f7fc},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xa28319db},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00400000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb7e9eff9},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x450633b6},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00200000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6fd3dff2},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x8a0c676c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00100000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdfa7bfe5},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x1418ced8},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00080000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xbf4f7fca},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x28319db1},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00040000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7e9eff94},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x50633b63},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00020000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfd3dff28},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xa0c676c6},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00010000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfa7bfe51},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x418ced8d},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00008000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf4f7fca2},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x8319db1a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00004000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xe9eff945},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x0633b634},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00002000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd3dff28a},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x0c676c68},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00001000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa7bfe514},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x18ced8d1},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000800},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x4f7fca28},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x319db1a3},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000400},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x9eff9450},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x633b6347},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000200},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x3dff28a0},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xc676c68f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000100},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7bfe5141},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x8ced8d1f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000080},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf7fca283},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x19db1a3e},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000040},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xeff94506},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x33b6347d},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000020},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdff28a0c},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0xa7,    3,    0,        0, 0x676c68fa},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xbfe51418},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xced8d1f4},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0xbf,    4,    5,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7fca2831},
-	{0x61,    4,    8,       16, 0x00000000},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000004},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xff945063},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x9db1a3e9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    4,        0, 0x00000000},
+	{0x61,    4,   10,      -60, 0x00000000},
+	{0xbf,    0,    5,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000004},
+	{0x15,    0,    0,        1, 0x00000000},
+	{0xa7,    3,    0,        0, 0x3b6347d2},
 	{0xdc,    4,    0,        0, 0x00000040},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000002},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xff28a0c6},
+	{0xbf,    0,    5,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000002},
+	{0x15,    0,    0,        1, 0x00000000},
+	{0xa7,    3,    0,        0, 0x76c68fa5},
 	{0xc7,    4,    0,        0, 0x00000020},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfe51418c},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0xfca28319},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0xed8d1f4a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    5,        0, 0x00000000},
+	{0x18,    5,    0,        0, 0xdb1a3e94},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xbf,    0,    3,        0, 0x00000000},
+	{0xaf,    0,    5,        0, 0x00000000},
 	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
+	{0xbf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x40000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf9450633},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xb6347d28},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x20000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf28a0c67},
+	{0xa7,    0,    0,        0, 0x6c68fa51},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x10000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe51418ce},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd8d1f4a3},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x08000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xca28319d},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xb1a3e946},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x04000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9450633b},
+	{0xa7,    0,    0,        0, 0x6347d28d},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x02000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x28a0c676},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xc68fa51a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x01000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x51418ced},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x8d1f4a35},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00800000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xa28319db},
+	{0xa7,    0,    0,        0, 0x1a3e946b},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00400000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x450633b6},
+	{0xa7,    0,    0,        0, 0x347d28d7},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00200000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8a0c676c},
+	{0xa7,    0,    0,        0, 0x68fa51ae},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00100000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x1418ced8},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd1f4a35c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00080000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x28319db1},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xa3e946b9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00040000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x50633b63},
+	{0xa7,    0,    0,        0, 0x47d28d73},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00020000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xa0c676c6},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x8fa51ae7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00010000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x418ced8d},
+	{0xa7,    0,    0,        0, 0x1f4a35cf},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00008000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8319db1a},
+	{0xa7,    0,    0,        0, 0x3e946b9e},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00004000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x0633b634},
+	{0xa7,    0,    0,        0, 0x7d28d73c},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00002000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x0c676c68},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xfa51ae78},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00001000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x18ced8d1},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xf4a35cf1},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000800},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x319db1a3},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xe946b9e3},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000400},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x633b6347},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd28d73c7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000200},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xc676c68f},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xa51ae78e},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000100},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8ced8d1f},
+	{0xa7,    0,    0,        0, 0x4a35cf1c},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000080},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x19db1a3e},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x946b9e38},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000040},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x33b6347d},
+	{0xa7,    0,    0,        0, 0x28d73c71},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000020},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x676c68fa},
+	{0xa7,    0,    0,        0, 0x51ae78e3},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xced8d1f4},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xa35cf1c6},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000008},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9db1a3e9},
-	{0x61,    3,    8,       20, 0x00000000},
+	{0xa7,    0,    0,        0, 0x46b9e38d},
+	{0x61,    3,   10,      -56, 0x00000000},
 	{0xbf,    5,    4,        0, 0x00000000},
 	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x3b6347d2},
+	{0x15,    5,    0,        3, 0x00000000},
+	{0x18,    5,    0,        0, 0x8d73c71b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    5,        0, 0x00000000},
 	{0xdc,    3,    0,        0, 0x00000040},
 	{0xbf,    5,    4,        0, 0x00000000},
 	{0x57,    5,    0,        0, 0x00000002},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x76c68fa5},
+	{0xa7,    0,    0,        0, 0x1ae78e36},
 	{0xc7,    3,    0,        0, 0x00000020},
 	{0x57,    4,    0,        0, 0x00000001},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xed8d1f4a},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdb1a3e94},
+	{0xa7,    0,    0,        0, 0x35cf1c6c},
+	{0xbf,    5,    0,        0, 0x00000000},
+	{0xa7,    5,    0,        0, 0x6b9e38d9},
 	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
+	{0xbf,    5,    0,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x40000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb6347d28},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xd73c71b2},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x20000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6c68fa51},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xae78e364},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x10000000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd8d1f4a3},
+	{0xa7,    5,    0,        0, 0x5cf1c6c9},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x08000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb1a3e946},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xb9e38d92},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x04000000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6347d28d},
+	{0xa7,    5,    0,        0, 0x73c71b25},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x02000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xc68fa51a},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xe78e364b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x01000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8d1f4a35},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xcf1c6c96},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00800000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1a3e946b},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x9e38d92c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00400000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x347d28d7},
+	{0xa7,    5,    0,        0, 0x3c71b259},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00200000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x68fa51ae},
+	{0xa7,    5,    0,        0, 0x78e364b2},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00100000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd1f4a35c},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xf1c6c964},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00080000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa3e946b9},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xe38d92c9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00040000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x47d28d73},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xc71b2593},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00020000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8fa51ae7},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x8e364b27},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00010000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1f4a35cf},
+	{0xa7,    5,    0,        0, 0x1c6c964e},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00008000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x3e946b9e},
+	{0xa7,    5,    0,        0, 0x38d92c9c},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00004000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7d28d73c},
+	{0xa7,    5,    0,        0, 0x71b25938},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00002000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfa51ae78},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xe364b270},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00001000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf4a35cf1},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xc6c964e0},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000800},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xe946b9e3},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x8d92c9c0},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000400},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd28d73c7},
+	{0xa7,    5,    0,        0, 0x1b259380},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000200},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa51ae78e},
+	{0xa7,    5,    0,        0, 0x364b2700},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000100},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x4a35cf1c},
+	{0xa7,    5,    0,        0, 0x6c964e01},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000080},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x946b9e38},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xd92c9c03},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x28d73c71},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xb2593807},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000020},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x51ae78e3},
+	{0xa7,    5,    0,        0, 0x64b2700f},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa35cf1c6},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xc964e01e},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x46b9e38d},
-	{0x61,    4,    8,       24, 0x00000000},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000004},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8d73c71b},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x92c9c03d},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
+	{0x61,    4,   10,      -52, 0x00000000},
+	{0xbf,    0,    3,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000004},
+	{0x15,    0,    0,        1, 0x00000000},
+	{0xa7,    5,    0,        0, 0x2593807a},
 	{0xdc,    4,    0,        0, 0x00000040},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000002},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1ae78e36},
+	{0xbf,    0,    3,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000002},
+	{0x15,    0,    0,        1, 0x00000000},
+	{0xa7,    5,    0,        0, 0x4b2700f4},
 	{0xc7,    4,    0,        0, 0x00000020},
 	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x35cf1c6c},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6b9e38d9},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x964e01e8},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0xbf,    0,    5,        0, 0x00000000},
+	{0xa7,    0,    0,        0, 0x2c9c03d1},
 	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
+	{0xbf,    0,    5,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x40000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xd73c71b2},
+	{0xa7,    0,    0,        0, 0x593807a3},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x20000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xae78e364},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xb2700f46},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x10000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x5cf1c6c9},
+	{0xa7,    0,    0,        0, 0x64e01e8d},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x08000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb9e38d92},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xc9c03d1a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x04000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x73c71b25},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x93807a35},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x02000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe78e364b},
+	{0xa7,    0,    0,        0, 0x2700f46b},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x01000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xcf1c6c96},
+	{0xa7,    0,    0,        0, 0x4e01e8d6},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00800000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9e38d92c},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x9c03d1ad},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00400000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x3c71b259},
+	{0xa7,    0,    0,        0, 0x3807a35b},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00200000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x78e364b2},
+	{0xa7,    0,    0,        0, 0x700f46b6},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00100000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf1c6c964},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xe01e8d6c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00080000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe38d92c9},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xc03d1ad9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00040000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xc71b2593},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x807a35b3},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00020000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8e364b27},
+	{0xa7,    0,    0,        0, 0x00f46b66},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00010000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x1c6c964e},
+	{0xa7,    0,    0,        0, 0x01e8d6cc},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00008000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x38d92c9c},
+	{0xa7,    0,    0,        0, 0x03d1ad99},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00004000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x71b25938},
+	{0xa7,    0,    0,        0, 0x07a35b32},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00002000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe364b270},
+	{0xa7,    0,    0,        0, 0x0f46b665},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00001000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xc6c964e0},
+	{0xa7,    0,    0,        0, 0x1e8d6cca},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000800},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8d92c9c0},
+	{0xa7,    0,    0,        0, 0x3d1ad994},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000400},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x1b259380},
+	{0xa7,    0,    0,        0, 0x7a35b328},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000200},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x364b2700},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xf46b6651},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000100},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6c964e01},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xe8d6cca2},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000080},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xd92c9c03},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd1ad9944},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb2593807},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xa35b3289},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000020},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x64b2700f},
+	{0xa7,    0,    0,        0, 0x46b66512},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xc964e01e},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x8d6cca25},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000008},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x92c9c03d},
-	{0x61,    3,    8,       28, 0x00000000},
+	{0xa7,    0,    0,        0, 0x1ad9944a},
+	{0x61,    3,   10,      -48, 0x00000000},
 	{0xbf,    5,    4,        0, 0x00000000},
 	{0x57,    5,    0,        0, 0x00000004},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x2593807a},
+	{0xa7,    0,    0,        0, 0x35b32894},
 	{0xdc,    3,    0,        0, 0x00000040},
 	{0xbf,    5,    4,        0, 0x00000000},
 	{0x57,    5,    0,        0, 0x00000002},
 	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x4b2700f4},
+	{0xa7,    0,    0,        0, 0x6b665129},
 	{0xc7,    3,    0,        0, 0x00000020},
 	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x964e01e8},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0x2c9c03d1},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xd6cca253},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    4,        0, 0x00000000},
+	{0x18,    4,    0,        0, 0xad9944a7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xbf,    5,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
+	{0xbf,    5,    0,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x40000000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x593807a3},
+	{0xa7,    5,    0,        0, 0x5b32894f},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x20000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb2700f46},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xb665129f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x10000000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x64e01e8d},
+	{0xa7,    5,    0,        0, 0x6cca253e},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x08000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xc9c03d1a},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xd9944a7d},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x04000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x93807a35},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xb32894fb},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x02000000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x2700f46b},
+	{0xa7,    5,    0,        0, 0x665129f6},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x01000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x4e01e8d6},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xcca253ec},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00800000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x9c03d1ad},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x9944a7d9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00400000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x3807a35b},
+	{0xa7,    5,    0,        0, 0x32894fb2},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00200000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x700f46b6},
+	{0xa7,    5,    0,        0, 0x65129f65},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00100000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xe01e8d6c},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xca253eca},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00080000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xc03d1ad9},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x944a7d95},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00040000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x807a35b3},
+	{0xa7,    5,    0,        0, 0x2894fb2a},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00020000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x00f46b66},
+	{0xa7,    5,    0,        0, 0x5129f655},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00010000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x01e8d6cc},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xa253ecab},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00008000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x03d1ad99},
+	{0xa7,    5,    0,        0, 0x44a7d956},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00004000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x07a35b32},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x894fb2ac},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00002000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x0f46b665},
+	{0xa7,    5,    0,        0, 0x129f6558},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00001000},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1e8d6cca},
+	{0xa7,    5,    0,        0, 0x253ecab1},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000800},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x3d1ad994},
+	{0xa7,    5,    0,        0, 0x4a7d9563},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000400},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7a35b328},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x94fb2ac7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000200},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf46b6651},
+	{0xa7,    5,    0,        0, 0x29f6558f},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000100},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xe8d6cca2},
+	{0xa7,    5,    0,        0, 0x53ecab1e},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000080},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd1ad9944},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0xa7d9563d},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000040},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa35b3289},
+	{0xa7,    5,    0,        0, 0x4fb2ac7a},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x46b66512},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    4,    0,        0, 0x9f6558f5},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    4,        0, 0x00000000},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000010},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8d6cca25},
+	{0xa7,    5,    0,        0, 0x3ecab1ea},
 	{0xbf,    4,    3,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000008},
 	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1ad9944a},
-	{0x61,    4,    8,       32, 0x00000000},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000004},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x35b32894},
+	{0xa7,    5,    0,        0, 0x7d9563d5},
+	{0x61,    4,   10,      -44, 0x00000000},
+	{0xbf,    0,    3,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000004},
+	{0x15,    0,    0,        3, 0x00000000},
+	{0x18,    0,    0,        0, 0xfb2ac7ab},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    0,        0, 0x00000000},
 	{0xdc,    4,    0,        0, 0x00000040},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000002},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6b665129},
+	{0xbf,    0,    3,        0, 0x00000000},
+	{0x57,    0,    0,        0, 0x00000002},
+	{0x15,    0,    0,        3, 0x00000000},
+	{0x18,    0,    0,        0, 0xf6558f56},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    0,        0, 0x00000000},
 	{0xc7,    4,    0,        0, 0x00000020},
 	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd6cca253},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0xad9944a7},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xecab1eac},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    5,    3,        0, 0x00000000},
+	{0x18,    3,    0,        0, 0xd9563d59},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xbf,    0,    5,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
+	{0xbf,    0,    5,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x40000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x5b32894f},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xb2ac7ab2},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x20000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb665129f},
+	{0xa7,    0,    0,        0, 0x6558f564},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x10000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6cca253e},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xcab1eac8},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x08000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xd9944a7d},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x9563d590},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x04000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb32894fb},
+	{0xa7,    0,    0,        0, 0x2ac7ab20},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x02000000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x665129f6},
+	{0xa7,    0,    0,        0, 0x558f5641},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x01000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xcca253ec},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xab1eac83},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00800000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9944a7d9},
+	{0xa7,    0,    0,        0, 0x563d5906},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00400000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x32894fb2},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xac7ab20c},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00200000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x65129f65},
+	{0xa7,    0,    0,        0, 0x58f56418},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00100000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xca253eca},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xb1eac831},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00080000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x944a7d95},
+	{0xa7,    0,    0,        0, 0x63d59063},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00040000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x2894fb2a},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xc7ab20c7},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00020000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x5129f655},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x8f56418f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00010000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xa253ecab},
+	{0xa7,    0,    0,        0, 0x1eac831e},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00008000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x44a7d956},
+	{0xa7,    0,    0,        0, 0x3d59063c},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00004000},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x894fb2ac},
+	{0xa7,    0,    0,        0, 0x7ab20c78},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00002000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x129f6558},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xf56418f0},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00001000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x253ecab1},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xeac831e1},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000800},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x4a7d9563},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xd59063c2},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000400},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x94fb2ac7},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xab20c784},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000200},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x29f6558f},
+	{0xa7,    0,    0,        0, 0x56418f09},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000100},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x53ecab1e},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xac831e12},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000080},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xa7d9563d},
+	{0xa7,    0,    0,        0, 0x59063c25},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x4fb2ac7a},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xb20c784b},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000020},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9f6558f5},
+	{0xa7,    0,    0,        0, 0x6418f097},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x3ecab1ea},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0xc831e12f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
 	{0xbf,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x00000008},
+	{0x15,    3,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x9063c25f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000004},
 	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x7d9563d5},
-	{0x61,    3,    8,       36, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xfb2ac7ab},
-	{0xdc,    3,    0,        0, 0x00000040},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf6558f56},
-	{0xc7,    3,    0,        0, 0x00000020},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xecab1eac},
-	{0xbf,    4,    7,        0, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd9563d59},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    4,    7,        0, 0x00000000},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x40000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xb2ac7ab2},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x20000000},
-	{0x79,    6,   10,      -56, 0x00000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x6558f564},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x10000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xcab1eac8},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x08000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x9563d590},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x04000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x2ac7ab20},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x02000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x558f5641},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x01000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xab1eac83},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00800000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x563d5906},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00400000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xac7ab20c},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00200000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x58f56418},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00100000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xb1eac831},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00080000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x63d59063},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00040000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xc7ab20c7},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00020000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x8f56418f},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00010000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x1eac831e},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00008000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x3d59063c},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00004000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x7ab20c78},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00002000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xf56418f0},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00001000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xeac831e1},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000800},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd59063c2},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000400},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xab20c784},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000200},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x56418f09},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000100},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xac831e12},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000080},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x59063c25},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000040},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xb20c784b},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000020},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x6418f097},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000010},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xc831e12f},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000008},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x9063c25f},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x20c784be},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x418f097c},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x831e12f9},
-	{0xbf,    5,    1,        0, 0x00000000},
-	{0x67,    5,    0,        0, 0x00000020},
-	{0xc7,    5,    0,        0, 0x00000020},
+	{0xa7,    0,    0,        0, 0x20c784be},
 	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000002},
+	{0x15,    3,    0,        1, 0x00000000},
+	{0xa7,    0,    0,        0, 0x418f097c},
+	{0x57,    4,    0,        0, 0x00000001},
+	{0x15,    4,    0,        3, 0x00000000},
+	{0x18,    3,    0,        0, 0x831e12f9},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    0,    3,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000020},
+	{0xc7,    4,    0,        0, 0x00000020},
+	{0xbf,    3,    0,        0, 0x00000000},
 	{0xa7,    3,    0,        0, 0x063c25f3},
-	{0x6d,    2,    5,        1, 0x00000000},
-	{0xbf,    3,    4,        0, 0x00000000},
+	{0x6d,    2,    4,        1, 0x00000000},
+	{0xbf,    3,    0,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x40000000},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -1604,12 +1894,16 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x63c25f3f},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x04000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xc784be7f},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xc784be7f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x02000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x8f097cff},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x8f097cff},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x01000000},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -1624,20 +1918,28 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x784be7f8},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00200000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf097cff0},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xf097cff0},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00100000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xe12f9fe0},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xe12f9fe0},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00080000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xc25f3fc1},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xc25f3fc1},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00040000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x84be7f83},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x84be7f83},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00020000},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -1656,8 +1958,10 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x4be7f83f},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00002000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x97cff07f},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x97cff07f},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00001000},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -1668,32 +1972,44 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x5f3fc1fd},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000400},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xbe7f83fb},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xbe7f83fb},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000200},
 	{0x15,    2,    0,        1, 0x00000000},
 	{0xa7,    3,    0,        0, 0x7cff07f7},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000100},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf9fe0fee},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xf9fe0fee},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000080},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf3fc1fdc},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xf3fc1fdc},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000040},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xe7f83fb8},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xe7f83fb8},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000020},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xcff07f70},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xcff07f70},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000010},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x9fe0fee1},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0x9fe0fee1},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000008},
 	{0x15,    2,    0,        1, 0x00000000},
@@ -1704,40 +2020,86 @@ static struct bpf_insn l3_l4_hash_insns[] = {
 	{0xa7,    3,    0,        0, 0x7f83fb85},
 	{0xbf,    2,    1,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000002},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xff07f70a},
+	{0x15,    2,    0,        3, 0x00000000},
+	{0x18,    2,    0,        0, 0xff07f70a},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    2,        0, 0x00000000},
 	{0x57,    1,    0,        0, 0x00000001},
-	{0x15,    1,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xfe0fee15},
-	{0x71,    1,    0,      201, 0x00000000},
+	{0x15,    1,    0,        3, 0x00000000},
+	{0x18,    1,    0,        0, 0xfe0fee15},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xaf,    3,    1,        0, 0x00000000},
+	{0x71,    1,    7,      201, 0x00000000},
 	{0x67,    1,    0,        0, 0x00000008},
-	{0x71,    2,    0,      200, 0x00000000},
+	{0x71,    2,    7,      200, 0x00000000},
 	{0x4f,    1,    2,        0, 0x00000000},
-	{0x71,    2,    0,      202, 0x00000000},
+	{0x71,    2,    7,      202, 0x00000000},
 	{0x67,    2,    0,        0, 0x00000010},
-	{0x71,    4,    0,      203, 0x00000000},
+	{0x71,    4,    7,      203, 0x00000000},
 	{0x67,    4,    0,        0, 0x00000018},
 	{0x4f,    4,    2,        0, 0x00000000},
 	{0x4f,    4,    1,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000020},
-	{0x77,    3,    0,        0, 0x00000020},
 	{0x9f,    3,    4,        0, 0x00000000},
 	{0x57,    3,    0,        0, 0x0000000f},
-	{0x67,    3,    0,        0, 0x00000002},
-	{0x0f,    0,    3,        0, 0x00000000},
-	{0x71,    1,    0,      137, 0x00000000},
+	{0x65,    3,    0,        5, 0x00000007},
+	{0x65,    3,    0,        9, 0x00000003},
+	{0x65,    3,    0,       16, 0x00000001},
+	{0x15,    3,    0,       27, 0x00000000},
+	{0x07,    7,    0,        0, 0x0000008c},
+	{0x05,    0,    0,       40, 0x00000000},
+	{0x65,    3,    0,        8, 0x0000000b},
+	{0x65,    3,    0,       14, 0x00000009},
+	{0x15,    3,    0,       24, 0x00000008},
+	{0x07,    7,    0,        0, 0x000000ac},
+	{0x05,    0,    0,       35, 0x00000000},
+	{0x65,    3,    0,       13, 0x00000005},
+	{0x15,    3,    0,       22, 0x00000004},
+	{0x07,    7,    0,        0, 0x0000009c},
+	{0x05,    0,    0,       31, 0x00000000},
+	{0x65,    3,    0,       12, 0x0000000d},
+	{0x15,    3,    0,       20, 0x0000000c},
+	{0x07,    7,    0,        0, 0x000000bc},
+	{0x05,    0,    0,       27, 0x00000000},
+	{0x15,    3,    0,       19, 0x00000002},
+	{0x07,    7,    0,        0, 0x00000094},
+	{0x05,    0,    0,       24, 0x00000000},
+	{0x15,    3,    0,       18, 0x0000000a},
+	{0x07,    7,    0,        0, 0x000000b4},
+	{0x05,    0,    0,       21, 0x00000000},
+	{0x15,    3,    0,       17, 0x00000006},
+	{0x07,    7,    0,        0, 0x000000a4},
+	{0x05,    0,    0,       18, 0x00000000},
+	{0x15,    3,    0,       16, 0x0000000e},
+	{0x07,    7,    0,        0, 0x000000c4},
+	{0x05,    0,    0,       15, 0x00000000},
+	{0x07,    7,    0,        0, 0x00000088},
+	{0x05,    0,    0,       13, 0x00000000},
+	{0x07,    7,    0,        0, 0x000000a8},
+	{0x05,    0,    0,       11, 0x00000000},
+	{0x07,    7,    0,        0, 0x00000098},
+	{0x05,    0,    0,        9, 0x00000000},
+	{0x07,    7,    0,        0, 0x000000b8},
+	{0x05,    0,    0,        7, 0x00000000},
+	{0x07,    7,    0,        0, 0x00000090},
+	{0x05,    0,    0,        5, 0x00000000},
+	{0x07,    7,    0,        0, 0x000000b0},
+	{0x05,    0,    0,        3, 0x00000000},
+	{0x07,    7,    0,        0, 0x000000a0},
+	{0x05,    0,    0,        1, 0x00000000},
+	{0x07,    7,    0,        0, 0x000000c0},
+	{0x71,    1,    7,        1, 0x00000000},
 	{0x67,    1,    0,        0, 0x00000008},
-	{0x71,    2,    0,      136, 0x00000000},
+	{0x71,    2,    7,        0, 0x00000000},
 	{0x4f,    1,    2,        0, 0x00000000},
-	{0x71,    2,    0,      138, 0x00000000},
+	{0x71,    2,    7,        2, 0x00000000},
 	{0x67,    2,    0,        0, 0x00000010},
-	{0x71,    3,    0,      139, 0x00000000},
+	{0x71,    3,    7,        3, 0x00000000},
 	{0x67,    3,    0,        0, 0x00000018},
 	{0x4f,    3,    2,        0, 0x00000000},
 	{0x4f,    3,    1,        0, 0x00000000},
 	{0x07,    3,    0,        0, 0x7cafe800},
 	{0x63,    6,    3,       52, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000001},
-	{0xbf,    0,    7,        0, 0x00000000},
+	{0xb7,    8,    0,        0, 0x00000001},
+	{0xbf,    0,    8,        0, 0x00000000},
 	{0x95,    0,    0,        0, 0x00000000},
 };
-- 
2.39.1.windows.1


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 13:48 [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements madhuker.mythri
@ 2024-01-12 16:40 ` Stephen Hemminger
  2024-01-12 16:41 ` Stephen Hemminger
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-12 16:40 UTC (permalink / raw)
  To: madhuker.mythri; +Cc: dev, ferruh.yigit

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

> From: Madhuker Mythri <madhuker.mythri@oracle.com>
> 
> When multiple queues configured, internally RSS will be enabled and thus TAP BPF RSS byte-code will be loaded on to the Kernel using BPF system calls.
> 
> Here, the problem is loading the existing BPF byte-code to the Kernel-5.15 and above versions throws errors, i.e: Kernel BPF verifier not accepted this existing BPF byte-code and system calls return error code "-7" as follows:
> ------------------------
> rss_add_actions(): Failed to load BPF section l3_l4 (7): Argument list too long
> ------------------------
> 
> RCA:  These errors started coming after from the Kernel-5.15 version, in which lots of new BPF verification restrictions were added for safe execution of byte-code on to the Kernel, due to which existing BPF program verification does not pass.
> Here are the major BPF verifier restrictions observed:
> 1) Need to use new BPF maps structure.
> 2) Kernel SKB data pointer access not allowed, instead use the BPF helper functions.
> 3) Undefined loops were not allowed(which are bounded by a variable value).
> 4) unreachable instructions(like: undefined array access).
> 
> After addressing all these Kernel BPF verifier restrictions able to load the BPF byte-code onto the Kernel successfully.
> 
> Verified with the latest DPDK-23.11 code, using the python extracted
> BPF instructions able to load sucessfully on to the Kernel tap device.
> 
> Bugzilla Id: 1329
> 
> Signed-off-by: Madhuker Mythri <madhuker.mythri@oracle.com>

The DPDK practice is to keep patches as followons of original thread.
Please use --msg-id option for reply.
Also put v2 in the mail.

The BPF program doesn't have to meet all the requirements of DPDK checkpatch
since it doesn't use EAL, but it should follow conventions. For example:

$ ./devtools/checkpatches.sh ~/Downloads/tap-bpf.mbox 

### [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.

WARNING:COMMIT_LOG_LONG_LINE: Prefer a maximum 75 chars per line (possible unwrapped commit description?)
#92: 
When multiple queues configured, internally RSS will be enabled and thus TAP BPF RSS byte-code will be loaded on to the Kernel using BPF system calls.

WARNING:TYPO_SPELLING: 'sucessfully' may be misspelled - perhaps 'successfully'?
#109: 
BPF instructions able to load sucessfully on to the Kernel tap device.
                              ^^^^^^^^^^^

...

WARNING:BRACES: braces {} are not necessary for single statement blocks
#659: FILE: drivers/net/tap/bpf/tap_bpf_program.c:120:
+	if (rsskey == NULL) {
 		return TC_ACT_OK;
 	}

ERROR:ELSE_AFTER_BRACE: else should follow close brace '}'
#769: FILE: drivers/net/tap/bpf/tap_bpf_program.c:156:
+		}
+		else {

CHECK:BRACES: Unbalanced braces around else statement
#769: FILE: drivers/net/tap/bpf/tap_bpf_program.c:156:
+		else {

ERROR:SPACING: space required before the open parenthesis '('
#790: FILE: drivers/net/tap/bpf/tap_bpf_program.c:168:
+		if(k == hash)

CHECK:BRACES: Blank lines aren't necessary before a close brace '}'
#807: FILE: drivers/net/tap/bpf/tap_bpf_program.c:176:
 
+}

total: 2 errors, 7 warnings, 2 checks, 3314 lines checked

0/1 valid patch


^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 13:48 [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements madhuker.mythri
  2024-01-12 16:40 ` Stephen Hemminger
@ 2024-01-12 16:41 ` Stephen Hemminger
  2024-01-13 17:50   ` [External] : " Madhuker Mythri
  2024-01-12 16:42 ` Stephen Hemminger
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-12 16:41 UTC (permalink / raw)
  To: madhuker.mythri; +Cc: dev, ferruh.yigit

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

> -	queue = rsskey->queues[(hash % rsskey->nb_queues) &
> -				       (TAP_MAX_QUEUES - 1)];
> -	skb->cb[1] = QUEUE_OFFSET + queue;
> -	/* printt(">>>>> rss_l3_l4 hash=0x%x queue=%u\n", hash, queue); */
> +	hash = (hash % rsskey->nb_queues) & (TAP_MAX_QUEUES - 1);
> +#pragma clang loop unroll(full)
> +	for (k = 0; k < TAP_MAX_QUEUES; k++) {
> +		if(k == hash)
> +			queue = rsskey->queues[k];
> +	}
>  

Why introduce another loop here. Original code was fine
and bounded.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 13:48 [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements madhuker.mythri
  2024-01-12 16:40 ` Stephen Hemminger
  2024-01-12 16:41 ` Stephen Hemminger
@ 2024-01-12 16:42 ` Stephen Hemminger
  2024-01-13 17:52   ` [External] : " Madhuker Mythri
  2024-01-12 16:43 ` Stephen Hemminger
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-12 16:42 UTC (permalink / raw)
  To: madhuker.mythri; +Cc: dev, ferruh.yigit

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

> 2) Kernel SKB data pointer access not allowed, instead use the BPF helper functions.

This is not true, many of the current kernel BPF examples uses skb pointer.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 13:48 [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements madhuker.mythri
                   ` (2 preceding siblings ...)
  2024-01-12 16:42 ` Stephen Hemminger
@ 2024-01-12 16:43 ` Stephen Hemminger
  2024-01-12 16:46 ` Stephen Hemminger
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-12 16:43 UTC (permalink / raw)
  To: madhuker.mythri; +Cc: dev, ferruh.yigit

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

> +	if (bpf_skb_load_bytes_relative(skb, 0, &nh, sizeof(nh), BPF_HDR_START_NET))
> +		return TC_ACT_OK;
> +	if (nh.iph.version == 4) {

Using IP header bytes, instead of ether header protocol (in skb->proto)
is changing functionality and wrong. You don't want to be seeing some other
protocol (not IPv4 or IPv6) that just happened to have the 4 in that nibble.

Original code was fine.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 13:48 [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements madhuker.mythri
                   ` (3 preceding siblings ...)
  2024-01-12 16:43 ` Stephen Hemminger
@ 2024-01-12 16:46 ` Stephen Hemminger
  2024-01-13 17:55   ` [External] : " Madhuker Mythri
  2024-01-12 17:53 ` [RFC v3] tap: rework the BPF header parsing Stephen Hemminger
  2024-02-07 18:55 ` [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements Stephen Hemminger
  6 siblings, 1 reply; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-12 16:46 UTC (permalink / raw)
  To: madhuker.mythri; +Cc: dev, ferruh.yigit

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

>  		struct ipv4_l3_l4_tuple v4_tuple = {
> -			.src_addr = IPv4(*(src_dst_addr + 0),
> -					*(src_dst_addr + 1),
> -					*(src_dst_addr + 2),
> -					*(src_dst_addr + 3)),
> -			.dst_addr = IPv4(*(src_dst_addr + 4),
> -					*(src_dst_addr + 5),
> -					*(src_dst_addr + 6),
> -					*(src_dst_addr + 7)),
> +			.src_addr = bpf_ntohl(nh.iph.saddr),
> +			.dst_addr = bpf_ntohl(nh.iph.daddr),

Not sure this is correct.
The RSS calculation (Toeplitz) expects that data is in network
byte order. See app/test/test_thash.c for example.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [RFC v3] tap: rework the BPF header parsing
  2024-01-12 13:48 [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements madhuker.mythri
                   ` (4 preceding siblings ...)
  2024-01-12 16:46 ` Stephen Hemminger
@ 2024-01-12 17:53 ` Stephen Hemminger
  2024-02-07 18:55 ` [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements Stephen Hemminger
  6 siblings, 0 replies; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-12 17:53 UTC (permalink / raw)
  To: dev; +Cc: Stephen Hemminger

Cleanup the header parsing.
  - bpf load helpers
  - split IPv4 and IPv6 into seperate functions
  - drop incorrect VLAN header parsing
  - simplify the check for Ipv4 fragments
  - support IPv4 options
  - support IPv6 extension headers
  - fix the handling of L3 only hash
  - allow using non-default key
  - use standard network header structs
  - use temporary variables to avoid so many casts
  - stick to kernel data types (ie __u32)
  - fix support for non-default key

  - use new BPF map format based off of BTF
  - use system BPF headers and helpers

This is based of the BPF map work in earlier patch
from Madhuker Mythri <madhuker.mythri@oracle.com>

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
This is still work in progress.
Needs more testing.
Not sure it is worth splitting into smaller patches.

 drivers/net/tap/bpf/Makefile          |   14 +-
 drivers/net/tap/bpf/bpf_api.h         |  276 ---
 drivers/net/tap/bpf/bpf_elf.h         |   53 -
 drivers/net/tap/bpf/tap_bpf_program.c |  346 ++-
 drivers/net/tap/tap_bpf_api.c         |    5 +-
 drivers/net/tap/tap_bpf_insns.h       | 3288 +++++++++++++------------
 drivers/net/tap/tap_flow.c            |   43 +
 7 files changed, 1920 insertions(+), 2105 deletions(-)
 delete mode 100644 drivers/net/tap/bpf/bpf_api.h
 delete mode 100644 drivers/net/tap/bpf/bpf_elf.h

diff --git a/drivers/net/tap/bpf/Makefile b/drivers/net/tap/bpf/Makefile
index 9efeeb1bc704..20a51f1ef4e1 100644
--- a/drivers/net/tap/bpf/Makefile
+++ b/drivers/net/tap/bpf/Makefile
@@ -2,9 +2,14 @@
 # This file is not built as part of normal DPDK build.
 # It is used to generate the eBPF code for TAP RSS.
 
-CLANG=clang
-CLANG_OPTS=-O2
-TARGET=../tap_bpf_insns.h
+CLANG = clang
+CLANG_OPTS = -g -O2 -Wall -Wextra -target bpf
+
+TARGET = ../tap_bpf_insns.h
+
+# Get Clang's default includes on this system.
+CLANG_BPF_SYS_INCLUDES ?= $(shell $(CLANG) -v -E - </dev/null 2>&1 \
+	| sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }')
 
 all: $(TARGET)
 
@@ -12,8 +17,7 @@ clean:
 	rm tap_bpf_program.o $(TARGET)
 
 tap_bpf_program.o: tap_bpf_program.c
-	$(CLANG) $(CLANG_OPTS) -emit-llvm -c $< -o - | \
-	llc -march=bpf -filetype=obj -o $@
+	$(CLANG) $(CLANG_OPTS) $(CLANG_BPF_SYS_INCLUDES) -c $< -o $@
 
 $(TARGET): tap_bpf_program.o
 	python3 bpf_extract.py -stap_bpf_program.c -o $@ $<
diff --git a/drivers/net/tap/bpf/bpf_api.h b/drivers/net/tap/bpf/bpf_api.h
deleted file mode 100644
index 2638a8a4ac9a..000000000000
--- a/drivers/net/tap/bpf/bpf_api.h
+++ /dev/null
@@ -1,276 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
-
-#ifndef __BPF_API__
-#define __BPF_API__
-
-/* Note:
- *
- * This file can be included into eBPF kernel programs. It contains
- * a couple of useful helper functions, map/section ABI (bpf_elf.h),
- * misc macros and some eBPF specific LLVM built-ins.
- */
-
-#include <stdint.h>
-
-#include <linux/pkt_cls.h>
-#include <linux/bpf.h>
-#include <linux/filter.h>
-
-#include <asm/byteorder.h>
-
-#include "bpf_elf.h"
-
-/** libbpf pin type. */
-enum libbpf_pin_type {
-	LIBBPF_PIN_NONE,
-	/* PIN_BY_NAME: pin maps by name (in /sys/fs/bpf by default) */
-	LIBBPF_PIN_BY_NAME,
-};
-
-/** Type helper macros. */
-
-#define __uint(name, val) int (*name)[val]
-#define __type(name, val) typeof(val) *name
-#define __array(name, val) typeof(val) *name[]
-
-/** Misc macros. */
-
-#ifndef __stringify
-# define __stringify(X)		#X
-#endif
-
-#ifndef __maybe_unused
-# define __maybe_unused		__attribute__((__unused__))
-#endif
-
-#ifndef offsetof
-# define offsetof(TYPE, MEMBER)	__builtin_offsetof(TYPE, MEMBER)
-#endif
-
-#ifndef likely
-# define likely(X)		__builtin_expect(!!(X), 1)
-#endif
-
-#ifndef unlikely
-# define unlikely(X)		__builtin_expect(!!(X), 0)
-#endif
-
-#ifndef htons
-# define htons(X)		__constant_htons((X))
-#endif
-
-#ifndef ntohs
-# define ntohs(X)		__constant_ntohs((X))
-#endif
-
-#ifndef htonl
-# define htonl(X)		__constant_htonl((X))
-#endif
-
-#ifndef ntohl
-# define ntohl(X)		__constant_ntohl((X))
-#endif
-
-#ifndef __inline__
-# define __inline__		__attribute__((always_inline))
-#endif
-
-/** Section helper macros. */
-
-#ifndef __section
-# define __section(NAME)						\
-	__attribute__((section(NAME), used))
-#endif
-
-#ifndef __section_tail
-# define __section_tail(ID, KEY)					\
-	__section(__stringify(ID) "/" __stringify(KEY))
-#endif
-
-#ifndef __section_xdp_entry
-# define __section_xdp_entry						\
-	__section(ELF_SECTION_PROG)
-#endif
-
-#ifndef __section_cls_entry
-# define __section_cls_entry						\
-	__section(ELF_SECTION_CLASSIFIER)
-#endif
-
-#ifndef __section_act_entry
-# define __section_act_entry						\
-	__section(ELF_SECTION_ACTION)
-#endif
-
-#ifndef __section_lwt_entry
-# define __section_lwt_entry						\
-	__section(ELF_SECTION_PROG)
-#endif
-
-#ifndef __section_license
-# define __section_license						\
-	__section(ELF_SECTION_LICENSE)
-#endif
-
-#ifndef __section_maps
-# define __section_maps							\
-	__section(ELF_SECTION_MAPS)
-#endif
-
-/** Declaration helper macros. */
-
-#ifndef BPF_LICENSE
-# define BPF_LICENSE(NAME)						\
-	char ____license[] __section_license = NAME
-#endif
-
-/** Classifier helper */
-
-#ifndef BPF_H_DEFAULT
-# define BPF_H_DEFAULT	-1
-#endif
-
-/** BPF helper functions for tc. Individual flags are in linux/bpf.h */
-
-#ifndef __BPF_FUNC
-# define __BPF_FUNC(NAME, ...)						\
-	(* NAME)(__VA_ARGS__) __maybe_unused
-#endif
-
-#ifndef BPF_FUNC
-# define BPF_FUNC(NAME, ...)						\
-	__BPF_FUNC(NAME, __VA_ARGS__) = (void *) BPF_FUNC_##NAME
-#endif
-
-/* Map access/manipulation */
-static void *BPF_FUNC(map_lookup_elem, void *map, const void *key);
-static int BPF_FUNC(map_update_elem, void *map, const void *key,
-		    const void *value, uint32_t flags);
-static int BPF_FUNC(map_delete_elem, void *map, const void *key);
-
-/* Time access */
-static uint64_t BPF_FUNC(ktime_get_ns);
-
-/* Debugging */
-
-/* FIXME: __attribute__ ((format(printf, 1, 3))) not possible unless
- * llvm bug https://llvm.org/bugs/show_bug.cgi?id=26243 gets resolved.
- * It would require ____fmt to be made const, which generates a reloc
- * entry (non-map).
- */
-static void BPF_FUNC(trace_printk, const char *fmt, int fmt_size, ...);
-
-#ifndef printt
-# define printt(fmt, ...)						\
-	({								\
-		char ____fmt[] = fmt;					\
-		trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__);	\
-	})
-#endif
-
-/* Random numbers */
-static uint32_t BPF_FUNC(get_prandom_u32);
-
-/* Tail calls */
-static void BPF_FUNC(tail_call, struct __sk_buff *skb, void *map,
-		     uint32_t index);
-
-/* System helpers */
-static uint32_t BPF_FUNC(get_smp_processor_id);
-static uint32_t BPF_FUNC(get_numa_node_id);
-
-/* Packet misc meta data */
-static uint32_t BPF_FUNC(get_cgroup_classid, struct __sk_buff *skb);
-static int BPF_FUNC(skb_under_cgroup, void *map, uint32_t index);
-
-static uint32_t BPF_FUNC(get_route_realm, struct __sk_buff *skb);
-static uint32_t BPF_FUNC(get_hash_recalc, struct __sk_buff *skb);
-static uint32_t BPF_FUNC(set_hash_invalid, struct __sk_buff *skb);
-
-/* Packet redirection */
-static int BPF_FUNC(redirect, int ifindex, uint32_t flags);
-static int BPF_FUNC(clone_redirect, struct __sk_buff *skb, int ifindex,
-		    uint32_t flags);
-
-/* Packet manipulation */
-static int BPF_FUNC(skb_load_bytes, struct __sk_buff *skb, uint32_t off,
-		    void *to, uint32_t len);
-static int BPF_FUNC(skb_store_bytes, struct __sk_buff *skb, uint32_t off,
-		    const void *from, uint32_t len, uint32_t flags);
-
-static int BPF_FUNC(l3_csum_replace, struct __sk_buff *skb, uint32_t off,
-		    uint32_t from, uint32_t to, uint32_t flags);
-static int BPF_FUNC(l4_csum_replace, struct __sk_buff *skb, uint32_t off,
-		    uint32_t from, uint32_t to, uint32_t flags);
-static int BPF_FUNC(csum_diff, const void *from, uint32_t from_size,
-		    const void *to, uint32_t to_size, uint32_t seed);
-static int BPF_FUNC(csum_update, struct __sk_buff *skb, uint32_t wsum);
-
-static int BPF_FUNC(skb_change_type, struct __sk_buff *skb, uint32_t type);
-static int BPF_FUNC(skb_change_proto, struct __sk_buff *skb, uint32_t proto,
-		    uint32_t flags);
-static int BPF_FUNC(skb_change_tail, struct __sk_buff *skb, uint32_t nlen,
-		    uint32_t flags);
-
-static int BPF_FUNC(skb_pull_data, struct __sk_buff *skb, uint32_t len);
-
-/* Event notification */
-static int __BPF_FUNC(skb_event_output, struct __sk_buff *skb, void *map,
-		      uint64_t index, const void *data, uint32_t size) =
-		      (void *) BPF_FUNC_perf_event_output;
-
-/* Packet vlan encap/decap */
-static int BPF_FUNC(skb_vlan_push, struct __sk_buff *skb, uint16_t proto,
-		    uint16_t vlan_tci);
-static int BPF_FUNC(skb_vlan_pop, struct __sk_buff *skb);
-
-/* Packet tunnel encap/decap */
-static int BPF_FUNC(skb_get_tunnel_key, struct __sk_buff *skb,
-		    struct bpf_tunnel_key *to, uint32_t size, uint32_t flags);
-static int BPF_FUNC(skb_set_tunnel_key, struct __sk_buff *skb,
-		    const struct bpf_tunnel_key *from, uint32_t size,
-		    uint32_t flags);
-
-static int BPF_FUNC(skb_get_tunnel_opt, struct __sk_buff *skb,
-		    void *to, uint32_t size);
-static int BPF_FUNC(skb_set_tunnel_opt, struct __sk_buff *skb,
-		    const void *from, uint32_t size);
-
-/** LLVM built-ins, mem*() routines work for constant size */
-
-#ifndef lock_xadd
-# define lock_xadd(ptr, val)	((void) __sync_fetch_and_add(ptr, val))
-#endif
-
-#ifndef memset
-# define memset(s, c, n)	__builtin_memset((s), (c), (n))
-#endif
-
-#ifndef memcpy
-# define memcpy(d, s, n)	__builtin_memcpy((d), (s), (n))
-#endif
-
-#ifndef memmove
-# define memmove(d, s, n)	__builtin_memmove((d), (s), (n))
-#endif
-
-/* FIXME: __builtin_memcmp() is not yet fully usable unless llvm bug
- * https://llvm.org/bugs/show_bug.cgi?id=26218 gets resolved. Also
- * this one would generate a reloc entry (non-map), otherwise.
- */
-#if 0
-#ifndef memcmp
-# define memcmp(a, b, n)	__builtin_memcmp((a), (b), (n))
-#endif
-#endif
-
-unsigned long long load_byte(void *skb, unsigned long long off)
-	asm ("llvm.bpf.load.byte");
-
-unsigned long long load_half(void *skb, unsigned long long off)
-	asm ("llvm.bpf.load.half");
-
-unsigned long long load_word(void *skb, unsigned long long off)
-	asm ("llvm.bpf.load.word");
-
-#endif /* __BPF_API__ */
diff --git a/drivers/net/tap/bpf/bpf_elf.h b/drivers/net/tap/bpf/bpf_elf.h
deleted file mode 100644
index ea8a11c95c0f..000000000000
--- a/drivers/net/tap/bpf/bpf_elf.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 or BSD-3-Clause */
-#ifndef __BPF_ELF__
-#define __BPF_ELF__
-
-#include <asm/types.h>
-
-/* Note:
- *
- * Below ELF section names and bpf_elf_map structure definition
- * are not (!) kernel ABI. It's rather a "contract" between the
- * application and the BPF loader in tc. For compatibility, the
- * section names should stay as-is. Introduction of aliases, if
- * needed, are a possibility, though.
- */
-
-/* ELF section names, etc */
-#define ELF_SECTION_LICENSE	"license"
-#define ELF_SECTION_MAPS	"maps"
-#define ELF_SECTION_PROG	"prog"
-#define ELF_SECTION_CLASSIFIER	"classifier"
-#define ELF_SECTION_ACTION	"action"
-
-#define ELF_MAX_MAPS		64
-#define ELF_MAX_LICENSE_LEN	128
-
-/* Object pinning settings */
-#define PIN_NONE		0
-#define PIN_OBJECT_NS		1
-#define PIN_GLOBAL_NS		2
-
-/* ELF map definition */
-struct bpf_elf_map {
-	__u32 type;
-	__u32 size_key;
-	__u32 size_value;
-	__u32 max_elem;
-	__u32 flags;
-	__u32 id;
-	__u32 pinning;
-	__u32 inner_id;
-	__u32 inner_idx;
-};
-
-#define BPF_ANNOTATE_KV_PAIR(name, type_key, type_val)		\
-	struct ____btf_map_##name {				\
-		type_key key;					\
-		type_val value;					\
-	};							\
-	struct ____btf_map_##name				\
-	    __attribute__ ((section(".maps." #name), used))	\
-	    ____btf_map_##name = { }
-
-#endif /* __BPF_ELF__ */
diff --git a/drivers/net/tap/bpf/tap_bpf_program.c b/drivers/net/tap/bpf/tap_bpf_program.c
index f05aed021c30..0842fb437c4e 100644
--- a/drivers/net/tap/bpf/tap_bpf_program.c
+++ b/drivers/net/tap/bpf/tap_bpf_program.c
@@ -2,58 +2,36 @@
  * Copyright 2017 Mellanox Technologies, Ltd
  */
 
-#include <stdint.h>
-#include <stdbool.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <asm/types.h>
+
 #include <linux/in.h>
-#include <linux/if.h>
 #include <linux/if_ether.h>
 #include <linux/ip.h>
 #include <linux/ipv6.h>
-#include <linux/if_tunnel.h>
-#include <linux/filter.h>
-
-#include "bpf_api.h"
-#include "bpf_elf.h"
-#include "../tap_rss.h"
+#include <linux/pkt_cls.h>
+#include <linux/bpf.h>
 
-/** Create IPv4 address */
-#define IPv4(a, b, c, d) ((__u32)(((a) & 0xff) << 24) | \
-		(((b) & 0xff) << 16) | \
-		(((c) & 0xff) << 8)  | \
-		((d) & 0xff))
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_endian.h>
 
-#define PORT(a, b) ((__u16)(((a) & 0xff) << 8) | \
-		((b) & 0xff))
+#include "../tap_rss.h"
 
 /*
  * The queue number is offset by a unique QUEUE_OFFSET, to distinguish
  * packets that have gone through this rule (skb->cb[1] != 0) from others.
  */
 #define QUEUE_OFFSET		0x7cafe800
-#define PIN_GLOBAL_NS		2
-
-#define KEY_IDX			0
-#define BPF_MAP_ID_KEY	1
-
-struct vlan_hdr {
-	__be16 proto;
-	__be16 tci;
-};
-
-struct bpf_elf_map __attribute__((section("maps"), used))
-map_keys = {
-	.type           =       BPF_MAP_TYPE_HASH,
-	.id             =       BPF_MAP_ID_KEY,
-	.size_key       =       sizeof(__u32),
-	.size_value     =       sizeof(struct rss_key),
-	.max_elem       =       256,
-	.pinning        =       PIN_GLOBAL_NS,
-};
-
-__section("cls_q") int
+
+#define IP_MF		0x2000		/** IP header Flags **/
+#define IP_OFFSET	0x1FFF		/** IP header fragment offset **/
+
+struct {
+	__uint(type, BPF_MAP_TYPE_HASH);
+	__type(key, __u32);
+	__type(value, struct rss_key);
+	__uint(max_entries, 256);
+} map_keys SEC(".maps");
+
+SEC("cls_q") int
 match_q(struct __sk_buff *skb)
 {
 	__u32 queue = skb->cb[1];
@@ -71,7 +49,6 @@ match_q(struct __sk_buff *skb)
 	return TC_ACT_UNSPEC;
 }
 
-
 struct ipv4_l3_l4_tuple {
 	__u32    src_addr;
 	__u32    dst_addr;
@@ -80,176 +57,187 @@ struct ipv4_l3_l4_tuple {
 } __attribute__((packed));
 
 struct ipv6_l3_l4_tuple {
-	__u8        src_addr[16];
-	__u8        dst_addr[16];
+	__u32       src_addr[4];
+	__u32       dst_addr[4];
 	__u16       dport;
 	__u16       sport;
 } __attribute__((packed));
 
-static const __u8 def_rss_key[TAP_RSS_HASH_KEY_SIZE] = {
-	0xd1, 0x81, 0xc6, 0x2c,
-	0xf7, 0xf4, 0xdb, 0x5b,
-	0x19, 0x83, 0xa2, 0xfc,
-	0x94, 0x3e, 0x1a, 0xdb,
-	0xd9, 0x38, 0x9e, 0x6b,
-	0xd1, 0x03, 0x9c, 0x2c,
-	0xa7, 0x44, 0x99, 0xad,
-	0x59, 0x3d, 0x56, 0xd9,
-	0xf3, 0x25, 0x3c, 0x06,
-	0x2a, 0xdc, 0x1f, 0xfc,
-};
-
 static __u32  __attribute__((always_inline))
-rte_softrss_be(const __u32 *input_tuple, const uint8_t *rss_key,
-		__u8 input_len)
+softrss_be(const __u32 *input_tuple, __u32 input_len, const void *rss_key)
 {
 	__u32 i, j, hash = 0;
+	const __u32 *key32 = rss_key;
+
 #pragma unroll
 	for (j = 0; j < input_len; j++) {
 #pragma unroll
 		for (i = 0; i < 32; i++) {
-			if (input_tuple[j] & (1U << (31 - i))) {
-				hash ^= ((const __u32 *)def_rss_key)[j] << i |
-				(__u32)((uint64_t)
-				(((const __u32 *)def_rss_key)[j + 1])
-					>> (32 - i));
-			}
+			if (input_tuple[j] & (1U << (31 - i)))
+				hash ^= key32[j] << i | key32[j + 1] >> (32 - i);
 		}
 	}
 	return hash;
 }
 
-static int __attribute__((always_inline))
-rss_l3_l4(struct __sk_buff *skb)
+static int
+parse_ipv4(struct __sk_buff *skb, const struct rss_key *rsskey, __u32 *hash)
 {
-	void *data_end = (void *)(long)skb->data_end;
-	void *data = (void *)(long)skb->data;
-	__u16 proto = (__u16)skb->protocol;
-	__u32 key_idx = 0xdeadbeef;
-	__u32 hash;
-	struct rss_key *rsskey;
-	__u64 off = ETH_HLEN;
-	int j;
-	__u8 *key = 0;
-	__u32 len;
-	__u32 queue = 0;
-	bool mf = 0;
-	__u16 frag_off = 0;
-
-	rsskey = map_lookup_elem(&map_keys, &key_idx);
-	if (!rsskey) {
-		printt("hash(): rss key is not configured\n");
+	struct iphdr iph;
+	__u32 off = 0;
+
+	if (bpf_skb_load_bytes_relative(skb, off, &iph, sizeof(iph), BPF_HDR_START_NET))
 		return TC_ACT_OK;
+	off += iph.ihl * 4;
+
+	struct ipv4_l3_l4_tuple v4_tuple = {
+		.src_addr = bpf_ntohl(iph.saddr),
+		.dst_addr = bpf_ntohl(iph.daddr),
+	};
+
+	if (rsskey->hash_fields & (1 << HASH_FIELD_IPV4_L3)) {
+		*hash = softrss_be((__u32 *)&v4_tuple, 2, rsskey->key);
+		return TC_ACT_RECLASSIFY;
 	}
-	key = (__u8 *)rsskey->key;
 
-	/* Get correct proto for 802.1ad */
-	if (skb->vlan_present && skb->vlan_proto == htons(ETH_P_8021AD)) {
-		if (data + ETH_ALEN * 2 + sizeof(struct vlan_hdr) +
-		    sizeof(proto) > data_end)
+	/* Get ports for non-fragmented TCP/UDP */
+	if ( (iph.frag_off & bpf_htons(IP_MF | IP_OFFSET)) != 0 &&
+	     (iph.protocol == IPPROTO_UDP || iph.protocol == IPPROTO_TCP)) {
+		__u16 src_dst_port[2];
+
+		if (bpf_skb_load_bytes_relative(skb, off, &src_dst_port, sizeof(src_dst_port),
+						BPF_HDR_START_NET))
 			return TC_ACT_OK;
-		proto = *(__u16 *)(data + ETH_ALEN * 2 +
-				   sizeof(struct vlan_hdr));
-		off += sizeof(struct vlan_hdr);
+
+		v4_tuple.sport = bpf_ntohs(src_dst_port[0]);
+		v4_tuple.dport = bpf_ntohs(src_dst_port[1]);
 	}
 
-	if (proto == htons(ETH_P_IP)) {
-		if (data + off + sizeof(struct iphdr) + sizeof(__u32)
-			> data_end)
-			return TC_ACT_OK;
+	*hash = softrss_be((__u32 *)&v4_tuple, 3, rsskey->key);
 
-		__u8 *src_dst_addr = data + off + offsetof(struct iphdr, saddr);
-		__u8 *frag_off_addr = data + off + offsetof(struct iphdr, frag_off);
-		__u8 *prot_addr = data + off + offsetof(struct iphdr, protocol);
-		__u8 *src_dst_port = data + off + sizeof(struct iphdr);
-		struct ipv4_l3_l4_tuple v4_tuple = {
-			.src_addr = IPv4(*(src_dst_addr + 0),
-					*(src_dst_addr + 1),
-					*(src_dst_addr + 2),
-					*(src_dst_addr + 3)),
-			.dst_addr = IPv4(*(src_dst_addr + 4),
-					*(src_dst_addr + 5),
-					*(src_dst_addr + 6),
-					*(src_dst_addr + 7)),
-			.sport = 0,
-			.dport = 0,
-		};
-		/** Fetch the L4-payer port numbers only in-case of TCP/UDP
-		 ** and also if the packet is not fragmented. Since fragmented
-		 ** chunks do not have L4 TCP/UDP header.
-		 **/
-		if (*prot_addr == IPPROTO_UDP || *prot_addr == IPPROTO_TCP) {
-			frag_off = PORT(*(frag_off_addr + 0),
-					*(frag_off_addr + 1));
-			mf = frag_off & 0x2000;
-			frag_off = frag_off & 0x1fff;
-			if (mf == 0 && frag_off == 0) {
-				v4_tuple.sport = PORT(*(src_dst_port + 0),
-						*(src_dst_port + 1));
-				v4_tuple.dport = PORT(*(src_dst_port + 2),
-						*(src_dst_port + 3));
-			}
-		}
-		__u8 input_len = sizeof(v4_tuple) / sizeof(__u32);
-		if (rsskey->hash_fields & (1 << HASH_FIELD_IPV4_L3))
-			input_len--;
-		hash = rte_softrss_be((__u32 *)&v4_tuple, key, 3);
-	} else if (proto == htons(ETH_P_IPV6)) {
-		if (data + off + sizeof(struct ipv6hdr) +
-					sizeof(__u32) > data_end)
-			return TC_ACT_OK;
-		__u8 *src_dst_addr = data + off +
-					offsetof(struct ipv6hdr, saddr);
-		__u8 *src_dst_port = data + off +
-					sizeof(struct ipv6hdr);
-		__u8 *next_hdr = data + off +
-					offsetof(struct ipv6hdr, nexthdr);
-
-		struct ipv6_l3_l4_tuple v6_tuple;
-		for (j = 0; j < 4; j++)
-			*((uint32_t *)&v6_tuple.src_addr + j) =
-				__builtin_bswap32(*((uint32_t *)
-						src_dst_addr + j));
-		for (j = 0; j < 4; j++)
-			*((uint32_t *)&v6_tuple.dst_addr + j) =
-				__builtin_bswap32(*((uint32_t *)
-						src_dst_addr + 4 + j));
-
-		/** Fetch the L4 header port-numbers only if next-header
-		 * is TCP/UDP **/
-		if (*next_hdr == IPPROTO_UDP || *next_hdr == IPPROTO_TCP) {
-			v6_tuple.sport = PORT(*(src_dst_port + 0),
-				      *(src_dst_port + 1));
-			v6_tuple.dport = PORT(*(src_dst_port + 2),
-				      *(src_dst_port + 3));
-		} else {
-			v6_tuple.sport = 0;
-			v6_tuple.dport = 0;
+	return TC_ACT_RECLASSIFY;
+}
+
+/* parse ipv6 extended headers, update offset and return next proto */
+static int
+skip_ip6_ext(__u16 proto, struct __sk_buff *skb, __u32 *off, int *frag)
+{
+	struct ext_hdr {
+		__u8 next_hdr;
+		__u8 len;
+	} xh;
+	unsigned int i;
+
+	*frag = 0;
+
+#define MAX_EXT_HDRS 5
+#pragma unroll
+	for (i = 0; i < MAX_EXT_HDRS; i++) {
+		switch (proto) {
+		case IPPROTO_HOPOPTS:
+		case IPPROTO_ROUTING:
+		case IPPROTO_DSTOPTS:
+			if (bpf_skb_load_bytes_relative(skb, *off, &xh, sizeof(xh), BPF_HDR_START_NET))
+				return -1;
+
+			*off += (xh.len + 1) * 8;
+			proto = xh.next_hdr;
+			break;
+		case IPPROTO_FRAGMENT:
+			if (bpf_skb_load_bytes_relative(skb, *off, &xh, sizeof(xh), BPF_HDR_START_NET))
+				return -1;
+
+			*off += 8;
+			proto = xh.next_hdr;
+			*frag = 1;
+			return proto; /* this is always the last ext hdr */
+		case IPPROTO_NONE:
+			return 0;
+		default:
+			return proto;
 		}
+	}
 
-		__u8 input_len = sizeof(v6_tuple) / sizeof(__u32);
-		if (rsskey->hash_fields & (1 << HASH_FIELD_IPV6_L3))
-			input_len--;
-		hash = rte_softrss_be((__u32 *)&v6_tuple, key, 9);
-	} else {
-		return TC_ACT_PIPE;
+	/* too many extension headers give up */
+	return -1;
+}
+
+static int
+parse_ipv6(struct __sk_buff *skb, const struct rss_key *rsskey, __u32 *hash)
+{
+	struct ipv6_l3_l4_tuple v6_tuple = { };
+	struct ipv6hdr ip6h;
+	__u32 off = 0, j;
+	int proto, frag;
+
+	if (bpf_skb_load_bytes_relative(skb, off, &ip6h, sizeof(ip6h), BPF_HDR_START_NET))
+		return TC_ACT_OK;
+	off += sizeof(ip6h);
+
+#pragma unroll
+	for (j = 0; j < 4; j++) {
+		v6_tuple.src_addr[j] = bpf_ntohl(ip6h.saddr.in6_u.u6_addr32[j]);
+		v6_tuple.dst_addr[j] = bpf_ntohl(ip6h.daddr.in6_u.u6_addr32[j]);
 	}
 
-	queue = rsskey->queues[(hash % rsskey->nb_queues) &
-				       (TAP_MAX_QUEUES - 1)];
-	skb->cb[1] = QUEUE_OFFSET + queue;
-	/* printt(">>>>> rss_l3_l4 hash=0x%x queue=%u\n", hash, queue); */
+	if (rsskey->hash_fields & (1 << HASH_FIELD_IPV6_L3)) {
+		*hash = softrss_be((__u32 *)&v6_tuple, 8, rsskey->key);
+		return TC_ACT_RECLASSIFY;
+	}
+
+	proto = skip_ip6_ext(ip6h.nexthdr, skb, &off, &frag);
+	if (proto < 0)
+		return TC_ACT_OK;
+
+	/* Fetch the L4 header port-numbers only if next-header is TCP/UDP */
+	if (!frag && (proto == IPPROTO_UDP || proto == IPPROTO_TCP)) {
+		__u16 src_dst_port[2];
+
+		if (bpf_skb_load_bytes_relative(skb, off, &src_dst_port, sizeof(src_dst_port),
+						BPF_HDR_START_NET))
+			return TC_ACT_OK;
+
+		v6_tuple.sport = bpf_ntohs(src_dst_port[0]);
+		v6_tuple.dport = bpf_ntohs(src_dst_port[1]);
+	}
 
+	*hash = softrss_be((__u32 *)&v6_tuple, 9, rsskey->key);
 	return TC_ACT_RECLASSIFY;
 }
 
-#define RSS(L)						\
-	__section(#L) int				\
-		L ## _hash(struct __sk_buff *skb)	\
-	{						\
-		return rss_ ## L (skb);			\
+SEC("l3_l4") int
+rss_l3_l4(struct __sk_buff *skb)
+{
+	const struct rss_key *rsskey;
+	__be16 proto = skb->protocol;
+	__u32 key_idx = 0xdeadbeef;
+	__u32 hash;
+	int ret;
+
+	rsskey = bpf_map_lookup_elem(&map_keys, &key_idx);
+	if (!rsskey) {
+		bpf_printk("hash(): rss key is not configured\n");
+		return TC_ACT_OK;
 	}
 
-RSS(l3_l4)
+	if (proto == bpf_htons(ETH_P_IP))
+		ret = parse_ipv4(skb, rsskey, &hash);
+	else if (proto == bpf_htons(ETH_P_IPV6))
+		ret = parse_ipv6(skb, rsskey, &hash);
+	else
+		ret = TC_ACT_PIPE;
+
+	if (ret == TC_ACT_RECLASSIFY) {
+		if (rsskey->nb_queues == 0) {
+			bpf_printk("hash(): num queues is zero?\n");
+			return TC_ACT_OK;
+		}
+
+		__u32 queue = rsskey->queues[(hash % rsskey->nb_queues) & (TAP_MAX_QUEUES - 1)];
+		skb->cb[1] = QUEUE_OFFSET + queue;
+	}
+
+	return ret;
+}
 
-BPF_LICENSE("Dual BSD/GPL");
+char _license[] SEC("license") = "Dual BSD/GPL";
diff --git a/drivers/net/tap/tap_bpf_api.c b/drivers/net/tap/tap_bpf_api.c
index 15283f8917ed..7e13d4b8b6ba 100644
--- a/drivers/net/tap/tap_bpf_api.c
+++ b/drivers/net/tap/tap_bpf_api.c
@@ -48,8 +48,9 @@ int tap_flow_bpf_cls_q(__u32 queue_idx)
  */
 int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd)
 {
-	l3_l4_hash_insns[4].imm = key_idx;
-	l3_l4_hash_insns[9].imm = map_fd;
+	l3_l4_hash_insns[1].imm = key_idx;
+	l3_l4_hash_insns[6].imm = map_fd;
+	l3_l4_hash_insns[6].src_reg = 1;
 
 	return bpf_load(BPF_PROG_TYPE_SCHED_ACT,
 		(struct bpf_insn *)l3_l4_hash_insns,
diff --git a/drivers/net/tap/tap_bpf_insns.h b/drivers/net/tap/tap_bpf_insns.h
index 53fa76c4e6b0..4999195b1486 100644
--- a/drivers/net/tap/tap_bpf_insns.h
+++ b/drivers/net/tap/tap_bpf_insns.h
@@ -24,1720 +24,1828 @@ static struct bpf_insn cls_q_insns[] = {
 };
 
 static struct bpf_insn l3_l4_hash_insns[] = {
-	{0xbf,    7,    1,        0, 0x00000000},
-	{0x61,    6,    7,       16, 0x00000000},
-	{0x61,    8,    7,       76, 0x00000000},
-	{0x61,    9,    7,       80, 0x00000000},
+	{0xbf,    9,    1,        0, 0x00000000},
+	{0x61,    6,    9,       16, 0x00000000},
 	{0x18,    1,    0,        0, 0xdeadbeef},
 	{0x00,    0,    0,        0, 0x00000000},
-	{0x63,   10,    1,       -4, 0x00000000},
+	{0x63,   10,    1,      -32, 0x00000000},
 	{0xbf,    2,   10,        0, 0x00000000},
-	{0x07,    2,    0,        0, 0xfffffffc},
+	{0x07,    2,    0,        0, 0xffffffe0},
 	{0x18,    1,    0,        0, 0x00000000},
 	{0x00,    0,    0,        0, 0x00000000},
 	{0x85,    0,    0,        0, 0x00000001},
-	{0x55,    0,    0,       21, 0x00000000},
-	{0xb7,    1,    0,        0, 0x00000a64},
-	{0x6b,   10,    1,      -16, 0x00000000},
-	{0x18,    1,    0,        0, 0x69666e6f},
-	{0x00,    0,    0,        0, 0x65727567},
-	{0x7b,   10,    1,      -24, 0x00000000},
-	{0x18,    1,    0,        0, 0x6e207369},
-	{0x00,    0,    0,        0, 0x6320746f},
-	{0x7b,   10,    1,      -32, 0x00000000},
-	{0x18,    1,    0,        0, 0x20737372},
-	{0x00,    0,    0,        0, 0x2079656b},
-	{0x7b,   10,    1,      -40, 0x00000000},
-	{0x18,    1,    0,        0, 0x68736168},
-	{0x00,    0,    0,        0, 0x203a2928},
-	{0x7b,   10,    1,      -48, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000000},
-	{0x73,   10,    7,      -14, 0x00000000},
-	{0xbf,    1,   10,        0, 0x00000000},
-	{0x07,    1,    0,        0, 0xffffffd0},
+	{0xbf,    7,    0,        0, 0x00000000},
+	{0x55,    7,    0,        6, 0x00000000},
+	{0x18,    1,    0,        0, 0x00000000},
+	{0x00,    0,    0,        0, 0x00000000},
 	{0xb7,    2,    0,        0, 0x00000023},
 	{0x85,    0,    0,        0, 0x00000006},
-	{0x05,    0,    0,     1680, 0x00000000},
-	{0xb7,    1,    0,        0, 0x0000000e},
-	{0x61,    2,    7,       20, 0x00000000},
-	{0x15,    2,    0,       10, 0x00000000},
-	{0x61,    2,    7,       28, 0x00000000},
-	{0x55,    2,    0,        8, 0x0000a888},
-	{0xbf,    2,    7,        0, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000000},
-	{0xbf,    1,    8,        0, 0x00000000},
-	{0x07,    1,    0,        0, 0x00000012},
-	{0x2d,    1,    9,     1670, 0x00000000},
-	{0xb7,    1,    0,        0, 0x00000012},
-	{0x69,    6,    8,       16, 0x00000000},
-	{0xbf,    7,    2,        0, 0x00000000},
+	{0xb7,    8,    0,        0, 0x00000000},
+	{0x05,    0,    0,      749, 0x00000000},
 	{0x57,    6,    0,        0, 0x0000ffff},
-	{0x7b,   10,    7,      -56, 0x00000000},
-	{0x15,    6,    0,      443, 0x0000dd86},
-	{0xb7,    7,    0,        0, 0x00000003},
-	{0x55,    6,    0,     1662, 0x00000008},
-	{0x0f,    8,    1,        0, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000000},
-	{0xbf,    1,    8,        0, 0x00000000},
-	{0x07,    1,    0,        0, 0x00000018},
-	{0x2d,    1,    9,     1657, 0x00000000},
-	{0xb7,    1,    0,        0, 0x00000000},
-	{0x71,    3,    8,       12, 0x00000000},
-	{0x71,    2,    8,        9, 0x00000000},
-	{0x15,    2,    0,        1, 0x00000011},
-	{0x55,    2,    0,       21, 0x00000006},
-	{0x71,    2,    8,        7, 0x00000000},
-	{0x71,    4,    8,        6, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x67,    5,    0,        0, 0x00000008},
-	{0x57,    5,    0,        0, 0x00001f00},
-	{0x4f,    5,    2,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000020},
-	{0x4f,    4,    5,        0, 0x00000000},
-	{0x55,    4,    0,       12, 0x00000000},
-	{0xbf,    2,    8,        0, 0x00000000},
-	{0x07,    2,    0,        0, 0x00000014},
-	{0x71,    4,    2,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000018},
-	{0x71,    1,    2,        1, 0x00000000},
-	{0x67,    1,    0,        0, 0x00000010},
-	{0x4f,    1,    4,        0, 0x00000000},
-	{0x71,    4,    2,        3, 0x00000000},
-	{0x4f,    1,    4,        0, 0x00000000},
-	{0x71,    2,    2,        2, 0x00000000},
-	{0x67,    2,    0,        0, 0x00000008},
-	{0x4f,    1,    2,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000038},
-	{0xc7,    4,    0,        0, 0x00000038},
+	{0x15,    6,    0,      704, 0x0000dd86},
+	{0xb7,    8,    0,        0, 0x00000003},
+	{0x55,    6,    0,      745, 0x00000008},
+	{0xb7,    8,    0,        0, 0x00000000},
+	{0xbf,    3,   10,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0xffffffe8},
+	{0xbf,    1,    9,        0, 0x00000000},
 	{0xb7,    2,    0,        0, 0x00000000},
-	{0x65,    4,    0,        1, 0xffffffff},
-	{0xb7,    7,    0,        0, 0x2cc681d1},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x598d03a2},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb31a0745},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x66340e8a},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xcc681d15},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000004},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x98d03a2b},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000002},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x31a07456},
-	{0x71,    4,    8,       13, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6340e8ad},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000038},
-	{0xc7,    3,    0,        0, 0x00000038},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0xc681d15b},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8d03a2b7},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1a07456f},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x340e8ade},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x681d15bd},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000004},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd03a2b7b},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000002},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa07456f6},
-	{0x71,    3,    8,       14, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x40e8aded},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000038},
-	{0xc7,    4,    0,        0, 0x00000038},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0x81d15bdb},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x03a2b7b7},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x07456f6f},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x0e8adedf},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x1d15bdbf},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000004},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x3a2b7b7e},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000002},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x7456f6fd},
-	{0x71,    4,    8,       15, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe8adedfa},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000038},
-	{0xc7,    3,    0,        0, 0x00000038},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd15bdbf4},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa2b7b7e9},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x456f6fd3},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8adedfa7},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x15bdbf4f},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000004},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x2b7b7e9e},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000002},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x56f6fd3d},
-	{0x71,    3,    8,       16, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xadedfa7b},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000038},
-	{0xc7,    4,    0,        0, 0x00000038},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0x5bdbf4f7},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb7b7e9ef},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6f6fd3df},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xdedfa7bf},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xbdbf4f7f},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000004},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x7b7e9eff},
-	{0xbf,    4,    3,        0, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000002},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf6fd3dff},
-	{0x71,    4,    8,       17, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xedfa7bfe},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000038},
-	{0xc7,    3,    0,        0, 0x00000038},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdbf4f7fc},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb7e9eff9},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6fd3dff2},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdfa7bfe5},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xbf4f7fca},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000004},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7e9eff94},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000002},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfd3dff28},
-	{0x71,    3,    8,       18, 0x00000000},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfa7bfe51},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x67,    6,    0,        0, 0x00000038},
-	{0xc7,    6,    0,        0, 0x00000038},
-	{0xbf,    4,    5,        0, 0x00000000},
-	{0xa7,    4,    0,        0, 0xf4f7fca2},
-	{0x6d,    2,    6,        1, 0x00000000},
-	{0xbf,    4,    5,        0, 0x00000000},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000040},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xe9eff945},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000020},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd3dff28a},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000010},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xa7bfe514},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000008},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x4f7fca28},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x9eff9450},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x3dff28a0},
-	{0x71,    5,    8,       19, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x7bfe5141},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000038},
-	{0xc7,    3,    0,        0, 0x00000038},
-	{0xbf,    7,    4,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf7fca283},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    7,    4,        0, 0x00000000},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xeff94506},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xdff28a0c},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xbfe51418},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x7fca2831},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000004},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xff945063},
-	{0xbf,    3,    5,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000002},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xff28a0c6},
-	{0x57,    5,    0,        0, 0x00000001},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xfe51418c},
-	{0xbf,    4,    1,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000020},
-	{0xc7,    4,    0,        0, 0x00000020},
-	{0xbf,    3,    7,        0, 0x00000000},
-	{0xa7,    3,    0,        0, 0xfca28319},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    3,    7,        0, 0x00000000},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0xb7,    4,    0,        0, 0x00000014},
+	{0xb7,    5,    0,        0, 0x00000001},
+	{0x85,    0,    0,        0, 0x00000044},
+	{0x55,    0,    0,      699, 0x00000000},
+	{0x61,    8,   10,       -8, 0x00000000},
+	{0xdc,    8,    0,        0, 0x00000020},
+	{0x61,    6,   10,      -12, 0x00000000},
+	{0xdc,    6,    0,        0, 0x00000020},
+	{0x71,    1,    7,      128, 0x00000000},
+	{0x57,    1,    0,        0, 0x00000001},
+	{0x15,    1,    0,      731, 0x00000000},
+	{0xb7,    1,    0,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x40000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf9450633},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        6, 0x00000000},
+	{0x61,    1,    7,        0, 0x00000000},
+	{0x67,    1,    0,        0, 0x00000001},
+	{0x61,    2,    7,        4, 0x00000000},
+	{0x77,    2,    0,        0, 0x0000001f},
+	{0x57,    2,    0,        0, 0x00000001},
+	{0x4f,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x20000000},
-	{0x79,    6,   10,      -56, 0x00000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf28a0c67},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000002},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001e},
+	{0x57,    3,    0,        0, 0x00000003},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x10000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xe51418ce},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000003},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001d},
+	{0x57,    3,    0,        0, 0x00000007},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x08000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xca28319d},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000004},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001c},
+	{0x57,    3,    0,        0, 0x0000000f},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x04000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x9450633b},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000005},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001b},
+	{0x57,    3,    0,        0, 0x0000001f},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x02000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x28a0c676},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000006},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001a},
+	{0x57,    3,    0,        0, 0x0000003f},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x01000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x51418ced},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000007},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000019},
+	{0x57,    3,    0,        0, 0x0000007f},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00800000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xa28319db},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000008},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000018},
+	{0x57,    3,    0,        0, 0x000000ff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00400000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x450633b6},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000009},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000017},
+	{0x57,    3,    0,        0, 0x000001ff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00200000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x8a0c676c},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000a},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000016},
+	{0x57,    3,    0,        0, 0x000003ff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00100000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x1418ced8},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000b},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000015},
+	{0x57,    3,    0,        0, 0x000007ff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00080000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x28319db1},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000c},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000014},
+	{0x57,    3,    0,        0, 0x00000fff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00040000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x50633b63},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000d},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000013},
+	{0x57,    3,    0,        0, 0x00001fff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00020000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xa0c676c6},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000e},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000012},
+	{0x57,    3,    0,        0, 0x00003fff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00010000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x418ced8d},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000f},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000011},
+	{0x57,    3,    0,        0, 0x00007fff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00008000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x8319db1a},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000010},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000010},
+	{0x57,    3,    0,        0, 0x0000ffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00004000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x0633b634},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000011},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000f},
+	{0x57,    3,    0,        0, 0x0001ffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00002000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x0c676c68},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000012},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000e},
+	{0x57,    3,    0,        0, 0x0003ffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00001000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x18ced8d1},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000013},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000d},
+	{0x57,    3,    0,        0, 0x0007ffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000800},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x319db1a3},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000014},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000c},
+	{0x57,    3,    0,        0, 0x000fffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000400},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x633b6347},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000015},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000b},
+	{0x57,    3,    0,        0, 0x001fffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000200},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xc676c68f},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000016},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000a},
+	{0x57,    3,    0,        0, 0x003fffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000100},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x8ced8d1f},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000017},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000009},
+	{0x57,    3,    0,        0, 0x007fffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000080},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x19db1a3e},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000018},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000008},
+	{0x57,    3,    0,        0, 0x00ffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000040},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x33b6347d},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000019},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000007},
+	{0x57,    3,    0,        0, 0x01ffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000020},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x676c68fa},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001a},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000006},
+	{0x57,    3,    0,        0, 0x03ffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000010},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xced8d1f4},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001b},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000005},
+	{0x57,    3,    0,        0, 0x07ffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000008},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x9db1a3e9},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001c},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000004},
+	{0x57,    3,    0,        0, 0x0fffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000004},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x3b6347d2},
-	{0xbf,    2,    1,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001d},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000003},
+	{0x57,    3,    0,        0, 0x1fffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
 	{0x57,    2,    0,        0, 0x00000002},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x76c68fa5},
-	{0x57,    1,    0,        0, 0x00000001},
-	{0x15,    1,    0,     1194, 0x00000000},
-	{0xa7,    3,    0,        0, 0xed8d1f4a},
-	{0x05,    0,    0,     1192, 0x00000000},
-	{0x0f,    8,    1,        0, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000000},
-	{0xbf,    1,    8,        0, 0x00000000},
-	{0x07,    1,    0,        0, 0x0000002c},
-	{0x2d,    1,    9,     1216, 0x00000000},
-	{0x61,    2,    8,        8, 0x00000000},
-	{0xdc,    2,    0,        0, 0x00000040},
-	{0xc7,    2,    0,        0, 0x00000020},
-	{0x71,    3,    8,        6, 0x00000000},
-	{0x15,    3,    0,        2, 0x00000011},
-	{0xb7,    1,    0,        0, 0x00000000},
-	{0x55,    3,    0,       12, 0x00000006},
-	{0xbf,    3,    8,        0, 0x00000000},
-	{0x07,    3,    0,        0, 0x00000028},
-	{0x71,    4,    3,        0, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000018},
-	{0x71,    1,    3,        1, 0x00000000},
-	{0x67,    1,    0,        0, 0x00000010},
-	{0x4f,    1,    4,        0, 0x00000000},
-	{0x71,    4,    3,        3, 0x00000000},
-	{0x4f,    1,    4,        0, 0x00000000},
-	{0x71,    3,    3,        2, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000008},
-	{0x4f,    1,    3,        0, 0x00000000},
-	{0xbf,    4,    2,        0, 0x00000000},
-	{0x77,    4,    0,        0, 0x0000001f},
-	{0x57,    4,    0,        0, 0x2cc681d1},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x40000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x598d03a2},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x20000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xb31a0745},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x10000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x66340e8a},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x08000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xcc681d15},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x04000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x98d03a2b},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x02000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x31a07456},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x01000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x6340e8ad},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00800000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xc681d15b},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00400000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x8d03a2b7},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00200000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x1a07456f},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00100000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x340e8ade},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00080000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x681d15bd},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00040000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd03a2b7b},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00020000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xa07456f6},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00010000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x40e8aded},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00008000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x81d15bdb},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00004000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x03a2b7b7},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00002000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x07456f6f},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00001000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x0e8adedf},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000800},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x1d15bdbf},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000400},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x3a2b7b7e},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000200},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x7456f6fd},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000100},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xe8adedfa},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000080},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd15bdbf4},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xa2b7b7e9},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x456f6fd3},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x8adedfa7},
-	{0xbf,    3,    2,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x15bdbf4f},
-	{0x61,    3,    8,       12, 0x00000000},
-	{0xbf,    5,    2,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x2b7b7e9e},
-	{0xdc,    3,    0,        0, 0x00000040},
-	{0xbf,    5,    2,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x56f6fd3d},
-	{0xc7,    3,    0,        0, 0x00000020},
-	{0x57,    2,    0,        0, 0x00000001},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xadedfa7b},
-	{0xb7,    2,    0,        0, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0x5bdbf4f7},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001e},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000002},
+	{0x57,    3,    0,        0, 0x3fffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0x57,    6,    0,        0, 0x00000001},
+	{0x15,    6,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001f},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000001},
+	{0x57,    3,    0,        0, 0x7fffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    1,        0, 0x00000000},
+	{0xbf,    1,    2,        0, 0x00000000},
+	{0xbf,    3,    7,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0x00000004},
+	{0xbf,    2,    7,        0, 0x00000000},
+	{0x07,    2,    0,        0, 0x00000008},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x40000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb7b7e9ef},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000001},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001f},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x20000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6f6fd3df},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000002},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001e},
+	{0x57,    5,    0,        0, 0x00000003},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x10000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdedfa7bf},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000003},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001d},
+	{0x57,    5,    0,        0, 0x00000007},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x08000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xbdbf4f7f},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000004},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001c},
+	{0x57,    5,    0,        0, 0x0000000f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x04000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7b7e9eff},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000005},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001b},
+	{0x57,    5,    0,        0, 0x0000001f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x02000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf6fd3dff},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000006},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001a},
+	{0x57,    5,    0,        0, 0x0000003f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x01000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xedfa7bfe},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000007},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000019},
+	{0x57,    5,    0,        0, 0x0000007f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00800000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdbf4f7fc},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000008},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000018},
+	{0x57,    5,    0,        0, 0x000000ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00400000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb7e9eff9},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000009},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000017},
+	{0x57,    5,    0,        0, 0x000001ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00200000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6fd3dff2},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000a},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000016},
+	{0x57,    5,    0,        0, 0x000003ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00100000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdfa7bfe5},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000b},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000015},
+	{0x57,    5,    0,        0, 0x000007ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00080000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xbf4f7fca},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000c},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000014},
+	{0x57,    5,    0,        0, 0x00000fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00040000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7e9eff94},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000d},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000013},
+	{0x57,    5,    0,        0, 0x00001fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00020000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfd3dff28},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000e},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000012},
+	{0x57,    5,    0,        0, 0x00003fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00010000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfa7bfe51},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000f},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000011},
+	{0x57,    5,    0,        0, 0x00007fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00008000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf4f7fca2},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000010},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000010},
+	{0x57,    5,    0,        0, 0x0000ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00004000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xe9eff945},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000011},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000f},
+	{0x57,    5,    0,        0, 0x0001ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00002000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd3dff28a},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000012},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000e},
+	{0x57,    5,    0,        0, 0x0003ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00001000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa7bfe514},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000013},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000d},
+	{0x57,    5,    0,        0, 0x0007ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000800},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x4f7fca28},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000014},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000c},
+	{0x57,    5,    0,        0, 0x000fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000400},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x9eff9450},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000015},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000b},
+	{0x57,    5,    0,        0, 0x001fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000200},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x3dff28a0},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000016},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000a},
+	{0x57,    5,    0,        0, 0x003fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000100},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7bfe5141},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000017},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000009},
+	{0x57,    5,    0,        0, 0x007fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000080},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf7fca283},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000018},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000008},
+	{0x57,    5,    0,        0, 0x00ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xeff94506},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000019},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000007},
+	{0x57,    5,    0,        0, 0x01ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdff28a0c},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001a},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000006},
+	{0x57,    5,    0,        0, 0x03ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xbfe51418},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001b},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000005},
+	{0x57,    5,    0,        0, 0x07ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7fca2831},
-	{0x61,    4,    8,       16, 0x00000000},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000004},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xff945063},
-	{0xdc,    4,    0,        0, 0x00000040},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000002},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xff28a0c6},
-	{0xc7,    4,    0,        0, 0x00000020},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfe51418c},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0xfca28319},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x40000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf9450633},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x20000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf28a0c67},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x10000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe51418ce},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x08000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xca28319d},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x04000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9450633b},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x02000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x28a0c676},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x01000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x51418ced},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00800000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xa28319db},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00400000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x450633b6},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00200000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8a0c676c},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00100000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x1418ced8},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00080000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x28319db1},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00040000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x50633b63},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00020000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xa0c676c6},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00010000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x418ced8d},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00008000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8319db1a},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00004000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x0633b634},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00002000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x0c676c68},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00001000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x18ced8d1},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000800},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x319db1a3},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000400},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x633b6347},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000200},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xc676c68f},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000100},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8ced8d1f},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000080},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x19db1a3e},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x33b6347d},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x676c68fa},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xced8d1f4},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9db1a3e9},
-	{0x61,    3,    8,       20, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x3b6347d2},
-	{0xdc,    3,    0,        0, 0x00000040},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x76c68fa5},
-	{0xc7,    3,    0,        0, 0x00000020},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xed8d1f4a},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0xdb1a3e94},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001c},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000004},
+	{0x57,    5,    0,        0, 0x0fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000004},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001d},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000003},
+	{0x57,    5,    0,        0, 0x1fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000002},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001e},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000002},
+	{0x57,    5,    0,        0, 0x3fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    1,        0, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0x57,    8,    0,        0, 0x00000001},
+	{0x15,    8,    0,        8, 0x00000000},
+	{0x61,    3,    3,        0, 0x00000000},
+	{0x67,    3,    0,        0, 0x0000001f},
+	{0x61,    2,    2,        0, 0x00000000},
+	{0x77,    2,    0,        0, 0x00000001},
+	{0x57,    2,    0,        0, 0x7fffffff},
+	{0x4f,    3,    2,        0, 0x00000000},
+	{0xaf,    3,    1,        0, 0x00000000},
+	{0xbf,    1,    3,        0, 0x00000000},
+	{0x63,   10,    1,      -28, 0x00000000},
+	{0xb7,    8,    0,        0, 0x00000001},
+	{0x05,    0,    0,        6, 0x00000000},
+	{0xbf,    3,   10,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0xffffffe4},
+	{0xbf,    1,    9,        0, 0x00000000},
+	{0xbf,    2,    7,        0, 0x00000000},
+	{0x85,    0,    1,        0, 0xffffffff},
+	{0xbf,    8,    0,        0, 0x00000000},
+	{0xbf,    1,    8,        0, 0x00000000},
+	{0x67,    1,    0,        0, 0x00000020},
+	{0x77,    1,    0,        0, 0x00000020},
+	{0x55,    1,    0,       33, 0x00000001},
+	{0x71,    2,    7,      201, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000008},
+	{0x71,    1,    7,      200, 0x00000000},
+	{0x4f,    2,    1,        0, 0x00000000},
+	{0x71,    3,    7,      202, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000010},
+	{0x71,    1,    7,      203, 0x00000000},
+	{0x67,    1,    0,        0, 0x00000018},
+	{0x4f,    1,    3,        0, 0x00000000},
+	{0x4f,    1,    2,        0, 0x00000000},
+	{0x55,    1,    0,        4, 0x00000000},
+	{0x18,    1,    0,        0, 0x00000023},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0xb7,    2,    0,        0, 0x0000001d},
+	{0x05,    0,    0,     -734, 0x00000000},
+	{0x61,    2,   10,      -28, 0x00000000},
+	{0x9f,    2,    1,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x0000000f},
+	{0x67,    2,    0,        0, 0x00000002},
+	{0x0f,    7,    2,        0, 0x00000000},
+	{0x71,    1,    7,      137, 0x00000000},
+	{0x67,    1,    0,        0, 0x00000008},
+	{0x71,    2,    7,      136, 0x00000000},
+	{0x4f,    1,    2,        0, 0x00000000},
+	{0x71,    2,    7,      138, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000010},
+	{0x71,    3,    7,      139, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000018},
+	{0x4f,    3,    2,        0, 0x00000000},
+	{0x4f,    3,    1,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0x7cafe800},
+	{0x63,    9,    3,       52, 0x00000000},
+	{0xb7,    8,    0,        0, 0x00000001},
+	{0xbf,    0,    8,        0, 0x00000000},
+	{0x95,    0,    0,        0, 0x00000000},
+	{0x7b,   10,    9,      -40, 0x00000000},
+	{0xb7,    9,    0,        0, 0x00000000},
+	{0x69,    2,   10,      -18, 0x00000000},
+	{0x57,    2,    0,        0, 0x0000ff3f},
+	{0xb7,    1,    0,        0, 0x00000000},
+	{0x15,    2,    0,       18, 0x00000000},
+	{0x71,    2,   10,      -24, 0x00000000},
+	{0x71,    3,   10,      -15, 0x00000000},
+	{0x15,    3,    0,        1, 0x00000011},
+	{0x55,    3,    0,       14, 0x00000006},
+	{0x67,    2,    0,        0, 0x00000002},
+	{0x57,    2,    0,        0, 0x0000003c},
+	{0xbf,    3,   10,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0xffffffe4},
+	{0x79,    1,   10,      -40, 0x00000000},
+	{0xb7,    4,    0,        0, 0x00000004},
+	{0xb7,    5,    0,        0, 0x00000001},
+	{0x85,    0,    0,        0, 0x00000044},
+	{0x55,    0,    0,     1033, 0x00000000},
+	{0x69,    1,   10,      -26, 0x00000000},
+	{0x67,    1,    0,        0, 0x00000010},
+	{0x69,    2,   10,      -28, 0x00000000},
+	{0x4f,    1,    2,        0, 0x00000000},
+	{0xdc,    1,    0,        0, 0x00000020},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x40000000},
+	{0x15,    2,    0,        6, 0x00000000},
+	{0x61,    9,    7,        0, 0x00000000},
+	{0x67,    9,    0,        0, 0x00000001},
+	{0x61,    2,    7,        4, 0x00000000},
+	{0x77,    2,    0,        0, 0x0000001f},
+	{0x57,    2,    0,        0, 0x00000001},
+	{0x4f,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x20000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000002},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001e},
+	{0x57,    3,    0,        0, 0x00000003},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x10000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000003},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001d},
+	{0x57,    3,    0,        0, 0x00000007},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x08000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000004},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001c},
+	{0x57,    3,    0,        0, 0x0000000f},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x04000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000005},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001b},
+	{0x57,    3,    0,        0, 0x0000001f},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x02000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000006},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000001a},
+	{0x57,    3,    0,        0, 0x0000003f},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x01000000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000007},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000019},
+	{0x57,    3,    0,        0, 0x0000007f},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00800000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000008},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000018},
+	{0x57,    3,    0,        0, 0x000000ff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00400000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000009},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000017},
+	{0x57,    3,    0,        0, 0x000001ff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00200000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000a},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000016},
+	{0x57,    3,    0,        0, 0x000003ff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00100000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000b},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000015},
+	{0x57,    3,    0,        0, 0x000007ff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00080000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000c},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000014},
+	{0x57,    3,    0,        0, 0x00000fff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00040000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000d},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000013},
+	{0x57,    3,    0,        0, 0x00001fff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00020000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000e},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000012},
+	{0x57,    3,    0,        0, 0x00003fff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00010000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000000f},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000011},
+	{0x57,    3,    0,        0, 0x00007fff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00008000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000010},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000010},
+	{0x57,    3,    0,        0, 0x0000ffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00004000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000011},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000f},
+	{0x57,    3,    0,        0, 0x0001ffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00002000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000012},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000e},
+	{0x57,    3,    0,        0, 0x0003ffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00001000},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000013},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000d},
+	{0x57,    3,    0,        0, 0x0007ffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000800},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000014},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000c},
+	{0x57,    3,    0,        0, 0x000fffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000400},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000015},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000b},
+	{0x57,    3,    0,        0, 0x001fffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000200},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000016},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x0000000a},
+	{0x57,    3,    0,        0, 0x003fffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000100},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000017},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000009},
+	{0x57,    3,    0,        0, 0x007fffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000080},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000018},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000008},
+	{0x57,    3,    0,        0, 0x00ffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000040},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000019},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000007},
+	{0x57,    3,    0,        0, 0x01ffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000020},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001a},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000006},
+	{0x57,    3,    0,        0, 0x03ffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000010},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001b},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000005},
+	{0x57,    3,    0,        0, 0x07ffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000008},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001c},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000004},
+	{0x57,    3,    0,        0, 0x0fffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000004},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001d},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000003},
+	{0x57,    3,    0,        0, 0x1fffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    2,    6,        0, 0x00000000},
+	{0x57,    2,    0,        0, 0x00000002},
+	{0x15,    2,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001e},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000002},
+	{0x57,    3,    0,        0, 0x3fffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0x57,    6,    0,        0, 0x00000001},
+	{0x15,    6,    0,        8, 0x00000000},
+	{0x61,    2,    7,        0, 0x00000000},
+	{0x67,    2,    0,        0, 0x0000001f},
+	{0x61,    3,    7,        4, 0x00000000},
+	{0x77,    3,    0,        0, 0x00000001},
+	{0x57,    3,    0,        0, 0x7fffffff},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0xaf,    2,    9,        0, 0x00000000},
+	{0xbf,    9,    2,        0, 0x00000000},
+	{0xbf,    3,    7,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0x00000004},
+	{0xbf,    2,    7,        0, 0x00000000},
+	{0x07,    2,    0,        0, 0x00000008},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x40000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb6347d28},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000001},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001f},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x20000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6c68fa51},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000002},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001e},
+	{0x57,    5,    0,        0, 0x00000003},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x10000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd8d1f4a3},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000003},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001d},
+	{0x57,    5,    0,        0, 0x00000007},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x08000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb1a3e946},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000004},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001c},
+	{0x57,    5,    0,        0, 0x0000000f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x04000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6347d28d},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000005},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001b},
+	{0x57,    5,    0,        0, 0x0000001f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x02000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xc68fa51a},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000006},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001a},
+	{0x57,    5,    0,        0, 0x0000003f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x01000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8d1f4a35},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000007},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000019},
+	{0x57,    5,    0,        0, 0x0000007f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00800000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1a3e946b},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000008},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000018},
+	{0x57,    5,    0,        0, 0x000000ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00400000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x347d28d7},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000009},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000017},
+	{0x57,    5,    0,        0, 0x000001ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00200000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x68fa51ae},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000a},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000016},
+	{0x57,    5,    0,        0, 0x000003ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00100000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd1f4a35c},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000b},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000015},
+	{0x57,    5,    0,        0, 0x000007ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00080000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa3e946b9},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000c},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000014},
+	{0x57,    5,    0,        0, 0x00000fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00040000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x47d28d73},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000d},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000013},
+	{0x57,    5,    0,        0, 0x00001fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00020000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8fa51ae7},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000e},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000012},
+	{0x57,    5,    0,        0, 0x00003fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00010000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1f4a35cf},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000f},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000011},
+	{0x57,    5,    0,        0, 0x00007fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00008000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x3e946b9e},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000010},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000010},
+	{0x57,    5,    0,        0, 0x0000ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00004000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7d28d73c},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000011},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000f},
+	{0x57,    5,    0,        0, 0x0001ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00002000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xfa51ae78},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000012},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000e},
+	{0x57,    5,    0,        0, 0x0003ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00001000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf4a35cf1},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000013},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000d},
+	{0x57,    5,    0,        0, 0x0007ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000800},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xe946b9e3},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000014},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000c},
+	{0x57,    5,    0,        0, 0x000fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000400},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd28d73c7},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000015},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000b},
+	{0x57,    5,    0,        0, 0x001fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000200},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa51ae78e},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000016},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000a},
+	{0x57,    5,    0,        0, 0x003fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000100},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x4a35cf1c},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000017},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000009},
+	{0x57,    5,    0,        0, 0x007fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000080},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x946b9e38},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000018},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000008},
+	{0x57,    5,    0,        0, 0x00ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x28d73c71},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000019},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000007},
+	{0x57,    5,    0,        0, 0x01ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x51ae78e3},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001a},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000006},
+	{0x57,    5,    0,        0, 0x03ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa35cf1c6},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001b},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000005},
+	{0x57,    5,    0,        0, 0x07ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x46b9e38d},
-	{0x61,    4,    8,       24, 0x00000000},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000004},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8d73c71b},
-	{0xdc,    4,    0,        0, 0x00000040},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000002},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1ae78e36},
-	{0xc7,    4,    0,        0, 0x00000020},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x35cf1c6c},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6b9e38d9},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x40000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xd73c71b2},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x20000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xae78e364},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x10000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x5cf1c6c9},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x08000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb9e38d92},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x04000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x73c71b25},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x02000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe78e364b},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x01000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xcf1c6c96},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00800000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9e38d92c},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00400000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x3c71b259},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00200000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x78e364b2},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00100000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf1c6c964},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00080000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe38d92c9},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00040000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xc71b2593},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00020000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8e364b27},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00010000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x1c6c964e},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00008000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x38d92c9c},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00004000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x71b25938},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00002000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xe364b270},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00001000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xc6c964e0},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000800},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x8d92c9c0},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000400},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x1b259380},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000200},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x364b2700},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000100},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6c964e01},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000080},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xd92c9c03},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb2593807},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x64b2700f},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xc964e01e},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x92c9c03d},
-	{0x61,    3,    8,       28, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x2593807a},
-	{0xdc,    3,    0,        0, 0x00000040},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x4b2700f4},
-	{0xc7,    3,    0,        0, 0x00000020},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x964e01e8},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xa7,    5,    0,        0, 0x2c9c03d1},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    5,    7,        0, 0x00000000},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001c},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000004},
+	{0x57,    5,    0,        0, 0x0fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000004},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001d},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000003},
+	{0x57,    5,    0,        0, 0x1fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    8,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000002},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    3,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001e},
+	{0x61,    5,    2,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000002},
+	{0x57,    5,    0,        0, 0x3fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0x57,    8,    0,        0, 0x00000001},
+	{0x15,    8,    0,        8, 0x00000000},
+	{0x61,    3,    3,        0, 0x00000000},
+	{0x67,    3,    0,        0, 0x0000001f},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x77,    4,    0,        0, 0x00000001},
+	{0x57,    4,    0,        0, 0x7fffffff},
+	{0x4f,    3,    4,        0, 0x00000000},
+	{0xaf,    3,    9,        0, 0x00000000},
+	{0xbf,    9,    3,        0, 0x00000000},
+	{0xbf,    3,    7,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0x0000000c},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x40000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x593807a3},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000001},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001f},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x20000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xb2700f46},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000002},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001e},
+	{0x57,    5,    0,        0, 0x00000003},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x10000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x64e01e8d},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000003},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001d},
+	{0x57,    5,    0,        0, 0x00000007},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x08000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xc9c03d1a},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000004},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001c},
+	{0x57,    5,    0,        0, 0x0000000f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x04000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x93807a35},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000005},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001b},
+	{0x57,    5,    0,        0, 0x0000001f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x02000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x2700f46b},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000006},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000001a},
+	{0x57,    5,    0,        0, 0x0000003f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x01000000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x4e01e8d6},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000007},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000019},
+	{0x57,    5,    0,        0, 0x0000007f},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00800000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x9c03d1ad},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000008},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000018},
+	{0x57,    5,    0,        0, 0x000000ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00400000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x3807a35b},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000009},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000017},
+	{0x57,    5,    0,        0, 0x000001ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00200000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x700f46b6},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000a},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000016},
+	{0x57,    5,    0,        0, 0x000003ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00100000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xe01e8d6c},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000b},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000015},
+	{0x57,    5,    0,        0, 0x000007ff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00080000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xc03d1ad9},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000c},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000014},
+	{0x57,    5,    0,        0, 0x00000fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00040000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x807a35b3},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000d},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000013},
+	{0x57,    5,    0,        0, 0x00001fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00020000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x00f46b66},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000e},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000012},
+	{0x57,    5,    0,        0, 0x00003fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00010000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x01e8d6cc},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000000f},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000011},
+	{0x57,    5,    0,        0, 0x00007fff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00008000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x03d1ad99},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000010},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000010},
+	{0x57,    5,    0,        0, 0x0000ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00004000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x07a35b32},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000011},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000f},
+	{0x57,    5,    0,        0, 0x0001ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00002000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x0f46b665},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000012},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000e},
+	{0x57,    5,    0,        0, 0x0003ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00001000},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1e8d6cca},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000013},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000d},
+	{0x57,    5,    0,        0, 0x0007ffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000800},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x3d1ad994},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000014},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000c},
+	{0x57,    5,    0,        0, 0x000fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000400},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x7a35b328},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000015},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000b},
+	{0x57,    5,    0,        0, 0x001fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000200},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xf46b6651},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000016},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x0000000a},
+	{0x57,    5,    0,        0, 0x003fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000100},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xe8d6cca2},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000017},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000009},
+	{0x57,    5,    0,        0, 0x007fffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000080},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd1ad9944},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000018},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000008},
+	{0x57,    5,    0,        0, 0x00ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000040},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xa35b3289},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000019},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000007},
+	{0x57,    5,    0,        0, 0x01ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000020},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x46b66512},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001a},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000006},
+	{0x57,    5,    0,        0, 0x03ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000010},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x8d6cca25},
-	{0xbf,    4,    3,        0, 0x00000000},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001b},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000005},
+	{0x57,    5,    0,        0, 0x07ffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
 	{0x57,    4,    0,        0, 0x00000008},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x1ad9944a},
-	{0x61,    4,    8,       32, 0x00000000},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000004},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x35b32894},
-	{0xdc,    4,    0,        0, 0x00000040},
-	{0xbf,    6,    3,        0, 0x00000000},
-	{0x57,    6,    0,        0, 0x00000002},
-	{0x15,    6,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0x6b665129},
-	{0xc7,    4,    0,        0, 0x00000020},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    5,    0,        0, 0xd6cca253},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xa7,    7,    0,        0, 0xad9944a7},
-	{0x6d,    2,    4,        1, 0x00000000},
-	{0xbf,    7,    5,        0, 0x00000000},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x40000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x5b32894f},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x20000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb665129f},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x10000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x6cca253e},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x08000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xd9944a7d},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x04000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xb32894fb},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x02000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x665129f6},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x01000000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xcca253ec},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00800000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9944a7d9},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00400000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x32894fb2},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00200000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x65129f65},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00100000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xca253eca},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00080000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x944a7d95},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00040000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x2894fb2a},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00020000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x5129f655},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00010000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xa253ecab},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00008000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x44a7d956},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00004000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x894fb2ac},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00002000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x129f6558},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00001000},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x253ecab1},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000800},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x4a7d9563},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000400},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x94fb2ac7},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000200},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x29f6558f},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000100},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x53ecab1e},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000080},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xa7d9563d},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000040},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x4fb2ac7a},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000020},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x9f6558f5},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000010},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x3ecab1ea},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x00000008},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0x7d9563d5},
-	{0x61,    3,    8,       36, 0x00000000},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xfb2ac7ab},
-	{0xdc,    3,    0,        0, 0x00000040},
-	{0xbf,    5,    4,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xf6558f56},
-	{0xc7,    3,    0,        0, 0x00000020},
-	{0x57,    4,    0,        0, 0x00000001},
-	{0x15,    4,    0,        1, 0x00000000},
-	{0xa7,    7,    0,        0, 0xecab1eac},
-	{0xbf,    4,    7,        0, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd9563d59},
-	{0x6d,    2,    3,        1, 0x00000000},
-	{0xbf,    4,    7,        0, 0x00000000},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x40000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xb2ac7ab2},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x20000000},
-	{0x79,    6,   10,      -56, 0x00000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x6558f564},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x10000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xcab1eac8},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x08000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x9563d590},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x04000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x2ac7ab20},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x02000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x558f5641},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x01000000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xab1eac83},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00800000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x563d5906},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00400000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xac7ab20c},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00200000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x58f56418},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00100000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xb1eac831},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00080000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x63d59063},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00040000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xc7ab20c7},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00020000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x8f56418f},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00010000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x1eac831e},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00008000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x3d59063c},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00004000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x7ab20c78},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00002000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xf56418f0},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00001000},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xeac831e1},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000800},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xd59063c2},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000400},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xab20c784},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000200},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x56418f09},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000100},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xac831e12},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000080},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x59063c25},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000040},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xb20c784b},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000020},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x6418f097},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000010},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0xc831e12f},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000008},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x9063c25f},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000004},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x20c784be},
-	{0xbf,    5,    3,        0, 0x00000000},
-	{0x57,    5,    0,        0, 0x00000002},
-	{0x15,    5,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x418f097c},
-	{0x57,    3,    0,        0, 0x00000001},
-	{0x15,    3,    0,        1, 0x00000000},
-	{0xa7,    4,    0,        0, 0x831e12f9},
-	{0xbf,    5,    1,        0, 0x00000000},
-	{0x67,    5,    0,        0, 0x00000020},
-	{0xc7,    5,    0,        0, 0x00000020},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0xa7,    3,    0,        0, 0x063c25f3},
-	{0x6d,    2,    5,        1, 0x00000000},
-	{0xbf,    3,    4,        0, 0x00000000},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x40000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x0c784be7},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x20000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x18f097cf},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x10000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x31e12f9f},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x08000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x63c25f3f},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x04000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xc784be7f},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x02000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x8f097cff},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x01000000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x1e12f9fe},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00800000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x3c25f3fc},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00400000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x784be7f8},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00200000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf097cff0},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00100000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xe12f9fe0},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00080000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xc25f3fc1},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00040000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x84be7f83},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00020000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x097cff07},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00010000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x12f9fe0f},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00008000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x25f3fc1f},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00004000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x4be7f83f},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00002000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x97cff07f},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00001000},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x2f9fe0fe},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000800},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x5f3fc1fd},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000400},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xbe7f83fb},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000200},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x7cff07f7},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000100},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf9fe0fee},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000080},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xf3fc1fdc},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000040},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xe7f83fb8},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000020},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xcff07f70},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000010},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x9fe0fee1},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000008},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x3fc1fdc2},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000004},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0x7f83fb85},
-	{0xbf,    2,    1,        0, 0x00000000},
-	{0x57,    2,    0,        0, 0x00000002},
-	{0x15,    2,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xff07f70a},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001c},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000004},
+	{0x57,    5,    0,        0, 0x0fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000004},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001d},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000003},
+	{0x57,    5,    0,        0, 0x1fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
+	{0xbf,    4,    1,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000002},
+	{0x15,    4,    0,        8, 0x00000000},
+	{0x61,    4,    2,        0, 0x00000000},
+	{0x67,    4,    0,        0, 0x0000001e},
+	{0x61,    5,    3,        0, 0x00000000},
+	{0x77,    5,    0,        0, 0x00000002},
+	{0x57,    5,    0,        0, 0x3fffffff},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xaf,    4,    9,        0, 0x00000000},
+	{0xbf,    9,    4,        0, 0x00000000},
 	{0x57,    1,    0,        0, 0x00000001},
-	{0x15,    1,    0,        1, 0x00000000},
-	{0xa7,    3,    0,        0, 0xfe0fee15},
-	{0x71,    1,    0,      201, 0x00000000},
-	{0x67,    1,    0,        0, 0x00000008},
-	{0x71,    2,    0,      200, 0x00000000},
+	{0x15,    1,    0,        8, 0x00000000},
+	{0x61,    1,    2,        0, 0x00000000},
+	{0x67,    1,    0,        0, 0x0000001f},
+	{0x61,    2,    3,        0, 0x00000000},
+	{0x77,    2,    0,        0, 0x00000001},
+	{0x57,    2,    0,        0, 0x7fffffff},
 	{0x4f,    1,    2,        0, 0x00000000},
-	{0x71,    2,    0,      202, 0x00000000},
-	{0x67,    2,    0,        0, 0x00000010},
-	{0x71,    4,    0,      203, 0x00000000},
-	{0x67,    4,    0,        0, 0x00000018},
-	{0x4f,    4,    2,        0, 0x00000000},
-	{0x4f,    4,    1,        0, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000020},
-	{0x77,    3,    0,        0, 0x00000020},
-	{0x9f,    3,    4,        0, 0x00000000},
-	{0x57,    3,    0,        0, 0x0000000f},
-	{0x67,    3,    0,        0, 0x00000002},
-	{0x0f,    0,    3,        0, 0x00000000},
-	{0x71,    1,    0,      137, 0x00000000},
-	{0x67,    1,    0,        0, 0x00000008},
-	{0x71,    2,    0,      136, 0x00000000},
-	{0x4f,    1,    2,        0, 0x00000000},
-	{0x71,    2,    0,      138, 0x00000000},
-	{0x67,    2,    0,        0, 0x00000010},
-	{0x71,    3,    0,      139, 0x00000000},
-	{0x67,    3,    0,        0, 0x00000018},
-	{0x4f,    3,    2,        0, 0x00000000},
-	{0x4f,    3,    1,        0, 0x00000000},
-	{0x07,    3,    0,        0, 0x7cafe800},
-	{0x63,    6,    3,       52, 0x00000000},
-	{0xb7,    7,    0,        0, 0x00000001},
-	{0xbf,    0,    7,        0, 0x00000000},
-	{0x95,    0,    0,        0, 0x00000000},
+	{0xaf,    1,    9,        0, 0x00000000},
+	{0xbf,    9,    1,        0, 0x00000000},
+	{0x63,   10,    9,      -28, 0x00000000},
+	{0xb7,    8,    0,        0, 0x00000001},
+	{0x79,    9,   10,      -40, 0x00000000},
+	{0x05,    0,    0,    -1091, 0x00000000},
+	{0xb7,    8,    0,        0, 0x00000000},
+	{0x79,    9,   10,      -40, 0x00000000},
+	{0x05,    0,    0,    -1094, 0x00000000},
 };
diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c
index ed4d42f92f9f..5fe0bea88b0a 100644
--- a/drivers/net/tap/tap_flow.c
+++ b/drivers/net/tap/tap_flow.c
@@ -11,6 +11,7 @@
 
 #include <rte_byteorder.h>
 #include <rte_jhash.h>
+#include <rte_thash.h>
 #include <rte_malloc.h>
 #include <rte_eth_tap.h>
 #include <tap_flow.h>
@@ -2053,6 +2054,20 @@ static int bpf_rss_key(enum bpf_rss_key_e cmd, __u32 *key_idx)
 	return err;
 }
 
+/* Default RSS hash key also used for ConnectX-3. */
+static const uint8_t rss_hash_default_key[] = {
+	0x2c, 0xc6, 0x81, 0xd1,
+	0x5b, 0xdb, 0xf4, 0xf7,
+	0xfc, 0xa2, 0x83, 0x19,
+	0xdb, 0x1a, 0x3e, 0x94,
+	0x6b, 0x9e, 0x38, 0xd9,
+	0x2c, 0x9c, 0x03, 0xd1,
+	0xad, 0x99, 0x44, 0xa7,
+	0xd9, 0x56, 0x3d, 0x59,
+	0x06, 0x3c, 0x25, 0xf3,
+	0xfc, 0x1f, 0xdc, 0x2a,
+};
+
 /**
  * Add RSS hash calculations and queue selection
  *
@@ -2073,6 +2088,7 @@ static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd,
 {
 	/* 4096 is the maximum number of instructions for a BPF program */
 	unsigned int i;
+	const uint8_t *key_in;
 	int err;
 	struct rss_key rss_entry = { .hash_fields = 0,
 				     .key_size = 0 };
@@ -2087,6 +2103,29 @@ static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd,
 			(error, ENOTSUP, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
 			 "a nonzero RSS encapsulation level is not supported");
 
+	if (rss->queue_num == 0 || rss->queue_num >= TAP_MAX_QUEUES)
+		return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
+					  "invalid number of queues");
+
+	/* allow RSS key_len 0 in case of NULL (default) RSS key. */
+	if (rss->key_len == 0) {
+		if (rss->key != NULL)
+			return rte_flow_error_set(error, ENOTSUP,
+						  RTE_FLOW_ERROR_TYPE_ACTION_CONF,
+						  &rss->key_len, "RSS hash key length 0");
+		key_in = rss_hash_default_key;
+	} else {
+		if (rss->key_len != TAP_RSS_HASH_KEY_SIZE)
+			return rte_flow_error_set
+				(error, EINVAL, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
+				 "RSS hash invalid key length");
+		if (rss->key == NULL)
+			return rte_flow_error_set
+				(error, EINVAL, RTE_FLOW_ERROR_TYPE_UNSPECIFIED, NULL,
+				 "RSS hash key is NULL");
+		key_in = rss->key;
+	}
+
 	/* Get a new map key for a new RSS rule */
 	err = bpf_rss_key(KEY_CMD_GET, &flow->key_idx);
 	if (err < 0) {
@@ -2104,6 +2143,10 @@ static int rss_add_actions(struct rte_flow *flow, struct pmd_internals *pmd,
 	rss_entry.hash_fields =
 		(1 << HASH_FIELD_IPV4_L3_L4) | (1 << HASH_FIELD_IPV6_L3_L4);
 
+	/* Copy and convert RSS key to bigendian for software toeplitz */
+	rte_convert_rss_key((const uint32_t *)key_in, (uint32_t *)rss_entry.key,
+			    TAP_RSS_HASH_KEY_SIZE);
+
 	/* Add this RSS entry to map */
 	err = tap_flow_bpf_update_rss_elem(pmd->map_fd,
 				&flow->key_idx, &rss_entry);
-- 
2.43.0


^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 16:41 ` Stephen Hemminger
@ 2024-01-13 17:50   ` Madhuker Mythri
  2024-01-13 18:05     ` Stephen Hemminger
  2024-01-16 16:43     ` Stephen Hemminger
  0 siblings, 2 replies; 18+ messages in thread
From: Madhuker Mythri @ 2024-01-13 17:50 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, ferruh.yigit

With the original code BPF verifier throws error, due to undefined array access and thus could failed to load the BPF instructions onto the Kernel.
For safe execution on the Kernel, the array access with such undefined value throws error.

So, came up with this loop which has Max-queues as limit.

Thanks,
Madhuker,

-----Original Message-----
From: Stephen Hemminger <stephen@networkplumber.org> 
Sent: 12 January 2024 22:12
To: Madhuker Mythri <madhuker.mythri@oracle.com>
Cc: dev@dpdk.org; ferruh.yigit@amd.com
Subject: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

> -	queue = rsskey->queues[(hash % rsskey->nb_queues) &
> -				       (TAP_MAX_QUEUES - 1)];
> -	skb->cb[1] = QUEUE_OFFSET + queue;
> -	/* printt(">>>>> rss_l3_l4 hash=0x%x queue=%u\n", hash, queue); */
> +	hash = (hash % rsskey->nb_queues) & (TAP_MAX_QUEUES - 1); #pragma 
> +clang loop unroll(full)
> +	for (k = 0; k < TAP_MAX_QUEUES; k++) {
> +		if(k == hash)
> +			queue = rsskey->queues[k];
> +	}
>  

Why introduce another loop here. Original code was fine and bounded.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 16:42 ` Stephen Hemminger
@ 2024-01-13 17:52   ` Madhuker Mythri
  2024-01-13 18:06     ` Stephen Hemminger
  0 siblings, 1 reply; 18+ messages in thread
From: Madhuker Mythri @ 2024-01-13 17:52 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, ferruh.yigit

That's true, SKB pointer access denied and throws error.
So, I have to replace with this BPF helper functions.


-----Original Message-----
From: Stephen Hemminger <stephen@networkplumber.org> 
Sent: 12 January 2024 22:12
To: Madhuker Mythri <madhuker.mythri@oracle.com>
Cc: dev@dpdk.org; ferruh.yigit@amd.com
Subject: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

> 2) Kernel SKB data pointer access not allowed, instead use the BPF helper functions.

This is not true, many of the current kernel BPF examples uses skb pointer.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 16:46 ` Stephen Hemminger
@ 2024-01-13 17:55   ` Madhuker Mythri
  0 siblings, 0 replies; 18+ messages in thread
From: Madhuker Mythri @ 2024-01-13 17:55 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, ferruh.yigit

Even, in the original code the IP-address converted to host-order from network byte order.
Now, I just replaced with BPF API's to convert to host-order.

-----Original Message-----
From: Stephen Hemminger <stephen@networkplumber.org> 
Sent: 12 January 2024 22:17
To: Madhuker Mythri <madhuker.mythri@oracle.com>
Cc: dev@dpdk.org; ferruh.yigit@amd.com
Subject: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

>  		struct ipv4_l3_l4_tuple v4_tuple = {
> -			.src_addr = IPv4(*(src_dst_addr + 0),
> -					*(src_dst_addr + 1),
> -					*(src_dst_addr + 2),
> -					*(src_dst_addr + 3)),
> -			.dst_addr = IPv4(*(src_dst_addr + 4),
> -					*(src_dst_addr + 5),
> -					*(src_dst_addr + 6),
> -					*(src_dst_addr + 7)),
> +			.src_addr = bpf_ntohl(nh.iph.saddr),
> +			.dst_addr = bpf_ntohl(nh.iph.daddr),

Not sure this is correct.
The RSS calculation (Toeplitz) expects that data is in network byte order. See app/test/test_thash.c for example.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-13 17:50   ` [External] : " Madhuker Mythri
@ 2024-01-13 18:05     ` Stephen Hemminger
  2024-01-16 16:43     ` Stephen Hemminger
  1 sibling, 0 replies; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-13 18:05 UTC (permalink / raw)
  To: Madhuker Mythri; +Cc: dev, ferruh.yigit

On Sat, 13 Jan 2024 17:50:19 +0000
Madhuker Mythri <madhuker.mythri@oracle.com> wrote:

> With the original code BPF verifier throws error, due to undefined array access and thus could failed to load the BPF instructions onto the Kernel.
> For safe execution on the Kernel, the array access with such undefined value throws error.
> 
> So, came up with this loop which has Max-queues as limit.
> 
> Thanks,
> Madhuker,

It does not for me.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-13 17:52   ` [External] : " Madhuker Mythri
@ 2024-01-13 18:06     ` Stephen Hemminger
  2024-01-16  5:43       ` Madhuker Mythri
  0 siblings, 1 reply; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-13 18:06 UTC (permalink / raw)
  To: Madhuker Mythri; +Cc: dev, ferruh.yigit

On Sat, 13 Jan 2024 17:52:34 +0000
Madhuker Mythri <madhuker.mythri@oracle.com> wrote:

> That's true, SKB pointer access denied and throws error.
> So, I have to replace with this BPF helper functions.

It does not for me using current Debian kernel.
You may have enabled something else.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-13 18:06     ` Stephen Hemminger
@ 2024-01-16  5:43       ` Madhuker Mythri
  2024-01-16 16:40         ` Stephen Hemminger
  2024-01-17  3:25         ` Stephen Hemminger
  0 siblings, 2 replies; 18+ messages in thread
From: Madhuker Mythri @ 2024-01-16  5:43 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, ferruh.yigit

Hi Stephen,

Yes, I found that the Kernel we use has more Verification added for safe execution:
https://blogs.oracle.com/linux/post/bpf-in-depth-the-bpf-bytecode-and-the-bpf-verifier

Here they mentioned about SKB pointer direct access, math on pointer and array with undefined access is denied on BPF code.

Thanks,
Madhuker.

-----Original Message-----
From: Stephen Hemminger <stephen@networkplumber.org> 
Sent: 13 January 2024 23:36
To: Madhuker Mythri <madhuker.mythri@oracle.com>
Cc: dev@dpdk.org; ferruh.yigit@amd.com
Subject: Re: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.

On Sat, 13 Jan 2024 17:52:34 +0000
Madhuker Mythri <madhuker.mythri@oracle.com> wrote:

> That's true, SKB pointer access denied and throws error.
> So, I have to replace with this BPF helper functions.

It does not for me using current Debian kernel.
You may have enabled something else.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-16  5:43       ` Madhuker Mythri
@ 2024-01-16 16:40         ` Stephen Hemminger
  2024-01-17  3:25         ` Stephen Hemminger
  1 sibling, 0 replies; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-16 16:40 UTC (permalink / raw)
  To: Madhuker Mythri; +Cc: dev, ferruh.yigit

On Tue, 16 Jan 2024 05:43:00 +0000
Madhuker Mythri <madhuker.mythri@oracle.com> wrote:

> Hi Stephen,
> 
> Yes, I found that the Kernel we use has more Verification added for safe execution:
> https://blogs.oracle.com/linux/post/bpf-in-depth-the-bpf-bytecode-and-the-bpf-verifier
> 
> Here they mentioned about SKB pointer direct access, math on pointer and array with undefined access is denied on BPF code.
> 
> Thanks,
> Madhuker.

Most of your changes, make sense and should be merged.
But the custom verifier changes do not need to be added.
The DPDK upstream project is not targeted at supporting custom vendor API modifications.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-13 17:50   ` [External] : " Madhuker Mythri
  2024-01-13 18:05     ` Stephen Hemminger
@ 2024-01-16 16:43     ` Stephen Hemminger
  1 sibling, 0 replies; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-16 16:43 UTC (permalink / raw)
  To: Madhuker Mythri; +Cc: dev, ferruh.yigit

On Sat, 13 Jan 2024 17:50:19 +0000
Madhuker Mythri <madhuker.mythri@oracle.com> wrote:

> With the original code BPF verifier throws error, due to undefined array access and thus could failed to load the BPF instructions onto the Kernel.
> For safe execution on the Kernel, the array access with such undefined value throws error.
> 
> So, came up with this loop which has Max-queues as limit.
> 
> Thanks,
> Madhuker,

The result of x & 15 is always going to be less than 16.
The Oracle BPF verifier modifications are junk if it can figure that out.

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-16  5:43       ` Madhuker Mythri
  2024-01-16 16:40         ` Stephen Hemminger
@ 2024-01-17  3:25         ` Stephen Hemminger
  2024-01-17 16:19           ` Madhuker Mythri
  1 sibling, 1 reply; 18+ messages in thread
From: Stephen Hemminger @ 2024-01-17  3:25 UTC (permalink / raw)
  To: Madhuker Mythri; +Cc: dev, ferruh.yigit

On Tue, 16 Jan 2024 05:43:00 +0000
Madhuker Mythri <madhuker.mythri@oracle.com> wrote:

> Hi Stephen,
> 
> Yes, I found that the Kernel we use has more Verification added for safe execution:
> https://blogs.oracle.com/linux/post/bpf-in-depth-the-bpf-bytecode-and-the-bpf-verifier
> 
> Here they mentioned about SKB pointer direct access, math on pointer and array with undefined access is denied on BPF code.

Have you tried running Cilium? I would expect those custom changes would break that

^ permalink raw reply	[flat|nested] 18+ messages in thread

* RE: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-17  3:25         ` Stephen Hemminger
@ 2024-01-17 16:19           ` Madhuker Mythri
  0 siblings, 0 replies; 18+ messages in thread
From: Madhuker Mythri @ 2024-01-17 16:19 UTC (permalink / raw)
  To: Stephen Hemminger; +Cc: dev, ferruh.yigit

No, I did not run with Cilium.

Thanks,
Madhuker.

-----Original Message-----
From: Stephen Hemminger <stephen@networkplumber.org> 
Sent: 17 January 2024 08:56
To: Madhuker Mythri <madhuker.mythri@oracle.com>
Cc: dev@dpdk.org; ferruh.yigit@amd.com
Subject: Re: [External] : Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.

On Tue, 16 Jan 2024 05:43:00 +0000
Madhuker Mythri <madhuker.mythri@oracle.com> wrote:

> Hi Stephen,
> 
> Yes, I found that the Kernel we use has more Verification added for safe execution:
> https://blogs.oracle.com/linux/post/bpf-in-depth-the-bpf-bytecode-and-the-bpf-verifier
> 
> Here they mentioned about SKB pointer direct access, math on pointer and array with undefined access is denied on BPF code.

Have you tried running Cilium? I would expect those custom changes would break that

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements.
  2024-01-12 13:48 [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements madhuker.mythri
                   ` (5 preceding siblings ...)
  2024-01-12 17:53 ` [RFC v3] tap: rework the BPF header parsing Stephen Hemminger
@ 2024-02-07 18:55 ` Stephen Hemminger
  6 siblings, 0 replies; 18+ messages in thread
From: Stephen Hemminger @ 2024-02-07 18:55 UTC (permalink / raw)
  To: madhuker.mythri; +Cc: dev, ferruh.yigit

On Fri, 12 Jan 2024 19:18:21 +0530
madhuker.mythri@oracle.com wrote:

> +struct  {
> +	__uint(type,       BPF_MAP_TYPE_HASH);
> +	__type(key,  __u32);
> +	__type(value,     struct rss_key);
> +	__uint(max_entries,      256);
> +} map_keys SEC(".maps");
>  

Overall this patch is a big step forward in getting TAP BPF going again.
But using the new BTF maps won't work with how the tap device is
loading the BPF program. Getting BTF to work requires more steps and
is best done by using libbpf. With this part of your version current
kernels will give type mismatch in verifier since the type information
for map_keys is not loaded.

See my followon RFC for what libbpf integration looks like.
Ends up being a deeper rewrite.

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2024-02-07 18:55 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-12 13:48 [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements madhuker.mythri
2024-01-12 16:40 ` Stephen Hemminger
2024-01-12 16:41 ` Stephen Hemminger
2024-01-13 17:50   ` [External] : " Madhuker Mythri
2024-01-13 18:05     ` Stephen Hemminger
2024-01-16 16:43     ` Stephen Hemminger
2024-01-12 16:42 ` Stephen Hemminger
2024-01-13 17:52   ` [External] : " Madhuker Mythri
2024-01-13 18:06     ` Stephen Hemminger
2024-01-16  5:43       ` Madhuker Mythri
2024-01-16 16:40         ` Stephen Hemminger
2024-01-17  3:25         ` Stephen Hemminger
2024-01-17 16:19           ` Madhuker Mythri
2024-01-12 16:43 ` Stephen Hemminger
2024-01-12 16:46 ` Stephen Hemminger
2024-01-13 17:55   ` [External] : " Madhuker Mythri
2024-01-12 17:53 ` [RFC v3] tap: rework the BPF header parsing Stephen Hemminger
2024-02-07 18:55 ` [PATCH] net/tap: Modified TAP BPF program as per the Kernel-version upgrade requirements Stephen Hemminger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).