[dpdk-dev,v3,1/2] net/tap: add eBPF instructions to TAP device

Message ID 1515567969-27946-2-git-send-email-ophirmu@mellanox.com (mailing list archive)
State Superseded, archived
Delegated to: Ferruh Yigit
Headers

Checks

Context Check Description
ci/checkpatch warning coding style issues
ci/Intel-compilation success Compilation OK

Commit Message

Ophir Munk Jan. 10, 2018, 7:06 a.m. UTC
  TAP PMD is required to support RSS queue mapping based on rte_flow API. An
example usage for this requirement is failsafe transparent switching from a
PCI device to TAP device while keep redirecting packets to the same RSS
queues on both devices.

TAP RSS implementation is based on eBPF programs sent to Linux kernel
through BPF system calls and using netlink messages to reference the
programs as part of traffic control commands.

An eBPF program acts as a traffic control classifier or action. Each
program is written in C code under a different ELF section name. Clang 3.7
is used to compile the C code into eBPF-formatted object file. The ELF file
is parsed and its sections (programs) can be downloaded to the kernel using
BPF system call. The BPF system call parameters contain the array of eBPF
instructions. This commit includes BPF classifier and action programs
(tap_bpf_program.c) as reference and their corresponding arrays of eBPF
instructions (tap_bpf_insns.c). The reference file does not take part in
dpdk compilation. The details on how to generate new eBPF code will be
presented in another commit.

In a follow up commit TAP PMD will use the eBPF programs to implement RSS
flow rules.

TAP eBPF requires Linux version 4.9 configured with BPF. TAP PMD will
successfully compile on systems with old or non-BPF configured kernels but
RSS rules creation on TAP devices will not be supported.

Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
---
 drivers/net/tap/Makefile          |   11 +
 drivers/net/tap/tap_bpf.h         |   96 ++
 drivers/net/tap/tap_bpf_insns.c   | 1845 +++++++++++++++++++++++++++++++++++++
 drivers/net/tap/tap_bpf_program.c |  221 +++++
 drivers/net/tap/tap_flow.h        |    5 +
 5 files changed, 2178 insertions(+)
 create mode 100644 drivers/net/tap/tap_bpf.h
 create mode 100644 drivers/net/tap/tap_bpf_insns.c
 create mode 100644 drivers/net/tap/tap_bpf_program.c
  

Comments

Pascal Mazon Jan. 10, 2018, 9:34 a.m. UTC | #1
Hi Ophir,

I have a few remarks.

- Why do you define ARRAY_SIZE in tap_flow.h while it's used only in
tap_bpf_insns.c?

- I really dislike having the BPF bytecode hardcoded in tap_bpf_insns.c.
  You don't provide the commands used to generate that bytecode.
  And you don't provide the way to translate bytecode into these insns[]
arrays.
  So we're just supposed to trust that these instructions are indeed
what they pretend to be.
  The process is not repeatable nor verifiable.
 

