From a245b2ff4efde326c080f629d94d719e469c1a1a Mon Sep 17 00:00:00 2001 From: Fuzzbawls Date: Wed, 11 Aug 2021 23:00:39 -0700 Subject: [PATCH 1/2] contrib: generate-seeds.py generates output in BIP155 format --- contrib/seeds/generate-seeds.py | 105 +++++++++++++++++++------------- 1 file changed, 63 insertions(+), 42 deletions(-) diff --git a/contrib/seeds/generate-seeds.py b/contrib/seeds/generate-seeds.py index 8bad4b584b4c..cc933c528f00 100644 --- a/contrib/seeds/generate-seeds.py +++ b/contrib/seeds/generate-seeds.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# Copyright (c) 2014-2017 Wladimir J. van der Laan +# Copyright (c) 2014-2021 The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. ''' @@ -13,19 +13,13 @@ These files must consist of lines in the format - : - [] []: - .onion - 0xDDBBCCAA (IPv4 little-endian old pnSeeds format) + .onion: The output will be two data structures with the peers in binary format: - static SeedSpec6 pnSeed6_main[]={ - ... - } - static SeedSpec6 pnSeed6_test[]={ + static const uint8_t chainparams_seed_{main,test}[]={ ... } @@ -33,24 +27,33 @@ ''' from base64 import b32decode -from binascii import a2b_hex +from enum import Enum +import struct import sys import os import re -# ipv4 in ipv6 prefix -pchIPv4 = bytearray([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xff, 0xff]) -# tor-specific ipv6 prefix -pchOnionCat = bytearray([0xFD,0x87,0xD8,0x7E,0xEB,0x43]) - -def name_to_ipv6(addr): - if len(addr)>6 and addr.endswith('.onion'): +class BIP155Network(Enum): + IPV4 = 1 + IPV6 = 2 + TORV2 = 3 + TORV3 = 4 + I2P = 5 + CJDNS = 6 + +def name_to_bip155(addr): + '''Convert address string to BIP155 (networkID, addr) tuple.''' + if addr.endswith('.onion'): vchAddr = b32decode(addr[0:-6], True) - if len(vchAddr) != 16-len(pchOnionCat): + if len(vchAddr) == 10: + return (BIP155Network.TORV2, vchAddr) + elif len(vchAddr) == 35: + assert(vchAddr[34] == 3) + return (BIP155Network.TORV3, vchAddr[:32]) + else: raise ValueError('Invalid onion %s' % vchAddr) - return pchOnionCat + vchAddr elif '.' in addr: # IPv4 - return pchIPv4 + bytearray((int(x) for x in addr.split('.'))) + return (BIP155Network.IPV4, bytes((int(x) for x in addr.split('.')))) elif ':' in addr: # IPv6 sub = [[], []] # prefix, suffix x = 0 @@ -67,13 +70,12 @@ def name_to_ipv6(addr): sub[x].append(val & 0xff) nullbytes = 16 - len(sub[0]) - len(sub[1]) assert((x == 0 and nullbytes == 0) or (x == 1 and nullbytes > 0)) - return bytearray(sub[0] + ([0] * nullbytes) + sub[1]) - elif addr.startswith('0x'): # IPv4-in-little-endian - return pchIPv4 + bytearray(reversed(a2b_hex(addr[2:]))) + return (BIP155Network.IPV6, bytes(sub[0] + ([0] * nullbytes) + sub[1])) else: raise ValueError('Could not parse address %s' % addr) -def parse_spec(s, defaultport): +def parse_spec(s): + '''Convert endpoint string to BIP155 (networkID, addr, port) tuple.''' match = re.match(r'\[([0-9a-fA-F:]+)\](?::([0-9]+))?$', s) if match: # ipv6 host = match.group(1) @@ -85,17 +87,39 @@ def parse_spec(s, defaultport): (host,_,port) = s.partition(':') if not port: - port = defaultport + port = 0 else: port = int(port) - host = name_to_ipv6(host) + host = name_to_bip155(host) - return (host,port) + return host + (port, ) -def process_nodes(g, f, structname, defaultport): - g.write('static SeedSpec6 %s[] = {\n' % structname) - first = True +def ser_compact_size(l): + r = b"" + if l < 253: + r = struct.pack("B", l) + elif l < 0x10000: + r = struct.pack("H', spec[2]) + return r + +def process_nodes(g, f, structname): + g.write('static const uint8_t %s[] = {\n' % structname) for line in f: comment = line.find('#') if comment != -1: @@ -103,14 +127,12 @@ def process_nodes(g, f, structname, defaultport): line = line.strip() if not line: continue - if not first: - g.write(',\n') - first = False - (host,port) = parse_spec(line, defaultport) - hoststr = ','.join(('0x%02x' % b) for b in host) - g.write(' {{%s}, %i}' % (hoststr, port)) - g.write('\n};\n') + spec = parse_spec(line) + blob = bip155_serialize(spec) + hoststr = ','.join(('0x%02x' % b) for b in blob) + g.write(f' {hoststr},\n') + g.write('};\n') def main(): if len(sys.argv)<2: @@ -121,17 +143,16 @@ def main(): g.write('#ifndef BITCOIN_CHAINPARAMSSEEDS_H\n') g.write('#define BITCOIN_CHAINPARAMSSEEDS_H\n') g.write('/**\n') - g.write(' * List of fixed seed nodes for the bitcoin network\n') + g.write(' * List of fixed seed nodes for the PIVX network\n') g.write(' * AUTOGENERATED by contrib/seeds/generate-seeds.py\n') g.write(' *\n') - g.write(' * Each line contains a 16-byte IPv6 address and a port.\n') - g.write(' * IPv4 as well as onion addresses are wrapped inside an IPv6 address accordingly.\n') + g.write(' * Each line contains a BIP155 serialized (networkID, addr, port) tuple.\n') g.write(' */\n') with open(os.path.join(indir,'nodes_main.txt'), 'r', encoding="utf8") as f: - process_nodes(g, f, 'pnSeed6_main', 51472) + process_nodes(g, f, 'chainparams_seed_main') g.write('\n') with open(os.path.join(indir,'nodes_test.txt'), 'r', encoding="utf8") as f: - process_nodes(g, f, 'pnSeed6_test', 51474) + process_nodes(g, f, 'chainparams_seed_test') g.write('#endif // BITCOIN_CHAINPARAMSSEEDS_H\n') if __name__ == '__main__': From 4aec9352e245d1f44d6f746b1edf3bff2e093b29 Mon Sep 17 00:00:00 2001 From: Fuzzbawls Date: Thu, 12 Aug 2021 00:27:04 -0700 Subject: [PATCH 2/2] net: Deserialize hardcoded seeds from BIP155 blob Switch from IPv6 slot-based format to more compact and flexible BIP155 format. --- src/chainparams.cpp | 4 +- src/chainparams.h | 9 +- src/chainparamsseeds.h | 505 ++++++++++++++++++++++++++++------------- src/net.cpp | 17 +- 4 files changed, 355 insertions(+), 180 deletions(-) diff --git a/src/chainparams.cpp b/src/chainparams.cpp index 1f998f17aadb..b3eb7bb83ba7 100644 --- a/src/chainparams.cpp +++ b/src/chainparams.cpp @@ -243,7 +243,7 @@ class CMainParams : public CChainParams // BIP44 coin type is from https://github.com/satoshilabs/slips/blob/master/slip-0044.md base58Prefixes[EXT_COIN_TYPE] = {0x80, 0x00, 0x00, 0x77}; - vFixedSeeds = std::vector(pnSeed6_main, pnSeed6_main + ARRAYLEN(pnSeed6_main)); + vFixedSeeds = std::vector(std::begin(chainparams_seed_main), std::end(chainparams_seed_main)); // Reject non-standard transactions by default fRequireStandard = true; @@ -372,7 +372,7 @@ class CTestNetParams : public CChainParams // Testnet pivx BIP44 coin type is '1' (All coin's testnet default) base58Prefixes[EXT_COIN_TYPE] = {0x80, 0x00, 0x00, 0x01}; - vFixedSeeds = std::vector(pnSeed6_test, pnSeed6_test + ARRAYLEN(pnSeed6_test)); + vFixedSeeds = std::vector(std::begin(chainparams_seed_test), std::end(chainparams_seed_test)); fRequireStandard = false; diff --git a/src/chainparams.h b/src/chainparams.h index adfc063a47da..47b0309654b4 100644 --- a/src/chainparams.h +++ b/src/chainparams.h @@ -24,11 +24,6 @@ struct CDNSSeedData { CDNSSeedData(const std::string& strHost, bool supportsServiceBitsFilteringIn = false) : host(strHost), supportsServiceBitsFiltering(supportsServiceBitsFilteringIn) {} }; -struct SeedSpec6 { - uint8_t addr[16]; - uint16_t port; -}; - /** * CChainParams defines various tweakable parameters of a given instance of the * PIVX system. There are three: the main network on which people trade goods @@ -83,7 +78,7 @@ class CChainParams const std::vector& DNSSeeds() const { return vSeeds; } const std::vector& Base58Prefix(Base58Type type) const { return base58Prefixes[type]; } const std::string& Bech32HRP(Bech32Type type) const { return bech32HRPs[type]; } - const std::vector& FixedSeeds() const { return vFixedSeeds; } + const std::vector& FixedSeeds() const { return vFixedSeeds; } virtual const Checkpoints::CCheckpointData& Checkpoints() const = 0; bool IsRegTestNet() const { return NetworkIDString() == CBaseChainParams::REGTEST; } @@ -101,7 +96,7 @@ class CChainParams std::vector vSeeds; std::vector base58Prefixes[MAX_BASE58_TYPES]; std::string bech32HRPs[MAX_BECH32_TYPES]; - std::vector vFixedSeeds; + std::vector vFixedSeeds; bool fRequireStandard; }; diff --git a/src/chainparamsseeds.h b/src/chainparamsseeds.h index 0718da875375..e59547eae3bb 100644 --- a/src/chainparamsseeds.h +++ b/src/chainparamsseeds.h @@ -1,173 +1,352 @@ #ifndef BITCOIN_CHAINPARAMSSEEDS_H #define BITCOIN_CHAINPARAMSSEEDS_H /** - * List of fixed seed nodes for the bitcoin network + * List of fixed seed nodes for the PIVX network * AUTOGENERATED by contrib/seeds/generate-seeds.py * - * Each line contains a 16-byte IPv6 address and a port. - * IPv4 as well as onion addresses are wrapped inside an IPv6 address accordingly. + * Each line contains a BIP155 serialized (networkID, addr, port) tuple. */ -static SeedSpec6 pnSeed6_main[] = { - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x03,0x01,0x45,0xf6}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x05,0x4f,0x4f,0x09}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0d,0x4d,0x4c,0x31}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x0d,0x5e,0xbc,0x1b}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0x8a,0x10,0x5f}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x12,0x8a,0x25,0xcb}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0xc9,0x3d,0xb9}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0xd3,0x47,0x46}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x1f,0xd3,0x47,0xd2}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x25,0x2c,0x14,0x8c}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x28,0x75,0xd1,0x49}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x0c,0x20,0x3a}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x0d,0xe8,0xae}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x0f,0xa8,0x37}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x20,0xd9,0x2a}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x20,0xe4,0x57}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x21,0x21,0x0a}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x23,0xfb,0x45}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x51,0x94,0x1c}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2e,0x24,0x28,0xc9}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x60,0x0e,0x75}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2f,0x61,0xb3,0xeb}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x0f,0x64,0xea}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x26,0xe8,0x66}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x44,0xaf,0x01}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x34,0xc7,0xeb,0x5d}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3e,0xb2,0x18,0xf8}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x3e,0xd2,0x0a,0x98}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x40,0x38,0x1d,0x59}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x44,0x6f,0x54,0xe1}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4b,0xbc,0xe5,0xd1}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4c,0x5a,0x75,0x9b}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4d,0x36,0xd6,0x4a}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4d,0x37,0xd9,0x1b}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4d,0xaa,0x20,0x4f}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4e,0x80,0x63,0xe1}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x4f,0x8a,0x02,0xd2}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x50,0x65,0x1b,0x92}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x51,0x58,0xd2,0x31}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x52,0xd0,0x11,0xaa}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x53,0x63,0xf5,0x14}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x54,0x3b,0x6f,0xbc}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0x19,0x74,0x05}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0x95,0x8f,0x26}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xd6,0x2b,0xa4}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x55,0xd9,0xaa,0xce}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x58,0x77,0xa1,0x65}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0x28,0x00,0x44}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0x2f,0xa3,0x6d}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x59,0xa3,0xea,0xc3}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5d,0x63,0x00,0xf2}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5d,0x63,0x00,0xf4}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5d,0x63,0x00,0xf6}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5e,0xb0,0xed,0x71}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd8,0xb8,0x2d}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x5f,0xd9,0x4d,0xd1}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x60,0xe1,0xad,0x21}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0x80,0xe0,0xbc}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0x9c,0xfe,0x12}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0xed,0x02,0xbf}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0xa3,0x24,0xf1}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0xa3,0x24,0xf2}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0xa3,0x24,0xf4}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0xa3,0x24,0xf5}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x76,0xdc,0x6d,0x62}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x79,0x8d,0x58,0x44}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x86,0xd1,0x16,0xe3}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x8e,0x5d,0x98,0x99}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9e,0x45,0xd2,0x31}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x9f,0x41,0x8b,0xe1}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa3,0xac,0xa0,0x42}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x56,0x5b,0x15}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xa7,0x56,0x75,0xb6}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xac,0x68,0x4a,0x99}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xac,0x69,0xc6,0x76}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xac,0x69,0xc7,0x20}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xad,0xf9,0x27,0x72}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0x1f,0xb6,0xc8}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb0,0xdf,0x89,0xeb}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0x3e,0x3f,0xd1}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb2,0xee,0x6d,0x70}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x0d,0x26,0xf4}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0xb9,0x28,0xcf}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x44,0x2e,0x32}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xbc,0x7f,0xf9,0x1d}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc0,0xd2,0xda,0x8c}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0x24,0xed,0x1f}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc1,0x25,0xd5,0x18}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x87,0x54,0x6f}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x87,0x59,0x3f}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0xe4,0x0c,0x3d}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xca,0x05,0x15,0x1f}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcf,0xb4,0xee,0xc7}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xcf,0xf6,0x77,0x1b}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd4,0x18,0x66,0x01}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd4,0x56,0x72,0xcf}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd5,0x3b,0x7b,0x0c}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd5,0x9a,0xe7,0x27}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd5,0xca,0xff,0x23}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd8,0xbd,0x96,0x51}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd8,0xbd,0x96,0x8e}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd9,0x79,0x24,0xc8}, 51472}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xda,0xeb,0xb7,0x35}, 51472}, - {{0x20,0x01,0x0b,0xc8,0x18,0x24,0x1b,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 51472}, - {{0x24,0x02,0x9e,0x80,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x33,0x29}, 51472}, - {{0x26,0x00,0x2b,0x00,0xa2,0x14,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x08}, 51472}, - {{0x26,0x00,0x2b,0x00,0xa2,0x14,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x33}, 51472}, - {{0x26,0x00,0x2b,0x00,0xa2,0x14,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x53}, 51472}, - {{0x26,0x00,0x2b,0x00,0xa2,0x14,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x72}, 51472}, - {{0x26,0x02,0xff,0xc5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xc5,0x77,0x72}, 51472}, - {{0x26,0x02,0xff,0xc5,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xc5,0xed,0xaf}, 51472}, - {{0x2a,0x01,0x04,0xf8,0x02,0x21,0x11,0x42,0xd0,0x0d,0x00,0x00,0xba,0xbe,0xfa,0xce}, 51472}, - {{0x2a,0x01,0x04,0xf8,0x0c,0x2c,0x5a,0x2e,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 51472}, - {{0x2a,0x01,0x0e,0x0a,0x01,0xdc,0x02,0x40,0xd9,0x9b,0x2a,0xdf,0x28,0x83,0x0a,0xbd}, 51472}, - {{0x2a,0x02,0x01,0x68,0xac,0x05,0x00,0x03,0x00,0x00,0x02,0x42,0xac,0x11,0x00,0x04}, 51472}, - {{0x2a,0x02,0x01,0x68,0xac,0x05,0x00,0x03,0x00,0x00,0x02,0x42,0xac,0x11,0x00,0x05}, 51472}, - {{0x2a,0x02,0x25,0xb0,0xaa,0xaa,0xaa,0xaa,0xe8,0x05,0x43,0x4d,0x5b,0x1a,0x00,0x1f}, 51472}, - {{0x2a,0x07,0x57,0x41,0x00,0x00,0x09,0x37,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 51472}, - {{0x2a,0x07,0x57,0x41,0x00,0x00,0x0d,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 51472}, - {{0x2a,0x02,0x7b,0x40,0xc2,0x87,0x59,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 51472}, - {{0x26,0x02,0xff,0xc5,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xe0,0xa7}, 51472}, - {{0x26,0x02,0xff,0xc5,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3c,0xef}, 51472}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x08,0xe0,0x2d,0x64,0x78,0x9d,0x9c,0xf8,0xc1,0xe0}, 9960}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x15,0x45,0x35,0x43,0xe9,0x4f,0x14,0xc2,0xee,0x27}, 9911}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x29,0x3e,0xd9,0xd7,0xe7,0xd3,0xa1,0x51,0xfd,0x3d}, 8938}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x2b,0x27,0x3c,0x0c,0x29,0x56,0xdc,0xce,0x50,0xe3}, 9942}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x46,0xc2,0x43,0x2a,0x91,0x98,0x96,0xf8,0x56,0x2e}, 51472}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x44,0xa9,0xde,0xa1,0xe2,0x9e,0x94,0x34,0x01,0x6c}, 9906}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x5c,0xa9,0x86,0x4f,0xfd,0x6c,0xa6,0xad,0x1e,0x73}, 9831}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x5d,0xf2,0x8b,0x76,0xd9,0xc5,0xdf,0x24,0xcb,0x78}, 9940}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x6a,0x69,0x00,0xe0,0xa0,0x3b,0x38,0xb9,0xf1,0xde}, 51472}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x79,0xdb,0x2e,0x46,0x75,0xfe,0x5b,0x31,0x29,0x6f}, 9934}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x83,0xe0,0xc0,0xf6,0x57,0x1d,0x11,0x85,0xeb,0x2f}, 9929}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x8f,0x22,0xda,0xa3,0x6b,0x4e,0x64,0x79,0x8a,0xe7}, 9995}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x9a,0x61,0xff,0xa1,0x00,0x91,0xec,0x8d,0x0b,0x7c}, 9912}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x43,0xc8,0xda,0xb1,0x39,0x1f,0xc5,0x93,0x02,0xee}, 51472}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0xfe,0x65,0x5c,0xc5,0x5a,0xcb,0xa1,0xc1,0xcc,0xf3}, 51472}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x46,0xc2,0x43,0x2a,0x91,0x98,0x96,0xf8,0x56,0x2e}, 51472}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x54,0x41,0x0f,0x58,0x41,0x7b,0xe3,0x02,0x57,0x81}, 51472}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x7b,0xab,0x64,0x75,0x56,0xc7,0x2e,0x97,0x31,0x49}, 51472}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x6a,0x69,0x00,0xe0,0xa0,0x3b,0x38,0xb9,0xf1,0xde}, 51472} +static const uint8_t chainparams_seed_main[] = { + 0x01,0x04,0x02,0x38,0x74,0x61,0xc9,0x10, + 0x01,0x04,0x02,0x38,0x74,0x75,0xc9,0x10, + 0x01,0x04,0x02,0x38,0x74,0x97,0xc9,0x10, + 0x01,0x04,0x03,0x01,0x45,0xf6,0xc9,0x10, + 0x01,0x04,0x03,0x8c,0x43,0x49,0xc9,0x10, + 0x01,0x04,0x05,0x4f,0x4f,0x09,0xc9,0x10, + 0x01,0x04,0x05,0x84,0xbf,0xdb,0xc9,0x10, + 0x01,0x04,0x05,0xff,0x5a,0xea,0xc9,0x10, + 0x01,0x04,0x0d,0x5e,0xbc,0x1b,0xc9,0x10, + 0x01,0x04,0x18,0x44,0x8d,0xfa,0xc9,0x10, + 0x01,0x04,0x1f,0xb2,0x04,0x32,0xc9,0x10, + 0x01,0x04,0x1f,0xcc,0x93,0x38,0xc9,0x10, + 0x01,0x04,0x1f,0xd3,0x47,0x49,0xc9,0x10, + 0x01,0x04,0x1f,0xd3,0x47,0xd2,0xc9,0x10, + 0x01,0x04,0x25,0x8b,0x8b,0xa4,0xc9,0x10, + 0x01,0x04,0x2d,0x0d,0xe8,0xae,0xc9,0x10, + 0x01,0x04,0x2d,0x20,0x6b,0xcf,0xc9,0x10, + 0x01,0x04,0x2d,0x3a,0x34,0xf5,0xc9,0x10, + 0x01,0x04,0x2d,0x3a,0x3c,0x9e,0xc9,0x10, + 0x01,0x04,0x2d,0x4f,0x4a,0x77,0xc9,0x10, + 0x01,0x04,0x2e,0x13,0x22,0x17,0xc9,0x10, + 0x01,0x04,0x2e,0x24,0x28,0xc9,0xc9,0x10, + 0x01,0x04,0x2f,0x2c,0x24,0xe3,0xc9,0x10, + 0x01,0x04,0x2f,0xfe,0x59,0xbe,0xc9,0x10, + 0x01,0x04,0x32,0x1e,0x25,0x9c,0xc9,0x10, + 0x01,0x04,0x32,0x70,0x35,0x2e,0xc9,0x10, + 0x01,0x04,0x32,0x74,0x2b,0xc2,0xc9,0x10, + 0x01,0x04,0x32,0xdc,0x79,0xd3,0x19,0x68, + 0x01,0x04,0x33,0x0f,0xcd,0xeb,0xc9,0x10, + 0x01,0x04,0x33,0x44,0xae,0x97,0xe5,0x56, + 0x01,0x04,0x33,0x4d,0x41,0x6a,0xc9,0x10, + 0x01,0x04,0x34,0x4f,0x7f,0x6c,0xc9,0x10, + 0x01,0x04,0x3e,0x36,0xb7,0x6b,0xc9,0x10, + 0x01,0x04,0x3e,0x4b,0x91,0x18,0xc9,0x10, + 0x01,0x04,0x3e,0x4d,0x9c,0xc1,0xc9,0x10, + 0x01,0x04,0x3e,0xd2,0x0a,0x99,0xc9,0x10, + 0x01,0x04,0x40,0x13,0xd3,0x29,0xc9,0x10, + 0x01,0x04,0x40,0x2c,0x89,0xbf,0xc9,0x10, + 0x01,0x04,0x42,0xac,0x1b,0x26,0xc9,0x10, + 0x01,0x04,0x42,0xb5,0x21,0xc2,0xc9,0x10, + 0x01,0x04,0x43,0x52,0x22,0xe3,0xc9,0x10, + 0x01,0x04,0x44,0x04,0xb5,0xa4,0xc9,0x10, + 0x01,0x04,0x44,0x08,0x88,0x69,0xc9,0x10, + 0x01,0x04,0x44,0x45,0xa6,0xad,0xc9,0x10, + 0x01,0x04,0x45,0xf6,0x98,0xfa,0xc9,0x10, + 0x01,0x04,0x46,0x7a,0xda,0xdd,0xc9,0x10, + 0x01,0x04,0x49,0x0d,0x56,0xb9,0xc9,0x10, + 0x01,0x04,0x4d,0x36,0xd6,0x4a,0xc9,0x10, + 0x01,0x04,0x4e,0x1b,0x47,0xe8,0xc9,0x10, + 0x01,0x04,0x4e,0x2c,0xe4,0xd3,0xc9,0x10, + 0x01,0x04,0x4e,0x80,0x63,0xe1,0xc9,0x10, + 0x01,0x04,0x4f,0x64,0x40,0xc4,0xc9,0x10, + 0x01,0x04,0x4f,0x88,0x56,0x54,0xc9,0x10, + 0x01,0x04,0x50,0x65,0x1b,0x92,0xc9,0x10, + 0x01,0x04,0x50,0xd3,0xc5,0x31,0xc9,0x10, + 0x01,0x04,0x50,0xd3,0xe3,0xf3,0xc9,0x10, + 0x01,0x04,0x51,0x00,0xf5,0x72,0xc9,0x10, + 0x01,0x04,0x52,0x21,0xcb,0xe9,0xc9,0x10, + 0x01,0x04,0x52,0xd0,0x25,0x0d,0xc9,0x10, + 0x01,0x04,0x55,0x19,0x76,0x6e,0xc9,0x10, + 0x01,0x04,0x55,0xd6,0x48,0x77,0x22,0x46, + 0x01,0x04,0x55,0xd7,0x5d,0x04,0xc9,0x10, + 0x01,0x04,0x57,0x6a,0x14,0xf5,0xc9,0x10, + 0x01,0x04,0x58,0x56,0x74,0x8a,0xc9,0x10, + 0x01,0x04,0x58,0x63,0x65,0x43,0xc9,0x10, + 0x01,0x04,0x58,0x77,0xa1,0x65,0xc9,0x10, + 0x01,0x04,0x58,0x77,0xa1,0x66,0xc9,0x10, + 0x01,0x04,0x58,0x77,0xa1,0x67,0xc9,0x10, + 0x01,0x04,0x59,0xa3,0xea,0xc3,0xc9,0x10, + 0x01,0x04,0x5b,0xdc,0x7f,0xa3,0xc9,0x10, + 0x01,0x04,0x5d,0x63,0x00,0xf3,0xc9,0x10, + 0x01,0x04,0x5d,0x68,0xd2,0x49,0xc9,0x10, + 0x01,0x04,0x5e,0x10,0x72,0xb6,0xc9,0x10, + 0x01,0x04,0x5e,0x82,0xb0,0xc9,0xc9,0x11, + 0x01,0x04,0x5e,0x9c,0xbd,0x09,0xc9,0x10, + 0x01,0x04,0x5e,0xb0,0xe9,0xa9,0xc9,0x10, + 0x01,0x04,0x5e,0xb1,0xe8,0x29,0xc9,0x10, + 0x01,0x04,0x5e,0xca,0x2d,0x34,0xc9,0x10, + 0x01,0x04,0x5f,0x2e,0x72,0xdd,0xc9,0x10, + 0x01,0x04,0x5f,0x3d,0x2f,0x9d,0xc9,0x10, + 0x01,0x04,0x5f,0x6f,0xec,0x9d,0xc9,0x10, + 0x01,0x04,0x5f,0x83,0x9d,0x4d,0xc9,0x10, + 0x01,0x04,0x5f,0xb3,0xbe,0xa1,0xc9,0x10, + 0x01,0x04,0x5f,0xd8,0x07,0x99,0xc9,0x10, + 0x01,0x04,0x60,0xe1,0xad,0x21,0xc9,0x10, + 0x01,0x04,0x62,0x9c,0xf8,0x88,0xc9,0x10, + 0x01,0x04,0x62,0xb8,0xc9,0xf5,0xc9,0x10, + 0x01,0x04,0x67,0x72,0xbf,0x17,0xc9,0x10, + 0x01,0x04,0x68,0x80,0xef,0xd4,0xc9,0x10, + 0x01,0x04,0x68,0x98,0xb9,0xd8,0xc9,0x10, + 0x01,0x04,0x68,0xa8,0x90,0x28,0xc9,0x10, + 0x01,0x04,0x68,0xed,0x04,0xca,0xc9,0x10, + 0x01,0x04,0x6b,0xad,0xa4,0x0a,0xc9,0x10, + 0x01,0x04,0x6c,0x3d,0x9d,0x7c,0xc9,0x10, + 0x01,0x04,0x74,0x7f,0xa4,0x57,0xc9,0x10, + 0x01,0x04,0x74,0x7f,0xa4,0xc0,0xc9,0x10, + 0x01,0x04,0x74,0x7f,0xa4,0xcd,0xc9,0x10, + 0x01,0x04,0x74,0x88,0xa0,0x13,0xc9,0x10, + 0x01,0x04,0x74,0x88,0xa0,0x15,0xc9,0x10, + 0x01,0x04,0x74,0x88,0xa0,0x17,0xc9,0x10, + 0x01,0x04,0x74,0x88,0xa0,0x1c,0xc9,0x10, + 0x01,0x04,0x76,0xa3,0x24,0xf3,0xc9,0x10, + 0x01,0x04,0x77,0xcd,0xe8,0x7b,0xc9,0x10, + 0x01,0x04,0x79,0x8d,0x7a,0x7a,0xc9,0x10, + 0x01,0x04,0x80,0x00,0xbb,0xae,0xc9,0x18, + 0x01,0x04,0x82,0x3d,0xb8,0xc2,0xc9,0x10, + 0x01,0x04,0x86,0xd1,0x66,0x9d,0xc9,0x10, + 0x01,0x04,0x86,0xd1,0xe5,0x00,0xc9,0x10, + 0x01,0x04,0x95,0x1c,0xf4,0xbc,0xc9,0x10, + 0x01,0x04,0x95,0x38,0x94,0xca,0xc9,0x10, + 0x01,0x04,0x95,0xac,0x2c,0x7d,0xc9,0x10, + 0x01,0x04,0x9a,0x10,0xf7,0x6f,0xc9,0x10, + 0x01,0x04,0x9a,0x10,0xf7,0xc3,0xc9,0x10, + 0x01,0x04,0x9a,0x10,0xf7,0xd4,0xc9,0x10, + 0x01,0x04,0x9a,0x10,0xf7,0xd6,0xc9,0x10, + 0x01,0x04,0x9f,0x59,0x7c,0x9f,0xc9,0x10, + 0x01,0x04,0xa1,0x61,0x41,0xe3,0xc9,0x10, + 0x01,0x04,0xa1,0x61,0x4d,0x64,0xc9,0x10, + 0x01,0x04,0xa2,0x68,0xa6,0x44,0xc9,0x10, + 0x01,0x04,0xa3,0xac,0x3c,0x51,0xc9,0x10, + 0x01,0x04,0xa6,0x46,0x36,0x28,0xc9,0x10, + 0x01,0x04,0xaa,0x0a,0x10,0x37,0x2e,0xe1, + 0x01,0x04,0xac,0x63,0x74,0x1c,0xc9,0x10, + 0x01,0x04,0xac,0x69,0x00,0x73,0xc9,0x10, + 0x01,0x04,0xac,0x69,0x12,0x66,0xc9,0x10, + 0x01,0x04,0xad,0x52,0x52,0xd7,0xc9,0x10, + 0x01,0x04,0xad,0x52,0x79,0x79,0xc9,0x10, + 0x01,0x04,0xad,0xf9,0x11,0x56,0xc9,0x10, + 0x01,0x04,0xb2,0x1b,0xfe,0x36,0xc9,0x10, + 0x01,0x04,0xb2,0x55,0x03,0xd0,0xc9,0x10, + 0x01,0x04,0xb2,0xfe,0x17,0x6f,0xc9,0x10, + 0x01,0x04,0xb7,0xb5,0x1a,0x28,0xc9,0x10, + 0x01,0x04,0xb9,0x32,0xe4,0x2c,0xc9,0x10, + 0x01,0x04,0xb9,0x34,0x36,0x52,0xc9,0x10, + 0x01,0x04,0xb9,0x65,0x62,0xaf,0x20,0xfb, + 0x01,0x04,0xb9,0x6a,0x79,0x1c,0xc9,0x10, + 0x01,0x04,0xb9,0xa4,0x88,0xbe,0xc9,0x10, + 0x01,0x04,0xb9,0xa5,0xa8,0x7d,0xc9,0x10, + 0x01,0x04,0xb9,0xdf,0x1c,0x84,0xc9,0x10, + 0x01,0x04,0xb9,0xf2,0x20,0x6f,0xc9,0x10, + 0x01,0x04,0xb9,0xf2,0x22,0xdf,0xc9,0x10, + 0x01,0x04,0xbc,0x44,0x2e,0x32,0xc9,0x10, + 0x01,0x04,0xc0,0x5f,0x29,0xc9,0xc9,0x10, + 0x01,0x04,0xc1,0xa4,0x8c,0x59,0xc9,0x10, + 0x01,0x04,0xc2,0x3b,0xcf,0xc6,0xc9,0x10, + 0x01,0x04,0xc2,0x87,0x54,0x6f,0xc9,0x10, + 0x01,0x04,0xc2,0xe4,0x0c,0x3d,0xc9,0x10, + 0x01,0x04,0xc6,0x17,0xe4,0x76,0xc9,0x10, + 0x01,0x04,0xc6,0x17,0xf9,0x66,0xc9,0x10, + 0x01,0x04,0xca,0x3d,0xe1,0xae,0xc9,0x10, + 0x01,0x04,0xce,0x7b,0x81,0x94,0xc9,0x10, + 0x01,0x04,0xd0,0x46,0x4a,0x9f,0xc9,0x10, + 0x01,0x04,0xd1,0x61,0xae,0x9d,0xc9,0x10, + 0x01,0x04,0xd1,0x91,0x31,0xe2,0xc9,0x10, + 0x01,0x04,0xd4,0xed,0x1c,0x8b,0xc9,0x10, + 0x01,0x04,0xd4,0xed,0x26,0x26,0xc9,0x10, + 0x01,0x04,0xd5,0x9a,0xe7,0x27,0xc9,0x10, + 0x01,0x04,0xd5,0xb2,0x22,0xb7,0xc9,0x10, + 0x01,0x04,0xd5,0xfc,0xf6,0x02,0xc9,0x10, + 0x01,0x04,0xd8,0x18,0xf3,0x50,0xc9,0x10, + 0x01,0x04,0xd9,0x0d,0x65,0x0e,0xc9,0x10, + 0x01,0x04,0xd9,0x1c,0x92,0x15,0xc9,0x10, + 0x01,0x04,0xd9,0x3d,0x04,0x21,0xc9,0x10, + 0x01,0x04,0xd9,0x3d,0x7d,0x6b,0xc9,0x10, + 0x01,0x04,0xd9,0x70,0x5b,0xaa,0xc9,0x10, + 0x01,0x04,0xd9,0xac,0xb9,0x29,0xc9,0x10, + 0x01,0x04,0xd9,0xac,0xb9,0xb9,0xc9,0x10, + 0x01,0x04,0xda,0xeb,0xb7,0x35,0xc9,0x10, + 0x01,0x04,0xdb,0x58,0xea,0x78,0xc9,0x10, + 0x02,0x10,0x20,0x01,0x00,0x00,0x41,0x37,0x9e,0x76,0x00,0xce,0x0b,0x18,0x2b,0x34,0xd7,0xa9,0xc9,0x10, + 0x02,0x10,0x20,0x01,0x00,0x00,0x5e,0xf5,0x79,0xfb,0x30,0x40,0x0b,0xb7,0x52,0xcb,0x1f,0x7e,0xc9,0x10, + 0x02,0x10,0x20,0x01,0x00,0x00,0x5e,0xf5,0x79,0xfb,0x34,0xbb,0x23,0x87,0x71,0x89,0x86,0x6e,0xc9,0x10, + 0x02,0x10,0x20,0x01,0x00,0x00,0x9d,0x38,0x90,0xd7,0x34,0x33,0x3d,0xe8,0x9d,0x47,0x36,0x0a,0xc9,0x10, + 0x02,0x10,0x20,0x01,0x14,0xba,0xab,0x01,0x25,0xdf,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc9,0x10, + 0x02,0x10,0x20,0x01,0x1a,0xf8,0x4f,0x0b,0xb0,0x02,0x00,0x01,0x19,0x12,0x14,0x09,0x54,0x49,0xc9,0x10, + 0x02,0x10,0x20,0x01,0x08,0xd8,0x08,0x70,0x4f,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x9b,0xf7,0xc9,0x10, + 0x02,0x10,0x24,0x03,0x27,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x43,0xc9,0x10, + 0x02,0x10,0x24,0x03,0x27,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x92,0xc9,0x10, + 0x02,0x10,0x26,0x00,0x2b,0x00,0xa2,0x14,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x49,0xc9,0x10, + 0x02,0x10,0x26,0x00,0x2b,0x00,0xa2,0x14,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x83,0xc9,0x10, + 0x02,0x10,0x26,0x00,0x2b,0x00,0xa2,0x14,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x84,0xc9,0x10, + 0x02,0x10,0x26,0x00,0x2b,0x00,0xa2,0x14,0xf1,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x29,0xc9,0x10, + 0x02,0x10,0x26,0x01,0x06,0x43,0x40,0x01,0xd8,0xaf,0x00,0x39,0x00,0x2d,0x84,0x08,0x4e,0x41,0xc9,0x10, + 0x02,0x10,0x26,0x02,0xff,0xc5,0x00,0x1f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1f,0xb6,0x9a,0xc9,0x10, + 0x02,0x10,0x26,0x02,0xff,0xc8,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x18,0xc9,0x10, + 0x02,0x10,0x26,0x02,0xff,0xc8,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x95,0xc9,0x10, + 0x02,0x10,0x26,0x02,0xff,0xc8,0x00,0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x16,0x97,0xc9,0x10, + 0x02,0x10,0x26,0x05,0xe0,0x00,0x14,0x1f,0x0f,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0xa3,0x85,0xc9,0x10, + 0x02,0x10,0x26,0x07,0xfa,0x98,0x00,0x10,0x00,0x08,0x0e,0xc4,0x7a,0xff,0xfe,0xe0,0x63,0x50,0xc9,0x10, + 0x02,0x10,0x2a,0x00,0x23,0xc8,0x4a,0x02,0x6e,0x01,0x4c,0xba,0x77,0x2f,0x60,0x4b,0xd5,0xa9,0xc9,0x10, + 0x02,0x10,0x2a,0x01,0x04,0xf8,0x02,0x21,0x11,0x42,0xd0,0x0d,0x00,0x00,0x00,0x00,0xee,0x01,0xc9,0x10, + 0x02,0x10,0x2a,0x01,0xad,0xe0,0x00,0x0f,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5b,0xc9,0x10, + 0x02,0x10,0x2a,0x01,0x0e,0x0a,0x05,0x6a,0x39,0xe0,0x0c,0xa0,0xbb,0x6a,0x6e,0xf9,0x73,0x56,0xc9,0x10, + 0x02,0x10,0x2a,0x02,0x12,0x0b,0x2c,0x0b,0x7a,0x50,0xe8,0xba,0x07,0x0f,0x6f,0xae,0x93,0x77,0xc9,0x10, + 0x02,0x10,0x2a,0x02,0x12,0x0b,0x2c,0x6b,0x8a,0x60,0x5c,0xe1,0xc9,0xb9,0x0e,0xbb,0x51,0x9e,0xc9,0x10, + 0x02,0x10,0x2a,0x02,0x01,0x68,0x58,0x29,0x00,0x00,0x32,0x9c,0x23,0xff,0xfe,0xb1,0x23,0x6d,0xc9,0x10, + 0x02,0x10,0x2a,0x02,0x01,0x68,0xac,0x05,0x00,0x03,0x00,0x00,0x02,0x42,0xac,0x11,0x00,0x04,0xc9,0x10, + 0x02,0x10,0x2a,0x02,0x01,0x68,0xac,0x05,0x00,0x03,0x00,0x00,0x02,0x42,0xac,0x11,0x00,0x05,0xc9,0x10, + 0x02,0x10,0x2a,0x02,0x01,0x68,0xac,0x05,0x00,0x03,0x00,0x00,0x02,0x42,0xac,0x11,0x00,0x06,0xc9,0x10, + 0x02,0x10,0x2a,0x02,0x7b,0x40,0x59,0x28,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc9,0x10, + 0x02,0x10,0x2a,0x04,0x92,0xc7,0x00,0x0e,0x04,0x75,0x00,0x00,0x00,0x00,0x00,0x00,0xad,0x6b,0xc9,0x10, + 0x02,0x10,0x2a,0x06,0x1c,0x80,0x00,0x01,0x00,0x4e,0x00,0x00,0x00,0x00,0x00,0x00,0xc5,0x7e,0x20,0xfb, + 0x02,0x10,0x2a,0x07,0x57,0x41,0x00,0x00,0x11,0x43,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc9,0x10, + 0x02,0x10,0x2a,0x07,0x57,0x41,0x00,0x00,0x06,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc9,0x10, + 0x02,0x10,0x2a,0x07,0x57,0x41,0x00,0x00,0x0c,0xb4,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xc9,0x10, + 0x03,0x0a,0xd3,0xae,0xd5,0x4c,0x0d,0x78,0x34,0xc3,0xe8,0xb8,0xc9,0x10, + 0x03,0x0a,0xe9,0xee,0x60,0x66,0x9a,0x74,0x6f,0xa8,0xde,0xfc,0xc9,0x10, + 0x03,0x0a,0xeb,0x92,0x7b,0xfe,0xa1,0x49,0xd5,0x13,0x23,0x8d,0xc9,0x10, + 0x03,0x0a,0xff,0x89,0x19,0x38,0xec,0x6e,0xc4,0x21,0x32,0x23,0xc9,0x10, + 0x03,0x0a,0xfb,0x55,0xad,0xfb,0x18,0xa4,0x67,0x4b,0x9f,0xbd,0xc9,0x10, + 0x03,0x0a,0xfc,0xe6,0xd3,0x0d,0xa5,0xc9,0x17,0x0d,0x5b,0xd0,0xc9,0x10, + 0x03,0x0a,0x07,0xc1,0x81,0x83,0x5e,0xc2,0x09,0x20,0xa4,0xa3,0x26,0xf8, + 0x03,0x0a,0x00,0x21,0xe6,0xb0,0xd7,0xfc,0x6a,0xf7,0x4a,0xe5,0x26,0xf2, + 0x03,0x0a,0x02,0x13,0x06,0x67,0xbc,0x5c,0x9c,0x4b,0xde,0xa4,0x26,0x75, + 0x03,0x0a,0x02,0x25,0x83,0x67,0x00,0x2d,0x5a,0xa4,0x43,0x01,0x26,0x6c, + 0x03,0x0a,0x02,0x28,0x2e,0xb3,0xbc,0x60,0x07,0x57,0x71,0xfc,0x27,0x06, + 0x03,0x0a,0x04,0x7a,0xf0,0xe6,0x17,0x3d,0x68,0xee,0xb6,0x2f,0xc9,0x10, + 0x03,0x0a,0x05,0xca,0xef,0xbc,0xa6,0xa1,0xb8,0x77,0x6a,0xe1,0x26,0x63, + 0x03,0x0a,0x0f,0x6c,0xc5,0x17,0x61,0xe3,0x9e,0x20,0xdd,0x5c,0x26,0xb5, + 0x03,0x0a,0x0f,0x8c,0xb5,0xc9,0x9a,0xb2,0xf5,0x54,0x6d,0x4b,0x26,0xfb, + 0x03,0x0a,0x0b,0x1a,0xfb,0xbf,0x3f,0x30,0xe6,0x39,0xdf,0x11,0x26,0x95, + 0x03,0x0a,0x17,0x02,0xf3,0x1c,0x88,0xd4,0x3f,0xcb,0xfb,0xc8,0xc9,0x10, + 0x03,0x0a,0x10,0x60,0x34,0xea,0x01,0x63,0x8d,0x34,0xf0,0x2d,0x26,0x7c, + 0x03,0x0a,0x13,0x3c,0xd7,0x91,0xc9,0x00,0x8e,0x33,0xd4,0xf3,0xc9,0x10, + 0x03,0x0a,0x15,0x45,0x35,0x43,0xe9,0x4f,0x14,0xc2,0xee,0x27,0x26,0xb7, + 0x03,0x0a,0x1f,0x3d,0xce,0x7d,0x42,0x71,0x0c,0xa8,0xea,0xa0,0x26,0xb6, + 0x03,0x0a,0x1f,0x52,0x8c,0x04,0x54,0xca,0x45,0xb7,0x72,0xaa,0x26,0x72, + 0x03,0x0a,0x18,0x18,0x51,0x67,0x33,0xc0,0x92,0x07,0x68,0xe8,0x26,0x82, + 0x03,0x0a,0x19,0xaa,0x16,0x3c,0x30,0xbb,0x1d,0xe3,0xe7,0x55,0x26,0xde, + 0x03,0x0a,0x19,0xe8,0xac,0xd0,0x56,0x03,0x67,0x26,0x73,0xef,0x26,0xf0, + 0x03,0x0a,0x1a,0x3c,0x0f,0xd4,0x0d,0x80,0x0a,0x0f,0xa7,0xca,0x26,0x93, + 0x03,0x0a,0x1a,0x59,0x10,0xce,0xc3,0x01,0xa4,0x3c,0xc1,0x5a,0x26,0x80, + 0x03,0x0a,0x1c,0x68,0x97,0x5a,0x6c,0x8a,0x48,0x1d,0xf4,0x9b,0x26,0x7a, + 0x03,0x0a,0x1d,0x20,0xda,0x72,0x2c,0x8c,0x2e,0x68,0x1e,0x25,0x26,0x60, + 0x03,0x0a,0x22,0x81,0x43,0x69,0xec,0xe0,0x0b,0xe8,0x63,0x05,0xc9,0x10, + 0x03,0x0a,0x22,0xeb,0xa1,0x92,0x68,0x33,0x0f,0x30,0xa2,0xfe,0x26,0x4f, + 0x03,0x0a,0x23,0x5e,0x7e,0x28,0x00,0xa8,0x01,0x5f,0xff,0x6b,0xc9,0x10, + 0x03,0x0a,0x25,0x35,0xc6,0xae,0x57,0xb4,0x86,0x60,0x71,0xf3,0x26,0xf7, + 0x03,0x0a,0x2f,0x13,0xe2,0x7c,0x68,0xd5,0x45,0xcc,0x75,0xeb,0x26,0x97, + 0x03,0x0a,0x2f,0x59,0x72,0x96,0x59,0xaa,0x8b,0x7b,0x86,0xce,0xc9,0x10, + 0x03,0x0a,0x28,0xd1,0x4f,0x40,0x9d,0x01,0x7b,0x75,0x84,0x1e,0xc9,0x10, + 0x03,0x0a,0x29,0x3e,0xd9,0xd7,0xe7,0xd3,0xa1,0x51,0xfd,0x3d,0x22,0xea, + 0x03,0x0a,0x2a,0xb8,0x33,0xd1,0x3f,0x22,0xda,0xc0,0x88,0x2b,0x26,0xfc, + 0x03,0x0a,0x2b,0x27,0x3c,0x0c,0x29,0x56,0xdc,0xce,0x50,0xe3,0x26,0xd6, + 0x03,0x0a,0x2b,0x96,0xe9,0x17,0xa2,0xb3,0xa6,0xb9,0x11,0x33,0x26,0x81, + 0x03,0x0a,0x2c,0xf7,0x3e,0x52,0xfa,0x99,0xf1,0xb9,0xb3,0xc0,0x26,0x73, + 0x03,0x0a,0x2d,0x05,0xcc,0x1f,0xf5,0x35,0xc8,0xde,0x95,0xac,0x26,0xae, + 0x03,0x0a,0x2d,0x55,0xac,0x4e,0x01,0x36,0x24,0x4a,0x56,0xdf,0x26,0xa4, + 0x03,0x0a,0x2e,0x0b,0x75,0x0a,0xc7,0x6f,0xec,0x7d,0x2b,0x84,0x26,0xf3, + 0x03,0x0a,0x33,0x74,0x51,0x4e,0x78,0xa9,0x1c,0x79,0x1b,0x30,0x26,0x5b, + 0x03,0x0a,0x33,0xff,0x4f,0x8c,0x22,0xed,0x3a,0x77,0xdf,0x84,0xc9,0x10, + 0x03,0x0a,0x34,0x83,0x23,0x72,0x3e,0xd2,0x6b,0x17,0x35,0xf2,0x26,0x9a, + 0x03,0x0a,0x3e,0x98,0xb9,0x57,0xf0,0x5a,0x26,0x41,0x16,0xa4,0x26,0xbe, + 0x03,0x0a,0x38,0x5e,0xcd,0x37,0x50,0x42,0x00,0x9f,0x6b,0xb2,0x26,0x71, + 0x03,0x0a,0x38,0xfe,0x9a,0x90,0xc5,0x22,0x47,0x5f,0x90,0x93,0xc9,0x10, + 0x03,0x0a,0x39,0xc8,0xa7,0x43,0xbb,0x28,0x78,0x89,0xde,0x74,0x26,0x76, + 0x03,0x0a,0x3a,0x83,0x19,0x4f,0x6a,0xdf,0x4f,0xce,0x1d,0x5c,0xc9,0x10, + 0x03,0x0a,0x46,0xc2,0x43,0x2a,0x91,0x98,0x96,0xf8,0x56,0x2e,0xc9,0x10, + 0x03,0x0a,0x47,0x22,0x94,0x2f,0xde,0x4a,0x2f,0xe8,0x0a,0xd3,0x26,0x52, + 0x03,0x0a,0x47,0xd0,0x72,0xde,0xad,0xe6,0x26,0x2d,0x48,0xa2,0x26,0x89, + 0x03,0x0a,0x43,0xc8,0xda,0xb1,0x39,0x1f,0xc5,0x93,0x02,0xee,0xc9,0x10, + 0x03,0x0a,0x44,0xa9,0xde,0xa1,0xe2,0x9e,0x94,0x34,0x01,0x6c,0x26,0xb2, + 0x03,0x0a,0x49,0x06,0x6c,0x34,0x68,0x65,0xc7,0x54,0xaf,0xb3,0x26,0x6a, + 0x03,0x0a,0x49,0x80,0xf1,0x8d,0x84,0xe8,0xee,0xa1,0x85,0x36,0x26,0x6d, + 0x03,0x0a,0x4b,0xd0,0x1b,0x02,0x5c,0xb0,0x36,0xb0,0x3a,0x90,0x26,0xf1, + 0x03,0x0a,0x4d,0x06,0x82,0xf6,0xde,0xfa,0x5f,0xb7,0x8f,0x3f,0xc9,0x10, + 0x03,0x0a,0x51,0xe4,0x59,0xc0,0x91,0x39,0x7d,0xe1,0x9e,0xd2,0x26,0x7a, + 0x03,0x0a,0x54,0x75,0xbf,0x9d,0x82,0xdd,0x94,0xcb,0x02,0x67,0x26,0xe4, + 0x03,0x0a,0x54,0x7c,0xfb,0xc7,0x68,0xc4,0xa8,0x7e,0xc2,0x9f,0x26,0xac, + 0x03,0x0a,0x54,0x41,0x0f,0x58,0x41,0x7b,0xe3,0x02,0x57,0x81,0xc9,0x10, + 0x03,0x0a,0x55,0xfe,0x06,0x1b,0x51,0x90,0xdc,0xcd,0xc2,0x20,0x26,0xf4, + 0x03,0x0a,0x5e,0xc8,0x5b,0x04,0x32,0xf8,0xb5,0x7a,0xc3,0x84,0xc9,0x10, + 0x03,0x0a,0x5f,0x8b,0x94,0x16,0x76,0xd7,0x7b,0xf4,0x24,0xe8,0x27,0x0d, + 0x03,0x0a,0x58,0x0f,0x57,0x0b,0x65,0x25,0xe3,0xad,0xb7,0x5f,0x26,0x62, + 0x03,0x0a,0x58,0x42,0x5e,0x19,0xa8,0x3d,0xe1,0xab,0x8b,0xfb,0x22,0xe9, + 0x03,0x0a,0x5a,0x97,0x40,0x55,0xa7,0x20,0x8d,0x02,0xa6,0xcb,0x26,0x73, + 0x03,0x0a,0x5b,0x5c,0x76,0x5d,0x60,0x1f,0x71,0xb1,0x25,0xb4,0x26,0x56, + 0x03,0x0a,0x5c,0x7b,0xd3,0xe8,0x77,0xea,0x84,0xd3,0x87,0xb8,0x26,0x58, + 0x03,0x0a,0x5d,0xf2,0x8b,0x76,0xd9,0xc5,0xdf,0x24,0xcb,0x78,0x26,0xd4, + 0x03,0x0a,0x60,0x3f,0x10,0x59,0x81,0xca,0xe7,0xb4,0x9f,0xa1,0xc9,0x10, + 0x03,0x0a,0x61,0x57,0x2f,0xbe,0xb1,0x69,0x50,0x42,0xc1,0xc2,0x26,0xcb, + 0x03,0x0a,0x62,0x92,0xcc,0xa9,0xda,0xe1,0xba,0xa7,0xf4,0x82,0x26,0xfe, + 0x03,0x0a,0x63,0xdc,0x9d,0x4d,0x75,0x27,0xa1,0x96,0xb7,0xa5,0x27,0x0f, + 0x03,0x0a,0x66,0x79,0x12,0xba,0x71,0xdd,0xb4,0x21,0xae,0x20,0x26,0xe6, + 0x03,0x0a,0x68,0x46,0xf9,0xea,0x0b,0x39,0xbd,0xdc,0x9e,0xa1,0x26,0xfa, + 0x03,0x0a,0x68,0xbe,0xa1,0xc5,0x43,0xf0,0xa0,0xa7,0x0d,0xbd,0xc9,0x10, + 0x03,0x0a,0x69,0xb4,0x67,0xe1,0xce,0xcf,0x6e,0x4b,0x82,0xfe,0x26,0x85, + 0x03,0x0a,0x69,0xde,0x65,0x10,0x0b,0xde,0x8d,0x58,0x45,0x2d,0x26,0x6b, + 0x03,0x0a,0x6a,0x69,0x00,0xe0,0xa0,0x3b,0x38,0xb9,0xf1,0xde,0xc9,0x10, + 0x03,0x0a,0x71,0x96,0x6d,0xf7,0x10,0xce,0xe5,0x0d,0x48,0xd1,0x26,0xa1, + 0x03,0x0a,0x74,0x4c,0x5a,0xc0,0xde,0x58,0x4a,0x9a,0x6f,0xf3,0x27,0x01, + 0x03,0x0a,0x74,0xcf,0x43,0x50,0x76,0xa5,0xc8,0x25,0x39,0xd6,0x27,0x02, + 0x03,0x0a,0x79,0xdb,0x2e,0x46,0x75,0xfe,0x5b,0x31,0x29,0x6f,0x26,0xce, + 0x03,0x0a,0x7b,0xab,0x64,0x75,0x56,0xc7,0x2e,0x97,0x31,0x49,0xc9,0x10, + 0x03,0x0a,0x7e,0x66,0xbb,0xc4,0x4b,0x06,0xa0,0x9e,0x91,0xe5,0x26,0x78, + 0x03,0x0a,0x83,0xe0,0xc0,0xf6,0x57,0x1d,0x11,0x85,0xeb,0x2f,0x26,0xc9, + 0x03,0x0a,0x8a,0xf3,0xab,0x4d,0x65,0x78,0x85,0x76,0xad,0xbd,0x26,0x5c, + 0x03,0x0a,0x8c,0x39,0x30,0x82,0x38,0x4f,0x92,0xfb,0x9a,0x32,0xc9,0x10, + 0x03,0x0a,0x91,0x1a,0xfc,0xd0,0xe1,0x09,0x51,0xa2,0xd9,0x79,0xc9,0x10, + 0x03,0x0a,0x9f,0x66,0x2c,0xbd,0x18,0x7f,0x7e,0x17,0x1b,0xfe,0x26,0x5e, + 0x03,0x0a,0x9a,0x61,0xff,0xa1,0x00,0x91,0xec,0x8d,0x0b,0x7c,0x26,0xb8, + 0x03,0x0a,0x9a,0x9a,0x18,0x42,0xe5,0x46,0xa4,0x8c,0x57,0x6f,0x26,0xaa, + 0x03,0x0a,0x9a,0xa7,0x34,0x53,0x71,0x0c,0x4a,0xc7,0x44,0x33,0x26,0x6e, + 0x03,0x0a,0x9e,0x7d,0x76,0xd2,0x80,0x18,0x77,0x98,0x6d,0x6f,0x26,0x4c, + 0x03,0x0a,0xa7,0x08,0x07,0x1b,0x97,0x94,0x6e,0xcb,0x16,0x66,0x26,0x92, + 0x03,0x0a,0xa0,0x0b,0x67,0x61,0x2a,0x56,0xb4,0xef,0xd8,0x9c,0x26,0x77, + 0x03,0x0a,0xa4,0x28,0x86,0xfc,0x8d,0x3a,0x33,0x80,0x77,0xe4,0xc9,0x10, + 0x03,0x0a,0xa6,0x57,0x17,0xa1,0x2d,0xa6,0xdb,0xba,0x1f,0xa8,0x26,0x49, + 0x03,0x0a,0xac,0x31,0x4a,0xe9,0xf6,0x64,0xa4,0xb6,0x38,0xbe,0x26,0x89, + 0x03,0x0a,0xb2,0x4d,0x12,0x87,0x12,0xf4,0x20,0x7c,0x40,0x36,0x26,0xdc, + 0x03,0x0a,0xb9,0x64,0xe5,0x5a,0x7c,0xad,0x02,0x10,0xf5,0x14,0x26,0x5d, + 0x03,0x0a,0xbb,0x36,0x9a,0x79,0x83,0xd2,0x25,0xb8,0x9d,0xd3,0x26,0xeb, + 0x03,0x0a,0xc6,0xfe,0xbe,0xc5,0x10,0x4b,0x63,0x13,0x81,0x54,0xc9,0x10, + 0x03,0x0a,0xc1,0xfb,0x01,0x98,0x1a,0x8d,0x81,0xc8,0x07,0x00,0x26,0xc1, + 0x03,0x0a,0xc2,0x86,0x57,0x43,0x2d,0x95,0xb8,0x7b,0xdd,0x7e,0xc9,0x10, + 0x03,0x0a,0xc9,0xfb,0xab,0x2c,0x63,0x73,0x3d,0xe3,0x91,0x3c,0xc9,0x10, + 0x03,0x0a,0xcd,0xa0,0xa7,0x8d,0x46,0x77,0xb6,0x9d,0x34,0x28,0xc9,0x10, + 0x04,0x20,0x00,0x8c,0x38,0xc4,0x0a,0xcd,0x71,0x38,0x3f,0x75,0x8e,0x90,0xe9,0x8f,0x73,0x61,0x4e,0x05,0x2d,0xe5,0x6c,0x41,0x7c,0x35,0xc5,0xe6,0xd1,0xfc,0x09,0xdc,0xd3,0x01,0xc9,0x10, + 0x04,0x20,0x51,0x67,0xb2,0x59,0x35,0xad,0xe2,0x48,0x7d,0x69,0x30,0x47,0xce,0xc4,0x31,0x4d,0x22,0x51,0x99,0xbd,0xa9,0xdc,0xb3,0xdf,0x6f,0xda,0x18,0x4c,0x8c,0x15,0x77,0xb8,0xc9,0x10, + 0x04,0x20,0x58,0x4c,0xae,0x07,0x5d,0xd4,0xca,0x02,0x29,0xc8,0x9f,0x5d,0x83,0x3d,0x50,0x82,0x74,0x40,0x0a,0x5d,0x98,0x9f,0x82,0x44,0xe8,0xf4,0xea,0xea,0x22,0xed,0xcf,0x31,0xc9,0x10, + 0x04,0x20,0x6a,0x4b,0x94,0x6f,0x05,0xde,0x1f,0x95,0xba,0x26,0x4b,0x7e,0x0d,0x74,0x31,0xca,0xbe,0x18,0x40,0xcc,0x8b,0x65,0xb8,0x6d,0x8e,0x35,0xf0,0x46,0x63,0x20,0xf0,0x18,0xc9,0x10, + 0x04,0x20,0x2d,0x23,0x2c,0xe0,0x43,0xb2,0x64,0x62,0x12,0xaa,0xb4,0x86,0x6e,0x9e,0x40,0x9c,0xe5,0x50,0x5b,0x88,0xf6,0x37,0x75,0x64,0x75,0x0f,0xf2,0x4c,0xeb,0x94,0xb1,0xd2,0xc9,0x10, }; -static SeedSpec6 pnSeed6_test[] = { - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x2d,0x23,0xfb,0x45}, 51474}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x33,0x59,0x2e,0xe6}, 51474}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0x68,0x80,0xe0,0xbc}, 51474}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xb9,0x51,0xa6,0x3c}, 51474}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x87,0x54,0x6f}, 51474}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xc2,0x87,0x59,0x3f}, 51474}, - {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xd4,0x18,0x66,0x01}, 51474}, - {{0x2a,0x02,0x7b,0x40,0xc2,0x87,0x59,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01}, 51474}, - {{0x26,0x02,0xff,0xc5,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xe0,0xa7}, 51474}, - {{0x26,0x02,0xff,0xc5,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x3c,0xef}, 51474}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0xb9,0x78,0x28,0x21,0xcb,0x89,0x95,0x66,0xda,0xb0}, 51474}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x90,0xcc,0x09,0x4e,0x04,0x89,0x76,0x42,0x3c,0x0c}, 51474}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0xa3,0xe1,0xaf,0xa8,0xbd,0xfc,0x7a,0xe0,0xa0,0x63}, 51474}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0xc1,0x35,0x0f,0x23,0x8e,0x15,0x10,0xda,0xa3,0x60}, 51474}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x24,0xd3,0xb1,0x53,0xf2,0x6a,0x4f,0x75,0xf2,0xb8}, 51474}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x09,0xde,0xde,0x93,0x3d,0xbc,0x33,0x08,0xfb,0x2a}, 51474}, - {{0xfd,0x87,0xd8,0x7e,0xeb,0x43,0x2b,0x2b,0xbe,0x13,0xc0,0x7c,0x61,0x6e,0x6b,0xf6}, 51474} +static const uint8_t chainparams_seed_test[] = { + 0x01,0x04,0x2d,0x23,0xfb,0x45,0xc9,0x12, + 0x01,0x04,0x50,0xd0,0xe2,0xa7,0xc9,0x12, + 0x01,0x04,0x8c,0x52,0x26,0x3f,0xc9,0x12, + 0x01,0x04,0xb0,0xdf,0x80,0x83,0xc9,0x12, + 0x01,0x04,0xb9,0x51,0xa6,0x3c,0xc9,0x12, + 0x01,0x04,0xc2,0x87,0x59,0x3f,0xc9,0x12, + 0x04,0x20,0xda,0xdd,0x12,0xcc,0x6e,0x0b,0xb0,0x79,0x11,0x2c,0xfd,0x67,0x6f,0xdf,0xba,0xd0,0xfd,0x60,0x51,0x51,0xb9,0xe1,0xa9,0x90,0xda,0xc3,0x14,0x84,0x0d,0x72,0xb8,0x56,0xc9,0x12, + 0x04,0x20,0xf1,0xaf,0x92,0x10,0x55,0x94,0x9c,0xc8,0x6e,0x2f,0x9b,0xc8,0xbd,0xf8,0xee,0x4d,0xe6,0x4f,0x16,0x85,0x44,0xd8,0x4a,0x17,0x47,0x74,0x8c,0x0a,0xdd,0xb0,0x39,0x44,0xc9,0x12, + 0x04,0x20,0x0d,0x7a,0xcd,0x2c,0x2d,0xeb,0x87,0x28,0x64,0x7d,0xf8,0x63,0xab,0xc3,0x1f,0x20,0x5b,0xa8,0x9b,0x18,0xa0,0x13,0xb3,0xad,0xdf,0x0c,0x85,0x72,0x31,0x07,0x66,0xe0,0xc9,0x12, + 0x04,0x20,0x24,0xfa,0xa6,0x75,0xf1,0xfa,0x73,0x50,0xe1,0x7a,0xf7,0xe1,0x26,0x81,0x62,0x82,0x75,0x80,0x00,0x67,0x76,0xb7,0x28,0x81,0xb4,0x56,0x5a,0x75,0x76,0xcf,0xf4,0x2c,0xc9,0x12, + 0x04,0x20,0x3d,0x42,0x3f,0x28,0x5e,0xc2,0x64,0x6f,0xdb,0xd3,0x1d,0x08,0x6f,0xf8,0x99,0x7c,0x73,0x8f,0xbc,0xc2,0xbd,0x60,0x43,0x6d,0xdd,0x07,0xaa,0xb7,0x3a,0xe2,0xb8,0xd9,0xc9,0x12, + 0x04,0x20,0x63,0xe0,0x30,0x01,0xca,0x4a,0x4d,0x8d,0xb1,0x19,0x9b,0x96,0xed,0x39,0xfb,0xd4,0x81,0x5d,0x22,0x05,0x20,0xc6,0xaf,0x3d,0x87,0xbb,0xd2,0xcd,0xa7,0x7c,0x05,0x10,0xc9,0x12, + 0x04,0x20,0x6f,0xfb,0xf9,0x4d,0xdb,0xb2,0x90,0xef,0x45,0x60,0x36,0x68,0x1d,0xd9,0xc8,0xe2,0x59,0xf9,0x16,0x54,0x61,0x77,0x64,0x02,0x9e,0xf4,0x28,0x20,0xe5,0x4a,0x1f,0x72,0xc9,0x12, + 0x04,0x20,0x97,0x60,0xd9,0x46,0x4c,0x7b,0x7b,0x85,0x8b,0x55,0x84,0xdd,0x53,0x51,0xdb,0x64,0xfe,0x3f,0x69,0x5f,0xbd,0xe7,0xdb,0xc2,0x3f,0x81,0x49,0xd5,0x23,0x90,0x97,0x21,0xc9,0x12, + 0x04,0x20,0xa0,0x57,0x5a,0x42,0xfd,0xad,0x78,0x23,0x67,0x15,0xd1,0x69,0x52,0x24,0xc1,0xdf,0x2b,0x32,0x6a,0xd4,0x64,0xf2,0xbc,0xed,0xf9,0x7f,0x36,0xc6,0x26,0x02,0xe2,0xf4,0xc9,0x12, + 0x04,0x20,0xbf,0x31,0x2d,0xcd,0x4b,0x8e,0x06,0x84,0xef,0xae,0xfb,0x3f,0x7e,0x17,0x41,0x03,0x9c,0xb6,0x12,0xdb,0x87,0x3b,0x1f,0x8e,0xab,0x78,0xd5,0x9a,0x39,0xc6,0x28,0x76,0xc9,0x12, }; #endif // BITCOIN_CHAINPARAMSSEEDS_H diff --git a/src/net.cpp b/src/net.cpp index a5d764db7e94..c14650a0f166 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -110,8 +110,8 @@ bool GetLocal(CService& addr, const CNetAddr* paddrPeer) return nBestScore >= 0; } -//! Convert the pnSeeds6 array into usable address objects. -static std::vector convertSeed6(const std::vector& vSeedsIn) +//! Convert the serialized seeds into usable address objects. +static std::vector ConvertSeeds(const std::vector &vSeedsIn) { // It'll only connect to one or two seed nodes because once it connects, // it'll get a pile of addresses with newer timestamps. @@ -119,13 +119,14 @@ static std::vector convertSeed6(const std::vector& vSeedsIn // weeks ago. const int64_t nOneWeek = 7 * 24 * 60 * 60; std::vector vSeedsOut; - vSeedsOut.reserve(vSeedsIn.size()); FastRandomContext rng; - for (const auto& seed_in : vSeedsIn) { - struct in6_addr ip; - memcpy(&ip, seed_in.addr, sizeof(ip)); - CAddress addr(CService(ip, seed_in.port), NODE_NETWORK); + CDataStream s(vSeedsIn, SER_NETWORK, PROTOCOL_VERSION | ADDRV2_FORMAT); + while (!s.eof()) { + CService endpoint; + s >> endpoint; + CAddress addr{endpoint, NODE_NETWORK}; addr.nTime = GetTime() - rng.randrange(nOneWeek) - nOneWeek; + LogPrint(BCLog::NET, "Added hardcoded seed: %s\n", addr.ToString()); vSeedsOut.push_back(addr); } return vSeedsOut; @@ -1489,7 +1490,7 @@ void CConnman::ThreadOpenConnections() LogPrintf("Adding fixed seed nodes as DNS doesn't seem to be available.\n"); CNetAddr local; local.SetInternal("fixedseeds"); - addrman.Add(convertSeed6(Params().FixedSeeds()), local); + addrman.Add(ConvertSeeds(Params().FixedSeeds()), local); done = true; } }