From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00064.outbound.protection.outlook.com [40.107.0.64]) by dpdk.org (Postfix) with ESMTP id 4C1B62C54 for ; Thu, 30 Nov 2017 09:01:31 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Y58A1JH0ppf2ZdSOXHrTH4jtLzzUvJJsC5ct9NYYAFU=; b=WTPU5wPU1BHclcdbIrtbwCs2wmNXk5TyGnhHpG8dusz3btBREhh0GP0Dzj3Qg0270yzSSD2BjmZZRsaLfwBINsBkJ6Qw6DnXs87pRQp0h58CLEybwYoYTGk03zVr8tILIdjvb1GKJVprprze9Az5sjEiFgVJRiWwod/+mDYY93k= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=ophirmu@mellanox.com; Received: from mellanox.com (37.142.13.130) by DB5PR05MB1255.eurprd05.prod.outlook.com (2a01:111:e400:51cc::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.5; Thu, 30 Nov 2017 08:01:25 +0000 From: Ophir Munk To: dev@dpdk.org Cc: Thomas Monjalon , Olga Shern , Pascal Mazon , Ophir Munk Date: Thu, 30 Nov 2017 08:01:10 +0000 Message-Id: <1512028870-13597-2-git-send-email-ophirmu@mellanox.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1512028870-13597-1-git-send-email-ophirmu@mellanox.com> References: <1512028870-13597-1-git-send-email-ophirmu@mellanox.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [37.142.13.130] X-ClientProxiedBy: AM5PR0602CA0018.eurprd06.prod.outlook.com (2603:10a6:203:a3::28) To DB5PR05MB1255.eurprd05.prod.outlook.com (2a01:111:e400:51cc::13) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-MS-Office365-Filtering-Correlation-Id: 00fb2623-9f96-4c98-cf73-08d537c88e76 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603282); SRVR:DB5PR05MB1255; X-Microsoft-Exchange-Diagnostics: 1; DB5PR05MB1255; 3:pZdNRuE638yAf7wbJKseR7wLLdnAauSADJXo/lKxlH3e71LbxAMYct0+99V3SZzkN651DOPE0q/reIzfia09YWaX5IjIiW+1zQ2FI4bFdt0GdBEddvBJ/Utl5X+68ok4woj1b6kstGQ09+YnTczpSiQwp5yqU+n2gk2NA4r/ahv8HiqIHPE54P1FxH2yz8lSdI4UaC8ZIt+3KLB5wXppiT0BB6CmEWq3ke/oI1goF8DeDxjPXZOuPuFTzZkc+lQR; 25:yzC0KXnZ+P6IDNI+3cg10rFt02Yz4iCSjmWlPT2eoHojPLH5k5iihmx9zztY54lBY38rI+TItcQICVnXKt/Tu7h2MExVanjkot+AZtIxn6ElllHDP9BjRTzU255mnXfKNzE4sif47SeI7E3prpPBPt8eXFi3GwW4C5eNFb+oIkXGaIEmeu0uhDgBvLjDE4HqIrcgFZhDbdsfBzwSGseIeFH7Q08YLNtRYiZbtJx5n8lrLy9QnV90TCj/3FpM1f71iXGTWjaZUJNR86mUBx2dYUw1fbqR6UdszxG3Dwscm66aJjwd0NOgEo8QdGHTT7qkVwav4Qq9qAf4QsqD8o3hcQ==; 31:/t/L3jlqJNmpIlNRl/MzMiXgbhVO/9pZYu/DDbaQSbZsYE2BsBKvkFjh+J98ryFqknDo3WCGCtuuA2yROvgWI84W2k0LnZL4zSfxj+mn1cdVB0R94uMBffUpktQSgDQaaTmHIY8ZU3XvoI5fbaTlVKFufnIe8AkypWr2GdWFLIe6ZBsRBRmOFJNbWoJQfdj9vcycvvzT9rNpirzwpDV3a73mGIZBJ0jJgFUbB1DAOZQ= X-MS-TrafficTypeDiagnostic: DB5PR05MB1255: X-LD-Processed: a652971c-7d2e-4d9b-a6a4-d149256f461b,ExtAddr X-Microsoft-Exchange-Diagnostics: 1; DB5PR05MB1255; 20:3PM7NRKRN9m3jwRxoDo0er4vaI9t3lsxDUXQo0npsqDi8ziEEPpoX+P/BViVIABQy/rxLYrlfDNkE+E5dJ+xGyqq/LxlqfTYB0kyvUaARFSdTgqIMiWvcP7JNuZqfaDsCv9jygFM6X0AkSc6/fBNaOLDBdD/EHesX57MfzWyGAa2u7XUjMonTCTrFeUvUtXrkKufGZ+jt35t00WT+AFRVaLexUJ5qNc5ZHocSVgoSAHu9xhKapQjG8E57pf9IXECfQMTNGvnm2HduKMUoOkCiUWKZCTyvx2Bp942yUHspf6dr4hvK3mMDggoXdtAxLwFPSdcvDttBp1SX86u34NUrbaRbj95ZNJghLqRhEkwtIzsRWLb3cuikh7ilqfHDIjFWnFwEhOyXwxAqd8N96/gN9xG1oblLIXSzXenqIWEnVLJy+nNmyEAq5KHJK072RzTJcNJxVzqVq/wfrO3Ez8jltzqKL1NBMcMQl17lm9PoIwA4lNtjVrCwcKbzUG3O2bx; 4:EDnp8Ijj8RiVEkHy2mzrzqxKalXY9h71WqUNJOB13c8Q7V8z1FY5Q7Tsa8jiMF+L77E2V9/8zKq2gfuL+8yA/3MtkVmMwMOcpymPK+B1tbWHznLaxaOTM5Wzti1hVkZn3Y9sykzFrMNmD1YtzsWEtvLAbExCWcwBAsQ0cR9fC2aERWlSGnX2RQixgUWKOPeVvri3a+3gqLYVGapawMw3evrmQvlC5wZYec/gj6pTrmvNVEDNwUIQMLwP5xALIjF3pKYDuh61yzpdWXUskFn+WxzRk/L76Cd33/l9+m68RrnD5APi2e6ZL9P60ZhJ6L3JmAMnX/xa9q9u+KPXbGvsC77eno3jf4vyiHuBXkz/huk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(262104967686372)(84791874153150); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(8121501046)(5005006)(3231022)(10201501046)(93006095)(93001095)(3002001)(6055026)(6041248)(20161123555025)(20161123564025)(20161123562025)(201703131423075)(201703011903075)(201702281528075)(201703061421075)(20161123560025)(20161123558100)(6072148)(201708071742011); SRVR:DB5PR05MB1255; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DB5PR05MB1255; X-Forefront-PRVS: 05079D8470 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(7966004)(39860400002)(346002)(376002)(366004)(189002)(199003)(4326008)(33646002)(6916009)(81166006)(81156014)(8676002)(6116002)(305945005)(101416001)(7736002)(2361001)(106356001)(86362001)(105586002)(575784001)(2351001)(50226002)(68736007)(8936002)(21086003)(6306002)(50466002)(69596002)(3846002)(33026002)(48376002)(47776003)(66066001)(107886003)(53946003)(16200700003)(53936002)(36756003)(189998001)(6666003)(316002)(4720700003)(54906003)(2950100002)(2906002)(52116002)(16586007)(55016002)(51416003)(16526018)(97736004)(25786009)(508600001)(5660300001)(50986010)(76176010)(7696005)(966005)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR05MB1255; H:mellanox.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB5PR05MB1255; 23:UZDpp1fwhVSEj8vYN5EQrb1EKVYuuEN45bL2Y+Yrv?= =?us-ascii?Q?gwRa+GwWaP9F5YPiCptvyuuO8KlP5Sd4EJu3HgNK0idB+vfry8hxZbn0LfHH?= =?us-ascii?Q?2SSmYQu/DhSbNfChKa7lQbkmhgdZAdZQvZQsT1ae6Il4sYxEt1xOI0055GRk?= =?us-ascii?Q?K4xL7hIY+E3hoc9IqyE5x9Vu+j1EH515/MupjS1nHvSSwIsCXOuFz8P7nkZI?= =?us-ascii?Q?rmWUZI6F6EQURqsmDLWXfaUb7ISKa/UC5Z+MuHPluAyBOv7n0HBa86tOBaEz?= =?us-ascii?Q?7PG7WK68CtmA84VGKwUR82aS79kO3Xd+TVDzyyMPfhfdnDP9BVAB346l4Gmc?= =?us-ascii?Q?rfYBcee7/bRL2KHZrZfiZRQ/VJ7+egooQwXh0RFYkcmE4q4O9XrD7CfXXWqQ?= =?us-ascii?Q?2TqaTuiokSmN+fpKKSSBsehAnjLQm/K0/ch3UYpjfAOF0TqbufYf2VSQ+9jC?= =?us-ascii?Q?zsgPQz3NlpRIB0tqoCQG7ZuoTbN5o5tt/TV3AthKaXm8bcoLmBmVRxNDxD43?= =?us-ascii?Q?S+ePGo+dFlbmU6QtEv+AZT6jzlGufj+500KtZc6h954KULcyjFjLsIQD9MZH?= =?us-ascii?Q?1HZg1TXNBvYZwrmnLx00ispnOU4Y8S4USJZ69doSzeTNL9jUETBMJbUUZXKI?= =?us-ascii?Q?XNoyczA+He3BL8myHfT2/sJGj7wpO+E3ImVCpJcEUpgOv3b70BjuHLit/tCy?= =?us-ascii?Q?XjU4tNB01JND1PMEpZNeHCq1WRQ9BJpRvlaMZkvf3yaANguEaH0yoMv7H0bd?= =?us-ascii?Q?CgXIEC+k7+qjx9/DSb9yDfwY1nKnUio/jNUOqIpDPA7dkzx/CPEamQYx81gI?= =?us-ascii?Q?gicGerorpNWN9D/mTLHu6Yqb1Y2gdDcmABwSk8dESLNmTOXW0WwLjToY3dSz?= =?us-ascii?Q?l57p+7ekpno/1gcSpTiT9QBC0zrcmGzSGhwC3Dd6xETt1j47uR7Yg4Xz0lXU?= =?us-ascii?Q?0KxSGKlpCl+4w8+tyNKCWyLCtZCCIL4H3ioFl0tyyXhl9HFkbuXroDddI2xp?= =?us-ascii?Q?XolUFsa2VRO6uwpdS9AP0Z4BAyZEIj7BW/3A+W1TTlDxZyZSXaKlXP0S+o5w?= =?us-ascii?Q?rn5g46iq8tBiJvzWoIWQ4sDXhEdhFvU6fWSV9k96MjGQD3g1i28HKB4RDsGp?= =?us-ascii?Q?X7ntUzKVgJTXxrI6JTOpN31NuLjQYdTtHcP0aWeTTfrIXtSa8d68Izx4CIU3?= =?us-ascii?Q?1TPwE818CwxUKJtU5bCmfjNEq7mmnXXIVlc5NhcZ0HliLOF46xXsjKpz4fNW?= =?us-ascii?Q?yD8xdXBD1Db+BpCbGeocPUNU/1uBhRQ+GuN2pbHdZrZ5nE3wntzPKP+fTjPv?= =?us-ascii?Q?Nh88pRZMYeeIe7nZ9ibxaG2OGSVd8tzQ9xefo1vh5da/laQDY2+khuMouxl4?= =?us-ascii?Q?ZbELRRV3Hq2XAUbZ42v/70799QWY45DZ5TNMgE3XoeX157L3U4/NVZ56gnGh?= =?us-ascii?Q?0W8jL9/iQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB5PR05MB1255; 6:SuM0+q+88hyqmjLuqlaPOUhLoeBYZPVm3z07T+ZjCAmIa2cAIDtTawt9fKpxo05XcC2j+OzQv6zek5g6ktmdziIawhufvQfIF20bOmBctUq4BnoNqxlBdHh7jIZBVG9jG/bBiuJrcvOKmOueDl3O75+yfaIafJsTOs80v8bllNeTIFLZWpBITYN6s83YVRosPNoy2ELztz8ov+4fubAkXkVuC5deg55gPN4zRjHKaZCa5jZ9KxT06Nv5nmbQnWJoGvwXRjrwk5AuPyYYv5NXe1pkD8/dqLAsn4ZmDER8ESt62rhec+hPQKYlN4hfaMRIp439akzclKExXWEnz0lz4ZfPLlOnfG7/Yausn7NYSPA=; 5:GPsJ/GGFeUtLl26KKZzW58dm105ECO9e/dZSTJRqWIJcC7zF28YSK9PI+WhoLM0CR27K0vGE3teExWCySk0n4hur5nyejBYSLpERRB/Box7QNVlwNXHtjVGnKrmUZ4GwhuQvRz6Yj1k7oVe9KfAetTCIv48MbF/M/UE+XUrGEdM=; 24:lLYSQRF7xPUZuDKjpq01Bxu/PZCGswDyjcC5Itr39GE+0Km7okItZAE6Ud2TyMiGsZZZmxnwE2FWElzUVZLSfeaKqy9RLZ08u//s1FR9iUc=; 7:BbG1ZrhFZQXktLV4pRUGl868FSndvA2iHJR9R3UNmoIJVKkdd8zs9zyRKAM1+6jfiuLFbpZ0j6Cxcvpw0uij4QQP+3EKROPliBAfXiCqpiCyGrJF3QFUIRekVrzxE7bHDAs/sugrBmvOh/j7jvMs+FtCfG7p+kiTlWWzG9UlbsFfVQZtS9e/Vbfvo+Hxm+0F/5aZkNOnNEYvXHv9QIQ6niPI4SaTmSVkLv98PSD+BqjYtmrp9sdlbEx6CHCpAJoM SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2017 08:01:25.4993 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 00fb2623-9f96-4c98-cf73-08d537c88e76 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR05MB1255 Subject: [dpdk-dev] [RFC 2/2] net/tap: add eBPF instructions X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Nov 2017 08:01:31 -0000 The C source file (tap_bpf_insns.c) includes eBPF "assembly instructions" in the format of an array of struct bpf_insns. This array is passed to the kernel for execution in BPF system call. The C language source file (tap_bpf_program.c) from which the "assembly instructions" were generated is included in TAP source tree, however it does not take part in dpdk compilation. TAP documentation details the process of eBPF "assembly instructions" generation. Signed-off-by: Ophir Munk Signed-off-by: Pascal Mazon --- drivers/net/tap/Makefile | 1 + drivers/net/tap/tap_bpf_api.h | 276 ++ drivers/net/tap/tap_bpf_insns.c | 5427 +++++++++++++++++++++++++++++++++++++ drivers/net/tap/tap_bpf_program.c | 321 +++ drivers/net/tap/tap_bpf_shared.h | 40 + drivers/net/tap/tap_flow.c | 11 +- 6 files changed, 6075 insertions(+), 1 deletion(-) create mode 100644 drivers/net/tap/tap_bpf_api.h create mode 100644 drivers/net/tap/tap_bpf_insns.c create mode 100644 drivers/net/tap/tap_bpf_program.c create mode 100644 drivers/net/tap/tap_bpf_shared.h diff --git a/drivers/net/tap/Makefile b/drivers/net/tap/Makefile index 9afae5e..c334d90 100644 --- a/drivers/net/tap/Makefile +++ b/drivers/net/tap/Makefile @@ -59,6 +59,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 diff --git a/drivers/net/tap/tap_bpf_api.h b/drivers/net/tap/tap_bpf_api.h new file mode 100644 index 0000000..0328dd8 --- /dev/null +++ b/drivers/net/tap/tap_bpf_api.h @@ -0,0 +1,276 @@ +/******************************************************************************* + + Copyright (C) 2015 Daniel Borkmann + + Copied from iproute2's include/bpf_api.h, available at: + https://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git + + This file is licensed under GNU General Public License (GPL) v2. + + The full GNU General Public License is included in this distribution in + the file called "LICENSE.GPL". + +*******************************************************************************/ + + +#ifndef __BPF_API__ +#define __BPF_API__ + +/* Note: + * + * This file can be included into eBPF kernel programs. It contains + * a couple of useful helper functions, map/section ABI (bpf_elf.h), + * misc macros and some eBPF specific LLVM built-ins. + */ + +#include + +#include +#include +#include + +#include + +#include "tap_bpf_elf.h" + +/** Misc macros. */ + +#ifndef __stringify +# define __stringify(X) #X +#endif + +#ifndef __maybe_unused +# define __maybe_unused __attribute__((__unused__)) +#endif + +#ifndef offsetof +# define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER) +#endif + +#ifndef likely +# define likely(X) __builtin_expect(!!(X), 1) +#endif + +#ifndef unlikely +# define unlikely(X) __builtin_expect(!!(X), 0) +#endif + +#ifndef htons +# define htons(X) __constant_htons((X)) +#endif + +#ifndef ntohs +# define ntohs(X) __constant_ntohs((X)) +#endif + +#ifndef htonl +# define htonl(X) __constant_htonl((X)) +#endif + +#ifndef ntohl +# define ntohl(X) __constant_ntohl((X)) +#endif + +#ifndef __inline__ +# define __inline__ __attribute__((always_inline)) +#endif + +/** Section helper macros. */ + +#ifndef __section +# define __section(NAME) \ + __attribute__((section(NAME), used)) +#endif + +#ifndef __section_tail +# define __section_tail(ID, KEY) \ + __section(__stringify(ID) "/" __stringify(KEY)) +#endif + +#ifndef __section_xdp_entry +# define __section_xdp_entry \ + __section(ELF_SECTION_PROG) +#endif + +#ifndef __section_cls_entry +# define __section_cls_entry \ + __section(ELF_SECTION_CLASSIFIER) +#endif + +#ifndef __section_act_entry +# define __section_act_entry \ + __section(ELF_SECTION_ACTION) +#endif + +#ifndef __section_lwt_entry +# define __section_lwt_entry \ + __section(ELF_SECTION_PROG) +#endif + +#ifndef __section_license +# define __section_license \ + __section(ELF_SECTION_LICENSE) +#endif + +#ifndef __section_maps +# define __section_maps \ + __section(ELF_SECTION_MAPS) +#endif + +/** Declaration helper macros. */ + +#ifndef BPF_LICENSE +# define BPF_LICENSE(NAME) \ + char ____license[] __section_license = NAME +#endif + +/** Classifier helper */ + +#ifndef BPF_H_DEFAULT +# define BPF_H_DEFAULT -1 +#endif + +/** BPF helper functions for tc. Individual flags are in linux/bpf.h */ + +#ifndef __BPF_FUNC +# define __BPF_FUNC(NAME, ...) \ + (* NAME)(__VA_ARGS__)__maybe_unused +#endif + +#ifndef BPF_FUNC +# define BPF_FUNC(NAME, ...) \ + __BPF_FUNC(NAME, __VA_ARGS__) = (void *)BPF_FUNC_##NAME +#endif + +/* Map access/manipulation */ +static void *BPF_FUNC(map_lookup_elem, void *map, const void *key); +static int BPF_FUNC(map_update_elem, void *map, const void *key, + const void *value, uint32_t flags); +static int BPF_FUNC(map_delete_elem, void *map, const void *key); + +/* Time access */ +static uint64_t BPF_FUNC(ktime_get_ns); + +/* Debugging */ + +/* FIXME: __attribute__ ((format(printf, 1, 3))) not possible unless + * llvm bug https://llvm.org/bugs/show_bug.cgi?id=26243 gets resolved. + * It would require ____fmt to be made const, which generates a reloc + * entry (non-map). + */ +static void BPF_FUNC(trace_printk, const char *fmt, int fmt_size, ...); + +#ifndef printt +# define printt(fmt, ...) \ + ({ \ + char ____fmt[] = fmt; \ + trace_printk(____fmt, sizeof(____fmt), ##__VA_ARGS__); \ + }) +#endif + +/* Random numbers */ +static uint32_t BPF_FUNC(get_prandom_u32); + +/* Tail calls */ +static void BPF_FUNC(tail_call, struct __sk_buff *skb, void *map, + uint32_t index); + +/* System helpers */ +static uint32_t BPF_FUNC(get_smp_processor_id); +static uint32_t BPF_FUNC(get_numa_node_id); + +/* Packet misc meta data */ +static uint32_t BPF_FUNC(get_cgroup_classid, struct __sk_buff *skb); +static int BPF_FUNC(skb_under_cgroup, void *map, uint32_t index); + +static uint32_t BPF_FUNC(get_route_realm, struct __sk_buff *skb); +static uint32_t BPF_FUNC(get_hash_recalc, struct __sk_buff *skb); +static uint32_t BPF_FUNC(set_hash_invalid, struct __sk_buff *skb); + +/* Packet redirection */ +static int BPF_FUNC(redirect, int ifindex, uint32_t flags); +static int BPF_FUNC(clone_redirect, struct __sk_buff *skb, int ifindex, + uint32_t flags); + +/* Packet manipulation */ +static int BPF_FUNC(skb_load_bytes, struct __sk_buff *skb, uint32_t off, + void *to, uint32_t len); +static int BPF_FUNC(skb_store_bytes, struct __sk_buff *skb, uint32_t off, + const void *from, uint32_t len, uint32_t flags); + +static int BPF_FUNC(l3_csum_replace, struct __sk_buff *skb, uint32_t off, + uint32_t from, uint32_t to, uint32_t flags); +static int BPF_FUNC(l4_csum_replace, struct __sk_buff *skb, uint32_t off, + uint32_t from, uint32_t to, uint32_t flags); +static int BPF_FUNC(csum_diff, const void *from, uint32_t from_size, + const void *to, uint32_t to_size, uint32_t seed); +static int BPF_FUNC(csum_update, struct __sk_buff *skb, uint32_t wsum); + +static int BPF_FUNC(skb_change_type, struct __sk_buff *skb, uint32_t type); +static int BPF_FUNC(skb_change_proto, struct __sk_buff *skb, uint32_t proto, + uint32_t flags); +static int BPF_FUNC(skb_change_tail, struct __sk_buff *skb, uint32_t nlen, + uint32_t flags); + +static int BPF_FUNC(skb_pull_data, struct __sk_buff *skb, uint32_t len); + +/* Event notification */ +static int __BPF_FUNC(skb_event_output, struct __sk_buff *skb, void *map, + uint64_t index, const void *data, uint32_t size) = + (void *) BPF_FUNC_perf_event_output; + +/* Packet vlan encap/decap */ +static int BPF_FUNC(skb_vlan_push, struct __sk_buff *skb, uint16_t proto, + uint16_t vlan_tci); +static int BPF_FUNC(skb_vlan_pop, struct __sk_buff *skb); + +/* Packet tunnel encap/decap */ +static int BPF_FUNC(skb_get_tunnel_key, struct __sk_buff *skb, + struct bpf_tunnel_key *to, uint32_t size, uint32_t flags); +static int BPF_FUNC(skb_set_tunnel_key, struct __sk_buff *skb, + const struct bpf_tunnel_key *from, uint32_t size, + uint32_t flags); + +static int BPF_FUNC(skb_get_tunnel_opt, struct __sk_buff *skb, + void *to, uint32_t size); +static int BPF_FUNC(skb_set_tunnel_opt, struct __sk_buff *skb, + const void *from, uint32_t size); + +/** LLVM built-ins, mem*() routines work for constant size */ + +#ifndef lock_xadd +# define lock_xadd(ptr, val) ((void) __sync_fetch_and_add(ptr, val)) +#endif + +#ifndef memset +# define memset(s, c, n) __builtin_memset((s), (c), (n)) +#endif + +#ifndef memcpy +# define memcpy(d, s, n) __builtin_memcpy((d), (s), (n)) +#endif + +#ifndef memmove +# define memmove(d, s, n) __builtin_memmove((d), (s), (n)) +#endif + +/* FIXME: __builtin_memcmp() is not yet fully useable unless llvm bug + * https://llvm.org/bugs/show_bug.cgi?id=26218 gets resolved. Also + * this one would generate a reloc entry (non-map), otherwise. + */ +#if 0 +#ifndef memcmp +# define memcmp(a, b, n) __builtin_memcmp((a), (b), (n)) +#endif +#endif + +unsigned long long load_byte(void *skb, unsigned long long off) + asm ("llvm.bpf.load.byte"); + +unsigned long long load_half(void *skb, unsigned long long off) + asm ("llvm.bpf.load.half"); + +unsigned long long load_word(void *skb, unsigned long long off) + asm ("llvm.bpf.load.word"); + +#endif /* __BPF_API__ */ diff --git a/drivers/net/tap/tap_bpf_insns.c b/drivers/net/tap/tap_bpf_insns.c new file mode 100644 index 0000000..951d037 --- /dev/null +++ b/drivers/net/tap/tap_bpf_insns.c @@ -0,0 +1,5427 @@ +/*- + * BSD LICENSE + * + * Copyright 2017 6WIND S.A. + * Copyright 2017 Mellanox. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of 6WIND S.A. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "tap_bpf_shared.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 + +#define INV_KEY_IDX 0xdeadbeef + +/* + * + * __section("maps") + * struct bpf_elf_map map_keys = { + * .type = BPF_MAP_TYPE_HASH, + * .id = BPF_MAP_ID_KEY, + * .size_key = sizeof(__u32), + * .size_value = sizeof(struct rss_key), + * .max_elem = 256, + * .pinning = PIN_GLOBAL_NS, + * }; + */ + +/* + * struct bpf_insn { + * __u8 code; opcode + * __u8 dst_reg:4; dest register + * __u8 src_reg:4; source register + * __s16 off; signed offset + * __s32 imm; signed immediate constant + * }; + */ + +/* + * The next bpf_insn array matches cls_q section + * see tap_bpf_program.c file + * + * __section("cls_q") int + * match_q (struct __sk_buff *skb) + * { + * __u32 queue = skb->cb[1]; + * volatile __u32 q = INV_KEY_IDX; + * __u32 match_queue = QUEUE_OFFSET + q; + * + * if (queue != match_queue) + * return TC_ACT_OK; + * return TC_ACT_UNSPEC; + * + * } + */ + +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}, +}; + +#define CLS_Q_INSNS_CNT \ + (sizeof(cls_q_insns) / sizeof(cls_q_insns[0])) + +/** + * 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 bpf_load_cls_q_insns(__u32 queue_idx) +{ + cls_q_insns[1].imm = queue_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)cls_q_insns, + CLS_Q_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches tailing section + * see tap_bpf_program.c file + * + * __section("tailing") int + * tail(struct __sk_buff *skb) + * { + * skb_change_tail(skb, skb->len + sizeof(__u32), 0); + * + * return TC_ACT_UNSPEC; + * } + */ + +static struct bpf_insn tailing_insns[] = { + {0x61, 2, 1, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000026}, + {0x18, 0, 0, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define TAILING_INSNS_CNT \ + (sizeof(tailing_insns) / sizeof(tailing_insns[0])) + +/** + * Load BPF program (section tailing) into the kernel and return a bpf fd. + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_tailing_insns(void) +{ + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)tailing_insns, + TAILING_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches hash_pending section + * see tap_bpf_program.c file + * + * __section("hash_appending") int + * append_hash(struct __sk_buff *skb) + * { + * __u32 hash = skb->cb[0]; + * + * skb_store_bytes(skb, skb->len - sizeof(hash), &hash, sizeof(hash), 0); + * + * return TC_ACT_PIPE; + * } + */ + +static struct bpf_insn hash_appending_insns[] = { + {0x61, 2, 1, 48, 0x00000000}, + {0x63, 10, 2, -4, 0x00000000}, + {0x61, 2, 1, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0xbf, 3, 10, 0, 0x00000000}, + {0x07, 3, 0, 0, 0xfffffffc}, + {0xb7, 4, 0, 0, 0x00000004}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000009}, + {0xb7, 0, 0, 0, 0x00000003}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define HASH_APPENDING_INSNS_CNT \ + (sizeof(hash_appending_insns) / sizeof(hash_appending_insns[0])) + +/** + * Load BPF program into the kernel and return a bpf fd. + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_hash_appending_insns(void) +{ + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)hash_appending_insns, + HASH_APPENDING_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches queue_setting section + * see tap_bpf_program.c file + * + * static void __attribute__((always_inline)) + * __section("queue_setting") int + * set_queue(struct __sk_buff *skb) + * { + * __u32 key_idx = INV_KEY_IDX; + * __u64 hash = skb->cb[0]; + * struct rss_key *rsskey; + * __u32 queue = 0; + * + * rsskey = map_lookup_elem(&map_keys, &key_idx); + * if (rsskey && rsskey->nb_queues <= TAP_MAX_QUEUES) + * queue = rsskey->queues[(hash % rsskey->nb_queues) & + * (TAP_MAX_QUEUES - 1)]; + * + * skb->cb[1] = QUEUE_OFFSET + queue; + * + * return TC_ACT_RECLASSIFY; + * } + */ + +static struct bpf_insn queue_setting_insns[] = { + {0xbf, 6, 1, 0, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 7, 6, 48, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {0x00, 0, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000001}, + {0xb7, 1, 0, 0, 0x00000001}, + {0x15, 0, 0, 13, 0x00000000}, + {0x61, 2, 0, 200, 0x00000000}, + {0x25, 2, 0, 11, 0x00000010}, + {0x67, 7, 0, 0, 0x00000020}, + {0x77, 7, 0, 0, 0x00000020}, + {0xbf, 1, 7, 0, 0x00000000}, + {0x3f, 1, 2, 0, 0x00000000}, + {0x2f, 1, 2, 0, 0x00000000}, + {0x1f, 7, 1, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x0000000f}, + {0x67, 7, 0, 0, 0x00000002}, + {0x0f, 0, 7, 0, 0x00000000}, + {0x61, 1, 0, 136, 0x00000000}, + {0x07, 1, 0, 0, 0x00000001}, + {0x63, 6, 1, 52, 0x00000000}, + {0xb7, 0, 0, 0, 0x00000001}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define QUEUE_SETTING_INSNS_CNT \ + (sizeof(queue_setting_insns) / sizeof(queue_setting_insns[0])) + +/** + * Load BPF program (section queue_setting) 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 bpf_load_queue_setting_insns(__u32 queue_idx) +{ + queue_setting_insns[1].imm = queue_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)queue_setting_insns, + QUEUE_SETTING_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l2_src_hash section + * see tap_bpf_program.c file + * + * #define HASH(L) \ + * __section(#L) int \ + * L ## _hash(struct __sk_buff *skb) \ + * { \ + * return hash(skb, HASH_FIELD_ ## L); \ + * } + * + * HASH(L2_SRC) + */ + + +static struct bpf_insn l2_src_hash_insns[] = { + {0xbf, 7, 1, 0, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 9, 7, 76, 0x00000000}, + {0x61, 8, 7, 80, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 1, 7, 48, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {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, 543, 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, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x2d, 1, 8, 533, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000012}, + {0x69, 6, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x61, 2, 0, 128, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x1d, 3, 4, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0x57, 2, 0, 0, 0x00000002}, + {0x15, 2, 0, 508, 0x00000000}, + {0x7b, 10, 7, -64, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x0000000c}, + {0x2d, 1, 8, 517, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 5, 9, 6, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 7, 0, 4, 0x00000000}, + {0xbf, 1, 7, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 7, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 7, 0, 5, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 8, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 7, 0, 6, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 9, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 7, 0, 7, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 10, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 7, 0, 8, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x57, 7, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 7, 0, 0x00000000}, + {0x71, 5, 9, 11, 0x00000000}, + {0x67, 5, 0, 0, 0x00000038}, + {0xc7, 5, 0, 0, 0x00000038}, + {0x6d, 5, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 9, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 5, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003f}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000001}, + {0xb7, 5, 0, 0, 0x00000006}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 13, 0x00000000}, + {0x57, 6, 0, 0, 0x0000ffff}, + {0x15, 6, 0, 7, 0x0000dd86}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 6, 0, 10, 0x00000008}, + {0x0f, 9, 1, 0, 0x00000000}, + {0x07, 9, 0, 0, 0x00000014}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x2d, 9, 8, 6, 0x00000000}, + {0x05, 0, 0, 4, 0x00000000}, + {0x0f, 9, 1, 0, 0x00000000}, + {0x07, 9, 0, 0, 0x00000028}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x2d, 9, 8, 1, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define L2_SRC_HASH_INSNS_CNT \ + (sizeof(l2_src_hash_insns) / sizeof(l2_src_hash_insns[0])) + +/** + * Load BPF program (section l2_src_hash) into the kernel and return a bpf fd. + * + * @param key_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l2_src_hash_insns(__u32 key_idx) +{ + l2_src_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l2_src_hash_insns, + L2_SRC_HASH_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l2_dst_hash section + * see tap_bpf_program.c file + * + * HASH(L2_DST) + */ + +static struct bpf_insn l2_dst_hash_insns[] = { + {0xbf, 7, 1, 0, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 9, 7, 76, 0x00000000}, + {0x61, 8, 7, 80, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 1, 7, 48, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {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, 538, 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, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x2d, 1, 8, 528, 0x00000000}, + {0xb7, 1, 0, 0, 0x00000012}, + {0x69, 6, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x71, 2, 0, 128, 0x00000000}, + {0x57, 2, 0, 0, 0x00000001}, + {0x15, 2, 0, 508, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000006}, + {0x2d, 1, 8, 517, 0x00000000}, + {0x71, 1, 0, 1, 0x00000000}, + {0x67, 1, 0, 0, 0x00000010}, + {0x71, 6, 0, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000018}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 3, 9, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0xbf, 7, 5, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 5, 0, 4, 0x00000000}, + {0xbf, 1, 5, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 1, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 5, 0, 5, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 2, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 5, 0, 6, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 3, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 5, 0, 7, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 4, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 5, 0, 8, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 3, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 5, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0x71, 3, 9, 5, 0x00000000}, + {0x67, 3, 0, 0, 0x00000038}, + {0xc7, 3, 0, 0, 0x00000038}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x6d, 3, 2, 1, 0x00000000}, + {0xbf, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x71, 2, 0, 9, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000007}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x00000039}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000006}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003a}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000005}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003b}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000004}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003c}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000003}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003d}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0xbf, 5, 2, 0, 0x00000000}, + {0x77, 5, 0, 0, 0x00000002}, + {0x57, 5, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 5, 0, 0x00000000}, + {0xbf, 5, 3, 0, 0x00000000}, + {0x67, 5, 0, 0, 0x0000003e}, + {0xc7, 5, 0, 0, 0x0000003f}, + {0x5f, 5, 1, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003f}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x63, 7, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000000}, + {0xb7, 5, 0, 0, 0x00000000}, + {0x85, 0, 0, 0, 0x00000006}, + {0x05, 0, 0, 13, 0x00000000}, + {0x57, 6, 0, 0, 0x0000ffff}, + {0x15, 6, 0, 7, 0x0000dd86}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 6, 0, 10, 0x00000008}, + {0x0f, 9, 1, 0, 0x00000000}, + {0x07, 9, 0, 0, 0x00000014}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x2d, 9, 8, 6, 0x00000000}, + {0x05, 0, 0, 4, 0x00000000}, + {0x0f, 9, 1, 0, 0x00000000}, + {0x07, 9, 0, 0, 0x00000028}, + {0xb7, 7, 0, 0, 0x00000000}, + {0x2d, 9, 8, 1, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; +#define L2_DST_HASH_INSNS_CNT \ + (sizeof(l2_dst_hash_insns) / sizeof(l2_dst_hash_insns[0])) + +/** + * Load BPF program (section l2_dst_hash) into the kernel and return a bpf fd. + * + * @param key_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l2_dst_hash_insns(__u32 key_idx) +{ + l2_dst_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l2_dst_hash_insns, + L2_DST_HASH_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l3_dst_hash section + * see tap_bpf_program.c file + * + * HASH(L3_DST) + */ + + +static struct bpf_insn l3_dst_hash_insns[] = { + {0xbf, 7, 1, 0, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 9, 7, 76, 0x00000000}, + {0x61, 8, 7, 80, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 1, 7, 48, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {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, 1689, 0x00000000}, + {0xb7, 5, 0, 0, 0x0000000e}, + {0x61, 1, 7, 20, 0x00000000}, + {0x15, 1, 0, 10, 0x00000000}, + {0x61, 1, 7, 28, 0x00000000}, + {0x55, 1, 0, 8, 0x0000a888}, + {0xbf, 2, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x2d, 1, 8, 1679, 0x00000000}, + {0xb7, 5, 0, 0, 0x00000012}, + {0x69, 6, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x61, 1, 0, 128, 0x00000000}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0xb7, 2, 0, 0, 0x00000000}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0x7b, 10, 7, -64, 0x00000000}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x0000ffff}, + {0x15, 6, 0, 355, 0x0000dd86}, + {0x55, 6, 0, 1661, 0x00000008}, + {0x0f, 9, 5, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000014}, + {0x2d, 2, 8, 1656, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x1d, 2, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000004}, + {0x57, 1, 0, 0, 0x00000008}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 1648, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x71, 7, 8, 16, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 17, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 5, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 18, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 6, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 19, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 7, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0x07, 5, 0, 0, 0x00000010}, + {0x05, 0, 0, 1301, 0x00000000}, + {0x0f, 9, 5, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000028}, + {0x2d, 2, 8, 1302, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0x57, 2, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x1d, 2, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000010}, + {0x57, 1, 0, 0, 0x00000008}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 1294, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x71, 7, 8, 24, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 25, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 5, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 26, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 6, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 27, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 7, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 28, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 8, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 29, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 9, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 30, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 10, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 31, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 11, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 32, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 12, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 33, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 13, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 34, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 14, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 35, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 15, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 36, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 16, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 37, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 17, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 38, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 18, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 39, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 19, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0x07, 5, 0, 0, 0x00000018}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000003}, + {0x85, 0, 0, 0, 0x00000006}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define L3_DST_HASH_INSNS_CNT \ + (sizeof(l3_dst_hash_insns) / sizeof(l3_dst_hash_insns[0])) + +/** + * Load BPF program (section l3_dst_hash) into the kernel and return a bpf fd. + * + * @param queue_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l3_dst_hash_insns(__u32 key_idx) +{ + l3_dst_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l3_dst_hash_insns, + L3_DST_HASH_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l3_src_hash section + * see tap_bpf_program.c file + * + * HASH(L3_SRC) + */ + +static struct bpf_insn l3_src_hash_insns[] = { + {0xbf, 7, 1, 0, 0x00000000}, + {0x61, 6, 7, 16, 0x00000000}, + {0x61, 9, 7, 76, 0x00000000}, + {0x61, 8, 7, 80, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 1, 7, 48, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {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, 1679, 0x00000000}, + {0xb7, 5, 0, 0, 0x0000000e}, + {0x61, 1, 7, 20, 0x00000000}, + {0x15, 1, 0, 10, 0x00000000}, + {0x61, 1, 7, 28, 0x00000000}, + {0x55, 1, 0, 8, 0x0000a888}, + {0xbf, 2, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x2d, 1, 8, 1669, 0x00000000}, + {0xb7, 5, 0, 0, 0x00000012}, + {0x69, 6, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x61, 1, 0, 128, 0x00000000}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0xb7, 2, 0, 0, 0x00000000}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0x7b, 10, 7, -64, 0x00000000}, + {0x57, 6, 0, 0, 0x0000ffff}, + {0x15, 6, 0, 351, 0x0000dd86}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 6, 0, 1651, 0x00000008}, + {0x0f, 9, 5, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000014}, + {0x2d, 2, 8, 1646, 0x00000000}, + {0x57, 1, 0, 0, 0x00000004}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 1643, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x71, 7, 8, 12, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 13, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 5, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 14, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 6, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 15, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 7, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0x07, 5, 0, 0, 0x0000000c}, + {0x05, 0, 0, 1296, 0x00000000}, + {0x0f, 9, 5, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x07, 2, 0, 0, 0x00000028}, + {0x2d, 2, 8, 1297, 0x00000000}, + {0x57, 1, 0, 0, 0x00000004}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 1294, 0x00000000}, + {0x71, 1, 0, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000018}, + {0x71, 6, 0, 1, 0x00000000}, + {0x67, 6, 0, 0, 0x00000010}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 6, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 6, 1, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x71, 7, 8, 8, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 4, 6, 0, 0x00000000}, + {0x79, 1, 10, -56, 0x00000000}, + {0xaf, 4, 1, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 9, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 5, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 10, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 6, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 11, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 7, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 12, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 8, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 13, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 9, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 14, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 10, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 15, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 11, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 16, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 12, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 17, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 13, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 18, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 14, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 19, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 15, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 20, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 16, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 21, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 17, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 22, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 6, 0, 0, 0x00000000}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0x71, 9, 0, 18, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000007}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x00000039}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000006}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003a}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000005}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003b}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000004}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003c}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000003}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003d}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000002}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0xbf, 6, 7, 0, 0x00000000}, + {0x67, 6, 0, 0, 0x0000003e}, + {0xc7, 6, 0, 0, 0x0000003f}, + {0x5f, 6, 1, 0, 0x00000000}, + {0xaf, 4, 6, 0, 0x00000000}, + {0xbf, 6, 9, 0, 0x00000000}, + {0x77, 6, 0, 0, 0x00000001}, + {0x57, 6, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 6, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 8, 23, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 19, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x79, 1, 10, -64, 0x00000000}, + {0x63, 1, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0x07, 5, 0, 0, 0x00000008}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000002}, + {0x85, 0, 0, 0, 0x00000006}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define L3_SRC_HASH_INSNS_CNT \ + (sizeof(l3_src_hash_insns) / sizeof(l3_src_hash_insns[0])) + +/** + * Load BPF program (section l3_src_hash) into the kernel and return a bpf fd. + * + * @param queue_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l3_src_hash_insns(__u32 key_idx) +{ + l3_src_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l3_src_hash_insns, + L3_SRC_HASH_INSNS_CNT, + "GPL", 0); +} + +/* + * The next bpf_insn array matches l4_src_hash section + * see tap_bpf_program.c file + * + * HASH(L4_SRC) + */ + +static struct bpf_insn l4_src_hash_insns[] = { + {0xbf, 6, 1, 0, 0x00000000}, + {0x61, 8, 6, 16, 0x00000000}, + {0x61, 9, 6, 76, 0x00000000}, + {0x61, 1, 6, 80, 0x00000000}, + {0x7b, 10, 1, -56, 0x00000000}, + {0x18, 1, 0, 0, 0xdeadbeef}, + {0x00, 0, 0, 0, 0x00000000}, + {0x63, 10, 1, -4, 0x00000000}, + {0x61, 7, 6, 48, 0x00000000}, + {0xbf, 2, 10, 0, 0x00000000}, + {0x07, 2, 0, 0, 0xfffffffc}, + {0x18, 1, 1, 0, 0xffffffff}, + {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, 272, 0x00000000}, + {0xb7, 4, 0, 0, 0x0000000e}, + {0x61, 1, 6, 20, 0x00000000}, + {0x15, 1, 0, 11, 0x00000000}, + {0x61, 1, 6, 28, 0x00000000}, + {0x55, 1, 0, 9, 0x0000a888}, + {0xbf, 2, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000012}, + {0x79, 3, 10, -56, 0x00000000}, + {0x2d, 1, 3, 261, 0x00000000}, + {0xb7, 4, 0, 0, 0x00000012}, + {0x69, 8, 9, 16, 0x00000000}, + {0xbf, 7, 2, 0, 0x00000000}, + {0x61, 1, 0, 128, 0x00000000}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000001}, + {0xb7, 2, 0, 0, 0x00000000}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0xbf, 3, 1, 0, 0x00000000}, + {0x57, 3, 0, 0, 0x00000002}, + {0x1d, 3, 2, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000006}, + {0x57, 8, 0, 0, 0x0000ffff}, + {0x15, 8, 0, 24, 0x0000dd86}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 8, 0, 243, 0x00000008}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x0f, 2, 4, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x07, 3, 0, 0, 0x00000014}, + {0x79, 8, 10, -56, 0x00000000}, + {0x2d, 3, 8, 236, 0x00000000}, + {0xbf, 7, 4, 0, 0x00000000}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x1d, 4, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000004}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000008}, + {0x1d, 4, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000004}, + {0xbf, 4, 7, 0, 0x00000000}, + {0x07, 4, 0, 0, 0x00000014}, + {0x07, 2, 0, 0, 0x00000009}, + {0x05, 0, 0, 21, 0x00000000}, + {0xbf, 5, 7, 0, 0x00000000}, + {0xbf, 2, 9, 0, 0x00000000}, + {0x0f, 2, 4, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x07, 3, 0, 0, 0x00000028}, + {0x79, 8, 10, -56, 0x00000000}, + {0x2d, 3, 8, 214, 0x00000000}, + {0xbf, 7, 4, 0, 0x00000000}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000004}, + {0xb7, 3, 0, 0, 0x00000000}, + {0x1d, 4, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000010}, + {0xbf, 4, 1, 0, 0x00000000}, + {0x57, 4, 0, 0, 0x00000008}, + {0x1d, 4, 3, 1, 0x00000000}, + {0x07, 0, 0, 0, 0x00000010}, + {0xbf, 4, 7, 0, 0x00000000}, + {0x07, 4, 0, 0, 0x00000028}, + {0x07, 2, 0, 0, 0x00000006}, + {0x71, 2, 2, 0, 0x00000000}, + {0x15, 2, 0, 2, 0x00000011}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x55, 2, 0, 197, 0x00000006}, + {0x57, 1, 0, 0, 0x00000010}, + {0xb7, 7, 0, 0, 0x00000003}, + {0x15, 1, 0, 194, 0x00000000}, + {0xbf, 3, 9, 0, 0x00000000}, + {0x0f, 3, 4, 0, 0x00000000}, + {0xb7, 7, 0, 0, 0x00000000}, + {0xbf, 1, 3, 0, 0x00000000}, + {0x07, 1, 0, 0, 0x00000002}, + {0x79, 2, 10, -56, 0x00000000}, + {0x2d, 1, 2, 187, 0x00000000}, + {0x7b, 10, 4, -56, 0x00000000}, + {0x71, 1, 0, 1, 0x00000000}, + {0x67, 1, 0, 0, 0x00000010}, + {0x71, 8, 0, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x00000018}, + {0x4f, 8, 1, 0, 0x00000000}, + {0x71, 1, 0, 2, 0x00000000}, + {0x67, 1, 0, 0, 0x00000008}, + {0x4f, 8, 1, 0, 0x00000000}, + {0x71, 1, 0, 3, 0x00000000}, + {0x4f, 8, 1, 0, 0x00000000}, + {0x71, 7, 3, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 2, 0, 0, 0x00000000}, + {0xb7, 1, 0, 0, 0xffffffff}, + {0xb7, 4, 0, 0, 0x00000000}, + {0x6d, 7, 1, 1, 0x00000000}, + {0xbf, 4, 8, 0, 0x00000000}, + {0xaf, 4, 5, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x00000001}, + {0x71, 9, 0, 4, 0x00000000}, + {0xbf, 1, 9, 0, 0x00000000}, + {0x77, 1, 0, 0, 0x00000007}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x00000039}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000006}, + {0x57, 8, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003a}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000005}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003b}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000004}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003c}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000003}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003d}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000002}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0xbf, 8, 7, 0, 0x00000000}, + {0x67, 8, 0, 0, 0x0000003e}, + {0xc7, 8, 0, 0, 0x0000003f}, + {0x5f, 8, 1, 0, 0x00000000}, + {0xaf, 4, 8, 0, 0x00000000}, + {0xbf, 8, 9, 0, 0x00000000}, + {0x77, 8, 0, 0, 0x00000001}, + {0x57, 8, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 8, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x57, 9, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 9, 0, 0x00000000}, + {0x71, 7, 3, 1, 0x00000000}, + {0x67, 7, 0, 0, 0x00000038}, + {0xc7, 7, 0, 0, 0x00000038}, + {0xb7, 3, 0, 0, 0xffffffff}, + {0x6d, 7, 3, 1, 0x00000000}, + {0xbf, 2, 1, 0, 0x00000000}, + {0xaf, 4, 2, 0, 0x00000000}, + {0x71, 2, 0, 5, 0x00000000}, + {0x67, 1, 0, 0, 0x00000001}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000007}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x00000039}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000006}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003a}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000005}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003b}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000004}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003c}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000003}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003d}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0xbf, 3, 2, 0, 0x00000000}, + {0x77, 3, 0, 0, 0x00000002}, + {0x57, 3, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 3, 0, 0x00000000}, + {0xbf, 3, 7, 0, 0x00000000}, + {0x67, 3, 0, 0, 0x0000003e}, + {0xc7, 3, 0, 0, 0x0000003f}, + {0x5f, 3, 1, 0, 0x00000000}, + {0xaf, 4, 3, 0, 0x00000000}, + {0x77, 2, 0, 0, 0x00000001}, + {0x57, 2, 0, 0, 0x00000001}, + {0x67, 1, 0, 0, 0x00000001}, + {0x4f, 1, 2, 0, 0x00000000}, + {0x67, 7, 0, 0, 0x0000003f}, + {0xc7, 7, 0, 0, 0x0000003f}, + {0x5f, 7, 1, 0, 0x00000000}, + {0xaf, 4, 7, 0, 0x00000000}, + {0x63, 6, 4, 48, 0x00000000}, + {0x18, 1, 0, 0, 0x25203d20}, + {0x00, 0, 0, 0, 0x000a2964}, + {0x7b, 10, 1, -24, 0x00000000}, + {0x18, 1, 0, 0, 0x20782520}, + {0x00, 0, 0, 0, 0x66666f28}, + {0x7b, 10, 1, -32, 0x00000000}, + {0x18, 1, 0, 0, 0x6168203a}, + {0x00, 0, 0, 0, 0x3d206873}, + {0x7b, 10, 1, -40, 0x00000000}, + {0x18, 1, 0, 0, 0x68736168}, + {0x00, 0, 0, 0, 0x29642528}, + {0x7b, 10, 1, -48, 0x00000000}, + {0xbf, 1, 10, 0, 0x00000000}, + {0x07, 1, 0, 0, 0xffffffd0}, + {0xb7, 2, 0, 0, 0x00000020}, + {0xb7, 3, 0, 0, 0x00000004}, + {0x79, 5, 10, -56, 0x00000000}, + {0x85, 0, 0, 0, 0x00000006}, + {0xb7, 7, 0, 0, 0x00000003}, + {0xbf, 0, 7, 0, 0x00000000}, + {0x95, 0, 0, 0, 0x00000000}, +}; + +#define L4_SRC_HASH_INSNS_CNT \ + (sizeof(l4_src_hash_insns) / sizeof(l4_src_hash_insns[0])) + +/** + * Load BPF program (section l4_src_hash) into the kernel and return a bpf fd. + * + * @param queue_idx + * RSS MAP key index + * + * @return + * -1 if the BPF program couldn't be loaded. An fd (int) otherwise. + */ +int bpf_load_l4_src_hash_insns(__u32 key_idx) +{ + l4_src_hash_insns[4].imm = key_idx; + + return bpf_load(BPF_PROG_TYPE_SCHED_ACT, + (struct bpf_insn *)l4_src_hash_insns, + L4_SRC_HASH_INSNS_CNT, + "GPL", 0); +} + +#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 + +static inline __u64 ptr_to_u64(const void *ptr) +{ + return (__u64)(unsigned long)ptr; +} + +static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr, + unsigned int size) +{ + return syscall(__NR_bpf, cmd, attr, size); +} + +int bpf_load(enum bpf_prog_type type, + const struct bpf_insn *insns, + size_t insns_cnt, + const char *license, + __u32 kern_version) +{ + 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 = kern_version; + + 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..e1ae0c5 --- /dev/null +++ b/drivers/net/tap/tap_bpf_program.c @@ -0,0 +1,321 @@ +/*- + * BSD LICENSE + * + * Copyright 2017 6WIND S.A. + * Copyright 2017 Mellanox. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * * Neither the name of 6WIND S.A. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* BPF helper functions for our example. */ +#include "tap_bpf_api.h" +#include "tap_bpf_shared.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 + +#define INV_KEY_IDX 0xdeadbeef + +struct vlan_hdr { + __be16 proto; + __be16 tci; +}; + +__section("maps") +struct bpf_elf_map 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 = INV_KEY_IDX; + __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; +} + +__section("tailing") int +tail(struct __sk_buff *skb) +{ + skb_change_tail(skb, skb->len + sizeof(__u32), 0); + + return TC_ACT_UNSPEC; +} + +static void __attribute__((always_inline)) +toeplitz_hash(__u32 *hash, __u8 *key, __u32 *v, __u8 *data, __u8 data_len) +{ + u_int i, b; + +#pragma unroll + for (i = 0; i < data_len; i++) { +#pragma unroll + for (b = 0; b < 8; b++) { + if (data[i] & (1 << (7 - b))) + *hash ^= *v; + *v <<= 1; + if (key[i + 4] & (1 << (7 - b))) + *v |= 1; + } + } +} + +static int __attribute__((always_inline)) +hash(struct __sk_buff *skb, enum hash_field f) +{ + void *data_end = (void *)(long)skb->data_end; + void *data = (void *)(long)skb->data; + __u16 proto = (__u16)skb->protocol; + __u32 key_idx = INV_KEY_IDX; + __u32 hash = skb->cb[0]; + struct rss_key *rsskey; + __u64 off = ETH_HLEN; + __u8 ip_proto = 0; + __u8 *key = 0; + __u32 v, len; + + 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 (rsskey->hash_fields & (1 << HASH_FIELD_L2_DST)) { + if (f == HASH_FIELD_L2_DST) { + v = (key[0] << 24) + (key[1] << 16) + (key[2] << 8) + key[3]; + if (data + ETH_ALEN > data_end) + return TC_ACT_OK; + toeplitz_hash(&hash, key, &v, data, ETH_ALEN); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], 0); + return TC_ACT_PIPE; + } + key += ETH_ALEN; + } + if (rsskey->hash_fields & (1 << HASH_FIELD_L2_SRC)) { + if (f == HASH_FIELD_L2_SRC) { + v = (key[0] << 24) + (key[1] << 16) + (key[2] << 8) + key[3]; + if (data + ETH_ALEN * 2 > data_end) + return TC_ACT_OK; + toeplitz_hash(&hash, key, &v, data + ETH_ALEN, ETH_ALEN); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], ETH_ALEN); + return TC_ACT_PIPE; + } + key += ETH_ALEN; + } + + if (proto == htons(ETH_P_IP)) { + struct iphdr *ip; + + if (data + off + sizeof(struct iphdr) > data_end) + return TC_ACT_OK; + ip = data + off; + ip_proto = ip->protocol; + + if (rsskey->hash_fields & (1 << HASH_FIELD_L3_SRC)) { + if (f == HASH_FIELD_L3_SRC) { + v = (key[0] << 24) + (key[1] << 16) + + (key[2] << 8) + key[3]; + toeplitz_hash(&hash, key, &v, data + off + + offsetof(struct iphdr, saddr), + sizeof(__u32)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], + off + offsetof(struct iphdr, saddr)); + return TC_ACT_PIPE; + } + key += sizeof(__u32); + } + if (rsskey->hash_fields & (1 << HASH_FIELD_L3_DST)) { + if (f == HASH_FIELD_L3_DST) { + v = (key[0] << 24) + (key[1] << 16) + + (key[2] << 8) + key[3]; + toeplitz_hash(&hash, key, &v, data + off + + offsetof(struct iphdr, daddr), + sizeof(__u32)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], + off + offsetof(struct iphdr, daddr)); + return TC_ACT_PIPE; + } + key += sizeof(__u32); + } + off += sizeof(struct iphdr); + } else if (proto == htons(ETH_P_IPV6)) { + struct ipv6hdr *ip; + + if (data + off + sizeof(struct ipv6hdr) > data_end) + return TC_ACT_OK; + ip = data + off; + ip_proto = ip->nexthdr; + + if (rsskey->hash_fields & (1 << HASH_FIELD_L3_SRC)) { + if (f == HASH_FIELD_L3_SRC) { + v = (key[0] << 24) + (key[1] << 16) + + (key[2] << 8) + key[3]; + toeplitz_hash(&hash, key, &v, data + off + + offsetof(struct ipv6hdr, saddr), + sizeof(struct in6_addr)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], + off + offsetof(struct ipv6hdr, saddr)); + return TC_ACT_PIPE; + } + key += sizeof(struct in6_addr); + } + if (rsskey->hash_fields & (1 << HASH_FIELD_L3_DST)) { + if (f == HASH_FIELD_L3_DST) { + v = (key[0] << 24) + (key[1] << 16) + + (key[2] << 8) + key[3]; + toeplitz_hash(&hash, key, &v, data + off + + offsetof(struct ipv6hdr, daddr), + sizeof(struct in6_addr)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], + off + offsetof(struct ipv6hdr, daddr)); + return TC_ACT_PIPE; + } + key += sizeof(struct in6_addr); + } + off += sizeof(struct ipv6hdr); + } else { + /* Unknown protocol: stop hashing there */ + return TC_ACT_PIPE; + } + + /* Unknown ip_proto: stop hashing there */ + if ((ip_proto == IPPROTO_TCP || ip_proto == IPPROTO_UDP) && + (rsskey->hash_fields & (1 << HASH_FIELD_L4_SRC)) && + (f == HASH_FIELD_L4_SRC)) { + v = (key[0] << 24) + (key[1] << 16) + (key[2] << 8) + key[3]; + if (data + off + sizeof(__u16) > data_end) + return TC_ACT_OK; + toeplitz_hash(&hash, key, &v, data + off, + sizeof(__u16)); + skb->cb[0] = hash; + printt("hash(%d): hash = %x (off = %d)\n", + f, skb->cb[0], off); + return TC_ACT_PIPE; + } + + return TC_ACT_PIPE; +} + +#define HASH(L) \ + __section(#L) int \ + L ## _hash(struct __sk_buff *skb) \ + { \ + return hash(skb, HASH_FIELD_ ## L); \ + } + +HASH(L2_DST) + +HASH(L2_SRC) + +HASH(L3_SRC) + +HASH(L3_DST) + +HASH(L4_SRC) + +__section("hash_appending") int +append_hash(struct __sk_buff *skb) +{ + __u32 hash = skb->cb[0]; + + skb_store_bytes(skb, skb->len - sizeof(hash), &hash, sizeof(hash), 0); + + return TC_ACT_PIPE; +} + +__section("queue_setting") int +set_queue(struct __sk_buff *skb) +{ + __u32 key_idx = INV_KEY_IDX; + __u64 hash = skb->cb[0]; + struct rss_key *rsskey; + __u32 queue = 0; + + rsskey = map_lookup_elem(&map_keys, &key_idx); + if (rsskey && rsskey->nb_queues <= TAP_MAX_QUEUES) + queue = rsskey->queues[(hash % rsskey->nb_queues) & + (TAP_MAX_QUEUES - 1)]; + + skb->cb[1] = QUEUE_OFFSET + queue; + + return TC_ACT_RECLASSIFY; +} + +BPF_LICENSE("GPL"); diff --git a/drivers/net/tap/tap_bpf_shared.h b/drivers/net/tap/tap_bpf_shared.h new file mode 100644 index 0000000..6895cf4 --- /dev/null +++ b/drivers/net/tap/tap_bpf_shared.h @@ -0,0 +1,40 @@ +#ifndef __BPF_SHARED__ +#define __BPF_SHARED__ + +#define TAP_MAX_QUEUES 16 + +enum hash_field { + HASH_FIELD_L2_DST, + HASH_FIELD_L2_SRC, + HASH_FIELD_L3_SRC, + HASH_FIELD_L3_DST, + HASH_FIELD_L4_SRC, +}; + +enum { + BPF_MAP_ID_KEY, + BPF_MAP_ID_SIMPLE, +}; + +struct rss_key { + __u32 key[32]; + __u32 hash_fields; + __u32 key_size; + __u32 queues[TAP_MAX_QUEUES]; + __u32 nb_queues; +}; + +int bpf_load_cls_q_insns(__u32 queue_idx); +int bpf_load_tailing_insns(void); +int bpf_load_hash_appending_insns(void); +int bpf_load_queue_setting_insns(__u32 queue_idx); +int bpf_load_l2_src_hash_insns(__u32 key_idx); +int bpf_load_l2_dst_hash_insns(__u32 key_idx); +int bpf_load_l3_dst_hash_insns(__u32 key_idx); +int bpf_load_l3_src_hash_insns(__u32 key_idx); +int bpf_load_l4_src_hash_insns(__u32 key_idx); + +int bpf_load(enum bpf_prog_type type, const struct bpf_insn *insns, + size_t insns_cnt, const char *license, __u32 kern_version); + +#endif /* __BPF_SHARED__ */ diff --git a/drivers/net/tap/tap_flow.c b/drivers/net/tap/tap_flow.c index 43bab7d..355f493 100644 --- a/drivers/net/tap/tap_flow.c +++ b/drivers/net/tap/tap_flow.c @@ -46,6 +46,8 @@ #include #include +#include + #ifndef HAVE_TC_FLOWER /* * For kernels < 4.2, this enum is not defined. Runtime checks will be made to @@ -1673,7 +1675,9 @@ static int rss_enable(struct pmd_internals *pmd) }, }; - bpf_fd = 0; + bpf_fd = bpf_load_cls_q_insns(i); + if (bpf_fd == -1) + return -1; rss_flow = rte_malloc(__func__, sizeof(struct rte_flow), 0); if (!rss_flow) { @@ -1708,6 +1712,11 @@ static int rss_enable(struct pmd_internals *pmd) LIST_INSERT_HEAD(&pmd->rss_flows, rss_flow, next); } + /* Add a rule that adds 4 bytes at packet's end to hold the hash */ + bpf_fd = bpf_load_tailing_insns(); + if (bpf_fd == -1) + return -1; + snprintf(annotation, sizeof(annotation), "%s:[%s]", BPF_PROGRAM, section); rss_flow = rte_malloc(__func__, sizeof(struct rte_flow), 0); -- 1.8.3.1