On 10/01/2018 08:06, Ophir Munk wrote:
> TAP PMD is required to support RSS queue mapping based on rte_flow API. An
> example usage for this requirement is failsafe transparent switching from a
> PCI device to TAP device while keep redirecting packets to the same RSS
> queues on both devices.
>
> TAP RSS implementation is based on eBPF programs sent to Linux kernel
> through BPF system calls and using netlink messages to reference the
> programs as part of traffic control commands.
>
> An eBPF program acts as a traffic control classifier or action. Each
> program is written in C code under a different ELF section name. Clang 3.7
> is used to compile the C code into eBPF-formatted object file. The ELF file
> is parsed and its sections (programs) can be downloaded to the kernel using
> BPF system call. The BPF system call parameters contain the array of eBPF
> instructions. This commit includes BPF classifier and action programs
> (tap_bpf_program.c) as reference and their corresponding arrays of eBPF
> instructions (tap_bpf_insns.c). The reference file does not take part in
> dpdk compilation. The details on how to generate new eBPF code will be
> presented in another commit.
>
> In a follow up commit TAP PMD will use the eBPF programs to implement RSS
> flow rules.
>
> TAP eBPF requires Linux version 4.9 configured with BPF. TAP PMD will
> successfully compile on systems with old or non-BPF configured kernels but
> RSS rules creation on TAP devices will not be supported.
>
> Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
> ---
>  drivers/net/tap/Makefile          |   11 +
>  drivers/net/tap/tap_bpf.h         |   96 ++
>  drivers/net/tap/tap_bpf_insns.c   | 1845 +++++++++++++++++++++++++++++++++++++
>  drivers/net/tap/tap_bpf_program.c |  221 +++++
>  drivers/net/tap/tap_flow.h        |    5 +
>  5 files changed, 2178 insertions(+)
>  create mode 100644 drivers/net/tap/tap_bpf.h
>  create mode 100644 drivers/net/tap/tap_bpf_insns.c
>  create mode 100644 drivers/net/tap/tap_bpf_program.c
>
> diff --git a/drivers/net/tap/Makefile b/drivers/net/tap/Makefile
> index fd4195f..feaa5b7 100644
> --- a/drivers/net/tap/Makefile
> +++ b/drivers/net/tap/Makefile
> @@ -12,6 +12,9 @@ EXPORT_MAP := rte_pmd_tap_version.map
>  
>  LIBABIVER := 1
>  
> +# TAP_MAX_QUEUES must be a power of 2 as it will be used for masking */
> +TAP_MAX_QUEUES = 16
> +
>  CFLAGS += -O3
>  CFLAGS += -I$(SRCDIR)
>  CFLAGS += -I.
> @@ -20,6 +23,8 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
>  LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs -lrte_hash
>  LDLIBS += -lrte_bus_vdev
>  
> +CFLAGS += -DTAP_MAX_QUEUES=$(TAP_MAX_QUEUES)
> +
>  #
>  # all source are stored in SRCS-y
>  #
> @@ -27,6 +32,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += rte_eth_tap.c
>  SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_flow.c
>  SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_netlink.c
>  SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_tcmsgs.c
> +SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_bpf_insns.c
>  
>  include $(RTE_SDK)/mk/rte.lib.mk
>  
> @@ -53,6 +59,11 @@ tap_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh
>  		linux/pkt_cls.h \
>  		enum TCA_FLOWER_KEY_VLAN_PRIO \
>  		$(AUTOCONF_OUTPUT)
> +	$Q sh -- '$<' '$@' \
> +		HAVE_BPF_PROG_LOAD \
> +		linux/bpf.h \
> +		enum BPF_PROG_LOAD \
> +		$(AUTOCONF_OUTPUT)
>  
>  # Create tap_autoconf.h or update it in case it differs from the new one.
>  
> diff --git a/drivers/net/tap/tap_bpf.h b/drivers/net/tap/tap_bpf.h
> new file mode 100644
> index 0000000..82775b7
> --- /dev/null
> +++ b/drivers/net/tap/tap_bpf.h
> @@ -0,0 +1,96 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright 2017 Mellanox Technologies, Ltd.
> + */
> +
> +#ifndef __TAP_BPF_H__
> +#define __TAP_BPF_H__
> +
> +#include <tap_autoconf.h>
> +
> +#ifdef HAVE_BPF_PROG_LOAD
> +#include <linux/bpf.h>
> +#else
> +/* BPF_MAP_UPDATE_ELEM command flags */
> +#define	BPF_ANY	0 /* create a new element or update an existing */
> +
> +/* BPF architecture instruction struct */
> +struct bpf_insn {
> +	__u8	code;
> +	__u8	dst_reg:4;
> +	__u8	src_reg:4;
> +	__s16	off;
> +	__s32	imm; /* immediate value */
> +};
> +
> +/* BPF program types */
> +enum bpf_prog_type {
> +	BPF_PROG_TYPE_UNSPEC,
> +	BPF_PROG_TYPE_SOCKET_FILTER,
> +	BPF_PROG_TYPE_KPROBE,
> +	BPF_PROG_TYPE_SCHED_CLS,
> +	BPF_PROG_TYPE_SCHED_ACT,
> +};
> +
> +/* BPF commands types */
> +enum bpf_cmd {
> +	BPF_MAP_CREATE,
> +	BPF_MAP_LOOKUP_ELEM,
> +	BPF_MAP_UPDATE_ELEM,
> +	BPF_MAP_DELETE_ELEM,
> +	BPF_MAP_GET_NEXT_KEY,
> +	BPF_PROG_LOAD,
> +};
> +
> +/* BPF maps types */
> +enum bpf_map_type {
> +	BPF_MAP_TYPE_UNSPEC,
> +	BPF_MAP_TYPE_HASH,
> +};
> +
> +/* union of anonymous structs used with TAP BPF commands */
> +union bpf_attr {
> +	/* BPF_MAP_CREATE command */
> +	struct {
> +		__u32	map_type;
> +		__u32	key_size;
> +		__u32	value_size;
> +		__u32	max_entries;
> +		__u32	map_flags;
> +		__u32	inner_map_fd;
> +	};
> +
> +	/* BPF_MAP_UPDATE_ELEM, BPF_MAP_DELETE_ELEM commands */
> +	struct {
> +		__u32		map_fd;
> +		__aligned_u64	key;
> +		union {
> +			__aligned_u64 value;
> +			__aligned_u64 next_key;
> +		};
> +		__u64		flags;
> +	};
> +
> +	/* BPF_PROG_LOAD command */
> +	struct {
> +		__u32		prog_type;
> +		__u32		insn_cnt;
> +		__aligned_u64	insns;
> +		__aligned_u64	license;
> +		__u32		log_level;
> +		__u32		log_size;
> +		__aligned_u64	log_buf;
> +		__u32		kern_version;
> +		__u32		prog_flags;
> +	};
> +} __attribute__((aligned(8)));
> +#endif
> +
> +enum {
> +	BPF_MAP_ID_KEY,
> +	BPF_MAP_ID_SIMPLE,
> +};
> +
> +static int bpf_load(enum bpf_prog_type type, const struct bpf_insn *insns,
> +		size_t insns_cnt, const char *license);
> +
> +#endif /* __TAP_BPF_H__ */
> diff --git a/drivers/net/tap/tap_bpf_insns.c b/drivers/net/tap/tap_bpf_insns.c
> new file mode 100644
> index 0000000..25aa82c
> --- /dev/null
> +++ b/drivers/net/tap/tap_bpf_insns.c
> @@ -0,0 +1,1845 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright 2017 Mellanox Technologies, Ltd.
> + */
> +
> +#include <errno.h>
> +#include <string.h>
> +#include <unistd.h>
> +#include <sys/queue.h>
> +#include <sys/mount.h>
> +
> +#include <rte_byteorder.h>
> +#include <rte_jhash.h>
> +#include <rte_malloc.h>
> +#include <rte_eth_tap.h>
> +#include <tap_flow.h>
> +#include <tap_autoconf.h>
> +#include <tap_tcmsgs.h>
> +#include <tap_bpf.h>
> +
> +#define ERROR                   0
> +
> +/*
> + * The queue number is offset by 1, to distinguish packets that have
> + * gone through this rule (skb->cb[1] != 0) from others.
> + */
> +#define QUEUE_OFFSET 1
> +
> +/* bpf_insn array matching cls_q section. See tap_bpf_program.c file */
> +static struct bpf_insn cls_q_insns[] = {
> +	{0x61,    1,    1,       52, 0x00000000},
> +	{0x18,    2,    0,        0, 0xdeadbeef},
> +	{0x00,    0,    0,        0, 0x00000000},
> +	{0x63,   10,    2,       -4, 0x00000000},
> +	{0x61,    2,   10,       -4, 0x00000000},
> +	{0x07,    2,    0,        0, 0x00000001},
> +	{0x67,    2,    0,        0, 0x00000020},
> +	{0x77,    2,    0,        0, 0x00000020},
> +	{0xb7,    0,    0,        0, 0xffffffff},
> +	{0x1d,    1,    2,        1, 0x00000000},
> +	{0xb7,    0,    0,        0, 0x00000000},
> +	{0x95,    0,    0,        0, 0x00000000},
> +};
> +
> +/**
> + * Load BPF program (section cls_q) into the kernel and return a bpf fd
> + *
> + * @param queue_idx
> + *   Queue index matching packet cb
> + *
> + * @return
> + *   -1 if the BPF program couldn't be loaded. An fd (int) otherwise.
> + */
> +int tap_flow_bpf_cls_q(__u32 queue_idx)
> +{
> +	cls_q_insns[1].imm = queue_idx;
> +
> +	return bpf_load(BPF_PROG_TYPE_SCHED_CLS,
> +		(struct bpf_insn *)cls_q_insns,
> +		ARRAY_SIZE(cls_q_insns),
> +		"Dual BSD/GPL");
> +}
> +
> +/* bpf_insn array matching l3_l4 section. see tap_bpf_program.c file */
> +static struct bpf_insn l3_l4_hash_insns[] = {
> +	{0xbf,    7,    1,        0, 0x00000000},
> +	{0x61,    8,    7,       16, 0x00000000},
> +	{0x61,    6,    7,       76, 0x00000000},
> +	{0x61,    9,    7,       80, 0x00000000},
> +	{0x18,    1,    0,        0, 0xdeadbeef},
> +	{0x00,    0,    0,        0, 0x00000000},
> +	{0x63,   10,    1,       -4, 0x00000000},
> +	{0xbf,    2,   10,        0, 0x00000000},
> +	{0x07,    2,    0,        0, 0xfffffffc},
> +	{0x18,    1,    1,        0, 0x0000cafe},
> +	{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,     1632, 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,    6,        0, 0x00000000},
> +	{0x07,    1,    0,        0, 0x00000012},
> +	{0x2d,    1,    9,     1622, 0x00000000},
> +	{0xb7,    1,    0,        0, 0x00000012},
> +	{0x69,    8,    6,       16, 0x00000000},
> +	{0xbf,    7,    2,        0, 0x00000000},
> +	{0x7b,   10,    7,      -56, 0x00000000},
> +	{0x57,    8,    0,        0, 0x0000ffff},
> +	{0x15,    8,    0,      409, 0x0000dd86},
> +	{0xb7,    7,    0,        0, 0x00000003},
> +	{0x55,    8,    0,     1614, 0x00000008},
> +	{0x0f,    6,    1,        0, 0x00000000},
> +	{0xb7,    7,    0,        0, 0x00000000},
> +	{0xbf,    1,    6,        0, 0x00000000},
> +	{0x07,    1,    0,        0, 0x00000018},
> +	{0x2d,    1,    9,     1609, 0x00000000},
> +	{0x71,    3,    6,       12, 0x00000000},
> +	{0xbf,    1,    3,        0, 0x00000000},
> +	{0x67,    1,    0,        0, 0x00000038},
> +	{0xc7,    1,    0,        0, 0x00000020},
> +	{0x77,    1,    0,        0, 0x0000001f},
> +	{0x57,    1,    0,        0, 0x2cc681d1},
> +	{0x67,    3,    0,        0, 0x00000018},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x40000000},
> +	{0xb7,    2,    0,        0, 0x00000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x598d03a2},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x20000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb31a0745},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x10000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x66340e8a},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x08000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xcc681d15},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x04000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x98d03a2b},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x02000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x31a07456},
> +	{0x57,    3,    0,        0, 0x01000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6340e8ad},
> +	{0x71,    3,    6,       13, 0x00000000},
> +	{0x67,    3,    0,        0, 0x00000010},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00800000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc681d15b},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00400000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8d03a2b7},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00200000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1a07456f},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00100000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x340e8ade},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00080000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x681d15bd},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00040000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd03a2b7b},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00020000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa07456f6},
> +	{0x57,    3,    0,        0, 0x00010000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x40e8aded},
> +	{0x71,    3,    6,       14, 0x00000000},
> +	{0x67,    3,    0,        0, 0x00000008},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00008000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x81d15bdb},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00004000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x03a2b7b7},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00002000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x07456f6f},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00001000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x0e8adedf},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000800},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1d15bdbf},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000400},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3a2b7b7e},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000200},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7456f6fd},
> +	{0x57,    3,    0,        0, 0x00000100},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe8adedfa},
> +	{0x71,    3,    6,       15, 0x00000000},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000080},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd15bdbf4},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000040},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa2b7b7e9},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000020},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x456f6fd3},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000010},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8adedfa7},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000008},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x15bdbf4f},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000004},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x2b7b7e9e},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000002},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x56f6fd3d},
> +	{0x57,    3,    0,        0, 0x00000001},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xadedfa7b},
> +	{0x71,    4,    6,       16, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000038},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0xb7,    3,    0,        0, 0xffffffff},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x5bdbf4f7},
> +	{0x67,    4,    0,        0, 0x00000018},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb7b7e9ef},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6f6fd3df},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdedfa7bf},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xbdbf4f7f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7b7e9eff},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf6fd3dff},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xedfa7bfe},
> +	{0x71,    4,    6,       17, 0x00000000},
> +	{0x67,    4,    0,        0, 0x00000010},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00800000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdbf4f7fc},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00400000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb7e9eff9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00200000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6fd3dff2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00100000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdfa7bfe5},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00080000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xbf4f7fca},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00040000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7e9eff94},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00020000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfd3dff28},
> +	{0x57,    4,    0,        0, 0x00010000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfa7bfe51},
> +	{0x71,    4,    6,       18, 0x00000000},
> +	{0x67,    4,    0,        0, 0x00000008},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00008000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf4f7fca2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00004000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe9eff945},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00002000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd3dff28a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00001000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa7bfe514},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000800},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x4f7fca28},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000400},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9eff9450},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000200},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3dff28a0},
> +	{0x57,    4,    0,        0, 0x00000100},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7bfe5141},
> +	{0x71,    4,    6,       19, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000080},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf7fca283},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000040},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xeff94506},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000020},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdff28a0c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000010},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xbfe51418},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000008},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7fca2831},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000004},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xff945063},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000002},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xff28a0c6},
> +	{0x57,    4,    0,        0, 0x00000001},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfe51418c},
> +	{0x71,    4,    6,       20, 0x00000000},
> +	{0x67,    4,    0,        0, 0x00000008},
> +	{0x71,    5,    6,       21, 0x00000000},
> +	{0x4f,    4,    5,        0, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000030},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfca28319},
> +	{0x67,    4,    0,        0, 0x00000010},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x40000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf9450633},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x20000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf28a0c67},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x10000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe51418ce},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x08000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xca28319d},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x04000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9450633b},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x02000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x28a0c676},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x01000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x51418ced},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00800000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa28319db},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00400000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x450633b6},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00200000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8a0c676c},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00100000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1418ced8},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00080000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x28319db1},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00040000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x50633b63},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00020000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa0c676c6},
> +	{0x57,    4,    0,        0, 0x00010000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x418ced8d},
> +	{0x71,    3,    6,       22, 0x00000000},
> +	{0x67,    3,    0,        0, 0x00000008},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00008000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8319db1a},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00004000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x0633b634},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00002000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x0c676c68},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00001000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x18ced8d1},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000800},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x319db1a3},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000400},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x633b6347},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000200},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc676c68f},
> +	{0x57,    3,    0,        0, 0x00000100},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8ced8d1f},
> +	{0x71,    3,    6,       23, 0x00000000},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000080},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x19db1a3e},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000040},
> +	{0x79,    5,   10,      -56, 0x00000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x33b6347d},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000020},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x676c68fa},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000010},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xced8d1f4},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000008},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9db1a3e9},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000004},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3b6347d2},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000002},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x76c68fa5},
> +	{0x57,    3,    0,        0, 0x00000001},
> +	{0x1d,    3,    2,     1177, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xed8d1f4a},
> +	{0x05,    0,    0,     1175, 0x00000000},
> +	{0x0f,    6,    1,        0, 0x00000000},
> +	{0xb7,    7,    0,        0, 0x00000000},
> +	{0xbf,    1,    6,        0, 0x00000000},
> +	{0x07,    1,    0,        0, 0x0000002c},
> +	{0x2d,    1,    9,     1202, 0x00000000},
> +	{0x61,    4,    6,        8, 0x00000000},
> +	{0xbf,    1,    4,        0, 0x00000000},
> +	{0x67,    1,    0,        0, 0x00000038},
> +	{0xc7,    1,    0,        0, 0x00000020},
> +	{0x77,    1,    0,        0, 0x0000001f},
> +	{0x57,    1,    0,        0, 0x2cc681d1},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000040},
> +	{0xb7,    2,    0,        0, 0x00000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x598d03a2},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000020},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb31a0745},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000010},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x66340e8a},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000008},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xcc681d15},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000004},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x98d03a2b},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000002},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x31a07456},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000001},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6340e8ad},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00008000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc681d15b},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00004000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8d03a2b7},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00002000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1a07456f},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00001000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x340e8ade},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000800},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x681d15bd},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000400},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd03a2b7b},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000200},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa07456f6},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00000100},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x40e8aded},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00800000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x81d15bdb},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00400000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x03a2b7b7},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00200000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x07456f6f},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00100000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x0e8adedf},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00080000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1d15bdbf},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00040000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3a2b7b7e},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00020000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7456f6fd},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00010000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe8adedfa},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000020},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0xb7,    3,    0,        0, 0xffffffff},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd15bdbf4},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa2b7b7e9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x456f6fd3},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8adedfa7},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x15bdbf4f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x2b7b7e9e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x56f6fd3d},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xadedfa7b},
> +	{0x61,    4,    6,       12, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000080},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x5bdbf4f7},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000040},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb7b7e9ef},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000020},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6f6fd3df},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000010},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdedfa7bf},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000008},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xbdbf4f7f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000004},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7b7e9eff},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000002},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf6fd3dff},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000001},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xedfa7bfe},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00008000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdbf4f7fc},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00004000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb7e9eff9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00002000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6fd3dff2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00001000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdfa7bfe5},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000800},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xbf4f7fca},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000400},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7e9eff94},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000200},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfd3dff28},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000100},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfa7bfe51},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00800000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf4f7fca2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00400000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe9eff945},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00200000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd3dff28a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00100000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa7bfe514},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00080000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x4f7fca28},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00040000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9eff9450},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00020000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3dff28a0},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00010000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7bfe5141},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000020},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf7fca283},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xeff94506},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdff28a0c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xbfe51418},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7fca2831},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xff945063},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xff28a0c6},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfe51418c},
> +	{0x61,    4,    6,       16, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000080},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfca28319},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000040},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf9450633},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000020},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf28a0c67},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000010},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe51418ce},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000008},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xca28319d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000004},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9450633b},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000002},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x28a0c676},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000001},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x51418ced},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00008000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa28319db},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00004000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x450633b6},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00002000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8a0c676c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00001000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1418ced8},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000800},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x28319db1},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000400},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x50633b63},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000200},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa0c676c6},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000100},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x418ced8d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00800000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8319db1a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00400000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x0633b634},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00200000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x0c676c68},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00100000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x18ced8d1},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00080000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x319db1a3},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00040000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x633b6347},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00020000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc676c68f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00010000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8ced8d1f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000020},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x19db1a3e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x33b6347d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x676c68fa},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xced8d1f4},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9db1a3e9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3b6347d2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x76c68fa5},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xed8d1f4a},
> +	{0x61,    4,    6,       20, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000080},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xdb1a3e94},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000040},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb6347d28},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000020},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6c68fa51},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000010},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd8d1f4a3},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000008},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb1a3e946},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000004},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6347d28d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000002},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc68fa51a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000001},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8d1f4a35},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00008000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1a3e946b},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00004000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x347d28d7},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00002000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x68fa51ae},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00001000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd1f4a35c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000800},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa3e946b9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000400},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x47d28d73},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000200},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8fa51ae7},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000100},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1f4a35cf},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00800000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3e946b9e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00400000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7d28d73c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00200000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfa51ae78},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00100000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf4a35cf1},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00080000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe946b9e3},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00040000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd28d73c7},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00020000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa51ae78e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00010000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x4a35cf1c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000020},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x946b9e38},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x28d73c71},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x51ae78e3},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa35cf1c6},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x46b9e38d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8d73c71b},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1ae78e36},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x35cf1c6c},
> +	{0x61,    4,    6,       24, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000080},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6b9e38d9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000040},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd73c71b2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000020},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xae78e364},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000010},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x5cf1c6c9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000008},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb9e38d92},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000004},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x73c71b25},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000002},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe78e364b},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000001},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xcf1c6c96},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00008000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9e38d92c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00004000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3c71b259},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00002000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x78e364b2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00001000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf1c6c964},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000800},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe38d92c9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000400},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc71b2593},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000200},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8e364b27},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000100},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1c6c964e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00800000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x38d92c9c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00400000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x71b25938},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00200000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe364b270},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00100000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc6c964e0},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00080000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8d92c9c0},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00040000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1b259380},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00020000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x364b2700},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00010000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6c964e01},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000020},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd92c9c03},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb2593807},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x64b2700f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc964e01e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x92c9c03d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x2593807a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x4b2700f4},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x964e01e8},
> +	{0x61,    4,    6,       28, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000080},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x2c9c03d1},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000040},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x593807a3},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000020},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb2700f46},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000010},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x64e01e8d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000008},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc9c03d1a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000004},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x93807a35},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000002},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x2700f46b},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000001},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x4e01e8d6},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00008000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9c03d1ad},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00004000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3807a35b},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00002000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x700f46b6},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00001000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe01e8d6c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000800},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc03d1ad9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000400},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x807a35b3},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000200},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x00f46b66},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000100},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x01e8d6cc},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00800000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x03d1ad99},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00400000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x07a35b32},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00200000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x0f46b665},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00100000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1e8d6cca},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00080000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3d1ad994},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00040000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7a35b328},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00020000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf46b6651},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00010000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe8d6cca2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000020},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd1ad9944},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa35b3289},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x46b66512},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8d6cca25},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1ad9944a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x35b32894},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6b665129},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd6cca253},
> +	{0x61,    4,    6,       32, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000080},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xad9944a7},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000040},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x5b32894f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000020},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb665129f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000010},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6cca253e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000008},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd9944a7d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000004},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb32894fb},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000002},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x665129f6},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000001},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xcca253ec},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00008000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9944a7d9},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00004000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x32894fb2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00002000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x65129f65},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00001000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xca253eca},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000800},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x944a7d95},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000400},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x2894fb2a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000200},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x5129f655},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000100},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa253ecab},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00800000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x44a7d956},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00400000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x894fb2ac},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00200000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x129f6558},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00100000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x253ecab1},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00080000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x4a7d9563},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00040000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x94fb2ac7},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00020000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x29f6558f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00010000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x53ecab1e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000020},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xa7d9563d},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x4fb2ac7a},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9f6558f5},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3ecab1ea},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7d9563d5},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfb2ac7ab},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf6558f56},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xecab1eac},
> +	{0x61,    4,    6,       36, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000080},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd9563d59},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000040},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb2ac7ab2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000020},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6558f564},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000010},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xcab1eac8},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000008},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9563d590},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000004},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x2ac7ab20},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000002},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x558f5641},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000001},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xab1eac83},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00008000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x563d5906},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00004000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xac7ab20c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00002000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x58f56418},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00001000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb1eac831},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000800},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x63d59063},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000400},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc7ab20c7},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000200},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8f56418f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00000100},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1eac831e},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00800000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3d59063c},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00400000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7ab20c78},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00200000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf56418f0},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00100000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xeac831e1},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00080000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xd59063c2},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00040000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xab20c784},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00020000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x56418f09},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x00010000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xac831e12},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000020},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x59063c25},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x40000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xb20c784b},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x20000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x6418f097},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x10000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc831e12f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x08000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9063c25f},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x04000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x20c784be},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x57,    5,    0,        0, 0x02000000},
> +	{0x1d,    5,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x418f097c},
> +	{0x57,    4,    0,        0, 0x01000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x831e12f9},
> +	{0x71,    4,    6,       40, 0x00000000},
> +	{0x67,    4,    0,        0, 0x00000008},
> +	{0x71,    5,    6,       41, 0x00000000},
> +	{0x4f,    4,    5,        0, 0x00000000},
> +	{0xbf,    5,    4,        0, 0x00000000},
> +	{0x67,    5,    0,        0, 0x00000030},
> +	{0xc7,    5,    0,        0, 0x00000020},
> +	{0x6d,    5,    3,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x063c25f3},
> +	{0x67,    4,    0,        0, 0x00000010},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x40000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x0c784be7},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x20000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x18f097cf},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x10000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x31e12f9f},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x08000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x63c25f3f},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x04000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc784be7f},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x02000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x8f097cff},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x01000000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x1e12f9fe},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00800000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3c25f3fc},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00400000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x784be7f8},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00200000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf097cff0},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00100000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe12f9fe0},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00080000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xc25f3fc1},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00040000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x84be7f83},
> +	{0xbf,    3,    4,        0, 0x00000000},
> +	{0x57,    3,    0,        0, 0x00020000},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x097cff07},
> +	{0x57,    4,    0,        0, 0x00010000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x12f9fe0f},
> +	{0x71,    3,    6,       42, 0x00000000},
> +	{0x67,    3,    0,        0, 0x00000008},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00008000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x25f3fc1f},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00004000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x4be7f83f},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00002000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x97cff07f},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00001000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x2f9fe0fe},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000800},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x5f3fc1fd},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000400},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xbe7f83fb},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000200},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7cff07f7},
> +	{0x57,    3,    0,        0, 0x00000100},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf9fe0fee},
> +	{0x71,    3,    6,       43, 0x00000000},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000080},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xf3fc1fdc},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000040},
> +	{0x79,    5,   10,      -56, 0x00000000},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xe7f83fb8},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000020},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xcff07f70},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000010},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x9fe0fee1},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000008},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x3fc1fdc2},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000004},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0x7f83fb85},
> +	{0xbf,    4,    3,        0, 0x00000000},
> +	{0x57,    4,    0,        0, 0x00000002},
> +	{0x1d,    4,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xff07f70a},
> +	{0x57,    3,    0,        0, 0x00000001},
> +	{0x1d,    3,    2,        1, 0x00000000},
> +	{0xa7,    1,    0,        0, 0xfe0fee15},
> +	{0x71,    2,    0,      201, 0x00000000},
> +	{0x67,    2,    0,        0, 0x00000008},
> +	{0x71,    3,    0,      200, 0x00000000},
> +	{0x4f,    2,    3,        0, 0x00000000},
> +	{0x71,    3,    0,      203, 0x00000000},
> +	{0x67,    3,    0,        0, 0x00000008},
> +	{0x71,    4,    0,      202, 0x00000000},
> +	{0x4f,    3,    4,        0, 0x00000000},
> +	{0x67,    3,    0,        0, 0x00000010},
> +	{0x4f,    3,    2,        0, 0x00000000},
> +	{0x67,    1,    0,        0, 0x00000020},
> +	{0x77,    1,    0,        0, 0x00000020},
> +	{0xbf,    2,    1,        0, 0x00000000},
> +	{0x3f,    2,    3,        0, 0x00000000},
> +	{0x2f,    2,    3,        0, 0x00000000},
> +	{0x1f,    1,    2,        0, 0x00000000},
> +	{0x57,    1,    0,        0, 0x0000000f},
> +	{0x67,    1,    0,        0, 0x00000002},
> +	{0x0f,    0,    1,        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},
> +	{0x71,    3,    0,      139, 0x00000000},
> +	{0x67,    3,    0,        0, 0x00000008},
> +	{0x4f,    3,    2,        0, 0x00000000},
> +	{0x67,    3,    0,        0, 0x00000010},
> +	{0x4f,    3,    1,        0, 0x00000000},
> +	{0x07,    3,    0,        0, 0x00000001},
> +	{0x63,    5,    3,       52, 0x00000000},
> +	{0xb7,    7,    0,        0, 0x00000001},
> +	{0xbf,    0,    7,        0, 0x00000000},
> +	{0x95,    0,    0,        0, 0x00000000},
> +};
> +
> +/**
> + * Load BPF program (section l3_l4) into the kernel and return a bpf fd.
> + *
> + * @param[in] key_idx
> + *   RSS MAP key index
> + *
> + * @param[in] map_fd
> + *   BPF RSS map file descriptor
> + *
> + * @return
> + *   -1 if the BPF program couldn't be loaded. An fd (int) otherwise.
> + */
> +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;
> +
> +	return bpf_load(BPF_PROG_TYPE_SCHED_ACT,
> +		(struct bpf_insn *)l3_l4_hash_insns,
> +		ARRAY_SIZE(l3_l4_hash_insns),
> +		"Dual BSD/GPL");
> +}
> +
> +
> +#ifndef __NR_bpf
> +# if defined(__i386__)
> +#  define __NR_bpf 357
> +# elif defined(__x86_64__)
> +#  define __NR_bpf 321
> +# elif defined(__aarch64__)
> +#  define __NR_bpf 280
> +# elif defined(__sparc__)
> +#  define __NR_bpf 349
> +# elif defined(__s390__)
> +#  define __NR_bpf 351
> +# else
> +#  error __NR_bpf not defined. libbpf does not support your arch.
> +# endif
> +#endif
> +
> +/**
> + * Helper function to convert a pointer to unsigned 64 bits
> + *
> + * @param[in] ptr
> + *   pointer to address
> + *
> + * @return
> + *   64 bit unsigned long type of pointer address
> + */
> +static inline __u64 ptr_to_u64(const void *ptr)
> +{
> +	return (__u64)(unsigned long)ptr;
> +}
> +
> +/**
> + * Call BPF system call
> + *
> + * @param[in] cmd
> + *   BPF command for program loading, map creation, map entry update, etc
> + *
> + * @param[in] attr
> + *   System call attributes relevant to system call command
> + *
> + * @param[in] size
> + *   size of attr parameter
> + *
> + * @return
> + *   -1 if BPF system call failed, 0 otherwise
> + */
> +static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr,
> +			unsigned int size)
> +{
> +	return syscall(__NR_bpf, cmd, attr, size);
> +}
> +
> +/**
> + * Load BPF instructions to kernel
> + *
> + * @param[in] type
> + *   BPF program type: classifieir or action
> + *
> + * @param[in] insns
> + *   Array of BPF instructions (equivalent to BPF instructions)
> + *
> + * @param[in] insns_cnt
> + *   Number of BPF instructions (size of array)
> + *
> + * @param[in] lincense
> + *   License string that must be acknowledged by the kernel
> + *
> + * @return
> + *   -1 if the BPF program couldn't be loaded, fd (file descriptor) otherwise
> + */
> +static int bpf_load(enum bpf_prog_type type,
> +		  const struct bpf_insn *insns,
> +		  size_t insns_cnt,
> +		  const char *license)
> +{
> +	union bpf_attr attr;
> +
> +	bzero(&attr, sizeof(attr));
> +	attr.prog_type = type;
> +	attr.insn_cnt = (__u32)insns_cnt;
> +	attr.insns = ptr_to_u64(insns);
> +	attr.license = ptr_to_u64(license);
> +	attr.log_buf = ptr_to_u64(NULL);
> +	attr.log_level = 0;
> +	attr.kern_version = 0;
> +
> +	return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
> +}
> diff --git a/drivers/net/tap/tap_bpf_program.c b/drivers/net/tap/tap_bpf_program.c
> new file mode 100644
> index 0000000..08bc881
> --- /dev/null
> +++ b/drivers/net/tap/tap_bpf_program.c
> @@ -0,0 +1,221 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * 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 <linux/bpf.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 1, to distinguish packets that have
> + * gone through this rule (skb->cb[1] != 0) from others.
> + */
> +#define QUEUE_OFFSET		1
> +#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
> +match_q(struct __sk_buff *skb)
> +{
> +	__u32 queue = skb->cb[1];
> +	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;
> +	return TC_ACT_UNSPEC;
> +}
> +
> +
> +struct ipv4_l3_l4_tuple {
> +	__u32    src_addr;
> +	__u32    dst_addr;
> +	__u16    dport;
> +	__u16    sport;
> +} __attribute__((packed));
> +
> +struct ipv6_l3_l4_tuple {
> +	__u8        src_addr[16];
> +	__u8        dst_addr[16];
> +	__u16       dport;
> +	__u16       sport;
> +} __attribute__((packed));
> +
> +static const __u8 def_rss_key[] = {
> +	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)
> +{
> +	__u32 i, j, hash = 0;
> +#pragma unroll
> +	for (j = 0; j < input_len; j++) {
> +#pragma unroll
> +		for (i = 0; i < 32; i++) {
> +			if (input_tuple[j] & (1 << (31 - i))) {
> +				hash ^= ((const __u32 *)def_rss_key)[j] << i |
> +				(__u32)((uint64_t)
> +				(((const __u32 *)def_rss_key)[j + 1])
> +					>> (32 - i));
> +			}
> +		}
> +	}
> +	return hash;
> +}
> +
> +static 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;
> +	__u32 key_idx = 0xdeadbeef;
> +	__u32 hash;
> +	struct rss_key *rsskey;
> +	__u64 off = ETH_HLEN;
> +	int j;
> +	__u8 *key = 0;
> +	__u32 len;
> +	__u32 queue = 0;
> +
> +	rsskey = map_lookup_elem(&map_keys, &key_idx);
> +	if (!rsskey) {
> +		printt("hash(): rss key is not configured\n");
> +		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 *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 = PORT(*(src_dst_port + 0),
> +					*(src_dst_port + 1)),
> +			.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);
> +		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));
> +		v6_tuple.sport = PORT(*(src_dst_port + 0),
> +			      *(src_dst_port + 1));
> +		v6_tuple.dport = PORT(*(src_dst_port + 2),
> +			      *(src_dst_port + 3));
> +
> +		__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;
> +	}
> +
> +	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); */
> +
> +	return TC_ACT_RECLASSIFY;
> +}
> +
> +#define RSS(L)						\
> +	__section(#L) int				\
> +		L ## _hash(struct __sk_buff *skb)	\
> +	{						\
> +		return rss_ ## L (skb);			\
> +	}
> +
> +RSS(l3_l4)
> +
> +BPF_LICENSE("Dual BSD/GPL");
> diff --git a/drivers/net/tap/tap_flow.h b/drivers/net/tap/tap_flow.h
> index 9e332b0..6cc01b4 100644
> --- a/drivers/net/tap/tap_flow.h
> +++ b/drivers/net/tap/tap_flow.h
> @@ -50,6 +50,8 @@
>  #define GROUP_SHIFT 12
>  #define MAX_GROUP GROUP_MASK
>  
> +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
> +
>  /**
>   * These index are actually in reversed order: their priority is processed
>   * by subtracting their value to the lowest priority (PRIORITY_MASK).
> @@ -80,4 +82,7 @@ int tap_flow_implicit_destroy(struct pmd_internals *pmd,
>  int tap_flow_implicit_flush(struct pmd_internals *pmd,
>  			    struct rte_flow_error *error);
>  
> +int tap_flow_bpf_cls_q(__u32 queue_idx);
> +int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd);
> +
>  #endif /* _TAP_FLOW_H_ */
  
Ophir Munk Jan. 10, 2018, 10:12 a.m. UTC | #2
Hi Pascal,
Please see inline

> -----Original Message-----

> From: Pascal Mazon [mailto:pascal.mazon@6wind.com]

> Sent: Wednesday, January 10, 2018 11:35 AM

> To: Ophir Munk <ophirmu@mellanox.com>; dev@dpdk.org

> Cc: Thomas Monjalon <thomas@monjalon.net>; Olga Shern

> <olgas@mellanox.com>

> Subject: Re: [PATCH v3 1/2] net/tap: add eBPF instructions to TAP device

> 

> Hi Ophir,

> 

> I have a few remarks.

> 

> - Why do you define ARRAY_SIZE in tap_flow.h while it's used only in

> tap_bpf_insns.c?

> 


ARRAY_SIZE is not defined only in tap_bpf_insns.c. 
Please note ARRAY_SIZE is used several times in tap_flow.c as well.

> - I really dislike having the BPF bytecode hardcoded in tap_bpf_insns.c.

>   You don't provide the commands used to generate that bytecode.

>   And you don't provide the way to translate bytecode into these insns[]

> arrays.

>   So we're just supposed to trust that these instructions are indeed

> what they pretend to be.

>   The process is not repeatable nor verifiable.

> 


Please note that file tap_bpf_program.c is the C source code for the bytecode.

The plan for next release (18.05) is:
1. Ask the user to install clang version 3.7 in order to compile the C source into BPF assembly object file
2. Supply a tool that will generate the bytecode from the object file
3. Advanced option: use the generated bytecode to transparently compile TAP PMD

If a user is reluctant to install clang 3.7 he has the option to compile TAP PMD without external tool dependency.
For this release please confirm the bytecode alone without the tool (expected in next release)

> 

> On 10/01/2018 08:06, Ophir Munk wrote:

> > TAP PMD is required to support RSS queue mapping based on rte_flow API.

> An

> > example usage for this requirement is failsafe transparent switching from a

> > PCI device to TAP device while keep redirecting packets to the same RSS

> > queues on both devices.

> >

> > TAP RSS implementation is based on eBPF programs sent to Linux kernel

> > through BPF system calls and using netlink messages to reference the

> > programs as part of traffic control commands.

> >

> > An eBPF program acts as a traffic control classifier or action. Each

> > program is written in C code under a different ELF section name. Clang 3.7

> > is used to compile the C code into eBPF-formatted object file. The ELF file

> > is parsed and its sections (programs) can be downloaded to the kernel using

> > BPF system call. The BPF system call parameters contain the array of eBPF

> > instructions. This commit includes BPF classifier and action programs

> > (tap_bpf_program.c) as reference and their corresponding arrays of eBPF

> > instructions (tap_bpf_insns.c). The reference file does not take part in

> > dpdk compilation. The details on how to generate new eBPF code will be

> > presented in another commit.

> >

> > In a follow up commit TAP PMD will use the eBPF programs to implement

> RSS

> > flow rules.

> >

> > TAP eBPF requires Linux version 4.9 configured with BPF. TAP PMD will

> > successfully compile on systems with old or non-BPF configured kernels but

> > RSS rules creation on TAP devices will not be supported.

> >

> > Signed-off-by: Ophir Munk <ophirmu@mellanox.com>

> > ---

> >  drivers/net/tap/Makefile          |   11 +

> >  drivers/net/tap/tap_bpf.h         |   96 ++

> >  drivers/net/tap/tap_bpf_insns.c   | 1845

> +++++++++++++++++++++++++++++++++++++

> >  drivers/net/tap/tap_bpf_program.c |  221 +++++

> >  drivers/net/tap/tap_flow.h        |    5 +

> >  5 files changed, 2178 insertions(+)

> >  create mode 100644 drivers/net/tap/tap_bpf.h

> >  create mode 100644 drivers/net/tap/tap_bpf_insns.c

> >  create mode 100644 drivers/net/tap/tap_bpf_program.c

> >

> > diff --git a/drivers/net/tap/Makefile b/drivers/net/tap/Makefile

> > index fd4195f..feaa5b7 100644

> > --- a/drivers/net/tap/Makefile

> > +++ b/drivers/net/tap/Makefile

> > @@ -12,6 +12,9 @@ EXPORT_MAP := rte_pmd_tap_version.map

> >

> >  LIBABIVER := 1

> >

> > +# TAP_MAX_QUEUES must be a power of 2 as it will be used for masking

> */

> > +TAP_MAX_QUEUES = 16

> > +

> >  CFLAGS += -O3

> >  CFLAGS += -I$(SRCDIR)

> >  CFLAGS += -I.

> > @@ -20,6 +23,8 @@ LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -

> lrte_ring

> >  LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs -lrte_hash

> >  LDLIBS += -lrte_bus_vdev

> >

> > +CFLAGS += -DTAP_MAX_QUEUES=$(TAP_MAX_QUEUES)

> > +

> >  #

> >  # all source are stored in SRCS-y

> >  #

> > @@ -27,6 +32,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) +=

> rte_eth_tap.c

> >  SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_flow.c

> >  SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_netlink.c

> >  SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_tcmsgs.c

> > +SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_bpf_insns.c

> >

> >  include $(RTE_SDK)/mk/rte.lib.mk

> >

> > @@ -53,6 +59,11 @@ tap_autoconf.h.new: $(RTE_SDK)/buildtools/auto-

> config-h.sh

> >  		linux/pkt_cls.h \

> >  		enum TCA_FLOWER_KEY_VLAN_PRIO \

> >  		$(AUTOCONF_OUTPUT)

> > +	$Q sh -- '$<' '$@' \

> > +		HAVE_BPF_PROG_LOAD \

> > +		linux/bpf.h \

> > +		enum BPF_PROG_LOAD \

> > +		$(AUTOCONF_OUTPUT)

> >

> >  # Create tap_autoconf.h or update it in case it differs from the new one.

> >

> > diff --git a/drivers/net/tap/tap_bpf.h b/drivers/net/tap/tap_bpf.h

> > new file mode 100644

> > index 0000000..82775b7

> > --- /dev/null

> > +++ b/drivers/net/tap/tap_bpf.h

> > @@ -0,0 +1,96 @@

> > +/* SPDX-License-Identifier: BSD-3-Clause

> > + * Copyright 2017 Mellanox Technologies, Ltd.

> > + */

> > +

> > +#ifndef __TAP_BPF_H__

> > +#define __TAP_BPF_H__

> > +

> > +#include <tap_autoconf.h>

> > +

> > +#ifdef HAVE_BPF_PROG_LOAD

> > +#include <linux/bpf.h>

> > +#else

> > +/* BPF_MAP_UPDATE_ELEM command flags */

> > +#define	BPF_ANY	0 /* create a new element or update an

> existing */

> > +

> > +/* BPF architecture instruction struct */

> > +struct bpf_insn {

> > +	__u8	code;

> > +	__u8	dst_reg:4;

> > +	__u8	src_reg:4;

> > +	__s16	off;

> > +	__s32	imm; /* immediate value */

> > +};

> > +

> > +/* BPF program types */

> > +enum bpf_prog_type {

> > +	BPF_PROG_TYPE_UNSPEC,

> > +	BPF_PROG_TYPE_SOCKET_FILTER,

> > +	BPF_PROG_TYPE_KPROBE,

> > +	BPF_PROG_TYPE_SCHED_CLS,

> > +	BPF_PROG_TYPE_SCHED_ACT,

> > +};

> > +

> > +/* BPF commands types */

> > +enum bpf_cmd {

> > +	BPF_MAP_CREATE,

> > +	BPF_MAP_LOOKUP_ELEM,

> > +	BPF_MAP_UPDATE_ELEM,

> > +	BPF_MAP_DELETE_ELEM,

> > +	BPF_MAP_GET_NEXT_KEY,

> > +	BPF_PROG_LOAD,

> > +};

> > +

> > +/* BPF maps types */

> > +enum bpf_map_type {

> > +	BPF_MAP_TYPE_UNSPEC,

> > +	BPF_MAP_TYPE_HASH,

> > +};

> > +

> > +/* union of anonymous structs used with TAP BPF commands */

> > +union bpf_attr {

> > +	/* BPF_MAP_CREATE command */

> > +	struct {

> > +		__u32	map_type;

> > +		__u32	key_size;

> > +		__u32	value_size;

> > +		__u32	max_entries;

> > +		__u32	map_flags;

> > +		__u32	inner_map_fd;

> > +	};

> > +

> > +	/* BPF_MAP_UPDATE_ELEM, BPF_MAP_DELETE_ELEM commands

> */

> > +	struct {

> > +		__u32		map_fd;

> > +		__aligned_u64	key;

> > +		union {

> > +			__aligned_u64 value;

> > +			__aligned_u64 next_key;

> > +		};

> > +		__u64		flags;

> > +	};

> > +

> > +	/* BPF_PROG_LOAD command */

> > +	struct {

> > +		__u32		prog_type;

> > +		__u32		insn_cnt;

> > +		__aligned_u64	insns;

> > +		__aligned_u64	license;

> > +		__u32		log_level;

> > +		__u32		log_size;

> > +		__aligned_u64	log_buf;

> > +		__u32		kern_version;

> > +		__u32		prog_flags;

> > +	};

> > +} __attribute__((aligned(8)));

> > +#endif

> > +

> > +enum {

> > +	BPF_MAP_ID_KEY,

> > +	BPF_MAP_ID_SIMPLE,

> > +};

> > +

> > +static int bpf_load(enum bpf_prog_type type, const struct bpf_insn *insns,

> > +		size_t insns_cnt, const char *license);

> > +

> > +#endif /* __TAP_BPF_H__ */

> > diff --git a/drivers/net/tap/tap_bpf_insns.c

> b/drivers/net/tap/tap_bpf_insns.c

> > new file mode 100644

> > index 0000000..25aa82c

> > --- /dev/null

> > +++ b/drivers/net/tap/tap_bpf_insns.c

> > @@ -0,0 +1,1845 @@

> > +/* SPDX-License-Identifier: BSD-3-Clause

> > + * Copyright 2017 Mellanox Technologies, Ltd.

> > + */

> > +

> > +#include <errno.h>

> > +#include <string.h>

> > +#include <unistd.h>

> > +#include <sys/queue.h>

> > +#include <sys/mount.h>

> > +

> > +#include <rte_byteorder.h>

> > +#include <rte_jhash.h>

> > +#include <rte_malloc.h>

> > +#include <rte_eth_tap.h>

> > +#include <tap_flow.h>

> > +#include <tap_autoconf.h>

> > +#include <tap_tcmsgs.h>

> > +#include <tap_bpf.h>

> > +

> > +#define ERROR                   0

> > +

> > +/*

> > + * The queue number is offset by 1, to distinguish packets that have

> > + * gone through this rule (skb->cb[1] != 0) from others.

> > + */

> > +#define QUEUE_OFFSET 1

> > +

> > +/* bpf_insn array matching cls_q section. See tap_bpf_program.c file */

> > +static struct bpf_insn cls_q_insns[] = {

> > +	{0x61,    1,    1,       52, 0x00000000},

> > +	{0x18,    2,    0,        0, 0xdeadbeef},

> > +	{0x00,    0,    0,        0, 0x00000000},

> > +	{0x63,   10,    2,       -4, 0x00000000},

> > +	{0x61,    2,   10,       -4, 0x00000000},

> > +	{0x07,    2,    0,        0, 0x00000001},

> > +	{0x67,    2,    0,        0, 0x00000020},

> > +	{0x77,    2,    0,        0, 0x00000020},

> > +	{0xb7,    0,    0,        0, 0xffffffff},

> > +	{0x1d,    1,    2,        1, 0x00000000},

> > +	{0xb7,    0,    0,        0, 0x00000000},

> > +	{0x95,    0,    0,        0, 0x00000000},

> > +};

> > +

> > +/**

> > + * Load BPF program (section cls_q) into the kernel and return a bpf fd

> > + *

> > + * @param queue_idx

> > + *   Queue index matching packet cb

> > + *

> > + * @return

> > + *   -1 if the BPF program couldn't be loaded. An fd (int) otherwise.

> > + */

> > +int tap_flow_bpf_cls_q(__u32 queue_idx)

> > +{

> > +	cls_q_insns[1].imm = queue_idx;

> > +

> > +	return bpf_load(BPF_PROG_TYPE_SCHED_CLS,

> > +		(struct bpf_insn *)cls_q_insns,

> > +		ARRAY_SIZE(cls_q_insns),

> > +		"Dual BSD/GPL");

> > +}

> > +

> > +/* bpf_insn array matching l3_l4 section. see tap_bpf_program.c file */

> > +static struct bpf_insn l3_l4_hash_insns[] = {

> > +	{0xbf,    7,    1,        0, 0x00000000},

> > +	{0x61,    8,    7,       16, 0x00000000},

> > +	{0x61,    6,    7,       76, 0x00000000},

> > +	{0x61,    9,    7,       80, 0x00000000},

> > +	{0x18,    1,    0,        0, 0xdeadbeef},

> > +	{0x00,    0,    0,        0, 0x00000000},

> > +	{0x63,   10,    1,       -4, 0x00000000},

> > +	{0xbf,    2,   10,        0, 0x00000000},

> > +	{0x07,    2,    0,        0, 0xfffffffc},

> > +	{0x18,    1,    1,        0, 0x0000cafe},

> > +	{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,     1632, 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,    6,        0, 0x00000000},

> > +	{0x07,    1,    0,        0, 0x00000012},

> > +	{0x2d,    1,    9,     1622, 0x00000000},

> > +	{0xb7,    1,    0,        0, 0x00000012},

> > +	{0x69,    8,    6,       16, 0x00000000},

> > +	{0xbf,    7,    2,        0, 0x00000000},

> > +	{0x7b,   10,    7,      -56, 0x00000000},

> > +	{0x57,    8,    0,        0, 0x0000ffff},

> > +	{0x15,    8,    0,      409, 0x0000dd86},

> > +	{0xb7,    7,    0,        0, 0x00000003},

> > +	{0x55,    8,    0,     1614, 0x00000008},

> > +	{0x0f,    6,    1,        0, 0x00000000},

> > +	{0xb7,    7,    0,        0, 0x00000000},

> > +	{0xbf,    1,    6,        0, 0x00000000},

> > +	{0x07,    1,    0,        0, 0x00000018},

> > +	{0x2d,    1,    9,     1609, 0x00000000},

> > +	{0x71,    3,    6,       12, 0x00000000},

> > +	{0xbf,    1,    3,        0, 0x00000000},

> > +	{0x67,    1,    0,        0, 0x00000038},

> > +	{0xc7,    1,    0,        0, 0x00000020},

> > +	{0x77,    1,    0,        0, 0x0000001f},

> > +	{0x57,    1,    0,        0, 0x2cc681d1},

> > +	{0x67,    3,    0,        0, 0x00000018},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x40000000},

> > +	{0xb7,    2,    0,        0, 0x00000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x598d03a2},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x20000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb31a0745},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x10000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x66340e8a},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x08000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xcc681d15},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x04000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x98d03a2b},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x02000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x31a07456},

> > +	{0x57,    3,    0,        0, 0x01000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6340e8ad},

> > +	{0x71,    3,    6,       13, 0x00000000},

> > +	{0x67,    3,    0,        0, 0x00000010},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00800000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc681d15b},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00400000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8d03a2b7},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00200000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1a07456f},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00100000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x340e8ade},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00080000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x681d15bd},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00040000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd03a2b7b},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00020000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa07456f6},

> > +	{0x57,    3,    0,        0, 0x00010000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x40e8aded},

> > +	{0x71,    3,    6,       14, 0x00000000},

> > +	{0x67,    3,    0,        0, 0x00000008},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00008000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x81d15bdb},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00004000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x03a2b7b7},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00002000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x07456f6f},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00001000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x0e8adedf},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000800},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1d15bdbf},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000400},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3a2b7b7e},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000200},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7456f6fd},

> > +	{0x57,    3,    0,        0, 0x00000100},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe8adedfa},

> > +	{0x71,    3,    6,       15, 0x00000000},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000080},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd15bdbf4},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000040},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa2b7b7e9},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000020},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x456f6fd3},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000010},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8adedfa7},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000008},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x15bdbf4f},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000004},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x2b7b7e9e},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000002},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x56f6fd3d},

> > +	{0x57,    3,    0,        0, 0x00000001},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xadedfa7b},

> > +	{0x71,    4,    6,       16, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000038},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0xb7,    3,    0,        0, 0xffffffff},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x5bdbf4f7},

> > +	{0x67,    4,    0,        0, 0x00000018},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb7b7e9ef},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6f6fd3df},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdedfa7bf},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xbdbf4f7f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7b7e9eff},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf6fd3dff},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xedfa7bfe},

> > +	{0x71,    4,    6,       17, 0x00000000},

> > +	{0x67,    4,    0,        0, 0x00000010},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00800000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdbf4f7fc},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00400000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb7e9eff9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00200000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6fd3dff2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00100000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdfa7bfe5},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00080000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xbf4f7fca},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00040000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7e9eff94},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00020000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfd3dff28},

> > +	{0x57,    4,    0,        0, 0x00010000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfa7bfe51},

> > +	{0x71,    4,    6,       18, 0x00000000},

> > +	{0x67,    4,    0,        0, 0x00000008},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00008000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf4f7fca2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00004000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe9eff945},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00002000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd3dff28a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00001000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa7bfe514},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000800},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x4f7fca28},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000400},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9eff9450},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000200},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3dff28a0},

> > +	{0x57,    4,    0,        0, 0x00000100},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7bfe5141},

> > +	{0x71,    4,    6,       19, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000080},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf7fca283},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000040},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xeff94506},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000020},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdff28a0c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000010},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xbfe51418},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000008},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7fca2831},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000004},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xff945063},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000002},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xff28a0c6},

> > +	{0x57,    4,    0,        0, 0x00000001},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfe51418c},

> > +	{0x71,    4,    6,       20, 0x00000000},

> > +	{0x67,    4,    0,        0, 0x00000008},

> > +	{0x71,    5,    6,       21, 0x00000000},

> > +	{0x4f,    4,    5,        0, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000030},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfca28319},

> > +	{0x67,    4,    0,        0, 0x00000010},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x40000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf9450633},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x20000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf28a0c67},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x10000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe51418ce},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x08000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xca28319d},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x04000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9450633b},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x02000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x28a0c676},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x01000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x51418ced},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00800000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa28319db},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00400000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x450633b6},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00200000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8a0c676c},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00100000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1418ced8},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00080000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x28319db1},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00040000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x50633b63},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00020000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa0c676c6},

> > +	{0x57,    4,    0,        0, 0x00010000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x418ced8d},

> > +	{0x71,    3,    6,       22, 0x00000000},

> > +	{0x67,    3,    0,        0, 0x00000008},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00008000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8319db1a},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00004000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x0633b634},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00002000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x0c676c68},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00001000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x18ced8d1},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000800},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x319db1a3},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000400},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x633b6347},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000200},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc676c68f},

> > +	{0x57,    3,    0,        0, 0x00000100},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8ced8d1f},

> > +	{0x71,    3,    6,       23, 0x00000000},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000080},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x19db1a3e},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000040},

> > +	{0x79,    5,   10,      -56, 0x00000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x33b6347d},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000020},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x676c68fa},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000010},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xced8d1f4},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000008},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9db1a3e9},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000004},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3b6347d2},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000002},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x76c68fa5},

> > +	{0x57,    3,    0,        0, 0x00000001},

> > +	{0x1d,    3,    2,     1177, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xed8d1f4a},

> > +	{0x05,    0,    0,     1175, 0x00000000},

> > +	{0x0f,    6,    1,        0, 0x00000000},

> > +	{0xb7,    7,    0,        0, 0x00000000},

> > +	{0xbf,    1,    6,        0, 0x00000000},

> > +	{0x07,    1,    0,        0, 0x0000002c},

> > +	{0x2d,    1,    9,     1202, 0x00000000},

> > +	{0x61,    4,    6,        8, 0x00000000},

> > +	{0xbf,    1,    4,        0, 0x00000000},

> > +	{0x67,    1,    0,        0, 0x00000038},

> > +	{0xc7,    1,    0,        0, 0x00000020},

> > +	{0x77,    1,    0,        0, 0x0000001f},

> > +	{0x57,    1,    0,        0, 0x2cc681d1},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000040},

> > +	{0xb7,    2,    0,        0, 0x00000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x598d03a2},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000020},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb31a0745},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000010},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x66340e8a},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000008},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xcc681d15},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000004},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x98d03a2b},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000002},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x31a07456},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000001},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6340e8ad},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00008000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc681d15b},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00004000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8d03a2b7},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00002000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1a07456f},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00001000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x340e8ade},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000800},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x681d15bd},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000400},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd03a2b7b},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000200},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa07456f6},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00000100},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x40e8aded},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00800000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x81d15bdb},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00400000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x03a2b7b7},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00200000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x07456f6f},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00100000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x0e8adedf},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00080000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1d15bdbf},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00040000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3a2b7b7e},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00020000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7456f6fd},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00010000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe8adedfa},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000020},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0xb7,    3,    0,        0, 0xffffffff},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd15bdbf4},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa2b7b7e9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x456f6fd3},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8adedfa7},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x15bdbf4f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x2b7b7e9e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x56f6fd3d},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xadedfa7b},

> > +	{0x61,    4,    6,       12, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000080},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x5bdbf4f7},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000040},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb7b7e9ef},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000020},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6f6fd3df},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000010},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdedfa7bf},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000008},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xbdbf4f7f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000004},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7b7e9eff},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000002},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf6fd3dff},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000001},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xedfa7bfe},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00008000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdbf4f7fc},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00004000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb7e9eff9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00002000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6fd3dff2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00001000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdfa7bfe5},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000800},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xbf4f7fca},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000400},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7e9eff94},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000200},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfd3dff28},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000100},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfa7bfe51},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00800000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf4f7fca2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00400000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe9eff945},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00200000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd3dff28a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00100000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa7bfe514},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00080000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x4f7fca28},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00040000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9eff9450},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00020000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3dff28a0},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00010000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7bfe5141},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000020},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf7fca283},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xeff94506},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdff28a0c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xbfe51418},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7fca2831},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xff945063},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xff28a0c6},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfe51418c},

> > +	{0x61,    4,    6,       16, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000080},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfca28319},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000040},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf9450633},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000020},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf28a0c67},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000010},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe51418ce},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000008},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xca28319d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000004},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9450633b},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000002},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x28a0c676},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000001},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x51418ced},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00008000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa28319db},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00004000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x450633b6},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00002000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8a0c676c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00001000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1418ced8},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000800},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x28319db1},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000400},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x50633b63},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000200},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa0c676c6},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000100},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x418ced8d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00800000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8319db1a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00400000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x0633b634},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00200000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x0c676c68},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00100000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x18ced8d1},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00080000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x319db1a3},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00040000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x633b6347},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00020000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc676c68f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00010000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8ced8d1f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000020},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x19db1a3e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x33b6347d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x676c68fa},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xced8d1f4},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9db1a3e9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3b6347d2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x76c68fa5},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xed8d1f4a},

> > +	{0x61,    4,    6,       20, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000080},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xdb1a3e94},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000040},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb6347d28},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000020},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6c68fa51},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000010},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd8d1f4a3},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000008},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb1a3e946},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000004},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6347d28d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000002},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc68fa51a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000001},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8d1f4a35},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00008000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1a3e946b},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00004000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x347d28d7},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00002000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x68fa51ae},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00001000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd1f4a35c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000800},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa3e946b9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000400},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x47d28d73},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000200},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8fa51ae7},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000100},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1f4a35cf},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00800000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3e946b9e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00400000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7d28d73c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00200000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfa51ae78},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00100000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf4a35cf1},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00080000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe946b9e3},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00040000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd28d73c7},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00020000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa51ae78e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00010000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x4a35cf1c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000020},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x946b9e38},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x28d73c71},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x51ae78e3},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa35cf1c6},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x46b9e38d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8d73c71b},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1ae78e36},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x35cf1c6c},

> > +	{0x61,    4,    6,       24, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000080},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6b9e38d9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000040},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd73c71b2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000020},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xae78e364},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000010},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x5cf1c6c9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000008},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb9e38d92},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000004},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x73c71b25},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000002},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe78e364b},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000001},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xcf1c6c96},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00008000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9e38d92c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00004000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3c71b259},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00002000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x78e364b2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00001000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf1c6c964},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000800},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe38d92c9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000400},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc71b2593},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000200},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8e364b27},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000100},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1c6c964e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00800000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x38d92c9c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00400000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x71b25938},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00200000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe364b270},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00100000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc6c964e0},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00080000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8d92c9c0},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00040000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1b259380},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00020000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x364b2700},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00010000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6c964e01},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000020},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd92c9c03},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb2593807},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x64b2700f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc964e01e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x92c9c03d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x2593807a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x4b2700f4},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x964e01e8},

> > +	{0x61,    4,    6,       28, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000080},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x2c9c03d1},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000040},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x593807a3},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000020},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb2700f46},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000010},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x64e01e8d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000008},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc9c03d1a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000004},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x93807a35},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000002},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x2700f46b},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000001},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x4e01e8d6},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00008000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9c03d1ad},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00004000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3807a35b},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00002000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x700f46b6},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00001000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe01e8d6c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000800},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc03d1ad9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000400},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x807a35b3},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000200},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x00f46b66},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000100},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x01e8d6cc},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00800000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x03d1ad99},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00400000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x07a35b32},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00200000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x0f46b665},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00100000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1e8d6cca},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00080000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3d1ad994},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00040000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7a35b328},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00020000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf46b6651},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00010000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe8d6cca2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000020},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd1ad9944},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa35b3289},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x46b66512},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8d6cca25},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1ad9944a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x35b32894},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6b665129},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd6cca253},

> > +	{0x61,    4,    6,       32, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000080},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xad9944a7},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000040},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x5b32894f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000020},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb665129f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000010},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6cca253e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000008},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd9944a7d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000004},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb32894fb},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000002},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x665129f6},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000001},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xcca253ec},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00008000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9944a7d9},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00004000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x32894fb2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00002000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x65129f65},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00001000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xca253eca},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000800},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x944a7d95},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000400},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x2894fb2a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000200},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x5129f655},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000100},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa253ecab},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00800000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x44a7d956},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00400000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x894fb2ac},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00200000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x129f6558},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00100000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x253ecab1},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00080000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x4a7d9563},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00040000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x94fb2ac7},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00020000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x29f6558f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00010000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x53ecab1e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000020},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xa7d9563d},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x4fb2ac7a},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9f6558f5},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3ecab1ea},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7d9563d5},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfb2ac7ab},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf6558f56},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xecab1eac},

> > +	{0x61,    4,    6,       36, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000080},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd9563d59},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000040},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb2ac7ab2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000020},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6558f564},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000010},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xcab1eac8},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000008},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9563d590},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000004},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x2ac7ab20},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000002},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x558f5641},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000001},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xab1eac83},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00008000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x563d5906},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00004000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xac7ab20c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00002000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x58f56418},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00001000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb1eac831},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000800},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x63d59063},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000400},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc7ab20c7},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000200},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8f56418f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00000100},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1eac831e},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00800000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3d59063c},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00400000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7ab20c78},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00200000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf56418f0},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00100000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xeac831e1},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00080000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xd59063c2},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00040000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xab20c784},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00020000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x56418f09},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x00010000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xac831e12},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000020},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x59063c25},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x40000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xb20c784b},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x20000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x6418f097},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x10000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc831e12f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x08000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9063c25f},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x04000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x20c784be},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x57,    5,    0,        0, 0x02000000},

> > +	{0x1d,    5,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x418f097c},

> > +	{0x57,    4,    0,        0, 0x01000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x831e12f9},

> > +	{0x71,    4,    6,       40, 0x00000000},

> > +	{0x67,    4,    0,        0, 0x00000008},

> > +	{0x71,    5,    6,       41, 0x00000000},

> > +	{0x4f,    4,    5,        0, 0x00000000},

> > +	{0xbf,    5,    4,        0, 0x00000000},

> > +	{0x67,    5,    0,        0, 0x00000030},

> > +	{0xc7,    5,    0,        0, 0x00000020},

> > +	{0x6d,    5,    3,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x063c25f3},

> > +	{0x67,    4,    0,        0, 0x00000010},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x40000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x0c784be7},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x20000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x18f097cf},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x10000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x31e12f9f},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x08000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x63c25f3f},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x04000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc784be7f},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x02000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x8f097cff},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x01000000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x1e12f9fe},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00800000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3c25f3fc},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00400000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x784be7f8},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00200000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf097cff0},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00100000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe12f9fe0},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00080000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xc25f3fc1},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00040000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x84be7f83},

> > +	{0xbf,    3,    4,        0, 0x00000000},

> > +	{0x57,    3,    0,        0, 0x00020000},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x097cff07},

> > +	{0x57,    4,    0,        0, 0x00010000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x12f9fe0f},

> > +	{0x71,    3,    6,       42, 0x00000000},

> > +	{0x67,    3,    0,        0, 0x00000008},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00008000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x25f3fc1f},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00004000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x4be7f83f},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00002000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x97cff07f},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00001000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x2f9fe0fe},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000800},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x5f3fc1fd},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000400},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xbe7f83fb},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000200},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7cff07f7},

> > +	{0x57,    3,    0,        0, 0x00000100},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf9fe0fee},

> > +	{0x71,    3,    6,       43, 0x00000000},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000080},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xf3fc1fdc},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000040},

> > +	{0x79,    5,   10,      -56, 0x00000000},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xe7f83fb8},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000020},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xcff07f70},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000010},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x9fe0fee1},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000008},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x3fc1fdc2},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000004},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0x7f83fb85},

> > +	{0xbf,    4,    3,        0, 0x00000000},

> > +	{0x57,    4,    0,        0, 0x00000002},

> > +	{0x1d,    4,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xff07f70a},

> > +	{0x57,    3,    0,        0, 0x00000001},

> > +	{0x1d,    3,    2,        1, 0x00000000},

> > +	{0xa7,    1,    0,        0, 0xfe0fee15},

> > +	{0x71,    2,    0,      201, 0x00000000},

> > +	{0x67,    2,    0,        0, 0x00000008},

> > +	{0x71,    3,    0,      200, 0x00000000},

> > +	{0x4f,    2,    3,        0, 0x00000000},

> > +	{0x71,    3,    0,      203, 0x00000000},

> > +	{0x67,    3,    0,        0, 0x00000008},

> > +	{0x71,    4,    0,      202, 0x00000000},

> > +	{0x4f,    3,    4,        0, 0x00000000},

> > +	{0x67,    3,    0,        0, 0x00000010},

> > +	{0x4f,    3,    2,        0, 0x00000000},

> > +	{0x67,    1,    0,        0, 0x00000020},

> > +	{0x77,    1,    0,        0, 0x00000020},

> > +	{0xbf,    2,    1,        0, 0x00000000},

> > +	{0x3f,    2,    3,        0, 0x00000000},

> > +	{0x2f,    2,    3,        0, 0x00000000},

> > +	{0x1f,    1,    2,        0, 0x00000000},

> > +	{0x57,    1,    0,        0, 0x0000000f},

> > +	{0x67,    1,    0,        0, 0x00000002},

> > +	{0x0f,    0,    1,        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},

> > +	{0x71,    3,    0,      139, 0x00000000},

> > +	{0x67,    3,    0,        0, 0x00000008},

> > +	{0x4f,    3,    2,        0, 0x00000000},

> > +	{0x67,    3,    0,        0, 0x00000010},

> > +	{0x4f,    3,    1,        0, 0x00000000},

> > +	{0x07,    3,    0,        0, 0x00000001},

> > +	{0x63,    5,    3,       52, 0x00000000},

> > +	{0xb7,    7,    0,        0, 0x00000001},

> > +	{0xbf,    0,    7,        0, 0x00000000},

> > +	{0x95,    0,    0,        0, 0x00000000},

> > +};

> > +

> > +/**

> > + * Load BPF program (section l3_l4) into the kernel and return a bpf fd.

> > + *

> > + * @param[in] key_idx

> > + *   RSS MAP key index

> > + *

> > + * @param[in] map_fd

> > + *   BPF RSS map file descriptor

> > + *

> > + * @return

> > + *   -1 if the BPF program couldn't be loaded. An fd (int) otherwise.

> > + */

> > +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;

> > +

> > +	return bpf_load(BPF_PROG_TYPE_SCHED_ACT,

> > +		(struct bpf_insn *)l3_l4_hash_insns,

> > +		ARRAY_SIZE(l3_l4_hash_insns),

> > +		"Dual BSD/GPL");

> > +}

> > +

> > +

> > +#ifndef __NR_bpf

> > +# if defined(__i386__)

> > +#  define __NR_bpf 357

> > +# elif defined(__x86_64__)

> > +#  define __NR_bpf 321

> > +# elif defined(__aarch64__)

> > +#  define __NR_bpf 280

> > +# elif defined(__sparc__)

> > +#  define __NR_bpf 349

> > +# elif defined(__s390__)

> > +#  define __NR_bpf 351

> > +# else

> > +#  error __NR_bpf not defined. libbpf does not support your arch.

> > +# endif

> > +#endif

> > +

> > +/**

> > + * Helper function to convert a pointer to unsigned 64 bits

> > + *

> > + * @param[in] ptr

> > + *   pointer to address

> > + *

> > + * @return

> > + *   64 bit unsigned long type of pointer address

> > + */

> > +static inline __u64 ptr_to_u64(const void *ptr)

> > +{

> > +	return (__u64)(unsigned long)ptr;

> > +}

> > +

> > +/**

> > + * Call BPF system call

> > + *

> > + * @param[in] cmd

> > + *   BPF command for program loading, map creation, map entry update,

> etc

> > + *

> > + * @param[in] attr

> > + *   System call attributes relevant to system call command

> > + *

> > + * @param[in] size

> > + *   size of attr parameter

> > + *

> > + * @return

> > + *   -1 if BPF system call failed, 0 otherwise

> > + */

> > +static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr,

> > +			unsigned int size)

> > +{

> > +	return syscall(__NR_bpf, cmd, attr, size);

> > +}

> > +

> > +/**

> > + * Load BPF instructions to kernel

> > + *

> > + * @param[in] type

> > + *   BPF program type: classifieir or action

> > + *

> > + * @param[in] insns

> > + *   Array of BPF instructions (equivalent to BPF instructions)

> > + *

> > + * @param[in] insns_cnt

> > + *   Number of BPF instructions (size of array)

> > + *

> > + * @param[in] lincense

> > + *   License string that must be acknowledged by the kernel

> > + *

> > + * @return

> > + *   -1 if the BPF program couldn't be loaded, fd (file descriptor) otherwise

> > + */

> > +static int bpf_load(enum bpf_prog_type type,

> > +		  const struct bpf_insn *insns,

> > +		  size_t insns_cnt,

> > +		  const char *license)

> > +{

> > +	union bpf_attr attr;

> > +

> > +	bzero(&attr, sizeof(attr));

> > +	attr.prog_type = type;

> > +	attr.insn_cnt = (__u32)insns_cnt;

> > +	attr.insns = ptr_to_u64(insns);

> > +	attr.license = ptr_to_u64(license);

> > +	attr.log_buf = ptr_to_u64(NULL);

> > +	attr.log_level = 0;

> > +	attr.kern_version = 0;

> > +

> > +	return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr));

> > +}

> > diff --git a/drivers/net/tap/tap_bpf_program.c

> b/drivers/net/tap/tap_bpf_program.c

> > new file mode 100644

> > index 0000000..08bc881

> > --- /dev/null

> > +++ b/drivers/net/tap/tap_bpf_program.c

> > @@ -0,0 +1,221 @@

> > +/* SPDX-License-Identifier: BSD-3-Clause

> > + * 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 <linux/bpf.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 1, to distinguish packets that have

> > + * gone through this rule (skb->cb[1] != 0) from others.

> > + */

> > +#define QUEUE_OFFSET		1

> > +#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

> > +match_q(struct __sk_buff *skb)

> > +{

> > +	__u32 queue = skb->cb[1];

> > +	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;

> > +	return TC_ACT_UNSPEC;

> > +}

> > +

> > +

> > +struct ipv4_l3_l4_tuple {

> > +	__u32    src_addr;

> > +	__u32    dst_addr;

> > +	__u16    dport;

> > +	__u16    sport;

> > +} __attribute__((packed));

> > +

> > +struct ipv6_l3_l4_tuple {

> > +	__u8        src_addr[16];

> > +	__u8        dst_addr[16];

> > +	__u16       dport;

> > +	__u16       sport;

> > +} __attribute__((packed));

> > +

> > +static const __u8 def_rss_key[] = {

> > +	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)

> > +{

> > +	__u32 i, j, hash = 0;

> > +#pragma unroll

> > +	for (j = 0; j < input_len; j++) {

> > +#pragma unroll

> > +		for (i = 0; i < 32; i++) {

> > +			if (input_tuple[j] & (1 << (31 - i))) {

> > +				hash ^= ((const __u32 *)def_rss_key)[j] << i |

> > +				(__u32)((uint64_t)

> > +				(((const __u32 *)def_rss_key)[j + 1])

> > +					>> (32 - i));

> > +			}

> > +		}

> > +	}

> > +	return hash;

> > +}

> > +

> > +static 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;

> > +	__u32 key_idx = 0xdeadbeef;

> > +	__u32 hash;

> > +	struct rss_key *rsskey;

> > +	__u64 off = ETH_HLEN;

> > +	int j;

> > +	__u8 *key = 0;

> > +	__u32 len;

> > +	__u32 queue = 0;

> > +

> > +	rsskey = map_lookup_elem(&map_keys, &key_idx);

> > +	if (!rsskey) {

> > +		printt("hash(): rss key is not configured\n");

> > +		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 *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 = PORT(*(src_dst_port + 0),

> > +					*(src_dst_port + 1)),

> > +			.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);

> > +		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));

> > +		v6_tuple.sport = PORT(*(src_dst_port + 0),

> > +			      *(src_dst_port + 1));

> > +		v6_tuple.dport = PORT(*(src_dst_port + 2),

> > +			      *(src_dst_port + 3));

> > +

> > +		__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;

> > +	}

> > +

> > +	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); */

> > +

> > +	return TC_ACT_RECLASSIFY;

> > +}

> > +

> > +#define RSS(L)						\

> > +	__section(#L) int				\

> > +		L ## _hash(struct __sk_buff *skb)	\

> > +	{						\

> > +		return rss_ ## L (skb);			\

> > +	}

> > +

> > +RSS(l3_l4)

> > +

> > +BPF_LICENSE("Dual BSD/GPL");

> > diff --git a/drivers/net/tap/tap_flow.h b/drivers/net/tap/tap_flow.h

> > index 9e332b0..6cc01b4 100644

> > --- a/drivers/net/tap/tap_flow.h

> > +++ b/drivers/net/tap/tap_flow.h

> > @@ -50,6 +50,8 @@

> >  #define GROUP_SHIFT 12

> >  #define MAX_GROUP GROUP_MASK

> >

> > +#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))

> > +

> >  /**

> >   * These index are actually in reversed order: their priority is processed

> >   * by subtracting their value to the lowest priority (PRIORITY_MASK).

> > @@ -80,4 +82,7 @@ int tap_flow_implicit_destroy(struct pmd_internals

> *pmd,

> >  int tap_flow_implicit_flush(struct pmd_internals *pmd,

> >  			    struct rte_flow_error *error);

> >

> > +int tap_flow_bpf_cls_q(__u32 queue_idx);

> > +int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd);

> > +

> >  #endif /* _TAP_FLOW_H_ */
  

Patch

diff --git a/drivers/net/tap/Makefile b/drivers/net/tap/Makefile
index fd4195f..feaa5b7 100644
--- a/drivers/net/tap/Makefile
+++ b/drivers/net/tap/Makefile
@@ -12,6 +12,9 @@  EXPORT_MAP := rte_pmd_tap_version.map
 
 LIBABIVER := 1
 
+# TAP_MAX_QUEUES must be a power of 2 as it will be used for masking */
+TAP_MAX_QUEUES = 16
+
 CFLAGS += -O3
 CFLAGS += -I$(SRCDIR)
 CFLAGS += -I.
@@ -20,6 +23,8 @@  LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
 LDLIBS += -lrte_ethdev -lrte_net -lrte_kvargs -lrte_hash
 LDLIBS += -lrte_bus_vdev
 
+CFLAGS += -DTAP_MAX_QUEUES=$(TAP_MAX_QUEUES)
+
 #
 # all source are stored in SRCS-y
 #
@@ -27,6 +32,7 @@  SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += rte_eth_tap.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_flow.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_netlink.c
 SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_tcmsgs.c
+SRCS-$(CONFIG_RTE_LIBRTE_PMD_TAP) += tap_bpf_insns.c
 
 include $(RTE_SDK)/mk/rte.lib.mk
 
@@ -53,6 +59,11 @@  tap_autoconf.h.new: $(RTE_SDK)/buildtools/auto-config-h.sh
 		linux/pkt_cls.h \
 		enum TCA_FLOWER_KEY_VLAN_PRIO \
 		$(AUTOCONF_OUTPUT)
+	$Q sh -- '$<' '$@' \
+		HAVE_BPF_PROG_LOAD \
+		linux/bpf.h \
+		enum BPF_PROG_LOAD \
+		$(AUTOCONF_OUTPUT)
 
 # Create tap_autoconf.h or update it in case it differs from the new one.
 
diff --git a/drivers/net/tap/tap_bpf.h b/drivers/net/tap/tap_bpf.h
new file mode 100644
index 0000000..82775b7
--- /dev/null
+++ b/drivers/net/tap/tap_bpf.h
@@ -0,0 +1,96 @@ 
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2017 Mellanox Technologies, Ltd.
+ */
+
+#ifndef __TAP_BPF_H__
+#define __TAP_BPF_H__
+
+#include <tap_autoconf.h>
+
+#ifdef HAVE_BPF_PROG_LOAD
+#include <linux/bpf.h>
+#else
+/* BPF_MAP_UPDATE_ELEM command flags */
+#define	BPF_ANY	0 /* create a new element or update an existing */
+
+/* BPF architecture instruction struct */
+struct bpf_insn {
+	__u8	code;
+	__u8	dst_reg:4;
+	__u8	src_reg:4;
+	__s16	off;
+	__s32	imm; /* immediate value */
+};
+
+/* BPF program types */
+enum bpf_prog_type {
+	BPF_PROG_TYPE_UNSPEC,
+	BPF_PROG_TYPE_SOCKET_FILTER,
+	BPF_PROG_TYPE_KPROBE,
+	BPF_PROG_TYPE_SCHED_CLS,
+	BPF_PROG_TYPE_SCHED_ACT,
+};
+
+/* BPF commands types */
+enum bpf_cmd {
+	BPF_MAP_CREATE,
+	BPF_MAP_LOOKUP_ELEM,
+	BPF_MAP_UPDATE_ELEM,
+	BPF_MAP_DELETE_ELEM,
+	BPF_MAP_GET_NEXT_KEY,
+	BPF_PROG_LOAD,
+};
+
+/* BPF maps types */
+enum bpf_map_type {
+	BPF_MAP_TYPE_UNSPEC,
+	BPF_MAP_TYPE_HASH,
+};
+
+/* union of anonymous structs used with TAP BPF commands */
+union bpf_attr {
+	/* BPF_MAP_CREATE command */
+	struct {
+		__u32	map_type;
+		__u32	key_size;
+		__u32	value_size;
+		__u32	max_entries;
+		__u32	map_flags;
+		__u32	inner_map_fd;
+	};
+
+	/* BPF_MAP_UPDATE_ELEM, BPF_MAP_DELETE_ELEM commands */
+	struct {
+		__u32		map_fd;
+		__aligned_u64	key;
+		union {
+			__aligned_u64 value;
+			__aligned_u64 next_key;
+		};
+		__u64		flags;
+	};
+
+	/* BPF_PROG_LOAD command */
+	struct {
+		__u32		prog_type;
+		__u32		insn_cnt;
+		__aligned_u64	insns;
+		__aligned_u64	license;
+		__u32		log_level;
+		__u32		log_size;
+		__aligned_u64	log_buf;
+		__u32		kern_version;
+		__u32		prog_flags;
+	};
+} __attribute__((aligned(8)));
+#endif
+
+enum {
+	BPF_MAP_ID_KEY,
+	BPF_MAP_ID_SIMPLE,
+};
+
+static int bpf_load(enum bpf_prog_type type, const struct bpf_insn *insns,
+		size_t insns_cnt, const char *license);
+
+#endif /* __TAP_BPF_H__ */
diff --git a/drivers/net/tap/tap_bpf_insns.c b/drivers/net/tap/tap_bpf_insns.c
new file mode 100644
index 0000000..25aa82c
--- /dev/null
+++ b/drivers/net/tap/tap_bpf_insns.c
@@ -0,0 +1,1845 @@ 
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2017 Mellanox Technologies, Ltd.
+ */
+
+#include <errno.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/queue.h>
+#include <sys/mount.h>
+
+#include <rte_byteorder.h>
+#include <rte_jhash.h>
+#include <rte_malloc.h>
+#include <rte_eth_tap.h>
+#include <tap_flow.h>
+#include <tap_autoconf.h>
+#include <tap_tcmsgs.h>
+#include <tap_bpf.h>
+
+#define ERROR                   0
+
+/*
+ * The queue number is offset by 1, to distinguish packets that have
+ * gone through this rule (skb->cb[1] != 0) from others.
+ */
+#define QUEUE_OFFSET 1
+
+/* bpf_insn array matching cls_q section. See tap_bpf_program.c file */
+static struct bpf_insn cls_q_insns[] = {
+	{0x61,    1,    1,       52, 0x00000000},
+	{0x18,    2,    0,        0, 0xdeadbeef},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0x63,   10,    2,       -4, 0x00000000},
+	{0x61,    2,   10,       -4, 0x00000000},
+	{0x07,    2,    0,        0, 0x00000001},
+	{0x67,    2,    0,        0, 0x00000020},
+	{0x77,    2,    0,        0, 0x00000020},
+	{0xb7,    0,    0,        0, 0xffffffff},
+	{0x1d,    1,    2,        1, 0x00000000},
+	{0xb7,    0,    0,        0, 0x00000000},
+	{0x95,    0,    0,        0, 0x00000000},
+};
+
+/**
+ * Load BPF program (section cls_q) into the kernel and return a bpf fd
+ *
+ * @param queue_idx
+ *   Queue index matching packet cb
+ *
+ * @return
+ *   -1 if the BPF program couldn't be loaded. An fd (int) otherwise.
+ */
+int tap_flow_bpf_cls_q(__u32 queue_idx)
+{
+	cls_q_insns[1].imm = queue_idx;
+
+	return bpf_load(BPF_PROG_TYPE_SCHED_CLS,
+		(struct bpf_insn *)cls_q_insns,
+		ARRAY_SIZE(cls_q_insns),
+		"Dual BSD/GPL");
+}
+
+/* bpf_insn array matching l3_l4 section. see tap_bpf_program.c file */
+static struct bpf_insn l3_l4_hash_insns[] = {
+	{0xbf,    7,    1,        0, 0x00000000},
+	{0x61,    8,    7,       16, 0x00000000},
+	{0x61,    6,    7,       76, 0x00000000},
+	{0x61,    9,    7,       80, 0x00000000},
+	{0x18,    1,    0,        0, 0xdeadbeef},
+	{0x00,    0,    0,        0, 0x00000000},
+	{0x63,   10,    1,       -4, 0x00000000},
+	{0xbf,    2,   10,        0, 0x00000000},
+	{0x07,    2,    0,        0, 0xfffffffc},
+	{0x18,    1,    1,        0, 0x0000cafe},
+	{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,     1632, 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,    6,        0, 0x00000000},
+	{0x07,    1,    0,        0, 0x00000012},
+	{0x2d,    1,    9,     1622, 0x00000000},
+	{0xb7,    1,    0,        0, 0x00000012},
+	{0x69,    8,    6,       16, 0x00000000},
+	{0xbf,    7,    2,        0, 0x00000000},
+	{0x7b,   10,    7,      -56, 0x00000000},
+	{0x57,    8,    0,        0, 0x0000ffff},
+	{0x15,    8,    0,      409, 0x0000dd86},
+	{0xb7,    7,    0,        0, 0x00000003},
+	{0x55,    8,    0,     1614, 0x00000008},
+	{0x0f,    6,    1,        0, 0x00000000},
+	{0xb7,    7,    0,        0, 0x00000000},
+	{0xbf,    1,    6,        0, 0x00000000},
+	{0x07,    1,    0,        0, 0x00000018},
+	{0x2d,    1,    9,     1609, 0x00000000},
+	{0x71,    3,    6,       12, 0x00000000},
+	{0xbf,    1,    3,        0, 0x00000000},
+	{0x67,    1,    0,        0, 0x00000038},
+	{0xc7,    1,    0,        0, 0x00000020},
+	{0x77,    1,    0,        0, 0x0000001f},
+	{0x57,    1,    0,        0, 0x2cc681d1},
+	{0x67,    3,    0,        0, 0x00000018},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x40000000},
+	{0xb7,    2,    0,        0, 0x00000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x598d03a2},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x20000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb31a0745},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x10000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x66340e8a},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x08000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xcc681d15},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x04000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x98d03a2b},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x02000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x31a07456},
+	{0x57,    3,    0,        0, 0x01000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6340e8ad},
+	{0x71,    3,    6,       13, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000010},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00800000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc681d15b},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00400000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8d03a2b7},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00200000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1a07456f},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00100000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x340e8ade},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00080000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x681d15bd},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00040000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd03a2b7b},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00020000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa07456f6},
+	{0x57,    3,    0,        0, 0x00010000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x40e8aded},
+	{0x71,    3,    6,       14, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000008},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00008000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x81d15bdb},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00004000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x03a2b7b7},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00002000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x07456f6f},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00001000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x0e8adedf},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000800},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1d15bdbf},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000400},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3a2b7b7e},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000200},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7456f6fd},
+	{0x57,    3,    0,        0, 0x00000100},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe8adedfa},
+	{0x71,    3,    6,       15, 0x00000000},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000080},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd15bdbf4},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000040},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa2b7b7e9},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000020},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x456f6fd3},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000010},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8adedfa7},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000008},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x15bdbf4f},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000004},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x2b7b7e9e},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000002},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x56f6fd3d},
+	{0x57,    3,    0,        0, 0x00000001},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xadedfa7b},
+	{0x71,    4,    6,       16, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000038},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0xb7,    3,    0,        0, 0xffffffff},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x5bdbf4f7},
+	{0x67,    4,    0,        0, 0x00000018},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb7b7e9ef},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6f6fd3df},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdedfa7bf},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xbdbf4f7f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7b7e9eff},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf6fd3dff},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xedfa7bfe},
+	{0x71,    4,    6,       17, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000010},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdbf4f7fc},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb7e9eff9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6fd3dff2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdfa7bfe5},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xbf4f7fca},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7e9eff94},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfd3dff28},
+	{0x57,    4,    0,        0, 0x00010000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfa7bfe51},
+	{0x71,    4,    6,       18, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000008},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf4f7fca2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe9eff945},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd3dff28a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa7bfe514},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x4f7fca28},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9eff9450},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3dff28a0},
+	{0x57,    4,    0,        0, 0x00000100},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7bfe5141},
+	{0x71,    4,    6,       19, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf7fca283},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xeff94506},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdff28a0c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xbfe51418},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7fca2831},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xff945063},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xff28a0c6},
+	{0x57,    4,    0,        0, 0x00000001},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfe51418c},
+	{0x71,    4,    6,       20, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000008},
+	{0x71,    5,    6,       21, 0x00000000},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000030},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfca28319},
+	{0x67,    4,    0,        0, 0x00000010},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x40000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf9450633},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x20000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf28a0c67},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x10000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe51418ce},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x08000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xca28319d},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x04000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9450633b},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x02000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x28a0c676},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x01000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x51418ced},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00800000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa28319db},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00400000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x450633b6},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00200000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8a0c676c},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00100000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1418ced8},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00080000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x28319db1},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00040000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x50633b63},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00020000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa0c676c6},
+	{0x57,    4,    0,        0, 0x00010000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x418ced8d},
+	{0x71,    3,    6,       22, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000008},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00008000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8319db1a},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00004000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x0633b634},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00002000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x0c676c68},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00001000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x18ced8d1},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000800},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x319db1a3},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000400},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x633b6347},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000200},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc676c68f},
+	{0x57,    3,    0,        0, 0x00000100},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8ced8d1f},
+	{0x71,    3,    6,       23, 0x00000000},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000080},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x19db1a3e},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000040},
+	{0x79,    5,   10,      -56, 0x00000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x33b6347d},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000020},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x676c68fa},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000010},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xced8d1f4},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000008},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9db1a3e9},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000004},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3b6347d2},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000002},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x76c68fa5},
+	{0x57,    3,    0,        0, 0x00000001},
+	{0x1d,    3,    2,     1177, 0x00000000},
+	{0xa7,    1,    0,        0, 0xed8d1f4a},
+	{0x05,    0,    0,     1175, 0x00000000},
+	{0x0f,    6,    1,        0, 0x00000000},
+	{0xb7,    7,    0,        0, 0x00000000},
+	{0xbf,    1,    6,        0, 0x00000000},
+	{0x07,    1,    0,        0, 0x0000002c},
+	{0x2d,    1,    9,     1202, 0x00000000},
+	{0x61,    4,    6,        8, 0x00000000},
+	{0xbf,    1,    4,        0, 0x00000000},
+	{0x67,    1,    0,        0, 0x00000038},
+	{0xc7,    1,    0,        0, 0x00000020},
+	{0x77,    1,    0,        0, 0x0000001f},
+	{0x57,    1,    0,        0, 0x2cc681d1},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000040},
+	{0xb7,    2,    0,        0, 0x00000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x598d03a2},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000020},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb31a0745},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000010},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x66340e8a},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000008},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xcc681d15},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000004},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x98d03a2b},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000002},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x31a07456},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000001},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6340e8ad},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00008000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc681d15b},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00004000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8d03a2b7},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00002000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1a07456f},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00001000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x340e8ade},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000800},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x681d15bd},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000400},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd03a2b7b},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000200},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa07456f6},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00000100},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x40e8aded},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00800000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x81d15bdb},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00400000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x03a2b7b7},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00200000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x07456f6f},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00100000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x0e8adedf},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00080000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1d15bdbf},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00040000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3a2b7b7e},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00020000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7456f6fd},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00010000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe8adedfa},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0xb7,    3,    0,        0, 0xffffffff},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd15bdbf4},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa2b7b7e9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x456f6fd3},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8adedfa7},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x15bdbf4f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x2b7b7e9e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x56f6fd3d},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xadedfa7b},
+	{0x61,    4,    6,       12, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x5bdbf4f7},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb7b7e9ef},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6f6fd3df},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdedfa7bf},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xbdbf4f7f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7b7e9eff},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf6fd3dff},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xedfa7bfe},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdbf4f7fc},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb7e9eff9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6fd3dff2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdfa7bfe5},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xbf4f7fca},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7e9eff94},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfd3dff28},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfa7bfe51},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf4f7fca2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe9eff945},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd3dff28a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa7bfe514},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x4f7fca28},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9eff9450},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3dff28a0},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7bfe5141},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf7fca283},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xeff94506},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdff28a0c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xbfe51418},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7fca2831},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xff945063},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xff28a0c6},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfe51418c},
+	{0x61,    4,    6,       16, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfca28319},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf9450633},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf28a0c67},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe51418ce},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xca28319d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9450633b},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x28a0c676},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x51418ced},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa28319db},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x450633b6},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8a0c676c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1418ced8},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x28319db1},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x50633b63},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa0c676c6},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x418ced8d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8319db1a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x0633b634},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x0c676c68},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x18ced8d1},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x319db1a3},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x633b6347},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc676c68f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8ced8d1f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x19db1a3e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x33b6347d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x676c68fa},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xced8d1f4},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9db1a3e9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3b6347d2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x76c68fa5},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xed8d1f4a},
+	{0x61,    4,    6,       20, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xdb1a3e94},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb6347d28},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6c68fa51},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd8d1f4a3},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb1a3e946},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6347d28d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc68fa51a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8d1f4a35},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1a3e946b},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x347d28d7},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x68fa51ae},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd1f4a35c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa3e946b9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x47d28d73},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8fa51ae7},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1f4a35cf},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3e946b9e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7d28d73c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfa51ae78},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf4a35cf1},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe946b9e3},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd28d73c7},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa51ae78e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x4a35cf1c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x946b9e38},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x28d73c71},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x51ae78e3},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa35cf1c6},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x46b9e38d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8d73c71b},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1ae78e36},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x35cf1c6c},
+	{0x61,    4,    6,       24, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6b9e38d9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd73c71b2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xae78e364},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x5cf1c6c9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb9e38d92},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x73c71b25},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe78e364b},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xcf1c6c96},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9e38d92c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3c71b259},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x78e364b2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf1c6c964},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe38d92c9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc71b2593},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8e364b27},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1c6c964e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x38d92c9c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x71b25938},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe364b270},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc6c964e0},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8d92c9c0},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1b259380},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x364b2700},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6c964e01},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd92c9c03},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb2593807},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x64b2700f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc964e01e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x92c9c03d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x2593807a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x4b2700f4},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x964e01e8},
+	{0x61,    4,    6,       28, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x2c9c03d1},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x593807a3},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb2700f46},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x64e01e8d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc9c03d1a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x93807a35},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x2700f46b},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x4e01e8d6},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9c03d1ad},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3807a35b},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x700f46b6},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe01e8d6c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc03d1ad9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x807a35b3},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x00f46b66},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x01e8d6cc},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x03d1ad99},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x07a35b32},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x0f46b665},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1e8d6cca},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3d1ad994},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7a35b328},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf46b6651},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe8d6cca2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd1ad9944},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa35b3289},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x46b66512},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8d6cca25},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1ad9944a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x35b32894},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6b665129},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd6cca253},
+	{0x61,    4,    6,       32, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xad9944a7},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x5b32894f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb665129f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6cca253e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd9944a7d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb32894fb},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x665129f6},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xcca253ec},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9944a7d9},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x32894fb2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x65129f65},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xca253eca},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x944a7d95},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x2894fb2a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x5129f655},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa253ecab},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x44a7d956},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x894fb2ac},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x129f6558},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x253ecab1},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x4a7d9563},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x94fb2ac7},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x29f6558f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x53ecab1e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xa7d9563d},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x4fb2ac7a},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9f6558f5},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3ecab1ea},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7d9563d5},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfb2ac7ab},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf6558f56},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xecab1eac},
+	{0x61,    4,    6,       36, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000080},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd9563d59},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000040},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb2ac7ab2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000020},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6558f564},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000010},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xcab1eac8},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000008},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9563d590},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000004},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x2ac7ab20},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000002},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x558f5641},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000001},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xab1eac83},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00008000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x563d5906},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00004000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xac7ab20c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00002000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x58f56418},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00001000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb1eac831},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000800},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x63d59063},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000400},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc7ab20c7},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000200},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8f56418f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00000100},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1eac831e},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00800000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3d59063c},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00400000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7ab20c78},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00200000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf56418f0},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00100000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xeac831e1},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00080000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xd59063c2},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00040000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xab20c784},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00020000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x56418f09},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x00010000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xac831e12},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000020},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x59063c25},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x40000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xb20c784b},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x20000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x6418f097},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x10000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc831e12f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x08000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9063c25f},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x04000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x20c784be},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x57,    5,    0,        0, 0x02000000},
+	{0x1d,    5,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x418f097c},
+	{0x57,    4,    0,        0, 0x01000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x831e12f9},
+	{0x71,    4,    6,       40, 0x00000000},
+	{0x67,    4,    0,        0, 0x00000008},
+	{0x71,    5,    6,       41, 0x00000000},
+	{0x4f,    4,    5,        0, 0x00000000},
+	{0xbf,    5,    4,        0, 0x00000000},
+	{0x67,    5,    0,        0, 0x00000030},
+	{0xc7,    5,    0,        0, 0x00000020},
+	{0x6d,    5,    3,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x063c25f3},
+	{0x67,    4,    0,        0, 0x00000010},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x40000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x0c784be7},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x20000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x18f097cf},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x10000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x31e12f9f},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x08000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x63c25f3f},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x04000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc784be7f},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x02000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x8f097cff},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x01000000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x1e12f9fe},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00800000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3c25f3fc},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00400000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x784be7f8},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00200000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf097cff0},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00100000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe12f9fe0},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00080000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xc25f3fc1},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00040000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x84be7f83},
+	{0xbf,    3,    4,        0, 0x00000000},
+	{0x57,    3,    0,        0, 0x00020000},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x097cff07},
+	{0x57,    4,    0,        0, 0x00010000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x12f9fe0f},
+	{0x71,    3,    6,       42, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000008},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00008000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x25f3fc1f},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00004000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x4be7f83f},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00002000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x97cff07f},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00001000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x2f9fe0fe},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000800},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x5f3fc1fd},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000400},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xbe7f83fb},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000200},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7cff07f7},
+	{0x57,    3,    0,        0, 0x00000100},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf9fe0fee},
+	{0x71,    3,    6,       43, 0x00000000},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000080},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xf3fc1fdc},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000040},
+	{0x79,    5,   10,      -56, 0x00000000},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xe7f83fb8},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000020},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xcff07f70},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000010},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x9fe0fee1},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000008},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x3fc1fdc2},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000004},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0x7f83fb85},
+	{0xbf,    4,    3,        0, 0x00000000},
+	{0x57,    4,    0,        0, 0x00000002},
+	{0x1d,    4,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xff07f70a},
+	{0x57,    3,    0,        0, 0x00000001},
+	{0x1d,    3,    2,        1, 0x00000000},
+	{0xa7,    1,    0,        0, 0xfe0fee15},
+	{0x71,    2,    0,      201, 0x00000000},
+	{0x67,    2,    0,        0, 0x00000008},
+	{0x71,    3,    0,      200, 0x00000000},
+	{0x4f,    2,    3,        0, 0x00000000},
+	{0x71,    3,    0,      203, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000008},
+	{0x71,    4,    0,      202, 0x00000000},
+	{0x4f,    3,    4,        0, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000010},
+	{0x4f,    3,    2,        0, 0x00000000},
+	{0x67,    1,    0,        0, 0x00000020},
+	{0x77,    1,    0,        0, 0x00000020},
+	{0xbf,    2,    1,        0, 0x00000000},
+	{0x3f,    2,    3,        0, 0x00000000},
+	{0x2f,    2,    3,        0, 0x00000000},
+	{0x1f,    1,    2,        0, 0x00000000},
+	{0x57,    1,    0,        0, 0x0000000f},
+	{0x67,    1,    0,        0, 0x00000002},
+	{0x0f,    0,    1,        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},
+	{0x71,    3,    0,      139, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000008},
+	{0x4f,    3,    2,        0, 0x00000000},
+	{0x67,    3,    0,        0, 0x00000010},
+	{0x4f,    3,    1,        0, 0x00000000},
+	{0x07,    3,    0,        0, 0x00000001},
+	{0x63,    5,    3,       52, 0x00000000},
+	{0xb7,    7,    0,        0, 0x00000001},
+	{0xbf,    0,    7,        0, 0x00000000},
+	{0x95,    0,    0,        0, 0x00000000},
+};
+
+/**
+ * Load BPF program (section l3_l4) into the kernel and return a bpf fd.
+ *
+ * @param[in] key_idx
+ *   RSS MAP key index
+ *
+ * @param[in] map_fd
+ *   BPF RSS map file descriptor
+ *
+ * @return
+ *   -1 if the BPF program couldn't be loaded. An fd (int) otherwise.
+ */
+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;
+
+	return bpf_load(BPF_PROG_TYPE_SCHED_ACT,
+		(struct bpf_insn *)l3_l4_hash_insns,
+		ARRAY_SIZE(l3_l4_hash_insns),
+		"Dual BSD/GPL");
+}
+
+
+#ifndef __NR_bpf
+# if defined(__i386__)
+#  define __NR_bpf 357
+# elif defined(__x86_64__)
+#  define __NR_bpf 321
+# elif defined(__aarch64__)
+#  define __NR_bpf 280
+# elif defined(__sparc__)
+#  define __NR_bpf 349
+# elif defined(__s390__)
+#  define __NR_bpf 351
+# else
+#  error __NR_bpf not defined. libbpf does not support your arch.
+# endif
+#endif
+
+/**
+ * Helper function to convert a pointer to unsigned 64 bits
+ *
+ * @param[in] ptr
+ *   pointer to address
+ *
+ * @return
+ *   64 bit unsigned long type of pointer address
+ */
+static inline __u64 ptr_to_u64(const void *ptr)
+{
+	return (__u64)(unsigned long)ptr;
+}
+
+/**
+ * Call BPF system call
+ *
+ * @param[in] cmd
+ *   BPF command for program loading, map creation, map entry update, etc
+ *
+ * @param[in] attr
+ *   System call attributes relevant to system call command
+ *
+ * @param[in] size
+ *   size of attr parameter
+ *
+ * @return
+ *   -1 if BPF system call failed, 0 otherwise
+ */
+static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr,
+			unsigned int size)
+{
+	return syscall(__NR_bpf, cmd, attr, size);
+}
+
+/**
+ * Load BPF instructions to kernel
+ *
+ * @param[in] type
+ *   BPF program type: classifieir or action
+ *
+ * @param[in] insns
+ *   Array of BPF instructions (equivalent to BPF instructions)
+ *
+ * @param[in] insns_cnt
+ *   Number of BPF instructions (size of array)
+ *
+ * @param[in] lincense
+ *   License string that must be acknowledged by the kernel
+ *
+ * @return
+ *   -1 if the BPF program couldn't be loaded, fd (file descriptor) otherwise
+ */
+static int bpf_load(enum bpf_prog_type type,
+		  const struct bpf_insn *insns,
+		  size_t insns_cnt,
+		  const char *license)
+{
+	union bpf_attr attr;
+
+	bzero(&attr, sizeof(attr));
+	attr.prog_type = type;
+	attr.insn_cnt = (__u32)insns_cnt;
+	attr.insns = ptr_to_u64(insns);
+	attr.license = ptr_to_u64(license);
+	attr.log_buf = ptr_to_u64(NULL);
+	attr.log_level = 0;
+	attr.kern_version = 0;
+
+	return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr));
+}
diff --git a/drivers/net/tap/tap_bpf_program.c b/drivers/net/tap/tap_bpf_program.c
new file mode 100644
index 0000000..08bc881
--- /dev/null
+++ b/drivers/net/tap/tap_bpf_program.c
@@ -0,0 +1,221 @@ 
+/* SPDX-License-Identifier: BSD-3-Clause
+ * 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 <linux/bpf.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 1, to distinguish packets that have
+ * gone through this rule (skb->cb[1] != 0) from others.
+ */
+#define QUEUE_OFFSET		1
+#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
+match_q(struct __sk_buff *skb)
+{
+	__u32 queue = skb->cb[1];
+	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;
+	return TC_ACT_UNSPEC;
+}
+
+
+struct ipv4_l3_l4_tuple {
+	__u32    src_addr;
+	__u32    dst_addr;
+	__u16    dport;
+	__u16    sport;
+} __attribute__((packed));
+
+struct ipv6_l3_l4_tuple {
+	__u8        src_addr[16];
+	__u8        dst_addr[16];
+	__u16       dport;
+	__u16       sport;
+} __attribute__((packed));
+
+static const __u8 def_rss_key[] = {
+	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)
+{
+	__u32 i, j, hash = 0;
+#pragma unroll
+	for (j = 0; j < input_len; j++) {
+#pragma unroll
+		for (i = 0; i < 32; i++) {
+			if (input_tuple[j] & (1 << (31 - i))) {
+				hash ^= ((const __u32 *)def_rss_key)[j] << i |
+				(__u32)((uint64_t)
+				(((const __u32 *)def_rss_key)[j + 1])
+					>> (32 - i));
+			}
+		}
+	}
+	return hash;
+}
+
+static 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;
+	__u32 key_idx = 0xdeadbeef;
+	__u32 hash;
+	struct rss_key *rsskey;
+	__u64 off = ETH_HLEN;
+	int j;
+	__u8 *key = 0;
+	__u32 len;
+	__u32 queue = 0;
+
+	rsskey = map_lookup_elem(&map_keys, &key_idx);
+	if (!rsskey) {
+		printt("hash(): rss key is not configured\n");
+		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 *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 = PORT(*(src_dst_port + 0),
+					*(src_dst_port + 1)),
+			.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);
+		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));
+		v6_tuple.sport = PORT(*(src_dst_port + 0),
+			      *(src_dst_port + 1));
+		v6_tuple.dport = PORT(*(src_dst_port + 2),
+			      *(src_dst_port + 3));
+
+		__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;
+	}
+
+	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); */
+
+	return TC_ACT_RECLASSIFY;
+}
+
+#define RSS(L)						\
+	__section(#L) int				\
+		L ## _hash(struct __sk_buff *skb)	\
+	{						\
+		return rss_ ## L (skb);			\
+	}
+
+RSS(l3_l4)
+
+BPF_LICENSE("Dual BSD/GPL");
diff --git a/drivers/net/tap/tap_flow.h b/drivers/net/tap/tap_flow.h
index 9e332b0..6cc01b4 100644
--- a/drivers/net/tap/tap_flow.h
+++ b/drivers/net/tap/tap_flow.h
@@ -50,6 +50,8 @@ 
 #define GROUP_SHIFT 12
 #define MAX_GROUP GROUP_MASK
 
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
+
 /**
  * These index are actually in reversed order: their priority is processed
  * by subtracting their value to the lowest priority (PRIORITY_MASK).
@@ -80,4 +82,7 @@  int tap_flow_implicit_destroy(struct pmd_internals *pmd,
 int tap_flow_implicit_flush(struct pmd_internals *pmd,
 			    struct rte_flow_error *error);
 
+int tap_flow_bpf_cls_q(__u32 queue_idx);
+int tap_flow_bpf_calc_l3_l4_hash(__u32 key_idx, int map_fd);
+
 #endif /* _TAP_FLOW_H_ */